diff --git a/Common Files/TeknoParrotGame.cpp b/Common Files/TeknoParrotGame.cpp deleted file mode 100644 index b7a2983..0000000 --- a/Common Files/TeknoParrotGame.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "TeknoParrotGame.h" -TeknoParrotGame::TeknoParrotGame() -{ - hSection = CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, 64, L"TeknoParrot_JvsState"); - secData = MapViewOfFile(hSection, FILE_MAP_ALL_ACCESS, 0, 0, 64); - ffbOffset = *((int *)secData + 2); -} - -int TeknoParrotGame::GetTeknoParrotFFB() -{ - ffbOffset = *((int *)secData + 2); - return ffbOffset; -} - -void TeknoParrotGame::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - helpers->log("TeknoParrot game not implemented"); -} \ No newline at end of file diff --git a/Common Files/TeknoParrotGame.h b/Common Files/TeknoParrotGame.h deleted file mode 100644 index 301dbbf..0000000 --- a/Common Files/TeknoParrotGame.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once -#include "Game.h" - -class TeknoParrotGame : public Game { - - // TP-related - HANDLE hSection; - LPVOID secData; - int ffbOffset = 0; - -protected: - int lastWasStop = 0; - int GetTeknoParrotFFB(); - TeknoParrotGame(); - -public: - void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); -}; \ No newline at end of file diff --git a/Dinput8Wrapper.vcxproj b/Dinput8Wrapper.vcxproj index 5346411..7651ece 100644 --- a/Dinput8Wrapper.vcxproj +++ b/Dinput8Wrapper.vcxproj @@ -50,7 +50,6 @@ - @@ -86,7 +85,6 @@ - diff --git a/Dinput8Wrapper.vcxproj.filters b/Dinput8Wrapper.vcxproj.filters index 453eca2..0e9ce44 100644 --- a/Dinput8Wrapper.vcxproj.filters +++ b/Dinput8Wrapper.vcxproj.filters @@ -47,7 +47,6 @@ Game Files - Game Files @@ -152,9 +151,6 @@ Game Files - - Common Header Files - Game Files diff --git a/Game Files/AfterburnerClimax.cpp b/Game Files/AfterburnerClimax.cpp index f356537..2d18874 100644 --- a/Game Files/AfterburnerClimax.cpp +++ b/Game Files/AfterburnerClimax.cpp @@ -14,29 +14,57 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "AfterburnerClimax.h" #include "SDL.h" -void AfterburnerClimax::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - UINT8 ff = helpers->ReadByte(0x08347A5E, /* isRelativeOffset */ false); - - helpers->log("got value: "); - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); +static SDL_Event e; +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int Rumble1Strength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Rumble1Strength"), 0, settingsFilename); - int Rumble2Strength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Rumble2Strength"), 0, settingsFilename); - int Rumble1Length = GetPrivateProfileInt(TEXT("Settings"), TEXT("Rumble1Length"), 0, settingsFilename); - int Rumble2Length = GetPrivateProfileInt(TEXT("Settings"), TEXT("Rumble2Length"), 0, settingsFilename); - - if (ff == 64) +static wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); +static int Rumble1Strength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Rumble1Strength"), 0, settingsFilename); +static int Rumble2Strength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Rumble2Strength"), 0, settingsFilename); +static int Rumble1Length = GetPrivateProfileInt(TEXT("Settings"), TEXT("Rumble1Length"), 0, settingsFilename); +static int Rumble2Length = GetPrivateProfileInt(TEXT("Settings"), TEXT("Rumble2Length"), 0, settingsFilename); + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + UINT8 ff = myHelpers->ReadByte(0x08347A5E, /* isRelativeOffset */ false); + + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + + if (ff == 64) { double percentForce = ((Rumble1Strength) / 100.0); double percentLength = (Rumble1Length); - triggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->Rumble(percentForce, percentForce, percentLength); } - else if (ff == 80) + else if (ff == 80) { double percentForce = ((Rumble2Strength) / 100.0); double percentLength = (Rumble2Length); - triggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->Rumble(percentForce, percentForce, percentLength); } + } + return 0; +} + +void AfterburnerClimax::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/BG4JP.cpp b/Game Files/BG4JP.cpp index d8230b0..bac176f 100644 --- a/Game Files/BG4JP.cpp +++ b/Game Files/BG4JP.cpp @@ -13,83 +13,110 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "BG4JP.h" +#include "SDL.h" +static SDL_Event e; +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; static int SpeedStrength; + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + int ff = myHelpers->ReadInt32(0x42EBB0, /* isRelativeOffset */ true); + float ffspeed = myHelpers->ReadFloat32(0x3F3000, /* isRelativeOffset */ true); + float ff2 = myHelpers->ReadFloat32(0x42EAB4, /* isRelativeOffset */ true); + if ((ffspeed >= 0.1) & (ffspeed <= 15)) + { + SpeedStrength = 10; + } + else if ((ffspeed >= 15.01) & (ffspeed <= 35)) + { + SpeedStrength = 20; + } + else if ((ffspeed >= 35.01) & (ffspeed <= 55)) + { + SpeedStrength = 30; + } + else if ((ffspeed >= 55.01) & (ffspeed <= 75)) + { + SpeedStrength = 40; + } + else if ((ffspeed >= 75.01) & (ffspeed <= 90)) + { + SpeedStrength = 51; + } + else if ((ffspeed >= 90.01) & (ffspeed <= 110)) + { + SpeedStrength = 62; + } + else if ((ffspeed >= 110.01) & (ffspeed <= 130)) + { + SpeedStrength = 75; + } + else if ((ffspeed >= 130.01) & (ffspeed <= 150)) + { + SpeedStrength = 90; + } + else if (ffspeed > 150.01) + { + SpeedStrength = 100; + } + else + { + SpeedStrength = 0; + } + + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + + if ((2000000 < ff) && (ff < 4000000)) + { + double percentForce = SpeedStrength / 100.0; + double percentLength = 150; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((1000000 < ff) && (ff < 1600000)) + { + double percentForce = SpeedStrength / 100.0; + double percentLength = 150; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((0.00000000000000000001 < ff2) && (ffspeed > 0.01)) + { + double percentForce = (0.1); + double percentLength = (50); + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((0.00000000000000000001 > ff2) && (ffspeed > 0.01)) + { + double percentForce = (0.1); + double percentLength = (50); + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } +} + void BG4JP::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - int ff = helpers->ReadInt32(0x42EBB0, /* isRelativeOffset */ true); - float ffspeed = helpers->ReadFloat32(0x3F3000, /* isRelativeOffset */ true); - float ff2 = helpers->ReadFloat32(0x42EAB4, /* isRelativeOffset */ true); - if ((ffspeed >= 0.1) & (ffspeed <= 15)) + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) { - SpeedStrength = 10; - } - else if ((ffspeed >= 15.01) & (ffspeed <= 35)) - { - SpeedStrength = 20; - } - else if ((ffspeed >= 35.01) & (ffspeed <= 55)) - { - SpeedStrength = 30; - } - else if ((ffspeed >= 55.01) & (ffspeed <= 75)) - { - SpeedStrength = 40; - } - else if ((ffspeed >= 75.01) & (ffspeed <= 90)) - { - SpeedStrength = 51; - } - else if ((ffspeed >= 90.01) & (ffspeed <= 110)) - { - SpeedStrength = 62; - } - else if ((ffspeed >= 110.01) & (ffspeed <= 130)) - { - SpeedStrength = 75; - } - else if ((ffspeed >= 130.01) & (ffspeed <= 150)) - { - SpeedStrength = 90; - } - else if (ffspeed > 150.01) - { - SpeedStrength = 100; - } - else - { - SpeedStrength = 0; - } - - helpers->log("got value: "); - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - - if ((2000000 < ff) && (ff < 4000000)) - { - double percentForce = SpeedStrength / 100.0; - double percentLength = 150; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((1000000 < ff) && (ff < 1600000)) - { - double percentForce = SpeedStrength / 100.0; - double percentLength = 150; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - else if ((0.00000000000000000001 < ff2) && (ffspeed > 0.01)) - { - double percentForce = (0.1); - double percentLength = (50); - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((0.00000000000000000001 > ff2) && (ffspeed > 0.01)) - { - double percentForce = (0.1); - double percentLength = (50); - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/BG4JP.h b/Game Files/BG4JP.h index ef57e13..225de54 100644 --- a/Game Files/BG4JP.h +++ b/Game Files/BG4JP.h @@ -14,7 +14,6 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #pragma once #include "../Common Files/Game.h" class BG4JP : public Game { - int lastWasStop = 0; public: void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); diff --git a/Game Files/ChaseHQ2.cpp b/Game Files/ChaseHQ2.cpp index 5d4bf58..5a7fe74 100644 --- a/Game Files/ChaseHQ2.cpp +++ b/Game Files/ChaseHQ2.cpp @@ -13,10 +13,15 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "ChaseHQ2.h" +#include "SDL.h" +static SDL_Event e; +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; int ttx2chasehq2(int ffRaw) { switch (ffRaw) { - // moving right, from weakest to strongest (30 => 16). + case 28672: return 30; case 24640: @@ -48,7 +53,6 @@ int ttx2chasehq2(int ffRaw) { case 30816: return 16; - // moving left, from weakest to strongest (15 => 1) case 20480: return 15; case 16448: @@ -85,53 +89,61 @@ int ttx2chasehq2(int ffRaw) { } } -void ChaseHQ2::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - - int ff = 0; +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) { - long ffAddress = helpers->ReadInt32(0x130B558, /* isRelativeOffset*/ true); - int ffRaw = helpers->ReadInt32(ffAddress + 0x45, /* isRelativeOffset */ false); - int lampArray[8] = { (16384) + 1, 16 ,1024 ,512, 128, 8, 256 };//The 1 isn't needed but I wasn't sure how to get the 16384 to see the first digit any other way lol - for (int i = 0; i < 7; i++) { - if ((ffRaw & lampArray[i]) == lampArray[i]) { - ffRaw -= lampArray[i]; - } - }; + int ff = 0; + { + long ffAddress = myHelpers->ReadInt32(0x130B558, true); + int ffRaw = myHelpers->ReadInt32(ffAddress + 0x45, false); + int lampArray[8] = { (16384) + 1, 16 ,1024 ,512, 128, 8, 256 }; + for (int i = 0; i < 7; i++) { + if ((ffRaw & lampArray[i]) == lampArray[i]) { + ffRaw -= lampArray[i]; + } + }; - ff = ttx2chasehq2(ffRaw); - } + ff = ttx2chasehq2(ffRaw); + } - helpers->log("got value: "); - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); - if (ff > 15) - { - helpers->log("moving wheel right"); - // assume that 30 is the weakest and 16 is the strongest - double percentForce = (31 - ff) / 15.0; - double percentLength = 100; - // direction from left => makes wheel turn right - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); // old logic: 31 - ff - lastWasStop = 0; - } - else if (ff > 0) - { - helpers->log("moving wheel left"); - // assume that 1 is the strongest and 15 is the weakest - double percentForce = (16 - ff) / 15.0; - double percentLength = 100; - // direction from right => makes wheel turn left - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); // old logic: 15 - ff - lastWasStop = 0; - } - else - { - if (lastWasStop == 0) { - triggers->Constant(constants->DIRECTION_FROM_LEFT, 0); // just pass the hash of 0 strength so we update lastEffectHash & lastEffectTime - lastWasStop = 1; + if (ff > 15) + { + myHelpers->log("moving wheel right"); + double percentForce = (31 - ff) / 15.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if (ff > 0) + { + myHelpers->log("moving wheel left"); + double percentForce = (16 - ff) / 15.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); } } +} + +void ChaseHQ2::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/ChaseHQ2.h b/Game Files/ChaseHQ2.h index 9ca48c2..c68a097 100644 --- a/Game Files/ChaseHQ2.h +++ b/Game Files/ChaseHQ2.h @@ -14,7 +14,6 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #pragma once #include "../Common Files/Game.h" class ChaseHQ2 : public Game { - int lastWasStop = 0; public: void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); diff --git a/Game Files/Daytona3.cpp b/Game Files/Daytona3.cpp index cdf157f..0bb1444 100644 --- a/Game Files/Daytona3.cpp +++ b/Game Files/Daytona3.cpp @@ -140,8 +140,14 @@ static int RunningThread(void *ptr) } void Daytona3::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + SDL_Thread *thread; thread = SDL_CreateThread(RunningThread, "RunningThread", (void *)NULL); + UINT8 gear = helpers->ReadByte(0x019B468C, /* isRelativeOffset */ false); int ff = helpers->ReadInt32(0x15AFC46, /* isRelativeOffset */ false); helpers->log("got value: "); diff --git a/Game Files/Daytona3.h b/Game Files/Daytona3.h index 05a06c2..a7befbf 100644 --- a/Game Files/Daytona3.h +++ b/Game Files/Daytona3.h @@ -14,7 +14,6 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #pragma once #include "../Common Files/Game.h" class Daytona3 : public Game { - int lastWasStop = 0; public: void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); diff --git a/Game Files/Demul.cpp b/Game Files/Demul.cpp index 6a7a18a..d7d43d2 100644 --- a/Game Files/Demul.cpp +++ b/Game Files/Demul.cpp @@ -18,6 +18,12 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include #include +#include "SDL.h" + +static SDL_Event e; +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; int nascar(int ffnas) { switch (ffnas) { @@ -110,65 +116,84 @@ BOOL CALLBACK FindWindowBySubstr(HWND hwnd, LPARAM substring) return true; // Need to continue enumerating windows } -void Demul::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers) { - - const TCHAR substring[] = TEXT("NASCAR"); - EnumWindows(FindWindowBySubstr, (LPARAM)substring); - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); - +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) { - int ffnascar = 0; - { - if (!EnumWindows(FindWindowBySubstr, (LPARAM)substring)) - { - UINT8 ffnas = helpers->ReadByte(0x30060C, /* isRelativeOffset */ true); //Nascar Arcade - std::string ffs = std::to_string(ffnas); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - ffnascar = nascar(ffnas); + const TCHAR substring[] = TEXT("NASCAR"); + EnumWindows(FindWindowBySubstr, (LPARAM)substring); + wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); - if (FFBMode == 0) + { + int ffnascar = 0; + { + if (!EnumWindows(FindWindowBySubstr, (LPARAM)substring)) { - if ((ffnascar > 16) & (ffnascar < 33)) + UINT8 ffnas = myHelpers->ReadByte(0x30060C, /* isRelativeOffset */ true); //Nascar Arcade + std::string ffs = std::to_string(ffnas); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + ffnascar = nascar(ffnas); + + if (FFBMode == 0) { - helpers->log("moving wheel left"); - double percentForce = (ffnascar - 16) / 16.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); + if ((ffnascar > 16)& (ffnascar < 33)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ffnascar - 16) / 16.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ffnascar > 0)& (ffnascar < 17)) + { + myHelpers->log("moving wheel right"); + double percentForce = (17 - ffnascar) / 16.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } } - else if ((ffnascar > 0) & (ffnascar < 17)) + else { - helpers->log("moving wheel right"); - double percentForce = (17 - ffnascar) / 16.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - } - else - { - if ((ffnascar > 16) & (ffnascar < 33)) - { - helpers->log("moving wheel left"); - double percentForce = (ffnascar - 16) / 16.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - else if ((ffnascar > 0) & (ffnascar < 17)) - { - helpers->log("moving wheel right"); - double percentForce = (17 - ffnascar) / 16.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + if ((ffnascar > 16)& (ffnascar < 33)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ffnascar - 16) / 16.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + else if ((ffnascar > 0)& (ffnascar < 17)) + { + myHelpers->log("moving wheel right"); + double percentForce = (17 - ffnascar) / 16.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } } } } } } - } +void Demul::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } +} \ No newline at end of file diff --git a/Game Files/FordRacing.cpp b/Game Files/FordRacing.cpp index 4c08fb2..d9b8661 100644 --- a/Game Files/FordRacing.cpp +++ b/Game Files/FordRacing.cpp @@ -13,43 +13,73 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "FordRacing.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; +static HANDLE hSection; +static LPVOID secData; +static int ffbOffset = 0; -void FordRacing::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - helpers->log("in FR Ffbloop"); - const int ff = GetTeknoParrotFFB(); - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); +static int TeknoParrotGame() +{ + hSection = CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, 64, L"TeknoParrot_JvsState"); + secData = MapViewOfFile(hSection, FILE_MAP_ALL_ACCESS, 0, 0, 64); + ffbOffset = *((int*)secData + 2); + return 0; +} - if (ff < -65505 && ff > -65515) - { - helpers->log("moving wheel left"); - // -65507 => 9 - // -65508 => 8 - // -65515 => 1 - // weirdly, FR has 9 levels, not 15, utilizing only -65506 (weakest) to -65514 (strongest) - double percentForce = (-65505 - ff) / 9.0; - double percentLength = 50; - // direction from left => makes wheel turn right - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - lastWasStop = 0; - } - else if (ff > 0 && ff < 16) - { - helpers->log("moving wheel right"); - // weirdly, FR has 9 levels, not 15, utilizing 15 (weakest) through 7 (strongest) - double percentForce = (16 - ff) / 9.0; - double percentLength = 50; - // direction from right => makes wheel turn left - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - lastWasStop = 0; - } - else - { - if (lastWasStop == 0) { - triggers->Constant(constants->DIRECTION_FROM_LEFT, 0); // just pass the hash of 0 strength so we update lastEffectHash & lastEffectTime - lastWasStop = 1; +static int GetTeknoParrotFFB() +{ + ffbOffset = *((int*)secData + 2); + return ffbOffset; +} + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + int const ff = GetTeknoParrotFFB(); + myHelpers->log("in FR Ffbloop"); + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + + if (ff < -65505 && ff > -65515) + { + myHelpers->log("moving wheel left"); + double percentForce = (-65505 - ff) / 9.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if (ff > 0 && ff < 16) + { + myHelpers->log("moving wheel right"); + double percentForce = (16 - ff) / 9.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); } } +} + +void FordRacing::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + TeknoParrotGame(); + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/FordRacing.h b/Game Files/FordRacing.h index 539ab18..7438486 100644 --- a/Game Files/FordRacing.h +++ b/Game Files/FordRacing.h @@ -12,10 +12,9 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. */ #pragma once -#include "../Common Files/TeknoParrotGame.h" +#include "../Common Files/Game.h" -class FordRacing : public TeknoParrotGame { +class FordRacing : public Game { public: - FordRacing() : TeknoParrotGame() { } void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); }; \ No newline at end of file diff --git a/Game Files/FordRacingOther.cpp b/Game Files/FordRacingOther.cpp index 69bd229..9d0585a 100644 --- a/Game Files/FordRacingOther.cpp +++ b/Game Files/FordRacingOther.cpp @@ -13,10 +13,11 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "FordRacingOther.h" +#include "SDL.h" static EffectTriggers *myTriggers; static EffectConstants *myConstants; static Helpers *myHelpers; - +static SDL_Event e; static bool init = false; static int __stdcall Out32(DWORD device, DWORD data) @@ -64,24 +65,44 @@ static bool Hook(void * toHook, void * ourFunct, int len) { static DWORD jmpBackAddy; -void FordRacingOther::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - HMODULE hMod = GetModuleHandleA("inpout32.dll"); - if (hMod) +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) { - if (!init) + HMODULE hMod = GetModuleHandleA("inpout32.dll"); + if (hMod) { - int hookLength = 6; - DWORD hookAddress = (DWORD)GetProcAddress(GetModuleHandle(L"inpout32.dll"), "Out32"); - if (hookAddress) - { - jmpBackAddy = hookAddress + hookLength; - Hook((void*)hookAddress, Out32, hookLength); - init = true; - } + if (!init) + { + int hookLength = 6; + DWORD hookAddress = (DWORD)GetProcAddress(GetModuleHandle(L"inpout32.dll"), "Out32"); + if (hookAddress) + { + jmpBackAddy = hookAddress + hookLength; + Hook((void*)hookAddress, Out32, hookLength); + init = true; + } + } } } + return 0; +} + +void FordRacingOther::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { + myTriggers = triggers; myConstants = constants; myHelpers = helpers; + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/GRID.cpp b/Game Files/GRID.cpp index 83c8b57..b2d6790 100644 --- a/Game Files/GRID.cpp +++ b/Game Files/GRID.cpp @@ -112,6 +112,10 @@ static int RunningThread(void* ptr) void GRID::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + SDL_Thread* thread; thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); @@ -121,8 +125,4 @@ void GRID::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* myConstants = constants; myHelpers = helpers; } - - myTriggers = triggers; - myConstants = constants; - myHelpers = helpers; } \ No newline at end of file diff --git a/Game Files/GTIClub3.cpp b/Game Files/GTIClub3.cpp index 11947e6..982fea9 100644 --- a/Game Files/GTIClub3.cpp +++ b/Game Files/GTIClub3.cpp @@ -14,68 +14,95 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "GTIClub3.h" #include "math.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); + UINT8 ff = myHelpers->ReadByte(0x00918CBC, /* isRelativeOffset */ false); + UINT8 ff1 = myHelpers->ReadByte(0x00918CBD, /* isRelativeOffset */ false); + UINT8 ff2 = myHelpers->ReadByte(0x00918CBE, /* isRelativeOffset */ false); + UINT8 menu = myHelpers->ReadByte(0x518E8E, /* isRelativeOffset */ true); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff2); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ff1 > 0x00)& (ff1 < 0x40)& (menu == 0)) + { + double percentForce = (ff1) / 63.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->Sine(120, 120, percentForce); + } + if ((ff > 0x80)& (ff < 0x101)& (menu == 0)) + { + myHelpers->log("moving wheel right"); + double percentForce = (257 - ff) / 128.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x00)& (ff < 0x80)& (menu == 0)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ff) / 127.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ff1 > 0x00)& (ff1 < 0x40)& (menu == 0)) + { + double percentForce = (ff1) / 63.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), pow(percentForce, 0.5), percentLength); + myTriggers->Sine(120, 120, pow(percentForce, 0.5)); + } + if ((ff > 0x80)& (ff < 0x101)& (menu == 0)) + { + myHelpers->log("moving wheel right"); + double percentForce = (257 - ff) / 128.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x00)& (ff < 0x80)& (menu == 0)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ff) / 127.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } +} void GTIClub3::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers) { - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); - UINT8 ff = helpers->ReadByte(0x00918CBC, /* isRelativeOffset */ false); - UINT8 ff1 = helpers->ReadByte(0x00918CBD, /* isRelativeOffset */ false); - UINT8 ff2 = helpers->ReadByte(0x00918CBE, /* isRelativeOffset */ false); - UINT8 menu = helpers->ReadByte(0x518E8E, /* isRelativeOffset */ true); - helpers->log("got value: "); - std::string ffs = std::to_string(ff2); - helpers->log((char *)ffs.c_str()); - if (FFBMode == 0) + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) { - if ((ff1 > 0x00) & (ff1 < 0x40) & (menu == 0)) - { - double percentForce = (ff1) / 63.0; - double percentLength = 100; - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->Sine(120, 120, percentForce); - } - if ((ff > 0x80) & (ff < 0x101) & (menu == 0)) - { - helpers->log("moving wheel right"); - double percentForce = (257 - ff) / 128.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x00) & (ff < 0x80) & (menu == 0)) - { - helpers->log("moving wheel left"); - double percentForce = (ff) / 127.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff1 > 0x00) & (ff1 < 0x40) & (menu == 0)) - { - double percentForce = (ff1) / 63.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), pow(percentForce, 0.5), percentLength); - triggers->Sine(120, 120, pow(percentForce, 0.5)); - } - if ((ff > 0x80) & (ff < 0x101) & (menu == 0)) - { - helpers->log("moving wheel right"); - double percentForce = (257 - ff) / 128.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x00) & (ff < 0x80) & (menu == 0)) - { - helpers->log("moving wheel left"); - double percentForce = (ff) / 127.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/HOTD4.cpp b/Game Files/HOTD4.cpp index f2c4637..c96ef58 100644 --- a/Game Files/HOTD4.cpp +++ b/Game Files/HOTD4.cpp @@ -274,6 +274,10 @@ static int RunningThread(void *ptr) void HOTD4::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + SDL_Thread *thread; thread = SDL_CreateThread(RunningThread, "RunningThread", (void *)NULL); @@ -326,8 +330,4 @@ void HOTD4::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers myConstants = constants; myHelpers = helpers; } - - myTriggers = triggers; - myConstants = constants; - myHelpers = helpers; } \ No newline at end of file diff --git a/Game Files/InitialD4.cpp b/Game Files/InitialD4.cpp index 9dc8f69..e424c28 100644 --- a/Game Files/InitialD4.cpp +++ b/Game Files/InitialD4.cpp @@ -14,78 +14,102 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "InitialD4.h" #include "math.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); + UINT8 ff = myHelpers->ReadByte(0x089AE89A, /* isRelativeOffset */ false); + UINT8 ff1 = myHelpers->ReadByte(0x089AE899, /* isRelativeOffset */ false); + UINT8 ff2 = myHelpers->ReadByte(0x089AE898, /* isRelativeOffset */ false); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + + if (ff2 == 0x86) + { + myTriggers->Spring(0.8); + } + if (ff2 == 0x85) //cars colliding or rubbing against wall etc + { + if (ff1 > 0) + { + double percentLength = 200; + double percentForce = (0.6); + myTriggers->Friction(percentForce); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + } + if (FFBMode == 1) + { + if (ff2 == 0x84) + { + if ((ff > 0x37) && (ff < 0x80) && (ff1 == 0)) + { + myHelpers->log("moving wheel right"); + double percentForce = (128 - ff) / 72.0; + double percentLength = 100; + double powforce = (ff - 55) / 72.0; + myTriggers->Rumble(pow(percentForce, powforce), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, powforce))); + } + else if ((ff > 0x00) && (ff < 0x49) && (ff1 == 1)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ff) / 72.0; + double percentLength = 100; + double powforce = (73 - ff) / 72.0; + myTriggers->Rumble(0, pow(percentForce, powforce), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, powforce))); + } + } + } + else + { + if (ff2 == 0x84) + { + if ((ff > 0x37) && (ff < 0x80) && (ff1 == 0)) + { + myHelpers->log("moving wheel right"); + double percentForce = (128 - ff) / 72.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ff > 0x00) && (ff < 0x49) && (ff1 == 1)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ff) / 72.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + } + } + } +} void InitialD4::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers){ - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); - UINT8 ff = helpers->ReadByte(0x089AE89A, /* isRelativeOffset */ false); - UINT8 ff1 = helpers->ReadByte(0x089AE899, /* isRelativeOffset */ false); - UINT8 ff2 = helpers->ReadByte(0x089AE898, /* isRelativeOffset */ false); - helpers->log("got value: "); - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; - if (ff2 == 0x86) + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) { - triggers->Spring(0.8); - } - if (ff2 == 0x85) //cars colliding or rubbing against wall etc - { - if (ff1 > 0) - { - double percentLength = 200; - double percentForce = (0.6); - triggers->Inertia(percentForce); - triggers->Friction(percentForce); - triggers->Damper(percentForce); - triggers->Rumble(percentForce, percentForce, percentLength); - } - } - if (FFBMode == 1) - { - if (ff2 == 0x84) - { - if ((ff > 0x37) && (ff < 0x80) && (ff1 == 0)) - { - helpers->log("moving wheel right"); - double percentForce = (128 - ff) / 72.0; - double percentLength = 100; - double powforce = (ff - 55) / 72.0; - triggers->Rumble(pow(percentForce, powforce), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, powforce))); - } - else if ((ff > 0x00) && (ff < 0x49) && (ff1 == 1)) - { - helpers->log("moving wheel left"); - double percentForce = (ff) / 72.0; - double percentLength = 100; - double powforce = (73 - ff) / 72.0; - triggers->Rumble(0, pow(percentForce, powforce), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, powforce))); - } - } - } - else - { - if (ff2 == 0x84) - { - if ((ff > 0x37) && (ff < 0x80) && (ff1 == 0)) - { - helpers->log("moving wheel right"); - double percentForce = (128 - ff) / 72.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - else if ((ff > 0x00) && (ff < 0x49) && (ff1 == 1)) - { - helpers->log("moving wheel left"); - double percentForce = (ff) / 72.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - } + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; } } \ No newline at end of file diff --git a/Game Files/InitialD4Japan.cpp b/Game Files/InitialD4Japan.cpp index 08ddffe..e57ac83 100644 --- a/Game Files/InitialD4Japan.cpp +++ b/Game Files/InitialD4Japan.cpp @@ -14,77 +14,102 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "InitialD4Japan.h" #include "math.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); + UINT8 ff = myHelpers->ReadByte(0x0898985A, /* isRelativeOffset */ false); + UINT8 ff1 = myHelpers->ReadByte(0x08989859, /* isRelativeOffset */ false); + UINT8 ff2 = myHelpers->ReadByte(0x08989858, /* isRelativeOffset */ false); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + + if (ff2 == 0x86) + { + myTriggers->Spring(0.8); + } + if (ff2 == 0x85) //cars colliding or rubbing against wall etc + { + if (ff1 > 0) + { + double percentLength = 200; + double percentForce = (0.6); + myTriggers->Friction(percentForce); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + } + if (FFBMode == 1) + { + if (ff2 == 0x84) + { + if ((ff > 0x37) && (ff < 0x80) && (ff1 == 0)) + { + myHelpers->log("moving wheel right"); + double percentForce = (128 - ff) / 72.0; + double percentLength = 100; + double powforce = (ff - 55) / 72.0; + myTriggers->Rumble(pow(percentForce, powforce), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, powforce))); + } + else if ((ff > 0x00) && (ff < 0x49) && (ff1 == 1)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ff) / 72.0; + double percentLength = 100; + double powforce = (73 - ff) / 72.0; + myTriggers->Rumble(0, pow(percentForce, powforce), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, powforce))); + } + } + } + else + { + if (ff2 == 0x84) + { + if ((ff > 0x37) && (ff < 0x80) && (ff1 == 0)) + { + myHelpers->log("moving wheel right"); + double percentForce = (128 - ff) / 72.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ff > 0x00) && (ff < 0x49) && (ff1 == 1)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ff) / 72.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + } + } + } +} void InitialD4Japan::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers) { - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); - UINT8 ff = helpers->ReadByte(0x0898985A, /* isRelativeOffset */ false); - UINT8 ff1 = helpers->ReadByte(0x08989859, /* isRelativeOffset */ false); - UINT8 ff2 = helpers->ReadByte(0x08989858, /* isRelativeOffset */ false); - helpers->log("got value: "); - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - if (ff2 == 0x86) + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) { - triggers->Spring(0.8); - } - if (ff2 == 0x85) //cars colliding or rubbing against wall etc - { - if (ff1 > 0) - { - double percentLength = 200; - double percentForce = (0.6); - triggers->Inertia(percentForce); - triggers->Friction(percentForce); - triggers->Damper(percentForce); - triggers->Rumble(percentForce, percentForce, percentLength); - } - } - if (FFBMode == 1) - { - if (ff2 == 0x84) - { - if ((ff > 0x37) && (ff < 0x80) && (ff1 == 0)) - { - helpers->log("moving wheel right"); - double percentForce = (128 - ff) / 72.0; - double percentLength = 100; - double powforce = (ff - 55) / 72.0; - triggers->Rumble(pow(percentForce, powforce), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, powforce))); - } - else if ((ff > 0x00) && (ff < 0x49) && (ff1 == 1)) - { - helpers->log("moving wheel left"); - double percentForce = (ff) / 72.0; - double percentLength = 100; - double powforce = (73 - ff) / 72.0; - triggers->Rumble(0, pow(percentForce, powforce), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, powforce))); - } - } - } - else - { - if (ff2 == 0x84) - { - if ((ff > 0x37) && (ff < 0x80) && (ff1 == 0)) - { - helpers->log("moving wheel right"); - double percentForce = (128 - ff) / 72.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - else if ((ff > 0x00) && (ff < 0x49) && (ff1 == 1)) - { - helpers->log("moving wheel left"); - double percentForce = (ff) / 72.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - } + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; } } \ No newline at end of file diff --git a/Game Files/InitialD5.cpp b/Game Files/InitialD5.cpp index 4c057de..c659364 100644 --- a/Game Files/InitialD5.cpp +++ b/Game Files/InitialD5.cpp @@ -14,78 +14,102 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "InitialD5.h" #include "math.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); + UINT8 ff = myHelpers->ReadByte(0x08CB6122, /* isRelativeOffset */ false); + UINT8 ff1 = myHelpers->ReadByte(0x08CB6121, /* isRelativeOffset */ false); + UINT8 ff2 = myHelpers->ReadByte(0x08CB6120, /* isRelativeOffset */ false); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + + if (ff2 == 0x86) + { + myTriggers->Spring(0.8); + } + if (ff2 == 0x85) //cars colliding or rubbing against wall etc + { + if (ff1 > 0) + { + double percentLength = 200; + double percentForce = (0.6); + myTriggers->Friction(percentForce); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + } + if (FFBMode == 1) + { + if (ff2 == 0x84) + { + if ((ff > 0x37) && (ff < 0x80) && (ff1 == 0)) + { + myHelpers->log("moving wheel right"); + double percentForce = (128 - ff) / 72.0; + double percentLength = 100; + double powforce = (ff - 55) / 72.0; + myTriggers->Rumble(pow(percentForce, powforce), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, powforce))); + } + else if ((ff > 0x00) && (ff < 0x49) && (ff1 == 1)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ff) / 72.0; + double percentLength = 100; + double powforce = (73 - ff) / 72.0; + myTriggers->Rumble(0, pow(percentForce, powforce), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, powforce))); + } + } + } + else + { + if (ff2 == 0x84) + { + if ((ff > 0x37) && (ff < 0x80) && (ff1 == 0)) + { + myHelpers->log("moving wheel right"); + double percentForce = (128 - ff) / 72.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ff > 0x00) && (ff < 0x49) && (ff1 == 1)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ff) / 72.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + } + } + } +} void InitialD5::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers) { - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); - UINT8 ff = helpers->ReadByte(0x08CB6122, /* isRelativeOffset */ false); - UINT8 ff1 = helpers->ReadByte(0x08CB6121, /* isRelativeOffset */ false); - UINT8 ff2 = helpers->ReadByte(0x08CB6120, /* isRelativeOffset */ false); - helpers->log("got value: "); - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; - if (ff2 == 0x86) + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) { - triggers->Spring(0.8); - } - if (ff2 == 0x85) //cars colliding or rubbing against wall etc - { - if (ff1 > 0) - { - double percentLength = 200; - double percentForce = (0.6); - triggers->Inertia(percentForce); - triggers->Friction(percentForce); - triggers->Damper(percentForce); - triggers->Rumble(percentForce, percentForce, percentLength); - } - } - if (FFBMode == 1) - { - if (ff2 == 0x84) - { - if ((ff > 0x37) && (ff < 0x80) && (ff1 == 0)) - { - helpers->log("moving wheel right"); - double percentForce = (128 - ff) / 72.0; - double percentLength = 100; - double powforce = (ff - 55) / 72.0; - triggers->Rumble(pow(percentForce, powforce), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, powforce))); - } - else if ((ff > 0x00) && (ff < 0x49) && (ff1 == 1)) - { - helpers->log("moving wheel left"); - double percentForce = (ff) / 72.0; - double percentLength = 100; - double powforce = (73 - ff) / 72.0; - triggers->Rumble(0, pow(percentForce, powforce), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, powforce))); - } - } - } - else - { - if (ff2 == 0x84) - { - if ((ff > 0x37) && (ff < 0x80) && (ff1 == 0)) - { - helpers->log("moving wheel right"); - double percentForce = (128 - ff) / 72.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - else if ((ff > 0x00) && (ff < 0x49) && (ff1 == 1)) - { - helpers->log("moving wheel left"); - double percentForce = (ff) / 72.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - } + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; } } \ No newline at end of file diff --git a/Game Files/InitialD6.cpp b/Game Files/InitialD6.cpp index f7091c3..927a86e 100644 --- a/Game Files/InitialD6.cpp +++ b/Game Files/InitialD6.cpp @@ -13,6 +13,14 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "InitialD6.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; +static HANDLE hSection; +static LPVOID secData; +static int ffbOffset = 0; static int carscollide(int ffcollide) { switch (ffcollide) { @@ -122,77 +130,110 @@ static int rubbingwalls(int ffwalls) { } } -void InitialD6::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers) +static int TeknoParrotGame() { - int ffrubbingwalls = 0; - int ffcarcollision = 0; - { - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); - helpers->log("in ID6 Ffbloop"); - const int ff = GetTeknoParrotFFB(); - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - ffcarcollision = carscollide(ff); - ffrubbingwalls = rubbingwalls(ff); + hSection = CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, 64, L"TeknoParrot_JvsState"); + secData = MapViewOfFile(hSection, FILE_MAP_ALL_ACCESS, 0, 0, 64); + ffbOffset = *((int*)secData + 2); + return 0; +} - if (ff == 0x60000) +static int GetTeknoParrotFFB() +{ + ffbOffset = *((int*)secData + 2); + return ffbOffset; +} + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + int ffrubbingwalls = 0; + int ffcarcollision = 0; { - triggers->Spring(0.8); - } - if (ffrubbingwalls > 0) // car rubbing against wall - { - double percentLength = 200; - double percentForce = (ffrubbingwalls / 31.0); - triggers->Inertia(percentForce); - triggers->Friction(percentForce); - triggers->Damper(percentForce); - triggers->Rumble(percentForce, percentForce, percentLength); - } - if (ffcarcollision > 0) //cars colliding or rubbing with each other - { - double percentLength = 200; - double percentForce = (ffcarcollision / 16.0); - triggers->Inertia(percentForce); - triggers->Friction(percentForce); - triggers->Damper(percentForce); - triggers->Rumble(percentForce, percentForce, percentLength); - } - if (FFBMode == 1) - { - if ((ff > 0x40037) & (ff < 0x40080)) + wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); + myHelpers->log("in ID6 Ffbloop"); + const int ff = GetTeknoParrotFFB(); + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + ffcarcollision = carscollide(ff); + ffrubbingwalls = rubbingwalls(ff); + + if (ff == 0x60000) { - double percentForce = (262272 - ff) / 72.0; - double percentLength = 100; - double powforce = (ff - 262199) / 72.0; - triggers->Rumble(pow(percentForce, powforce), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, powforce))); + myTriggers->Spring(0.8); } - else if ((ff > 0x40100) & (ff < 0x40149)) + if (ffrubbingwalls > 0) // car rubbing against wall { - double percentForce = (ff - 262400) / 72.0; - double percentLength = 100; - double powforce = (262473 - ff) / 72.0; - triggers->Rumble(0, pow(percentForce, powforce), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, powforce))); + double percentLength = 200; + double percentForce = (ffrubbingwalls / 31.0); + myTriggers->Friction(percentForce); + myTriggers->Rumble(percentForce, percentForce, percentLength); } - } - else - { - if ((ff > 0x40037) & (ff < 0x40080)) + if (ffcarcollision > 0) //cars colliding or rubbing with each other { - double percentForce = (262272 - ff) / 72.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); + double percentLength = 200; + double percentForce = (ffcarcollision / 16.0); + myTriggers->Friction(percentForce); + myTriggers->Rumble(percentForce, percentForce, percentLength); } - else if ((ff > 0x40100) & (ff < 0x40149)) + if (FFBMode == 1) { - double percentForce = (ff - 262400) / 72.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); + if ((ff > 0x40037)& (ff < 0x40080)) + { + double percentForce = (262272 - ff) / 72.0; + double percentLength = 100; + double powforce = (ff - 262199) / 72.0; + myTriggers->Rumble(pow(percentForce, powforce), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, powforce))); + } + else if ((ff > 0x40100)& (ff < 0x40149)) + { + double percentForce = (ff - 262400) / 72.0; + double percentLength = 100; + double powforce = (262473 - ff) / 72.0; + myTriggers->Rumble(0, pow(percentForce, powforce), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, powforce))); + } + } + else + { + if ((ff > 0x40037)& (ff < 0x40080)) + { + double percentForce = (262272 - ff) / 72.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ff > 0x40100)& (ff < 0x40149)) + { + double percentForce = (ff - 262400) / 72.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } } } } +} + +void InitialD6::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers){ + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + TeknoParrotGame(); + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/InitialD6.h b/Game Files/InitialD6.h index 5962416..89b80ab 100644 --- a/Game Files/InitialD6.h +++ b/Game Files/InitialD6.h @@ -12,10 +12,9 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. */ #pragma once -#include "../Common Files/TeknoParrotGame.h" +#include "../Common Files/Game.h" -class InitialD6 : public TeknoParrotGame { +class InitialD6 : public Game { public: - InitialD6() : TeknoParrotGame() { } void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); }; \ No newline at end of file diff --git a/Game Files/InitialD7.cpp b/Game Files/InitialD7.cpp index a5db945..a95c204 100644 --- a/Game Files/InitialD7.cpp +++ b/Game Files/InitialD7.cpp @@ -13,6 +13,14 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "InitialD7.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; +static HANDLE hSection; +static LPVOID secData; +static int ffbOffset = 0; static int carscollide(int ffcollide) { switch (ffcollide) { @@ -122,77 +130,110 @@ static int rubbingwalls(int ffwalls) { } } -void InitialD7::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers) +static int TeknoParrotGame() { - int ffrubbingwalls = 0; - int ffcarcollision = 0; - { - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); - helpers->log("in ID7 Ffbloop"); - const int ff = GetTeknoParrotFFB(); - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - ffcarcollision = carscollide(ff); - ffrubbingwalls = rubbingwalls(ff); + hSection = CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, 64, L"TeknoParrot_JvsState"); + secData = MapViewOfFile(hSection, FILE_MAP_ALL_ACCESS, 0, 0, 64); + ffbOffset = *((int*)secData + 2); + return 0; +} - if (ff == 0x60000) +static int GetTeknoParrotFFB() +{ + ffbOffset = *((int*)secData + 2); + return ffbOffset; +} + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + int ffrubbingwalls = 0; + int ffcarcollision = 0; { - triggers->Spring(0.8); - } - if (ffrubbingwalls > 0) // car rubbing against wall - { - double percentLength = 200; - double percentForce = (ffrubbingwalls / 31.0); - triggers->Inertia(percentForce); - triggers->Friction(percentForce); - triggers->Damper(percentForce); - triggers->Rumble(percentForce, percentForce, percentLength); - } - if (ffcarcollision > 0) //cars colliding or rubbing with each other - { - double percentLength = 200; - double percentForce = (ffcarcollision / 16.0); - triggers->Inertia(percentForce); - triggers->Friction(percentForce); - triggers->Damper(percentForce); - triggers->Rumble(percentForce, percentForce, percentLength); - } - if (FFBMode == 1) - { - if ((ff > 0x40037) & (ff < 0x40080)) + wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); + myHelpers->log("in ID6 Ffbloop"); + const int ff = GetTeknoParrotFFB(); + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + ffcarcollision = carscollide(ff); + ffrubbingwalls = rubbingwalls(ff); + + if (ff == 0x60000) { - double percentForce = (262272 - ff) / 72.0; - double percentLength = 100; - double powforce = (ff - 262199) / 72.0; - triggers->Rumble(pow(percentForce, powforce), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, powforce))); + myTriggers->Spring(0.8); } - else if ((ff > 0x40100) & (ff < 0x40149)) + if (ffrubbingwalls > 0) // car rubbing against wall { - double percentForce = (ff - 262400) / 72.0; - double percentLength = 100; - double powforce = (262473 - ff) / 72.0; - triggers->Rumble(0, pow(percentForce, powforce), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, powforce))); + double percentLength = 200; + double percentForce = (ffrubbingwalls / 31.0); + myTriggers->Friction(percentForce); + myTriggers->Rumble(percentForce, percentForce, percentLength); } - } - else - { - if ((ff > 0x40037) & (ff < 0x40080)) + if (ffcarcollision > 0) //cars colliding or rubbing with each other { - double percentForce = (262272 - ff) / 72.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); + double percentLength = 200; + double percentForce = (ffcarcollision / 16.0); + myTriggers->Friction(percentForce); + myTriggers->Rumble(percentForce, percentForce, percentLength); } - else if ((ff > 0x40100) & (ff < 0x40149)) + if (FFBMode == 1) { - double percentForce = (ff - 262400) / 72.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); + if ((ff > 0x40037)& (ff < 0x40080)) + { + double percentForce = (262272 - ff) / 72.0; + double percentLength = 100; + double powforce = (ff - 262199) / 72.0; + myTriggers->Rumble(pow(percentForce, powforce), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, powforce))); + } + else if ((ff > 0x40100)& (ff < 0x40149)) + { + double percentForce = (ff - 262400) / 72.0; + double percentLength = 100; + double powforce = (262473 - ff) / 72.0; + myTriggers->Rumble(0, pow(percentForce, powforce), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, powforce))); + } + } + else + { + if ((ff > 0x40037)& (ff < 0x40080)) + { + double percentForce = (262272 - ff) / 72.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ff > 0x40100)& (ff < 0x40149)) + { + double percentForce = (ff - 262400) / 72.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } } } } +} + +void InitialD7::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + TeknoParrotGame(); + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/InitialD7.h b/Game Files/InitialD7.h index 9e8e399..8842387 100644 --- a/Game Files/InitialD7.h +++ b/Game Files/InitialD7.h @@ -12,10 +12,9 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. */ #pragma once -#include "../Common Files/TeknoParrotGame.h" +#include "../Common Files/Game.h" -class InitialD7 : public TeknoParrotGame { +class InitialD7 : public Game { public: - InitialD7() : TeknoParrotGame() { } void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); }; \ No newline at end of file diff --git a/Game Files/InitialD8.cpp b/Game Files/InitialD8.cpp index 40f4c51..41ce3e7 100644 --- a/Game Files/InitialD8.cpp +++ b/Game Files/InitialD8.cpp @@ -13,6 +13,14 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "InitialD8.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; +static HANDLE hSection; +static LPVOID secData; +static int ffbOffset = 0; static int carscollide(int ffcollide) { switch (ffcollide) { @@ -122,77 +130,110 @@ static int rubbingwalls(int ffwalls) { } } -void InitialD8::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers) +static int TeknoParrotGame() { - int ffrubbingwalls = 0; - int ffcarcollision = 0; - { - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); - helpers->log("in ID8 Ffbloop"); - const int ff = GetTeknoParrotFFB(); - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - ffcarcollision = carscollide(ff); - ffrubbingwalls = rubbingwalls(ff); + hSection = CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, 64, L"TeknoParrot_JvsState"); + secData = MapViewOfFile(hSection, FILE_MAP_ALL_ACCESS, 0, 0, 64); + ffbOffset = *((int*)secData + 2); + return 0; +} - if (ff == 0x60000) +static int GetTeknoParrotFFB() +{ + ffbOffset = *((int*)secData + 2); + return ffbOffset; +} + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + int ffrubbingwalls = 0; + int ffcarcollision = 0; { - triggers->Spring(0.8); - } - if (ffrubbingwalls > 0) // car rubbing against wall - { - double percentLength = 200; - double percentForce = (ffrubbingwalls / 31.0); - triggers->Inertia(percentForce); - triggers->Friction(percentForce); - triggers->Damper(percentForce); - triggers->Rumble(percentForce, percentForce, percentLength); - } - if (ffcarcollision > 0) //cars colliding or rubbing with each other - { - double percentLength = 200; - double percentForce = (ffcarcollision / 16.0); - triggers->Inertia(percentForce); - triggers->Friction(percentForce); - triggers->Damper(percentForce); - triggers->Rumble(percentForce, percentForce, percentLength); - } - if (FFBMode == 1) - { - if ((ff > 0x40037) & (ff < 0x40080)) + wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); + myHelpers->log("in ID6 Ffbloop"); + const int ff = GetTeknoParrotFFB(); + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + ffcarcollision = carscollide(ff); + ffrubbingwalls = rubbingwalls(ff); + + if (ff == 0x60000) { - double percentForce = (262272 - ff) / 72.0; - double percentLength = 100; - double powforce = (ff - 262199) / 72.0; - triggers->Rumble(pow(percentForce, powforce), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, powforce))); + myTriggers->Spring(0.8); } - else if ((ff > 0x40100) & (ff < 0x40149)) + if (ffrubbingwalls > 0) // car rubbing against wall { - double percentForce = (ff - 262400) / 72.0; - double percentLength = 100; - double powforce = (262473 - ff) / 72.0; - triggers->Rumble(0, pow(percentForce, powforce), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, powforce))); + double percentLength = 200; + double percentForce = (ffrubbingwalls / 31.0); + myTriggers->Friction(percentForce); + myTriggers->Rumble(percentForce, percentForce, percentLength); } - } - else - { - if ((ff > 0x40037) & (ff < 0x40080)) + if (ffcarcollision > 0) //cars colliding or rubbing with each other { - double percentForce = (262272 - ff) / 72.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); + double percentLength = 200; + double percentForce = (ffcarcollision / 16.0); + myTriggers->Friction(percentForce); + myTriggers->Rumble(percentForce, percentForce, percentLength); } - else if ((ff > 0x40100) & (ff < 0x40149)) + if (FFBMode == 1) { - double percentForce = (ff - 262400) / 72.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); + if ((ff > 0x40037)& (ff < 0x40080)) + { + double percentForce = (262272 - ff) / 72.0; + double percentLength = 100; + double powforce = (ff - 262199) / 72.0; + myTriggers->Rumble(pow(percentForce, powforce), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, powforce))); + } + else if ((ff > 0x40100)& (ff < 0x40149)) + { + double percentForce = (ff - 262400) / 72.0; + double percentLength = 100; + double powforce = (262473 - ff) / 72.0; + myTriggers->Rumble(0, pow(percentForce, powforce), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, powforce))); + } + } + else + { + if ((ff > 0x40037)& (ff < 0x40080)) + { + double percentForce = (262272 - ff) / 72.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ff > 0x40100)& (ff < 0x40149)) + { + double percentForce = (ff - 262400) / 72.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } } } } +} + +void InitialD8::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + TeknoParrotGame(); + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/InitialD8.h b/Game Files/InitialD8.h index 8b24876..ed74d8f 100644 --- a/Game Files/InitialD8.h +++ b/Game Files/InitialD8.h @@ -12,10 +12,9 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. */ #pragma once -#include "../Common Files/TeknoParrotGame.h" +#include "../Common Files/Game.h" -class InitialD8 : public TeknoParrotGame { +class InitialD8 : public Game { public: - InitialD8() : TeknoParrotGame() { } void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); }; \ No newline at end of file diff --git a/Game Files/KODrive.cpp b/Game Files/KODrive.cpp index 90abe0b..73b04cf 100644 --- a/Game Files/KODrive.cpp +++ b/Game Files/KODrive.cpp @@ -13,60 +13,87 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "KODrive.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + UINT8 ff = myHelpers->ReadByte(0x00B261F6, /* isRelativeOffset */ false); + UINT8 ff1 = myHelpers->ReadByte(0x00B261F5, /* isRelativeOffset */ false); + wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + + if ((ff == 10) & (ff1 == 30)) + { + double percentForce = 0.4; + double percentForce1 = 1.0; + double percentLength = 100; + myTriggers->Rumble(percentForce1, percentForce1, percentLength); + myTriggers->Sine(80, 80, percentForce); + } + if (FFBMode == 1) + { + if ((ff > 0x66)& (ff < 0x80)& (ff1 == 0)) + { + myHelpers->log("moving wheel right"); + double percentForce = (128 - ff) / 24.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x00)& (ff < 0x19)& (ff1 == 1)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ff) / 24.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + } + else + { + if ((ff > 0x66)& (ff < 0x80)& (ff1 == 0)) + { + myHelpers->log("moving wheel right"); + double percentForce = (128 - ff) / 24.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ff > 0x00)& (ff < 0x19)& (ff1 == 1)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ff) / 24.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + } + } +} void KODrive::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers) { - UINT8 ff = helpers->ReadByte(0x00B261F6, /* isRelativeOffset */ false); - UINT8 ff1 = helpers->ReadByte(0x00B261F5, /* isRelativeOffset */ false); - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); - helpers->log("got value: "); - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - if ((ff == 10) & (ff1 == 30)) + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) { - double percentForce = 0.4; - double percentForce1 = 2.7; - double percentLength = 100; - triggers->Rumble(percentForce1, percentForce1, percentLength); - triggers->Sine(80, 80, percentForce); + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; } - if (FFBMode == 1) - { - if ((ff > 0x66) & (ff < 0x80) & (ff1 == 0)) - { - helpers->log("moving wheel right"); - double percentForce = (128 - ff) / 24.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x00) & (ff < 0x19) & (ff1 == 1)) - { - helpers->log("moving wheel left"); - double percentForce = (ff) / 24.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - } - else - { - if ((ff > 0x66) & (ff < 0x80) & (ff1 == 0)) - { - helpers->log("moving wheel right"); - double percentForce = (128 - ff) / 24.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - else if ((ff > 0x00) & (ff < 0x19) & (ff1 == 1)) - { - helpers->log("moving wheel left"); - double percentForce = (ff) / 24.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - } } \ No newline at end of file diff --git a/Game Files/LGI.cpp b/Game Files/LGI.cpp index baa8022..89cb169 100644 --- a/Game Files/LGI.cpp +++ b/Game Files/LGI.cpp @@ -15,44 +15,242 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include "LGI.h" #include "SDL.h" #include +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; + extern int joystick_index1; extern int joystick_index2; extern SDL_Joystick* GameController2; extern SDL_Haptic* ControllerHaptic2; extern SDL_Haptic* haptic2; -void LGI::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - int ff = helpers->ReadIntPtr(0x0063BF5C, /* isRelativeOffset */ true); - UINT8 ff1 = helpers->ReadByte(ff + 0x44, /* isRelativeOffset */ false); - INT_PTR health1p1 = helpers->ReadIntPtr(0x00820024, /* isRelativeOffset*/ true); - INT_PTR health1p2 = helpers->ReadIntPtr(health1p1 + 0x4, /* isRelativeOffset */ false); - INT_PTR health1p3 = helpers->ReadIntPtr(health1p2 + 0x58, /* isRelativeOffset */ false); - INT_PTR health2p3 = helpers->ReadIntPtr(health1p2 + 0x5C, /* isRelativeOffset */ false); - float health1p = helpers->ReadFloat32(health1p3 + 0x14, /* isRelativeOffset */ false); //1p health - float health2p = helpers->ReadFloat32(health2p3 + 0x14, /* isRelativeOffset */ false); //2p health - helpers->log("got value: "); - std::string ffs = std::to_string(ff1); - helpers->log((char *)ffs.c_str()); - float static oldFloat1 = 0.0; - float static oldFloat2 = 0.0; - float newFloat1 = health1p; - float newFloat2 = health2p; +static wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int configFeedbackLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("FeedbackLength"), 120, settingsFilename); - int HowtoRumbleKnockEffect = GetPrivateProfileInt(TEXT("Settings"), TEXT("HowtoRumbleKnockEffect"), 0, settingsFilename); - int HowtoRumbleMotorEffect = GetPrivateProfileInt(TEXT("Settings"), TEXT("HowtoRumbleMotorEffect"), 0, settingsFilename); - int HowtoRumbleHealthEffect = GetPrivateProfileInt(TEXT("Settings"), TEXT("HowtoRumbleHealthEffect"), 0, settingsFilename); - int Knock1pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Knock1pStrength"), 0, settingsFilename); - int Motor1pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Motor1pStrength"), 0, settingsFilename); - int Health1pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Health1pStrength"), 0, settingsFilename); - int Knock2pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Knock2pStrength"), 0, settingsFilename); - int Motor2pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Motor2pStrength"), 0, settingsFilename); - int Health2pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Health2pStrength"), 0, settingsFilename); +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + int ff = myHelpers->ReadIntPtr(0x0063BF5C, /* isRelativeOffset */ true); + UINT8 ff1 = myHelpers->ReadByte(ff + 0x44, /* isRelativeOffset */ false); + INT_PTR health1p1 = myHelpers->ReadIntPtr(0x00820024, /* isRelativeOffset*/ true); + INT_PTR health1p2 = myHelpers->ReadIntPtr(health1p1 + 0x4, /* isRelativeOffset */ false); + INT_PTR health1p3 = myHelpers->ReadIntPtr(health1p2 + 0x58, /* isRelativeOffset */ false); + INT_PTR health2p3 = myHelpers->ReadIntPtr(health1p2 + 0x5C, /* isRelativeOffset */ false); + float health1p = myHelpers->ReadFloat32(health1p3 + 0x14, /* isRelativeOffset */ false); //1p health + float health2p = myHelpers->ReadFloat32(health2p3 + 0x14, /* isRelativeOffset */ false); //2p health + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff1); + myHelpers->log((char*)ffs.c_str()); + float static oldFloat1 = 0.0; + float static oldFloat2 = 0.0; + float newFloat1 = health1p; + float newFloat2 = health2p; + + int configFeedbackLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("FeedbackLength"), 120, settingsFilename); + int HowtoRumbleKnockEffect = GetPrivateProfileInt(TEXT("Settings"), TEXT("HowtoRumbleKnockEffect"), 0, settingsFilename); + int HowtoRumbleMotorEffect = GetPrivateProfileInt(TEXT("Settings"), TEXT("HowtoRumbleMotorEffect"), 0, settingsFilename); + int HowtoRumbleHealthEffect = GetPrivateProfileInt(TEXT("Settings"), TEXT("HowtoRumbleHealthEffect"), 0, settingsFilename); + int Knock1pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Knock1pStrength"), 0, settingsFilename); + int Motor1pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Motor1pStrength"), 0, settingsFilename); + int Health1pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Health1pStrength"), 0, settingsFilename); + int Knock2pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Knock2pStrength"), 0, settingsFilename); + int Motor2pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Motor2pStrength"), 0, settingsFilename); + int Health2pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Health2pStrength"), 0, settingsFilename); + + + + if ((oldFloat1 != newFloat1) && (health1p != 0x1)) + { + if (HowtoRumbleHealthEffect == 0) + { + double percentForce = ((Health1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleHealthEffect == 1) + { + double percentForce = ((Health1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(0, percentForce, percentLength); + } + else if (HowtoRumbleHealthEffect == 2) + { + double percentForce = ((Health1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, 0, percentLength); + } + } + if ((oldFloat2 != newFloat2) && (health2p != 0x1)) + { + if (HowtoRumbleHealthEffect == 0) + { + double percentForce = ((Health2pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleHealthEffect == 1) + { + double percentForce = ((Health2pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(0, percentForce, percentLength); + } + else if (HowtoRumbleHealthEffect == 2) + { + double percentForce = ((Health2pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, 0, percentLength); + } + } + if (ff1 == 0x20) + { + if (HowtoRumbleKnockEffect == 0) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 1) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(0, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 2) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, 0, percentLength); + } + } + if (ff1 == 0x40) + { + if (HowtoRumbleMotorEffect == 0) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 1) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(0, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 2) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, 0, percentLength); + } + } + if (ff1 == 0x4) + { + if (HowtoRumbleKnockEffect == 0) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 1) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(0, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 2) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, 0, percentLength); + } + } + if (ff1 == 0x8) + { + if (HowtoRumbleMotorEffect == 0) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 1) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(0, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 2) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, 0, percentLength); + } + } + if (ff1 == 0x24) + { + if (HowtoRumbleKnockEffect == 0) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->RumbleDevice2(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 1) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->RumbleDevice2(0, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 2) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->RumbleDevice2(percentForce, 0, percentLength); + } + } + if (ff1 == 0x48) + { + if (HowtoRumbleMotorEffect == 0) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->RumbleDevice2(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 1) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->RumbleDevice2(0, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 2) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->RumbleDevice2(percentForce, 0, percentLength); + } + } + oldFloat1 = newFloat1; + oldFloat2 = newFloat2; + } +} + +void LGI::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; for (int i = 0; i < SDL_NumJoysticks(); i++) { - wchar_t * deviceGUIDString2 = new wchar_t[256]; + wchar_t* deviceGUIDString2 = new wchar_t[256]; int Device2GUID = GetPrivateProfileString(TEXT("Settings"), TEXT("Device2GUID"), NULL, deviceGUIDString2, 256, settingsFilename); char joystick_guid[256]; sprintf(joystick_guid, "%S", deviceGUIDString2); @@ -93,180 +291,13 @@ void LGI::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* } } - if ((oldFloat1 != newFloat1) && (health1p != 0x1)) - { - if (HowtoRumbleHealthEffect == 0) - { - double percentForce = ((Health1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleHealthEffect == 1) - { - double percentForce = ((Health1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(0, percentForce, percentLength); - } - else if (HowtoRumbleHealthEffect == 2) - { - double percentForce = ((Health1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, 0, percentLength); - } - } - if ((oldFloat2 != newFloat2) && (health2p != 0x1)) - { - if (HowtoRumbleHealthEffect == 0) - { - double percentForce = ((Health2pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleHealthEffect == 1) - { - double percentForce = ((Health2pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(0, percentForce, percentLength); - } - else if (HowtoRumbleHealthEffect == 2) - { - double percentForce = ((Health2pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, 0, percentLength); - } - } - if (ff1 == 0x20) - { - if (HowtoRumbleKnockEffect == 0) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 1) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(0, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 2) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, 0, percentLength); - } - } - if (ff1 == 0x40) - { - if (HowtoRumbleMotorEffect == 0) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 1) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(0, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 2) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, 0, percentLength); - } - } - if (ff1 == 0x4) - { - if (HowtoRumbleKnockEffect == 0) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 1) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(0, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 2) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, 0, percentLength); - } - } - if (ff1 == 0x8) - { - if (HowtoRumbleMotorEffect == 0) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 1) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(0, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 2) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, 0, percentLength); - } - } - if (ff1 == 0x24) - { - if (HowtoRumbleKnockEffect == 0) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->RumbleDevice2(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 1) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->RumbleDevice2(0, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 2) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->RumbleDevice2(percentForce, 0, percentLength); - } - } - if (ff1 == 0x48) - { - if (HowtoRumbleMotorEffect == 0) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->RumbleDevice2(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 1) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(0, percentForce, percentLength); - triggers->RumbleDevice2(0, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 2) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, 0, percentLength); - triggers->RumbleDevice2(percentForce, 0, percentLength); - } - } - oldFloat1 = newFloat1; - oldFloat2 = newFloat2; + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/LGI3D.cpp b/Game Files/LGI3D.cpp index b8e81be..b82e887 100644 --- a/Game Files/LGI3D.cpp +++ b/Game Files/LGI3D.cpp @@ -15,45 +15,324 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include "LGI3D.h" #include "SDL.h" #include +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; + extern int joystick_index1; extern int joystick_index2; extern SDL_Haptic* haptic2; extern SDL_Joystick* GameController2; extern SDL_Haptic* ControllerHaptic2; -void LGI3D::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - - int ff = helpers->ReadIntPtr(0x0065DA20, /* isRelativeOffset */ true); - UINT8 ff1 = helpers->ReadByte(ff + 0x44, /* isRelativeOffset */ false); - INT_PTR health1p1 = helpers->ReadIntPtr(0x008429F4, /* isRelativeOffset*/ true); - INT_PTR health1p2 = helpers->ReadIntPtr(health1p1 + 0x4, /* isRelativeOffset */ false); - INT_PTR health1p3 = helpers->ReadIntPtr(health1p2 + 0x74, /* isRelativeOffset */ false); - INT_PTR health2p3 = helpers->ReadIntPtr(health1p2 + 0x78, /* isRelativeOffset */ false); - float health1p = helpers->ReadFloat32(health1p3 + 0x14, /* isRelativeOffset */ false); //1p health - float health2p = helpers->ReadFloat32(health2p3 + 0x14, /* isRelativeOffset */ false); //2p health - helpers->log("got value: "); - std::string ffs = std::to_string(ff1); - helpers->log((char *)ffs.c_str()); - float static oldFloat1 = 0.0; - float static oldFloat2 = 0.0; - float newFloat1 = health1p; - float newFloat2 = health2p; +static wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int configFeedbackLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("FeedbackLength"), 120, settingsFilename); - int HowtoRumbleKnockEffect = GetPrivateProfileInt(TEXT("Settings"), TEXT("HowtoRumbleKnockEffect"), 0, settingsFilename); - int HowtoRumbleMotorEffect = GetPrivateProfileInt(TEXT("Settings"), TEXT("HowtoRumbleMotorEffect"), 0, settingsFilename); - int HowtoRumbleHealthEffect = GetPrivateProfileInt(TEXT("Settings"), TEXT("HowtoRumbleHealthEffect"), 0, settingsFilename); - int Knock1pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Knock1pStrength"), 0, settingsFilename); - int Motor1pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Motor1pStrength"), 0, settingsFilename); - int Health1pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Health1pStrength"), 0, settingsFilename); - int Knock2pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Knock2pStrength"), 0, settingsFilename); - int Motor2pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Motor2pStrength"), 0, settingsFilename); - int Health2pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Health2pStrength"), 0, settingsFilename); +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + int ff = myHelpers->ReadIntPtr(0x0065DA20, /* isRelativeOffset */ true); + UINT8 ff1 = myHelpers->ReadByte(ff + 0x44, /* isRelativeOffset */ false); + INT_PTR health1p1 = myHelpers->ReadIntPtr(0x008429F4, /* isRelativeOffset*/ true); + INT_PTR health1p2 = myHelpers->ReadIntPtr(health1p1 + 0x4, /* isRelativeOffset */ false); + INT_PTR health1p3 = myHelpers->ReadIntPtr(health1p2 + 0x74, /* isRelativeOffset */ false); + INT_PTR health2p3 = myHelpers->ReadIntPtr(health1p2 + 0x78, /* isRelativeOffset */ false); + float health1p = myHelpers->ReadFloat32(health1p3 + 0x14, /* isRelativeOffset */ false); //1p health + float health2p = myHelpers->ReadFloat32(health2p3 + 0x14, /* isRelativeOffset */ false); //2p health + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff1); + myHelpers->log((char*)ffs.c_str()); + float static oldFloat1 = 0.0; + float static oldFloat2 = 0.0; + float newFloat1 = health1p; + float newFloat2 = health2p; + + wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int configFeedbackLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("FeedbackLength"), 120, settingsFilename); + int HowtoRumbleKnockEffect = GetPrivateProfileInt(TEXT("Settings"), TEXT("HowtoRumbleKnockEffect"), 0, settingsFilename); + int HowtoRumbleMotorEffect = GetPrivateProfileInt(TEXT("Settings"), TEXT("HowtoRumbleMotorEffect"), 0, settingsFilename); + int HowtoRumbleHealthEffect = GetPrivateProfileInt(TEXT("Settings"), TEXT("HowtoRumbleHealthEffect"), 0, settingsFilename); + int Knock1pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Knock1pStrength"), 0, settingsFilename); + int Motor1pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Motor1pStrength"), 0, settingsFilename); + int Health1pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Health1pStrength"), 0, settingsFilename); + int Knock2pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Knock2pStrength"), 0, settingsFilename); + int Motor2pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Motor2pStrength"), 0, settingsFilename); + int Health2pStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Health2pStrength"), 0, settingsFilename); + + if ((oldFloat1 != newFloat1) && (health1p != 0x1)) + { + if (HowtoRumbleHealthEffect == 0) + { + double percentForce = ((Health1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleHealthEffect == 1) + { + double percentForce = ((Health1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(0, percentForce, percentLength); + } + else if (HowtoRumbleHealthEffect == 2) + { + double percentForce = ((Health1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, 0, percentLength); + } + } + if ((oldFloat2 != newFloat2) && (health2p != 0x1)) + { + if (HowtoRumbleHealthEffect == 0) + { + double percentForce = ((Health2pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleHealthEffect == 1) + { + double percentForce = ((Health2pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(0, percentForce, percentLength); + } + else if (HowtoRumbleHealthEffect == 2) + { + double percentForce = ((Health2pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, 0, percentLength); + } + } + if (ff1 == 0x20) + { + if (HowtoRumbleKnockEffect == 0) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 1) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(0, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 2) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, 0, percentLength); + } + } + if (ff1 == 0x40) + { + if (HowtoRumbleMotorEffect == 0) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 1) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(0, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 2) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, 0, percentLength); + } + } + if (ff1 == 0x22) + { + if (HowtoRumbleKnockEffect == 0) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 1) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(0, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 2) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, 0, percentLength); + } + } + if (ff1 == 0x42) + { + if (HowtoRumbleMotorEffect == 0) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 1) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(0, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 2) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, 0, percentLength); + } + } + if (ff1 == 0x4) + { + if (HowtoRumbleKnockEffect == 0) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 1) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(0, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 2) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, 0, percentLength); + } + } + if (ff1 == 0x8) + { + if (HowtoRumbleMotorEffect == 0) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 1) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(0, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 2) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, 0, percentLength); + } + } + if (ff1 == 0x6) + { + if (HowtoRumbleKnockEffect == 0) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 1) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(0, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 2) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, 0, percentLength); + } + } + if (ff1 == 0xA) + { + if (HowtoRumbleMotorEffect == 0) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 1) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(0, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 2) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->RumbleDevice2(percentForce, 0, percentLength); + } + } + if (ff1 == 0x24) + { + if (HowtoRumbleKnockEffect == 0) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->RumbleDevice2(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 1) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->RumbleDevice2(0, percentForce, percentLength); + } + else if (HowtoRumbleKnockEffect == 2) + { + double percentForce = ((Knock1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->RumbleDevice2(percentForce, 0, percentLength); + } + } + if (ff1 == 0x4A) + { + if (HowtoRumbleMotorEffect == 0) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->RumbleDevice2(percentForce, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 1) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->RumbleDevice2(0, percentForce, percentLength); + } + else if (HowtoRumbleMotorEffect == 2) + { + double percentForce = ((Motor1pStrength) / 100.0); + double percentLength = configFeedbackLength; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->RumbleDevice2(percentForce, 0, percentLength); + } + } + oldFloat1 = newFloat1; + oldFloat2 = newFloat2; + } +} + +void LGI3D::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; for (int i = 0; i < SDL_NumJoysticks(); i++) { - wchar_t * deviceGUIDString2 = new wchar_t[256]; + wchar_t* deviceGUIDString2 = new wchar_t[256]; int Device2GUID = GetPrivateProfileString(TEXT("Settings"), TEXT("Device2GUID"), NULL, deviceGUIDString2, 256, settingsFilename); char joystick_guid[256]; sprintf(joystick_guid, "%S", deviceGUIDString2); @@ -94,264 +373,13 @@ void LGI3D::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers } } - if ((oldFloat1 != newFloat1) && (health1p != 0x1)) + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) { - if (HowtoRumbleHealthEffect == 0) - { - double percentForce = ((Health1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleHealthEffect == 1) - { - double percentForce = ((Health1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(0, percentForce, percentLength); - } - else if (HowtoRumbleHealthEffect == 2) - { - double percentForce = ((Health1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, 0, percentLength); - } - } - if ((oldFloat2 != newFloat2) && (health2p != 0x1)) - { - if (HowtoRumbleHealthEffect == 0) - { - double percentForce = ((Health2pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleHealthEffect == 1) - { - double percentForce = ((Health2pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(0, percentForce, percentLength); - } - else if (HowtoRumbleHealthEffect == 2) - { - double percentForce = ((Health2pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, 0, percentLength); - } - } - if (ff1 == 0x20) - { - if (HowtoRumbleKnockEffect == 0) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 1) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(0, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 2) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, 0, percentLength); - } - } - if (ff1 == 0x40) - { - if (HowtoRumbleMotorEffect == 0) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 1) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(0, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 2) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, 0, percentLength); - } - } - if (ff1 == 0x22) - { - if (HowtoRumbleKnockEffect == 0) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 1) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(0, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 2) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, 0, percentLength); - } - } - if (ff1 == 0x42) - { - if (HowtoRumbleMotorEffect == 0) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 1) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(0, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 2) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, 0, percentLength); - } - } - if (ff1 == 0x4) - { - if (HowtoRumbleKnockEffect == 0) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 1) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(0, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 2) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, 0, percentLength); - } - } - if (ff1 == 0x8) - { - if (HowtoRumbleMotorEffect == 0) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 1) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(0, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 2) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, 0, percentLength); - } - } - if (ff1 == 0x6) - { - if (HowtoRumbleKnockEffect == 0) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 1) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(0, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 2) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, 0, percentLength); - } - } - if (ff1 == 0xA) - { - if (HowtoRumbleMotorEffect == 0) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 1) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(0, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 2) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->RumbleDevice2(percentForce, 0, percentLength); - } - } - if (ff1 == 0x24) - { - if (HowtoRumbleKnockEffect == 0) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->RumbleDevice2(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 1) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->RumbleDevice2(0, percentForce, percentLength); - } - else if (HowtoRumbleKnockEffect == 2) - { - double percentForce = ((Knock1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->RumbleDevice2(percentForce, 0, percentLength); - } - } - if (ff1 == 0x4A) - { - if (HowtoRumbleMotorEffect == 0) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->RumbleDevice2(percentForce, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 1) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(0, percentForce, percentLength); - triggers->RumbleDevice2(0, percentForce, percentLength); - } - else if (HowtoRumbleMotorEffect == 2) - { - double percentForce = ((Motor1pStrength) / 100.0); - double percentLength = configFeedbackLength; - triggers->Rumble(percentForce, 0, percentLength); - triggers->RumbleDevice2(percentForce, 0, percentLength); - } - } - oldFloat1 = newFloat1; - oldFloat2 = newFloat2; + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/M2Emulator.cpp b/Game Files/M2Emulator.cpp index 0fa7172..c6dec2e 100644 --- a/Game Files/M2Emulator.cpp +++ b/Game Files/M2Emulator.cpp @@ -17,6 +17,13 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include "math.h" #include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; + +static wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + static bool init = false; static bool __stdcall ExitHook(UINT uExitCode) @@ -25,7 +32,7 @@ static bool __stdcall ExitHook(UINT uExitCode) return 0; } -static bool Hook(void * toHook, void * ourFunct, int len) { +static bool Hook(void* toHook, void* ourFunct, int len) { if (len < 5) { return false; } @@ -48,6075 +55,6096 @@ static bool Hook(void * toHook, void * ourFunct, int len) { static DWORD jmpBackAddy; -void M2Emulator::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers) { - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); - int DaytonaAIMultiplayerHack = GetPrivateProfileInt(TEXT("Settings"), TEXT("DaytonaAIMultiplayerHack"), 0, settingsFilename); - int DaytonaForcePanoramicAttract = GetPrivateProfileInt(TEXT("Settings"), TEXT("DaytonaForcePanoramicAttract"), 0, settingsFilename); - - HWND hWnd1 = FindWindowA(0, ("Sega Rally Championship")); - HWND hWnd2 = FindWindowA(0, ("Daytona USA")); - HWND hWnd3 = FindWindowA(0, ("Indianapolis 500 (Rev A, Deluxe)")); - HWND hWnd4 = FindWindowA(0, ("Sega Touring Car Championship (Rev A)")); - HWND hWnd5 = FindWindowA(0, ("Over Rev")); - HWND hWnd6 = FindWindowA(0, ("Super GT 24h")); - HWND hWnd7 = FindWindowA(0, ("Daytona USA '93 Edition")); - HWND hWnd8 = FindWindowA(0, ("Daytona USA (Saturn Ads)")); - HWND hWnd9 = FindWindowA(0, ("Daytona USA Special Edition")); - HWND hWnd10 = FindWindowA(0, ("Daytona USA Turbo")); - HWND hWnd11 = FindWindowA(0, ("Daytona USA Turbo (Rev A)")); - HWND hWnd12 = FindWindowA(0, ("Daytona USA: GTX 2004")); - HWND hWnd13 = FindWindowA(0, ("Daytona USA: To The Maxx")); - HWND hWnd14 = FindWindowA(0, ("Sega Rally Championship (Rev B)")); - HWND hWnd15 = FindWindowA(0, ("Sega Rally Pro Drivin'")); - HWND hWnd16 = FindWindowA(0, ("Indianapolis 500 (Rev A, Twin, Newer rev)")); - HWND hWnd17 = FindWindowA(0, ("Indianapolis 500 (Rev A, Twin, Older rev)")); - HWND hWnd18 = FindWindowA(0, ("Sega Touring Car Championship")); - HWND hWnd19 = FindWindowA(0, ("Sega Touring Car Championship (Rev B)")); - HWND hWnd20 = FindWindowA(0, ("Over Rev (Model 2B)")); - - - HMODULE hMod = GetModuleHandleA("KERNEL32.dll"); - if (hMod) +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) { - if (!init) + int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); + int DaytonaAIMultiplayerHack = GetPrivateProfileInt(TEXT("Settings"), TEXT("DaytonaAIMultiplayerHack"), 0, settingsFilename); + int DaytonaForcePanoramicAttract = GetPrivateProfileInt(TEXT("Settings"), TEXT("DaytonaForcePanoramicAttract"), 0, settingsFilename); + + HWND hWnd1 = FindWindowA(0, ("Sega Rally Championship")); + HWND hWnd2 = FindWindowA(0, ("Daytona USA")); + HWND hWnd3 = FindWindowA(0, ("Indianapolis 500 (Rev A, Deluxe)")); + HWND hWnd4 = FindWindowA(0, ("Sega Touring Car Championship (Rev A)")); + HWND hWnd5 = FindWindowA(0, ("Over Rev")); + HWND hWnd6 = FindWindowA(0, ("Super GT 24h")); + HWND hWnd7 = FindWindowA(0, ("Daytona USA '93 Edition")); + HWND hWnd8 = FindWindowA(0, ("Daytona USA (Saturn Ads)")); + HWND hWnd9 = FindWindowA(0, ("Daytona USA Special Edition")); + HWND hWnd10 = FindWindowA(0, ("Daytona USA Turbo")); + HWND hWnd11 = FindWindowA(0, ("Daytona USA Turbo (Rev A)")); + HWND hWnd12 = FindWindowA(0, ("Daytona USA: GTX 2004")); + HWND hWnd13 = FindWindowA(0, ("Daytona USA: To The Maxx")); + HWND hWnd14 = FindWindowA(0, ("Sega Rally Championship (Rev B)")); + HWND hWnd15 = FindWindowA(0, ("Sega Rally Pro Drivin'")); + HWND hWnd16 = FindWindowA(0, ("Indianapolis 500 (Rev A, Twin, Newer rev)")); + HWND hWnd17 = FindWindowA(0, ("Indianapolis 500 (Rev A, Twin, Older rev)")); + HWND hWnd18 = FindWindowA(0, ("Sega Touring Car Championship")); + HWND hWnd19 = FindWindowA(0, ("Sega Touring Car Championship (Rev B)")); + HWND hWnd20 = FindWindowA(0, ("Over Rev (Model 2B)")); + + + HMODULE hMod = GetModuleHandleA("KERNEL32.dll"); + if (hMod) { - int hookLength = 6; - DWORD hookAddress = (DWORD)GetProcAddress(GetModuleHandle(L"KERNEL32.dll"), "ExitProcess"); - if (hookAddress) + if (!init) { - jmpBackAddy = hookAddress + hookLength; - Hook((void*)hookAddress, ExitHook, hookLength); - init = true; - } - } - } - - if (hWnd1 > NULL) - { - UINT8 ff = helpers->ReadByte(0x174CF4, /* isRelativeOffset*/ true); //SegaRallyChampionship - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) - { - if ((ff > 0xBF) & (ff < 0xDF)) - { - helpers->log("moving wheel left"); - double percentForce = (ff - 191) / 31.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x7F) & (ff < 0x9F)) - { - helpers->log("moving wheel right"); - double percentForce = (ff - 127) / 31.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff > 0xBF) & (ff < 0xDF)) - { - helpers->log("moving wheel left"); - double percentForce = (ff - 191) / 31.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x7F) & (ff < 0x9F)) - { - helpers->log("moving wheel right"); - double percentForce = (ff - 127) / 31.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd2 > NULL) - { - if (DaytonaForcePanoramicAttract == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); - } - - if (DaytonaAIMultiplayerHack == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - UINT8 gamestate = helpers->ReadByte(Rambase1 + 0x10A4, /* isRelativeOffset*/ false); - UINT8 track = helpers->ReadByte(Rambase1 + 0x1460, /* isRelativeOffset*/ false); - UINT8 trackselect = helpers->ReadByte(Rambase1 + 0x1468, /* isRelativeOffset*/ false); - UINT8 countdown = helpers->ReadByte(Rambase1 + 0x1850, /* isRelativeOffset*/ false); - UINT8 linksize = helpers->ReadByte(Rambase1 + 0x40001, /* isRelativeOffset*/ false); - UINT8 linkID = helpers->ReadByte(Rambase1 + 0x40002, /* isRelativeOffset*/ false); - INT_PTR gamestatetimer = helpers->ReadIntPtr(Rambase1 + 0x10A8, /* isRelativeOffset*/ false); - UINT8 camhack = helpers->ReadByte(Rambase1 + 0x14A4, /* isRelativeOffset*/ false); - UINT8 carsinfront = helpers->ReadByte(Rambase1 + 0x51EC, /* isRelativeOffset*/ false); - UINT8 mpposition = helpers->ReadByte(Rambase1 + 0x51ED, /* isRelativeOffset*/ false); - float cary = helpers->ReadFloat32(Rambase1 + 0x519C, /* isRelativeOffset */ false); - float carx = helpers->ReadFloat32(Rambase1 + 0x51A4, /* isRelativeOffset */ false); - UINT8 nop1 = helpers->ReadByte(0xC2130, /* isRelativeOffset*/ true); - UINT8 nop2 = helpers->ReadByte(0xC2131, /* isRelativeOffset*/ true); - UINT8 nop3 = helpers->ReadByte(0xC2132, /* isRelativeOffset*/ true); - - - if (gamestate == 0x1A) - { - helpers->WriteByte(Rambase1 + 0x51ED, carsinfront, /* isRelativeOffset*/ false); - } - - if (trackselect == 0x01) - { - helpers->WriteByte(Rambase1 + 0x1460, 0x02, /* isRelativeOffset*/ false); - } - else if (trackselect == 0x02) - { - helpers->WriteByte(Rambase1 + 0x1460, 0x01, /* isRelativeOffset*/ false); - } - - if (linksize == 0x02) - { - if (linkID == 0x02) + int hookLength = 6; + DWORD hookAddress = (DWORD)GetProcAddress(GetModuleHandle(L"KERNEL32.dll"), "ExitProcess"); + if (hookAddress) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - } - else if (linkID == 0x01) - { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteFloat32(Rambase1 + 0x519C, 0.0, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - } - } - else if (linksize == 0x03) - { - if (linkID == 0x03) - { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(250); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - } - else if (linkID == 0x02) - { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - } - else if (linkID == 0x01) - { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - } - } - else if (linksize == 0x04) - { - if (linkID == 0x04) - { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(250); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC302CAF4, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37C0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - } - if (linkID == 0x03) - { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(350); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37CF3D0, /* isRelativeOffset */ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - } - else if (linkID == 0x02) - { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - } - else if (linkID == 0x01) - { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + jmpBackAddy = hookAddress + hookLength; + Hook((void*)hookAddress, ExitHook, hookLength); + init = true; } } } - - - UINT8 ff = helpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //DaytonaUSA - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) + if (hWnd1 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + UINT8 ff = myHelpers->ReadByte(0x174CF4, /* isRelativeOffset*/ true); //SegaRallyChampionship + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x3D)) - { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x3D)) - { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd3 > NULL) - { - UINT8 ff = helpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Indy500 - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd4 > NULL) - { - UINT8 ff = helpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Sega Touring Car Championship - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd5 > NULL) - { - UINT8 ff = helpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //OverRev - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd6 > NULL) - { - UINT8 ff = helpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Super GT 24h - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd7 > NULL) - { - - if (DaytonaForcePanoramicAttract == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); - } - - UINT8 ff = helpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //Daytona USA '93 Edition - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x3D)) - { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x3D)) - { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd8 > NULL) - { - if (DaytonaForcePanoramicAttract == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); - } - - if (DaytonaAIMultiplayerHack == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - UINT8 gamestate = helpers->ReadByte(Rambase1 + 0x10A4, /* isRelativeOffset*/ false); - UINT8 track = helpers->ReadByte(Rambase1 + 0x1460, /* isRelativeOffset*/ false); - UINT8 trackselect = helpers->ReadByte(Rambase1 + 0x1468, /* isRelativeOffset*/ false); - UINT8 countdown = helpers->ReadByte(Rambase1 + 0x1850, /* isRelativeOffset*/ false); - UINT8 linksize = helpers->ReadByte(Rambase1 + 0x40001, /* isRelativeOffset*/ false); - UINT8 linkID = helpers->ReadByte(Rambase1 + 0x40002, /* isRelativeOffset*/ false); - INT_PTR gamestatetimer = helpers->ReadIntPtr(Rambase1 + 0x10A8, /* isRelativeOffset*/ false); - UINT8 camhack = helpers->ReadByte(Rambase1 + 0x14A4, /* isRelativeOffset*/ false); - UINT8 carsinfront = helpers->ReadByte(Rambase1 + 0x51EC, /* isRelativeOffset*/ false); - UINT8 mpposition = helpers->ReadByte(Rambase1 + 0x51ED, /* isRelativeOffset*/ false); - float cary = helpers->ReadFloat32(Rambase1 + 0x519C, /* isRelativeOffset */ false); - float carx = helpers->ReadFloat32(Rambase1 + 0x51A4, /* isRelativeOffset */ false); - UINT8 nop1 = helpers->ReadByte(0xC2130, /* isRelativeOffset*/ true); - UINT8 nop2 = helpers->ReadByte(0xC2131, /* isRelativeOffset*/ true); - UINT8 nop3 = helpers->ReadByte(0xC2132, /* isRelativeOffset*/ true); - - - if (gamestate == 0x1A) - { - helpers->WriteByte(Rambase1 + 0x51ED, carsinfront, /* isRelativeOffset*/ false); - } - - if (trackselect == 0x01) - { - helpers->WriteByte(Rambase1 + 0x1460, 0x02, /* isRelativeOffset*/ false); - } - else if (trackselect == 0x02) - { - helpers->WriteByte(Rambase1 + 0x1460, 0x01, /* isRelativeOffset*/ false); - } - - if (linksize == 0x02) - { - if (linkID == 0x02) + if ((ff > 0xBF)& (ff < 0xDF)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + myHelpers->log("moving wheel left"); + double percentForce = (ff - 191) / 31.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); } - else if (linkID == 0x01) + else if ((ff > 0x7F)& (ff < 0x9F)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteFloat32(Rambase1 + 0x519C, 0.0, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + myHelpers->log("moving wheel right"); + double percentForce = (ff - 127) / 31.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); } } - else if (linksize == 0x03) + else { - if (linkID == 0x03) + if ((ff > 0xBF)& (ff < 0xDF)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(250); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + myHelpers->log("moving wheel left"); + double percentForce = (ff - 191) / 31.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); } - else if (linkID == 0x02) + else if ((ff > 0x7F)& (ff < 0x9F)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - } - else if (linkID == 0x01) - { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - } - } - else if (linksize == 0x04) - { - if (linkID == 0x04) - { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(250); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC302CAF4, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37C0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - } - if (linkID == 0x03) - { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(350); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37CF3D0, /* isRelativeOffset */ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - } - else if (linkID == 0x02) - { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - } - else if (linkID == 0x01) - { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + myHelpers->log("moving wheel right"); + double percentForce = (ff - 127) / 31.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); } } } - - UINT8 ff = helpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //Daytona USA (Saturn Ads) - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) + else if (hWnd2 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + if (DaytonaForcePanoramicAttract == 1) { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x3D)) - { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x3D)) - { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd9 > NULL) - { - if (DaytonaForcePanoramicAttract == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); - } - - if (DaytonaAIMultiplayerHack == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - UINT8 gamestate = helpers->ReadByte(Rambase1 + 0x10A4, /* isRelativeOffset*/ false); - UINT8 track = helpers->ReadByte(Rambase1 + 0x1460, /* isRelativeOffset*/ false); - UINT8 trackselect = helpers->ReadByte(Rambase1 + 0x1468, /* isRelativeOffset*/ false); - UINT8 countdown = helpers->ReadByte(Rambase1 + 0x1850, /* isRelativeOffset*/ false); - UINT8 linksize = helpers->ReadByte(Rambase1 + 0x40001, /* isRelativeOffset*/ false); - UINT8 linkID = helpers->ReadByte(Rambase1 + 0x40002, /* isRelativeOffset*/ false); - INT_PTR gamestatetimer = helpers->ReadIntPtr(Rambase1 + 0x10A8, /* isRelativeOffset*/ false); - UINT8 camhack = helpers->ReadByte(Rambase1 + 0x14A4, /* isRelativeOffset*/ false); - UINT8 carsinfront = helpers->ReadByte(Rambase1 + 0x51EC, /* isRelativeOffset*/ false); - UINT8 mpposition = helpers->ReadByte(Rambase1 + 0x51ED, /* isRelativeOffset*/ false); - float cary = helpers->ReadFloat32(Rambase1 + 0x519C, /* isRelativeOffset */ false); - float carx = helpers->ReadFloat32(Rambase1 + 0x51A4, /* isRelativeOffset */ false); - UINT8 nop1 = helpers->ReadByte(0xC2130, /* isRelativeOffset*/ true); - UINT8 nop2 = helpers->ReadByte(0xC2131, /* isRelativeOffset*/ true); - UINT8 nop3 = helpers->ReadByte(0xC2132, /* isRelativeOffset*/ true); - - - if (gamestate == 0x1A) - { - helpers->WriteByte(Rambase1 + 0x51ED, carsinfront, /* isRelativeOffset*/ false); + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); } - if (trackselect == 0x01) + if (DaytonaAIMultiplayerHack == 1) { - helpers->WriteByte(Rambase1 + 0x1460, 0x02, /* isRelativeOffset*/ false); - } - else if (trackselect == 0x02) - { - helpers->WriteByte(Rambase1 + 0x1460, 0x01, /* isRelativeOffset*/ false); - } + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + UINT8 gamestate = myHelpers->ReadByte(Rambase1 + 0x10A4, /* isRelativeOffset*/ false); + UINT8 track = myHelpers->ReadByte(Rambase1 + 0x1460, /* isRelativeOffset*/ false); + UINT8 trackselect = myHelpers->ReadByte(Rambase1 + 0x1468, /* isRelativeOffset*/ false); + UINT8 countdown = myHelpers->ReadByte(Rambase1 + 0x1850, /* isRelativeOffset*/ false); + UINT8 linksize = myHelpers->ReadByte(Rambase1 + 0x40001, /* isRelativeOffset*/ false); + UINT8 linkID = myHelpers->ReadByte(Rambase1 + 0x40002, /* isRelativeOffset*/ false); + INT_PTR gamestatetimer = myHelpers->ReadIntPtr(Rambase1 + 0x10A8, /* isRelativeOffset*/ false); + UINT8 camhack = myHelpers->ReadByte(Rambase1 + 0x14A4, /* isRelativeOffset*/ false); + UINT8 carsinfront = myHelpers->ReadByte(Rambase1 + 0x51EC, /* isRelativeOffset*/ false); + UINT8 mpposition = myHelpers->ReadByte(Rambase1 + 0x51ED, /* isRelativeOffset*/ false); + float cary = myHelpers->ReadFloat32(Rambase1 + 0x519C, /* isRelativeOffset */ false); + float carx = myHelpers->ReadFloat32(Rambase1 + 0x51A4, /* isRelativeOffset */ false); + UINT8 nop1 = myHelpers->ReadByte(0xC2130, /* isRelativeOffset*/ true); + UINT8 nop2 = myHelpers->ReadByte(0xC2131, /* isRelativeOffset*/ true); + UINT8 nop3 = myHelpers->ReadByte(0xC2132, /* isRelativeOffset*/ true); - if (linksize == 0x02) - { - if (linkID == 0x02) + + if (gamestate == 0x1A) { - if (gamestate > 0x07) + myHelpers->WriteByte(Rambase1 + 0x51ED, carsinfront, /* isRelativeOffset*/ false); + } + + if (trackselect == 0x01) + { + myHelpers->WriteByte(Rambase1 + 0x1460, 0x02, /* isRelativeOffset*/ false); + } + else if (trackselect == 0x02) + { + myHelpers->WriteByte(Rambase1 + 0x1460, 0x01, /* isRelativeOffset*/ false); + } + + if (linksize == 0x02) + { + if (linkID == 0x02) { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + else if (linkID == 0x01) { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 0.0, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } } } - else if (linkID == 0x01) + else if (linksize == 0x03) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) + if (linkID == 0x03) { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(250); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + else if (linkID == 0x02) { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) + } + else if (linksize == 0x04) + { + if (linkID == 0x04) { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(250); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC302CAF4, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37C0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + if (linkID == 0x03) { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(350); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37CF3D0, /* isRelativeOffset */ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + else if (linkID == 0x02) { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteFloat32(Rambase1 + 0x519C, 0.0, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } } } } - else if (linksize == 0x03) + + + + UINT8 ff = myHelpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //DaytonaUSA + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - if (linkID == 0x03) + if ((ff > 0x09)& (ff < 0x18)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(250); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - else if (linkID == 0x02) + else if ((ff > 0x1F)& (ff < 0x28)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); } - else if (linkID == 0x01) + else if ((ff > 0x2F)& (ff < 0x3D)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); } } - else if (linksize == 0x04) + else { - if (linkID == 0x04) + if ((ff > 0x09)& (ff < 0x18)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(250); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC302CAF4, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37C0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - if (linkID == 0x03) + else if ((ff > 0x1F)& (ff < 0x28)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(350); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37CF3D0, /* isRelativeOffset */ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); } - else if (linkID == 0x02) + else if ((ff > 0x2F)& (ff < 0x3D)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - else if (linkID == 0x01) + else if ((ff > 0x3F)& (ff < 0x48)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); } } } - - UINT8 ff = helpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //Daytona USA Special Edition - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) + else if (hWnd3 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + UINT8 ff = myHelpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Indy500 + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x3D)) - { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x3D)) - { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd10 > NULL) - { - if (DaytonaForcePanoramicAttract == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); - } - - if (DaytonaAIMultiplayerHack == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - UINT8 gamestate = helpers->ReadByte(Rambase1 + 0x10A4, /* isRelativeOffset*/ false); - UINT8 track = helpers->ReadByte(Rambase1 + 0x1460, /* isRelativeOffset*/ false); - UINT8 trackselect = helpers->ReadByte(Rambase1 + 0x1468, /* isRelativeOffset*/ false); - UINT8 countdown = helpers->ReadByte(Rambase1 + 0x1850, /* isRelativeOffset*/ false); - UINT8 linksize = helpers->ReadByte(Rambase1 + 0x40001, /* isRelativeOffset*/ false); - UINT8 linkID = helpers->ReadByte(Rambase1 + 0x40002, /* isRelativeOffset*/ false); - INT_PTR gamestatetimer = helpers->ReadIntPtr(Rambase1 + 0x10A8, /* isRelativeOffset*/ false); - UINT8 camhack = helpers->ReadByte(Rambase1 + 0x14A4, /* isRelativeOffset*/ false); - UINT8 carsinfront = helpers->ReadByte(Rambase1 + 0x51EC, /* isRelativeOffset*/ false); - UINT8 mpposition = helpers->ReadByte(Rambase1 + 0x51ED, /* isRelativeOffset*/ false); - float cary = helpers->ReadFloat32(Rambase1 + 0x519C, /* isRelativeOffset */ false); - float carx = helpers->ReadFloat32(Rambase1 + 0x51A4, /* isRelativeOffset */ false); - UINT8 nop1 = helpers->ReadByte(0xC2130, /* isRelativeOffset*/ true); - UINT8 nop2 = helpers->ReadByte(0xC2131, /* isRelativeOffset*/ true); - UINT8 nop3 = helpers->ReadByte(0xC2132, /* isRelativeOffset*/ true); - - - if (gamestate == 0x1A) - { - helpers->WriteByte(Rambase1 + 0x51ED, carsinfront, /* isRelativeOffset*/ false); - } - - if (trackselect == 0x01) - { - helpers->WriteByte(Rambase1 + 0x1460, 0x02, /* isRelativeOffset*/ false); - } - else if (trackselect == 0x02) - { - helpers->WriteByte(Rambase1 + 0x1460, 0x01, /* isRelativeOffset*/ false); - } - - if (linksize == 0x02) - { - if (linkID == 0x02) + if ((ff > 0x09)& (ff < 0x18)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - else if (linkID == 0x01) + else if ((ff > 0x1F)& (ff < 0x28)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteFloat32(Rambase1 + 0x519C, 0.0, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x38)) + { + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x37)& (ff < 0x40)) + { + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); } } - else if (linksize == 0x03) + else { - if (linkID == 0x03) + if ((ff > 0x09)& (ff < 0x18)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(250); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - else if (linkID == 0x02) + else if ((ff > 0x1F)& (ff < 0x28)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); } - else if (linkID == 0x01) + else if ((ff > 0x2F)& (ff < 0x38)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - } - else if (linksize == 0x04) - { - if (linkID == 0x04) + else if ((ff > 0x37)& (ff < 0x40)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(250); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC302CAF4, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37C0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - if (linkID == 0x03) + else if ((ff > 0x3F)& (ff < 0x48)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(350); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37CF3D0, /* isRelativeOffset */ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); } - else if (linkID == 0x02) + else if ((ff > 0x4F)& (ff < 0x58)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); } - else if (linkID == 0x01) + else if ((ff > 0x5F)& (ff < 0x68)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); } } } - - UINT8 ff = helpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //Daytona USA Turbo - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) + else if (hWnd4 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + UINT8 ff = myHelpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Sega Touring Car Championship + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x3D)) - { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x3D)) - { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd11 > NULL) - { - if (DaytonaForcePanoramicAttract == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); - } - - if (DaytonaAIMultiplayerHack == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - UINT8 gamestate = helpers->ReadByte(Rambase1 + 0x10A4, /* isRelativeOffset*/ false); - UINT8 track = helpers->ReadByte(Rambase1 + 0x1460, /* isRelativeOffset*/ false); - UINT8 trackselect = helpers->ReadByte(Rambase1 + 0x1468, /* isRelativeOffset*/ false); - UINT8 countdown = helpers->ReadByte(Rambase1 + 0x1850, /* isRelativeOffset*/ false); - UINT8 linksize = helpers->ReadByte(Rambase1 + 0x40001, /* isRelativeOffset*/ false); - UINT8 linkID = helpers->ReadByte(Rambase1 + 0x40002, /* isRelativeOffset*/ false); - INT_PTR gamestatetimer = helpers->ReadIntPtr(Rambase1 + 0x10A8, /* isRelativeOffset*/ false); - UINT8 camhack = helpers->ReadByte(Rambase1 + 0x14A4, /* isRelativeOffset*/ false); - UINT8 carsinfront = helpers->ReadByte(Rambase1 + 0x51EC, /* isRelativeOffset*/ false); - UINT8 mpposition = helpers->ReadByte(Rambase1 + 0x51ED, /* isRelativeOffset*/ false); - float cary = helpers->ReadFloat32(Rambase1 + 0x519C, /* isRelativeOffset */ false); - float carx = helpers->ReadFloat32(Rambase1 + 0x51A4, /* isRelativeOffset */ false); - UINT8 nop1 = helpers->ReadByte(0xC2130, /* isRelativeOffset*/ true); - UINT8 nop2 = helpers->ReadByte(0xC2131, /* isRelativeOffset*/ true); - UINT8 nop3 = helpers->ReadByte(0xC2132, /* isRelativeOffset*/ true); - - - if (gamestate == 0x1A) - { - helpers->WriteByte(Rambase1 + 0x51ED, carsinfront, /* isRelativeOffset*/ false); - } - - if (trackselect == 0x01) - { - helpers->WriteByte(Rambase1 + 0x1460, 0x02, /* isRelativeOffset*/ false); - } - else if (trackselect == 0x02) - { - helpers->WriteByte(Rambase1 + 0x1460, 0x01, /* isRelativeOffset*/ false); - } - - if (linksize == 0x02) - { - if (linkID == 0x02) + if ((ff > 0x09)& (ff < 0x18)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - else if (linkID == 0x01) + else if ((ff > 0x1F)& (ff < 0x28)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteFloat32(Rambase1 + 0x519C, 0.0, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x38)) + { + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x37)& (ff < 0x40)) + { + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); } } - else if (linksize == 0x03) + else { - if (linkID == 0x03) + if ((ff > 0x09)& (ff < 0x18)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(250); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - else if (linkID == 0x02) + else if ((ff > 0x1F)& (ff < 0x28)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); } - else if (linkID == 0x01) + else if ((ff > 0x2F)& (ff < 0x38)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - } - else if (linksize == 0x04) - { - if (linkID == 0x04) + else if ((ff > 0x37)& (ff < 0x40)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(250); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC302CAF4, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37C0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - if (linkID == 0x03) + else if ((ff > 0x3F)& (ff < 0x48)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(350); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37CF3D0, /* isRelativeOffset */ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); } - else if (linkID == 0x02) + else if ((ff > 0x4F)& (ff < 0x58)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); } - else if (linkID == 0x01) + else if ((ff > 0x5F)& (ff < 0x68)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); } } } - - UINT8 ff = helpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //Daytona USA Turbo (Rev A) - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) + else if (hWnd5 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + UINT8 ff = myHelpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //OverRev + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x3D)) - { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x3D)) - { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd12 > NULL) - { - if (DaytonaForcePanoramicAttract == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); - } - - if (DaytonaAIMultiplayerHack == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - UINT8 gamestate = helpers->ReadByte(Rambase1 + 0x10A4, /* isRelativeOffset*/ false); - UINT8 track = helpers->ReadByte(Rambase1 + 0x1460, /* isRelativeOffset*/ false); - UINT8 trackselect = helpers->ReadByte(Rambase1 + 0x1468, /* isRelativeOffset*/ false); - UINT8 countdown = helpers->ReadByte(Rambase1 + 0x1850, /* isRelativeOffset*/ false); - UINT8 linksize = helpers->ReadByte(Rambase1 + 0x40001, /* isRelativeOffset*/ false); - UINT8 linkID = helpers->ReadByte(Rambase1 + 0x40002, /* isRelativeOffset*/ false); - INT_PTR gamestatetimer = helpers->ReadIntPtr(Rambase1 + 0x10A8, /* isRelativeOffset*/ false); - UINT8 camhack = helpers->ReadByte(Rambase1 + 0x14A4, /* isRelativeOffset*/ false); - UINT8 carsinfront = helpers->ReadByte(Rambase1 + 0x51EC, /* isRelativeOffset*/ false); - UINT8 mpposition = helpers->ReadByte(Rambase1 + 0x51ED, /* isRelativeOffset*/ false); - float cary = helpers->ReadFloat32(Rambase1 + 0x519C, /* isRelativeOffset */ false); - float carx = helpers->ReadFloat32(Rambase1 + 0x51A4, /* isRelativeOffset */ false); - UINT8 nop1 = helpers->ReadByte(0xC2130, /* isRelativeOffset*/ true); - UINT8 nop2 = helpers->ReadByte(0xC2131, /* isRelativeOffset*/ true); - UINT8 nop3 = helpers->ReadByte(0xC2132, /* isRelativeOffset*/ true); - - - if (gamestate == 0x1A) - { - helpers->WriteByte(Rambase1 + 0x51ED, carsinfront, /* isRelativeOffset*/ false); - } - - if (trackselect == 0x01) - { - helpers->WriteByte(Rambase1 + 0x1460, 0x02, /* isRelativeOffset*/ false); - } - else if (trackselect == 0x02) - { - helpers->WriteByte(Rambase1 + 0x1460, 0x01, /* isRelativeOffset*/ false); - } - - if (linksize == 0x02) - { - if (linkID == 0x02) + if ((ff > 0x09)& (ff < 0x18)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - else if (linkID == 0x01) + else if ((ff > 0x1F)& (ff < 0x28)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteFloat32(Rambase1 + 0x519C, 0.0, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x38)) + { + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x37)& (ff < 0x40)) + { + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); } } - else if (linksize == 0x03) + else { - if (linkID == 0x03) + if ((ff > 0x09)& (ff < 0x18)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(250); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - else if (linkID == 0x02) + else if ((ff > 0x1F)& (ff < 0x28)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); } - else if (linkID == 0x01) + else if ((ff > 0x2F)& (ff < 0x38)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - } - else if (linksize == 0x04) - { - if (linkID == 0x04) + else if ((ff > 0x37)& (ff < 0x40)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(250); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC302CAF4, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37C0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - if (linkID == 0x03) + else if ((ff > 0x3F)& (ff < 0x48)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(350); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37CF3D0, /* isRelativeOffset */ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); } - else if (linkID == 0x02) + else if ((ff > 0x4F)& (ff < 0x58)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); } - else if (linkID == 0x01) + else if ((ff > 0x5F)& (ff < 0x68)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); } } } - - UINT8 ff = helpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //Daytona USA: GTX 2004 - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) + else if (hWnd6 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + UINT8 ff = myHelpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Super GT 24h + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x3D)) - { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x3D)) - { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd13 > NULL) - { - if (DaytonaForcePanoramicAttract == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); - } - - if (DaytonaAIMultiplayerHack == 1) - { - INT_PTR Rambase = helpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); - INT_PTR Rambase1 = helpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); - UINT8 gamestate = helpers->ReadByte(Rambase1 + 0x10A4, /* isRelativeOffset*/ false); - UINT8 track = helpers->ReadByte(Rambase1 + 0x1460, /* isRelativeOffset*/ false); - UINT8 trackselect = helpers->ReadByte(Rambase1 + 0x1468, /* isRelativeOffset*/ false); - UINT8 countdown = helpers->ReadByte(Rambase1 + 0x1850, /* isRelativeOffset*/ false); - UINT8 linksize = helpers->ReadByte(Rambase1 + 0x40001, /* isRelativeOffset*/ false); - UINT8 linkID = helpers->ReadByte(Rambase1 + 0x40002, /* isRelativeOffset*/ false); - INT_PTR gamestatetimer = helpers->ReadIntPtr(Rambase1 + 0x10A8, /* isRelativeOffset*/ false); - UINT8 camhack = helpers->ReadByte(Rambase1 + 0x14A4, /* isRelativeOffset*/ false); - UINT8 carsinfront = helpers->ReadByte(Rambase1 + 0x51EC, /* isRelativeOffset*/ false); - UINT8 mpposition = helpers->ReadByte(Rambase1 + 0x51ED, /* isRelativeOffset*/ false); - float cary = helpers->ReadFloat32(Rambase1 + 0x519C, /* isRelativeOffset */ false); - float carx = helpers->ReadFloat32(Rambase1 + 0x51A4, /* isRelativeOffset */ false); - UINT8 nop1 = helpers->ReadByte(0xC2130, /* isRelativeOffset*/ true); - UINT8 nop2 = helpers->ReadByte(0xC2131, /* isRelativeOffset*/ true); - UINT8 nop3 = helpers->ReadByte(0xC2132, /* isRelativeOffset*/ true); - - - if (gamestate == 0x1A) - { - helpers->WriteByte(Rambase1 + 0x51ED, carsinfront, /* isRelativeOffset*/ false); - } - - if (trackselect == 0x01) - { - helpers->WriteByte(Rambase1 + 0x1460, 0x02, /* isRelativeOffset*/ false); - } - else if (trackselect == 0x02) - { - helpers->WriteByte(Rambase1 + 0x1460, 0x01, /* isRelativeOffset*/ false); - } - - if (linksize == 0x02) - { - if (linkID == 0x02) + if ((ff > 0x09)& (ff < 0x18)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - else if (linkID == 0x01) + else if ((ff > 0x1F)& (ff < 0x28)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteFloat32(Rambase1 + 0x519C, 0.0, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x38)) + { + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x37)& (ff < 0x40)) + { + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); } } - else if (linksize == 0x03) + else { - if (linkID == 0x03) + if ((ff > 0x09)& (ff < 0x18)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(250); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - else if (linkID == 0x02) + else if ((ff > 0x1F)& (ff < 0x28)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); } - else if (linkID == 0x01) + else if ((ff > 0x2F)& (ff < 0x38)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - } - else if (linksize == 0x04) - { - if (linkID == 0x04) + else if ((ff > 0x37)& (ff < 0x40)) { - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(250); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC302CAF4, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37C0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); } - if (linkID == 0x03) + else if ((ff > 0x3F)& (ff < 0x48)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(350); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37CF3D0, /* isRelativeOffset */ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - helpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); } - else if (linkID == 0x02) + else if ((ff > 0x4F)& (ff < 0x58)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - Sleep(150); - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); } - else if (linkID == 0x01) + else if ((ff > 0x5F)& (ff < 0x68)) { - if ((gamestate == 0x1A) & (gamestatetimer < 100)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - else if ((gamestate == 0x1A) & (gamestatetimer > 100)) - { - Sleep(100); - helpers->WriteNop(0xC2130, true); - helpers->WriteNop(0xC2131, true); - helpers->WriteNop(0xC2132, true); - } - - if ((gamestate > 0x1A) & (gamestate < 0x1A)) - { - helpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); - helpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); - } - - if (gamestate > 0x07) - { - helpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); - helpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); - } - if ((gamestatetimer > 4294964133) & (gamestate == 0x12)) - { - helpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); - } - if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - helpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } - else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) - { - helpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 - Sleep(50); - helpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race - Sleep(50); - helpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 - Sleep(50); - helpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); - helpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); - } + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); } } } + else if (hWnd7 > NULL) + { - UINT8 ff = helpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //Daytona USA: To The Maxx - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) - { - if ((ff > 0x09) & (ff < 0x18)) + if (DaytonaForcePanoramicAttract == 1) { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); } - else if ((ff > 0x1F) & (ff < 0x28)) + + UINT8 ff = myHelpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //Daytona USA '93 Edition + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x3D)) + { + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } } - else if ((ff > 0x2F) & (ff < 0x3D)) + else { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x3D)) + { + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } - else + else if (hWnd8 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + if (DaytonaForcePanoramicAttract == 1) { - //Spring - double percentForce = (ff - 15) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); } - else if ((ff > 0x1F) & (ff < 0x28)) + + if (DaytonaAIMultiplayerHack == 1) { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + UINT8 gamestate = myHelpers->ReadByte(Rambase1 + 0x10A4, /* isRelativeOffset*/ false); + UINT8 track = myHelpers->ReadByte(Rambase1 + 0x1460, /* isRelativeOffset*/ false); + UINT8 trackselect = myHelpers->ReadByte(Rambase1 + 0x1468, /* isRelativeOffset*/ false); + UINT8 countdown = myHelpers->ReadByte(Rambase1 + 0x1850, /* isRelativeOffset*/ false); + UINT8 linksize = myHelpers->ReadByte(Rambase1 + 0x40001, /* isRelativeOffset*/ false); + UINT8 linkID = myHelpers->ReadByte(Rambase1 + 0x40002, /* isRelativeOffset*/ false); + INT_PTR gamestatetimer = myHelpers->ReadIntPtr(Rambase1 + 0x10A8, /* isRelativeOffset*/ false); + UINT8 camhack = myHelpers->ReadByte(Rambase1 + 0x14A4, /* isRelativeOffset*/ false); + UINT8 carsinfront = myHelpers->ReadByte(Rambase1 + 0x51EC, /* isRelativeOffset*/ false); + UINT8 mpposition = myHelpers->ReadByte(Rambase1 + 0x51ED, /* isRelativeOffset*/ false); + float cary = myHelpers->ReadFloat32(Rambase1 + 0x519C, /* isRelativeOffset */ false); + float carx = myHelpers->ReadFloat32(Rambase1 + 0x51A4, /* isRelativeOffset */ false); + UINT8 nop1 = myHelpers->ReadByte(0xC2130, /* isRelativeOffset*/ true); + UINT8 nop2 = myHelpers->ReadByte(0xC2131, /* isRelativeOffset*/ true); + UINT8 nop3 = myHelpers->ReadByte(0xC2132, /* isRelativeOffset*/ true); + + + if (gamestate == 0x1A) + { + myHelpers->WriteByte(Rambase1 + 0x51ED, carsinfront, /* isRelativeOffset*/ false); + } + + if (trackselect == 0x01) + { + myHelpers->WriteByte(Rambase1 + 0x1460, 0x02, /* isRelativeOffset*/ false); + } + else if (trackselect == 0x02) + { + myHelpers->WriteByte(Rambase1 + 0x1460, 0x01, /* isRelativeOffset*/ false); + } + + if (linksize == 0x02) + { + if (linkID == 0x02) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 0.0, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + else if (linksize == 0x03) + { + if (linkID == 0x03) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(250); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x02) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + else if (linksize == 0x04) + { + if (linkID == 0x04) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(250); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC302CAF4, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37C0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + if (linkID == 0x03) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(350); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37CF3D0, /* isRelativeOffset */ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x02) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } } - else if ((ff > 0x2F) & (ff < 0x3D)) + + UINT8 ff = myHelpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //Daytona USA (Saturn Ads) + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Centering - double percentForce = (ff - 47) / 13.0; - double percentLength = 100; - triggers->Spring(percentForce); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x3D)) + { + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } } - else if ((ff > 0x3F) & (ff < 0x48)) + else { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x3D)) + { + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } - } - if (hWnd14 > NULL) - { - UINT8 ff = helpers->ReadByte(0x174CF4, /* isRelativeOffset*/ true); //Sega Rally Championship (Rev B) - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) + else if (hWnd9 > NULL) { - if ((ff > 0xBF) & (ff < 0xDF)) + if (DaytonaForcePanoramicAttract == 1) { - helpers->log("moving wheel left"); - double percentForce = (ff - 191) / 31.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); } - else if ((ff > 0x7F) & (ff < 0x9F)) + + if (DaytonaAIMultiplayerHack == 1) { - helpers->log("moving wheel right"); - double percentForce = (ff - 127) / 31.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + UINT8 gamestate = myHelpers->ReadByte(Rambase1 + 0x10A4, /* isRelativeOffset*/ false); + UINT8 track = myHelpers->ReadByte(Rambase1 + 0x1460, /* isRelativeOffset*/ false); + UINT8 trackselect = myHelpers->ReadByte(Rambase1 + 0x1468, /* isRelativeOffset*/ false); + UINT8 countdown = myHelpers->ReadByte(Rambase1 + 0x1850, /* isRelativeOffset*/ false); + UINT8 linksize = myHelpers->ReadByte(Rambase1 + 0x40001, /* isRelativeOffset*/ false); + UINT8 linkID = myHelpers->ReadByte(Rambase1 + 0x40002, /* isRelativeOffset*/ false); + INT_PTR gamestatetimer = myHelpers->ReadIntPtr(Rambase1 + 0x10A8, /* isRelativeOffset*/ false); + UINT8 camhack = myHelpers->ReadByte(Rambase1 + 0x14A4, /* isRelativeOffset*/ false); + UINT8 carsinfront = myHelpers->ReadByte(Rambase1 + 0x51EC, /* isRelativeOffset*/ false); + UINT8 mpposition = myHelpers->ReadByte(Rambase1 + 0x51ED, /* isRelativeOffset*/ false); + float cary = myHelpers->ReadFloat32(Rambase1 + 0x519C, /* isRelativeOffset */ false); + float carx = myHelpers->ReadFloat32(Rambase1 + 0x51A4, /* isRelativeOffset */ false); + UINT8 nop1 = myHelpers->ReadByte(0xC2130, /* isRelativeOffset*/ true); + UINT8 nop2 = myHelpers->ReadByte(0xC2131, /* isRelativeOffset*/ true); + UINT8 nop3 = myHelpers->ReadByte(0xC2132, /* isRelativeOffset*/ true); + + + if (gamestate == 0x1A) + { + myHelpers->WriteByte(Rambase1 + 0x51ED, carsinfront, /* isRelativeOffset*/ false); + } + + if (trackselect == 0x01) + { + myHelpers->WriteByte(Rambase1 + 0x1460, 0x02, /* isRelativeOffset*/ false); + } + else if (trackselect == 0x02) + { + myHelpers->WriteByte(Rambase1 + 0x1460, 0x01, /* isRelativeOffset*/ false); + } + + if (linksize == 0x02) + { + if (linkID == 0x02) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 0.0, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + else if (linksize == 0x03) + { + if (linkID == 0x03) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(250); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x02) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + else if (linksize == 0x04) + { + if (linkID == 0x04) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(250); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC302CAF4, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37C0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + if (linkID == 0x03) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(350); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37CF3D0, /* isRelativeOffset */ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x02) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + } + + UINT8 ff = myHelpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //Daytona USA Special Edition + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) + { + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x3D)) + { + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x3D)) + { + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } - else + else if (hWnd10 > NULL) { - if ((ff > 0xBF) & (ff < 0xDF)) + if (DaytonaForcePanoramicAttract == 1) { - helpers->log("moving wheel left"); - double percentForce = (ff - 191) / 31.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); } - else if ((ff > 0x7F) & (ff < 0x9F)) + + if (DaytonaAIMultiplayerHack == 1) { - helpers->log("moving wheel right"); - double percentForce = (ff - 127) / 31.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + UINT8 gamestate = myHelpers->ReadByte(Rambase1 + 0x10A4, /* isRelativeOffset*/ false); + UINT8 track = myHelpers->ReadByte(Rambase1 + 0x1460, /* isRelativeOffset*/ false); + UINT8 trackselect = myHelpers->ReadByte(Rambase1 + 0x1468, /* isRelativeOffset*/ false); + UINT8 countdown = myHelpers->ReadByte(Rambase1 + 0x1850, /* isRelativeOffset*/ false); + UINT8 linksize = myHelpers->ReadByte(Rambase1 + 0x40001, /* isRelativeOffset*/ false); + UINT8 linkID = myHelpers->ReadByte(Rambase1 + 0x40002, /* isRelativeOffset*/ false); + INT_PTR gamestatetimer = myHelpers->ReadIntPtr(Rambase1 + 0x10A8, /* isRelativeOffset*/ false); + UINT8 camhack = myHelpers->ReadByte(Rambase1 + 0x14A4, /* isRelativeOffset*/ false); + UINT8 carsinfront = myHelpers->ReadByte(Rambase1 + 0x51EC, /* isRelativeOffset*/ false); + UINT8 mpposition = myHelpers->ReadByte(Rambase1 + 0x51ED, /* isRelativeOffset*/ false); + float cary = myHelpers->ReadFloat32(Rambase1 + 0x519C, /* isRelativeOffset */ false); + float carx = myHelpers->ReadFloat32(Rambase1 + 0x51A4, /* isRelativeOffset */ false); + UINT8 nop1 = myHelpers->ReadByte(0xC2130, /* isRelativeOffset*/ true); + UINT8 nop2 = myHelpers->ReadByte(0xC2131, /* isRelativeOffset*/ true); + UINT8 nop3 = myHelpers->ReadByte(0xC2132, /* isRelativeOffset*/ true); + + + if (gamestate == 0x1A) + { + myHelpers->WriteByte(Rambase1 + 0x51ED, carsinfront, /* isRelativeOffset*/ false); + } + + if (trackselect == 0x01) + { + myHelpers->WriteByte(Rambase1 + 0x1460, 0x02, /* isRelativeOffset*/ false); + } + else if (trackselect == 0x02) + { + myHelpers->WriteByte(Rambase1 + 0x1460, 0x01, /* isRelativeOffset*/ false); + } + + if (linksize == 0x02) + { + if (linkID == 0x02) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 0.0, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + else if (linksize == 0x03) + { + if (linkID == 0x03) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(250); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x02) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + else if (linksize == 0x04) + { + if (linkID == 0x04) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(250); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC302CAF4, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37C0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + if (linkID == 0x03) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(350); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37CF3D0, /* isRelativeOffset */ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x02) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + } + + UINT8 ff = myHelpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //Daytona USA Turbo + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) + { + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x3D)) + { + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x3D)) + { + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } - } - if (hWnd15 > NULL) - { - UINT8 ff = helpers->ReadByte(0x174CF4, /* isRelativeOffset*/ true); //Sega Rally Pro Drivin' - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) + else if (hWnd11 > NULL) { - if ((ff > 0xBF) & (ff < 0xDF)) + if (DaytonaForcePanoramicAttract == 1) { - helpers->log("moving wheel left"); - double percentForce = (ff - 191) / 31.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); } - else if ((ff > 0x7F) & (ff < 0x9F)) + + if (DaytonaAIMultiplayerHack == 1) { - helpers->log("moving wheel right"); - double percentForce = (ff - 127) / 31.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + UINT8 gamestate = myHelpers->ReadByte(Rambase1 + 0x10A4, /* isRelativeOffset*/ false); + UINT8 track = myHelpers->ReadByte(Rambase1 + 0x1460, /* isRelativeOffset*/ false); + UINT8 trackselect = myHelpers->ReadByte(Rambase1 + 0x1468, /* isRelativeOffset*/ false); + UINT8 countdown = myHelpers->ReadByte(Rambase1 + 0x1850, /* isRelativeOffset*/ false); + UINT8 linksize = myHelpers->ReadByte(Rambase1 + 0x40001, /* isRelativeOffset*/ false); + UINT8 linkID = myHelpers->ReadByte(Rambase1 + 0x40002, /* isRelativeOffset*/ false); + INT_PTR gamestatetimer = myHelpers->ReadIntPtr(Rambase1 + 0x10A8, /* isRelativeOffset*/ false); + UINT8 camhack = myHelpers->ReadByte(Rambase1 + 0x14A4, /* isRelativeOffset*/ false); + UINT8 carsinfront = myHelpers->ReadByte(Rambase1 + 0x51EC, /* isRelativeOffset*/ false); + UINT8 mpposition = myHelpers->ReadByte(Rambase1 + 0x51ED, /* isRelativeOffset*/ false); + float cary = myHelpers->ReadFloat32(Rambase1 + 0x519C, /* isRelativeOffset */ false); + float carx = myHelpers->ReadFloat32(Rambase1 + 0x51A4, /* isRelativeOffset */ false); + UINT8 nop1 = myHelpers->ReadByte(0xC2130, /* isRelativeOffset*/ true); + UINT8 nop2 = myHelpers->ReadByte(0xC2131, /* isRelativeOffset*/ true); + UINT8 nop3 = myHelpers->ReadByte(0xC2132, /* isRelativeOffset*/ true); + + + if (gamestate == 0x1A) + { + myHelpers->WriteByte(Rambase1 + 0x51ED, carsinfront, /* isRelativeOffset*/ false); + } + + if (trackselect == 0x01) + { + myHelpers->WriteByte(Rambase1 + 0x1460, 0x02, /* isRelativeOffset*/ false); + } + else if (trackselect == 0x02) + { + myHelpers->WriteByte(Rambase1 + 0x1460, 0x01, /* isRelativeOffset*/ false); + } + + if (linksize == 0x02) + { + if (linkID == 0x02) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 0.0, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + else if (linksize == 0x03) + { + if (linkID == 0x03) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(250); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x02) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + else if (linksize == 0x04) + { + if (linkID == 0x04) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(250); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC302CAF4, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37C0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + if (linkID == 0x03) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(350); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37CF3D0, /* isRelativeOffset */ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x02) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + } + + UINT8 ff = myHelpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //Daytona USA Turbo (Rev A) + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) + { + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x3D)) + { + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x3D)) + { + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } - else + else if (hWnd12 > NULL) { - if ((ff > 0xBF) & (ff < 0xDF)) + if (DaytonaForcePanoramicAttract == 1) { - helpers->log("moving wheel left"); - double percentForce = (ff - 191) / 31.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); } - else if ((ff > 0x7F) & (ff < 0x9F)) + + if (DaytonaAIMultiplayerHack == 1) { - helpers->log("moving wheel right"); - double percentForce = (ff - 127) / 31.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + UINT8 gamestate = myHelpers->ReadByte(Rambase1 + 0x10A4, /* isRelativeOffset*/ false); + UINT8 track = myHelpers->ReadByte(Rambase1 + 0x1460, /* isRelativeOffset*/ false); + UINT8 trackselect = myHelpers->ReadByte(Rambase1 + 0x1468, /* isRelativeOffset*/ false); + UINT8 countdown = myHelpers->ReadByte(Rambase1 + 0x1850, /* isRelativeOffset*/ false); + UINT8 linksize = myHelpers->ReadByte(Rambase1 + 0x40001, /* isRelativeOffset*/ false); + UINT8 linkID = myHelpers->ReadByte(Rambase1 + 0x40002, /* isRelativeOffset*/ false); + INT_PTR gamestatetimer = myHelpers->ReadIntPtr(Rambase1 + 0x10A8, /* isRelativeOffset*/ false); + UINT8 camhack = myHelpers->ReadByte(Rambase1 + 0x14A4, /* isRelativeOffset*/ false); + UINT8 carsinfront = myHelpers->ReadByte(Rambase1 + 0x51EC, /* isRelativeOffset*/ false); + UINT8 mpposition = myHelpers->ReadByte(Rambase1 + 0x51ED, /* isRelativeOffset*/ false); + float cary = myHelpers->ReadFloat32(Rambase1 + 0x519C, /* isRelativeOffset */ false); + float carx = myHelpers->ReadFloat32(Rambase1 + 0x51A4, /* isRelativeOffset */ false); + UINT8 nop1 = myHelpers->ReadByte(0xC2130, /* isRelativeOffset*/ true); + UINT8 nop2 = myHelpers->ReadByte(0xC2131, /* isRelativeOffset*/ true); + UINT8 nop3 = myHelpers->ReadByte(0xC2132, /* isRelativeOffset*/ true); + + + if (gamestate == 0x1A) + { + myHelpers->WriteByte(Rambase1 + 0x51ED, carsinfront, /* isRelativeOffset*/ false); + } + + if (trackselect == 0x01) + { + myHelpers->WriteByte(Rambase1 + 0x1460, 0x02, /* isRelativeOffset*/ false); + } + else if (trackselect == 0x02) + { + myHelpers->WriteByte(Rambase1 + 0x1460, 0x01, /* isRelativeOffset*/ false); + } + + if (linksize == 0x02) + { + if (linkID == 0x02) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 0.0, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + else if (linksize == 0x03) + { + if (linkID == 0x03) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(250); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x02) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + else if (linksize == 0x04) + { + if (linkID == 0x04) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(250); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC302CAF4, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37C0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + if (linkID == 0x03) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(350); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37CF3D0, /* isRelativeOffset */ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x02) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + } + + UINT8 ff = myHelpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //Daytona USA: GTX 2004 + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) + { + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x3D)) + { + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x3D)) + { + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } - } - else if (hWnd16 > NULL) - { - UINT8 ff = helpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Indianapolis 500 (Rev A, Twin, Newer rev) - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) + else if (hWnd13 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + if (DaytonaForcePanoramicAttract == 1) { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1070, 0x00, /* isRelativeOffset*/ false); } - else if ((ff > 0x1F) & (ff < 0x28)) + + if (DaytonaAIMultiplayerHack == 1) { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); + INT_PTR Rambase = myHelpers->ReadIntPtr(0x1AA888, /* isRelativeOffset*/ true); + INT_PTR Rambase1 = myHelpers->ReadIntPtr(Rambase + 0x100, /* isRelativeOffset */ false); + UINT8 gamestate = myHelpers->ReadByte(Rambase1 + 0x10A4, /* isRelativeOffset*/ false); + UINT8 track = myHelpers->ReadByte(Rambase1 + 0x1460, /* isRelativeOffset*/ false); + UINT8 trackselect = myHelpers->ReadByte(Rambase1 + 0x1468, /* isRelativeOffset*/ false); + UINT8 countdown = myHelpers->ReadByte(Rambase1 + 0x1850, /* isRelativeOffset*/ false); + UINT8 linksize = myHelpers->ReadByte(Rambase1 + 0x40001, /* isRelativeOffset*/ false); + UINT8 linkID = myHelpers->ReadByte(Rambase1 + 0x40002, /* isRelativeOffset*/ false); + INT_PTR gamestatetimer = myHelpers->ReadIntPtr(Rambase1 + 0x10A8, /* isRelativeOffset*/ false); + UINT8 camhack = myHelpers->ReadByte(Rambase1 + 0x14A4, /* isRelativeOffset*/ false); + UINT8 carsinfront = myHelpers->ReadByte(Rambase1 + 0x51EC, /* isRelativeOffset*/ false); + UINT8 mpposition = myHelpers->ReadByte(Rambase1 + 0x51ED, /* isRelativeOffset*/ false); + float cary = myHelpers->ReadFloat32(Rambase1 + 0x519C, /* isRelativeOffset */ false); + float carx = myHelpers->ReadFloat32(Rambase1 + 0x51A4, /* isRelativeOffset */ false); + UINT8 nop1 = myHelpers->ReadByte(0xC2130, /* isRelativeOffset*/ true); + UINT8 nop2 = myHelpers->ReadByte(0xC2131, /* isRelativeOffset*/ true); + UINT8 nop3 = myHelpers->ReadByte(0xC2132, /* isRelativeOffset*/ true); + + + if (gamestate == 0x1A) + { + myHelpers->WriteByte(Rambase1 + 0x51ED, carsinfront, /* isRelativeOffset*/ false); + } + + if (trackselect == 0x01) + { + myHelpers->WriteByte(Rambase1 + 0x1460, 0x02, /* isRelativeOffset*/ false); + } + else if (trackselect == 0x02) + { + myHelpers->WriteByte(Rambase1 + 0x1460, 0x01, /* isRelativeOffset*/ false); + } + + if (linksize == 0x02) + { + if (linkID == 0x02) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 0.0, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + else if (linksize == 0x03) + { + if (linkID == 0x03) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(250); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x02) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } + else if (linksize == 0x04) + { + if (linkID == 0x04) + { + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(250); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC302CAF4, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37C0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + if (linkID == 0x03) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C40, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(350); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37CF3D0, /* isRelativeOffset */ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteFloat32(Rambase1 + 0x519C, 450.0, /* isRelativeOffset */ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x02) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540C80, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x01, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + Sleep(150); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02 || track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + } + else if (linkID == 0x01) + { + if ((gamestate == 0x1A) & (gamestatetimer < 100)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + else if ((gamestate == 0x1A) & (gamestatetimer > 100)) + { + Sleep(100); + myHelpers->WriteNop(0xC2130, true); + myHelpers->WriteNop(0xC2131, true); + myHelpers->WriteNop(0xC2132, true); + } + + if ((gamestate > 0x1A)& (gamestate < 0x1A)) + { + myHelpers->WriteByte(0xC2130, 0x88, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2131, 0x14, /* isRelativeOffset*/ true); + myHelpers->WriteByte(0xC2132, 0x01, /* isRelativeOffset*/ true); + } + + if (gamestate > 0x07) + { + myHelpers->WriteIntPtr(Rambase1 + 0x40004, 0x00540D00, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x40008, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteIntPtr(Rambase1 + 0x4000C, 0x00540CC0, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5484, 0x00, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5784, 0x02, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5A84, 0x03, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x5D84, 0x04, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6084, 0x05, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6384, 0x06, /* isRelativeOffset*/ false); + myHelpers->WriteByte(Rambase1 + 0x6684, 0x07, /* isRelativeOffset*/ false); + } + if ((gamestatetimer > 4294964133)& (gamestate == 0x12)) + { + myHelpers->WriteIntPtr(Rambase1 + 0x10A8, 0x3B6, /* isRelativeOffset*/ false); + } + if ((gamestate == 0x16) & (countdown == 0x00) & (track == 0x00)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + myHelpers->WriteByte(Rambase1 + 0x1850, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x01)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC2F195E8, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + else if ((gamestate == 0x14) & (trackselect == 0x00) & (track == 0x02)) + { + myHelpers->WriteByte(Rambase1 + 0x40000, 0x99, /* isRelativeOffset*/ false); // change to 99 + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x10A4, 0x13, /* isRelativeOffset*/ false); // restart race + Sleep(50); + myHelpers->WriteByte(Rambase1 + 0x40000, 0x01, /* isRelativeOffset*/ false); // change back to 1 + Sleep(50); + myHelpers->WriteIntPtr(Rambase1 + 0x51A4, 0xC37E0001, /* isRelativeOffset */ false); + myHelpers->WriteByte(Rambase1 + 0x1468, 0x01, /* isRelativeOffset*/ false); + } + } + } } - else if ((ff > 0x2F) & (ff < 0x38)) + + UINT8 ff = myHelpers->ReadByte(0x0057285B, /* isRelativeOffset*/ false); //Daytona USA: To The Maxx + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x3D)) + { + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } } - else if ((ff > 0x37) & (ff < 0x40)) + else { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 15) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x3D)) + { + //Centering + double percentForce = (ff - 47) / 13.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } - else + if (hWnd14 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + UINT8 ff = myHelpers->ReadByte(0x174CF4, /* isRelativeOffset*/ true); //Sega Rally Championship (Rev B) + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); + if ((ff > 0xBF)& (ff < 0xDF)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ff - 191) / 31.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x7F)& (ff < 0x9F)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff - 127) / 31.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } } - else if ((ff > 0x1F) & (ff < 0x28)) + else { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + if ((ff > 0xBF)& (ff < 0xDF)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ff - 191) / 31.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x7F)& (ff < 0x9F)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff - 127) / 31.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } - } - else if (hWnd17 > NULL) - { - UINT8 ff = helpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Indianapolis 500 (Rev A, Twin, Older rev) - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) + if (hWnd15 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + UINT8 ff = myHelpers->ReadByte(0x174CF4, /* isRelativeOffset*/ true); //Sega Rally Pro Drivin' + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); + if ((ff > 0xBF)& (ff < 0xDF)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ff - 191) / 31.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x7F)& (ff < 0x9F)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff - 127) / 31.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } } - else if ((ff > 0x1F) & (ff < 0x28)) + else { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); + if ((ff > 0xBF)& (ff < 0xDF)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ff - 191) / 31.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x7F)& (ff < 0x9F)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff - 127) / 31.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } - else + else if (hWnd16 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + UINT8 ff = myHelpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Indianapolis 500 (Rev A, Twin, Newer rev) + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x38)) + { + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x37)& (ff < 0x40)) + { + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } } - else if ((ff > 0x1F) & (ff < 0x28)) + else { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x38)) + { + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x37)& (ff < 0x40)) + { + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } - } - else if (hWnd18 > NULL) - { - UINT8 ff = helpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Sega Touring Car Championship - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) + else if (hWnd17 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + UINT8 ff = myHelpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Indianapolis 500 (Rev A, Twin, Older rev) + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x38)) + { + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x37)& (ff < 0x40)) + { + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } } - else if ((ff > 0x1F) & (ff < 0x28)) + else { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x38)) + { + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x37)& (ff < 0x40)) + { + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } - else + else if (hWnd18 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + UINT8 ff = myHelpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Sega Touring Car Championship + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x38)) + { + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x37)& (ff < 0x40)) + { + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } } - else if ((ff > 0x1F) & (ff < 0x28)) + else { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x38)) + { + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x37)& (ff < 0x40)) + { + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } - } - else if (hWnd19 > NULL) - { - UINT8 ff = helpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Sega Touring Car Championship (Rev B) - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) + else if (hWnd19 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + UINT8 ff = myHelpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Sega Touring Car Championship (Rev B) + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x38)) + { + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x37)& (ff < 0x40)) + { + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } } - else if ((ff > 0x1F) & (ff < 0x28)) + else { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x38)) + { + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x37)& (ff < 0x40)) + { + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } - else + else if (hWnd20 > NULL) { - if ((ff > 0x09) & (ff < 0x18)) + UINT8 ff = myHelpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Over Rev (Model 2B) + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + if (FFBMode == 0) { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x38)) + { + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x37)& (ff < 0x40)) + { + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } } - else if ((ff > 0x1F) & (ff < 0x28)) + else { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd20 > NULL) - { - UINT8 ff = helpers->ReadByte(0x17285B, /* isRelativeOffset*/ true); //Over Rev (Model 2B) - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - if (FFBMode == 0) - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff > 0x09) & (ff < 0x18)) - { - //Spring - double percentForce = (ff - 10) / 14.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x1F) & (ff < 0x28)) - { - //Clutch - double percentForce = (ff - 31) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0x2F) & (ff < 0x38)) - { - //Centering - double percentForce = (ff - 47) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x37) & (ff < 0x40)) - { - //Centeringtestmenu - double percentForce = (ff - 55) / 8.0; - double percentLength = 100; - triggers->Spring(percentForce); - } - else if ((ff > 0x3F) & (ff < 0x48)) - { - //Uncentering - double percentForce = (ff - 63) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0x4F) & (ff < 0x58)) - { - //Roll Left - double percentForce = (ff - 79) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x5F) & (ff < 0x68)) - { - //Roll Right - double percentForce = (ff - 95) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + if ((ff > 0x09)& (ff < 0x18)) + { + //Spring + double percentForce = (ff - 10) / 14.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x1F)& (ff < 0x28)) + { + //Clutch + double percentForce = (ff - 31) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0x2F)& (ff < 0x38)) + { + //Centering + double percentForce = (ff - 47) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x37)& (ff < 0x40)) + { + //Centeringtestmenu + double percentForce = (ff - 55) / 8.0; + double percentLength = 100; + myTriggers->Spring(percentForce); + } + else if ((ff > 0x3F)& (ff < 0x48)) + { + //Uncentering + double percentForce = (ff - 63) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0x4F)& (ff < 0x58)) + { + //Roll Left + double percentForce = (ff - 79) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x5F)& (ff < 0x68)) + { + //Roll Right + double percentForce = (ff - 95) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } } } +return 0; +} + +void M2Emulator::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } +} \ No newline at end of file diff --git a/Game Files/Machstorm.cpp b/Game Files/Machstorm.cpp index ab0da56..a707b00 100644 --- a/Game Files/Machstorm.cpp +++ b/Game Files/Machstorm.cpp @@ -13,160 +13,183 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "Machstorm.h" -typedef unsigned char U8; -typedef unsigned int U32; -typedef uint16_t U16; +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + static wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int Power1RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power1RumbleStrength"), 0, settingsFilename); + int Power2RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power2RumbleStrength"), 0, settingsFilename); + int Power3RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power3RumbleStrength"), 0, settingsFilename); + int Power4RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power4RumbleStrength"), 0, settingsFilename); + int Power5RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power5RumbleStrength"), 0, settingsFilename); + int Power6RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power6RumbleStrength"), 0, settingsFilename); + int Power7RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power7RumbleStrength"), 0, settingsFilename); + int Power8RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power8RumbleStrength"), 0, settingsFilename); + int Power9RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power9RumbleStrength"), 0, settingsFilename); + int Power10RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power10RumbleStrength"), 0, settingsFilename); + int Power1RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power1RumbleLength"), 0, settingsFilename); + int Power2RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power2RumbleLength"), 0, settingsFilename); + int Power3RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power3RumbleLength"), 0, settingsFilename); + int Power4RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power4RumbleLength"), 0, settingsFilename); + int Power5RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power5RumbleLength"), 0, settingsFilename); + int Power6RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power6RumbleLength"), 0, settingsFilename); + int Power7RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power7RumbleLength"), 0, settingsFilename); + int Power8RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power8RumbleLength"), 0, settingsFilename); + int Power9RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power9RumbleLength"), 0, settingsFilename); + int Power10RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power10RumbleLength"), 0, settingsFilename); + int vibration = myHelpers->ReadInt32(0x6390E9, /* relative */ true); + int power = myHelpers->ReadInt32(0x639109, /* relative */ true); + + if (vibration == 16842753) + { + if (power == 61542) + { + double percentLength = (Power1RumbleLength); + double percentForce = ((Power1RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 61543) + { + double percentLength = (Power2RumbleLength); + double percentForce = ((Power2RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 61544) + { + double percentLength = (Power3RumbleLength); + double percentForce = ((Power3RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 61545) + { + double percentLength = (Power4RumbleLength); + double percentForce = ((Power4RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 61546) + { + double percentLength = (Power5RumbleLength); + double percentForce = ((Power5RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 61547) + { + double percentLength = (Power6RumbleLength); + double percentForce = ((Power6RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 61548) + { + double percentLength = (Power7RumbleLength); + double percentForce = ((Power7RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 61549) + { + double percentLength = (Power8RumbleLength); + double percentForce = ((Power8RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 61550) + { + double percentLength = (Power9RumbleLength); + double percentForce = ((Power9RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 61551) + { + double percentLength = (Power10RumbleLength); + double percentForce = ((Power10RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + } + if (vibration == 1) + { + if (power == 16773366) + { + double percentLength = (Power1RumbleLength); + double percentForce = ((Power1RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 16773367) + { + double percentLength = (Power2RumbleLength); + double percentForce = ((Power2RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 16773368) + { + double percentLength = (Power3RumbleLength); + double percentForce = ((Power3RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 16773369) + { + double percentLength = (Power4RumbleLength); + double percentForce = ((Power4RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 16773370) + { + double percentLength = (Power5RumbleLength); + double percentForce = ((Power5RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 16773371) + { + double percentLength = (Power6RumbleLength); + double percentForce = ((Power6RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 16773372) + { + double percentLength = (Power7RumbleLength); + double percentForce = ((Power7RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 16773373) + { + double percentLength = (Power8RumbleLength); + double percentForce = ((Power8RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 16773374) + { + double percentLength = (Power9RumbleLength); + double percentForce = ((Power9RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (power == 16773375) + { + double percentLength = (Power10RumbleLength); + double percentForce = ((Power10RumbleStrength) / 100.0); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + } + } + return 0; +} void Machstorm::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int DomeFix = GetPrivateProfileInt(TEXT("Settings"), TEXT("DomeFix"), 0, settingsFilename); - int Power1RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power1RumbleStrength"), 0, settingsFilename); - int Power2RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power2RumbleStrength"), 0, settingsFilename); - int Power3RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power3RumbleStrength"), 0, settingsFilename); - int Power4RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power4RumbleStrength"), 0, settingsFilename); - int Power5RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power5RumbleStrength"), 0, settingsFilename); - int Power6RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power6RumbleStrength"), 0, settingsFilename); - int Power7RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power7RumbleStrength"), 0, settingsFilename); - int Power8RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power8RumbleStrength"), 0, settingsFilename); - int Power9RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power9RumbleStrength"), 0, settingsFilename); - int Power10RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power10RumbleStrength"), 0, settingsFilename); - int Power1RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power1RumbleLength"), 0, settingsFilename); - int Power2RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power2RumbleLength"), 0, settingsFilename); - int Power3RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power3RumbleLength"), 0, settingsFilename); - int Power4RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power4RumbleLength"), 0, settingsFilename); - int Power5RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power5RumbleLength"), 0, settingsFilename); - int Power6RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power6RumbleLength"), 0, settingsFilename); - int Power7RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power7RumbleLength"), 0, settingsFilename); - int Power8RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power8RumbleLength"), 0, settingsFilename); - int Power9RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power9RumbleLength"), 0, settingsFilename); - int Power10RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("Power10RumbleLength"), 0, settingsFilename); - int vibration = helpers->ReadInt32(0x6390E9, /* relative */ true); - int power = helpers->ReadInt32(0x639109, /* relative */ true); + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; - if (vibration == 16842753) + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) { - if (power == 61542) - { - double percentLength = (Power1RumbleLength); - double percentForce = ((Power1RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 61543) - { - double percentLength = (Power2RumbleLength); - double percentForce = ((Power2RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 61544) - { - double percentLength = (Power3RumbleLength); - double percentForce = ((Power3RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 61545) - { - double percentLength = (Power4RumbleLength); - double percentForce = ((Power4RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 61546) - { - double percentLength = (Power5RumbleLength); - double percentForce = ((Power5RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 61547) - { - double percentLength = (Power6RumbleLength); - double percentForce = ((Power6RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 61548) - { - double percentLength = (Power7RumbleLength); - double percentForce = ((Power7RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 61549) - { - double percentLength = (Power8RumbleLength); - double percentForce = ((Power8RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 61550) - { - double percentLength = (Power9RumbleLength); - double percentForce = ((Power9RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 61551) - { - double percentLength = (Power10RumbleLength); - double percentForce = ((Power10RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - } - if (vibration == 1) - { - if (power == 16773366) - { - double percentLength = (Power1RumbleLength); - double percentForce = ((Power1RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 16773367) - { - double percentLength = (Power2RumbleLength); - double percentForce = ((Power2RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 16773368) - { - double percentLength = (Power3RumbleLength); - double percentForce = ((Power3RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 16773369) - { - double percentLength = (Power4RumbleLength); - double percentForce = ((Power4RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 16773370) - { - double percentLength = (Power5RumbleLength); - double percentForce = ((Power5RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 16773371) - { - double percentLength = (Power6RumbleLength); - double percentForce = ((Power6RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 16773372) - { - double percentLength = (Power7RumbleLength); - double percentForce = ((Power7RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 16773373) - { - double percentLength = (Power8RumbleLength); - double percentForce = ((Power8RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 16773374) - { - double percentLength = (Power9RumbleLength); - double percentForce = ((Power9RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (power == 16773375) - { - double percentLength = (Power10RumbleLength); - double percentForce = ((Power10RumbleStrength) / 100.0); - triggers->Rumble(percentForce, percentForce, percentLength); - } + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; } } \ No newline at end of file diff --git a/Game Files/Machstorm.h b/Game Files/Machstorm.h index 1971afe..b3e236f 100644 --- a/Game Files/Machstorm.h +++ b/Game Files/Machstorm.h @@ -14,7 +14,6 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #pragma once #include "../Common Files/Game.h" class Machstorm : public Game { - int lastWasStop = 0; public: void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); diff --git a/Game Files/Mame0199.cpp b/Game Files/Mame0199.cpp index 106fd91..ba1a1d0 100644 --- a/Game Files/Mame0199.cpp +++ b/Game Files/Mame0199.cpp @@ -15,6 +15,11 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "Mame0199.h" #include "math.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; static int sanfran(int ffsan) { switch (ffsan) { @@ -1649,1528 +1654,1551 @@ static int raveracer(int ffRaw) { } } -void Mame0199::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers) { - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); - HWND hWnds = FindWindow(NULL, _T("MAME: San Francisco Rush 2049 [sf2049]")); - HWND hWnd = FindWindowA(0, ("MAME: San Francisco Rush: The Rock (boot rom L 1.0, GUTS Oct 6 1997 / MAIN Oct 16 1997) [sfrushrk]")); - HWND hWnd1 = FindWindowA(0, ("MAME: San Francisco Rush (boot rom L 1.0) [sfrush]")); - HWND hWnd2 = FindWindowA(0, ("MAME: San Francisco Rush: The Rock (Wavenet, boot rom L 1.38, GUTS Aug 6 1997 / MAIN Aug 5 1997) [sfrushrkwo]")); - HWND hWnd3 = FindWindowA(0, ("MAME: San Francisco Rush 2049: Special Edition [sf2049se]")); - HWND hWnd4 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV2, World) [raveracw]")); - HWND hWnd5 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV1 Ver.B, Japan) [raveracj]")); - HWND hWnd6 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV1, Japan) [raveracja]")); - HWND hWnd7 = FindWindowA(0, ("MAME: San Francisco Rush (boot rom L 1.06A) [sfrusha]")); - HWND hWnd8 = FindWindowA(0, ("MAME: San Francisco Rush 2049: Tournament Edition [sf2049te]")); - HWND hWnd9 = FindWindowA(0, ("MAME: California Speed (Version 2.1a Apr 17 1998, GUTS 1.25 Apr 17 1998 / MAIN Apr 17 1998) [calspeed]")); - HWND hWnd10 = FindWindowA(0, ("MAME: California Speed (Version 1.0r8 Mar 10 1998, GUTS Mar 10 1998 / MAIN Mar 10 1998) [calspeeda]")); - HWND hWnd11 = FindWindowA(0, ("MAME: California Speed (Version 1.0r7a Mar 4 1998, GUTS Mar 3 1998 / MAIN Jan 19 1998) [calspeedb]")); - HWND hWnd12 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.5) [crusnwld]")); - HWND hWnd13 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.4) [crusnwld24]")); - HWND hWnd14 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.3) [crusnwld23]")); - HWND hWnd15 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.0) [crusnwld20]")); - HWND hWnd16 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.9) [crusnwld19]")); - HWND hWnd17 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.7) [crusnwld17]")); - HWND hWnd18 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.3) [crusnwld13]")); - HWND hWnd19 = FindWindowA(0, ("MAME: Cruis'n USA (rev L4.1) [crusnusa]")); - HWND hWnd20 = FindWindowA(0, ("MAME: Cruis'n USA (rev L4.0) [crusnusa40]")); - HWND hWnd21 = FindWindowA(0, ("MAME: Cruis'n USA (rev L2.1) [crusnusa21]")); - HWND hWnd22 = FindWindowA(0, ("MAME: Off Road Challenge (v1.63) [offroadc]")); - HWND hWnd23 = FindWindowA(0, ("MAME: Off Road Challenge (v1.63) [offroadc]")); - HWND hWnd24 = FindWindowA(0, ("MAME: Off Road Challenge (v1.40) [offroadc4]")); - HWND hWnd25 = FindWindowA(0, ("MAME: Off Road Challenge (v1.30) [offroadc3]")); - HWND hWnd26 = FindWindowA(0, ("MAME: Off Road Challenge (v1.10) [offroadc1]")); - - if (hWnds > NULL) +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) { - INT_PTR ff2049 = helpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); - INT_PTR ff20491 = helpers->ReadIntPtr(ff2049 + 0x10, /* isRelativeOffset*/ false); - INT_PTR ff20492 = helpers->ReadIntPtr(ff20491 + 0x34, /* isRelativeOffset*/ false); - INT_PTR ff20493 = helpers->ReadIntPtr(ff20492 + 0x18, /* isRelativeOffset*/ false); - INT_PTR ff20494 = helpers->ReadIntPtr(ff20493 + 0x54, /* isRelativeOffset*/ false); - UINT8 ff20495 = helpers->ReadByte(ff20494 + 0x4E8, /* isRelativeOffset */ false); //SanFranRush2049 - helpers->log("got value: "); - std::string ffs = std::to_string(ff20495); - helpers->log((char *)ffs.c_str()); + wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); + HWND hWnds = FindWindow(NULL, _T("MAME: San Francisco Rush 2049 [sf2049]")); + HWND hWnd = FindWindowA(0, ("MAME: San Francisco Rush: The Rock (boot rom L 1.0, GUTS Oct 6 1997 / MAIN Oct 16 1997) [sfrushrk]")); + HWND hWnd1 = FindWindowA(0, ("MAME: San Francisco Rush (boot rom L 1.0) [sfrush]")); + HWND hWnd2 = FindWindowA(0, ("MAME: San Francisco Rush: The Rock (Wavenet, boot rom L 1.38, GUTS Aug 6 1997 / MAIN Aug 5 1997) [sfrushrkwo]")); + HWND hWnd3 = FindWindowA(0, ("MAME: San Francisco Rush 2049: Special Edition [sf2049se]")); + HWND hWnd4 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV2, World) [raveracw]")); + HWND hWnd5 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV1 Ver.B, Japan) [raveracj]")); + HWND hWnd6 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV1, Japan) [raveracja]")); + HWND hWnd7 = FindWindowA(0, ("MAME: San Francisco Rush (boot rom L 1.06A) [sfrusha]")); + HWND hWnd8 = FindWindowA(0, ("MAME: San Francisco Rush 2049: Tournament Edition [sf2049te]")); + HWND hWnd9 = FindWindowA(0, ("MAME: California Speed (Version 2.1a Apr 17 1998, GUTS 1.25 Apr 17 1998 / MAIN Apr 17 1998) [calspeed]")); + HWND hWnd10 = FindWindowA(0, ("MAME: California Speed (Version 1.0r8 Mar 10 1998, GUTS Mar 10 1998 / MAIN Mar 10 1998) [calspeeda]")); + HWND hWnd11 = FindWindowA(0, ("MAME: California Speed (Version 1.0r7a Mar 4 1998, GUTS Mar 3 1998 / MAIN Jan 19 1998) [calspeedb]")); + HWND hWnd12 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.5) [crusnwld]")); + HWND hWnd13 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.4) [crusnwld24]")); + HWND hWnd14 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.3) [crusnwld23]")); + HWND hWnd15 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.0) [crusnwld20]")); + HWND hWnd16 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.9) [crusnwld19]")); + HWND hWnd17 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.7) [crusnwld17]")); + HWND hWnd18 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.3) [crusnwld13]")); + HWND hWnd19 = FindWindowA(0, ("MAME: Cruis'n USA (rev L4.1) [crusnusa]")); + HWND hWnd20 = FindWindowA(0, ("MAME: Cruis'n USA (rev L4.0) [crusnusa40]")); + HWND hWnd21 = FindWindowA(0, ("MAME: Cruis'n USA (rev L2.1) [crusnusa21]")); + HWND hWnd22 = FindWindowA(0, ("MAME: Off Road Challenge (v1.63) [offroadc]")); + HWND hWnd23 = FindWindowA(0, ("MAME: Off Road Challenge (v1.63) [offroadc]")); + HWND hWnd24 = FindWindowA(0, ("MAME: Off Road Challenge (v1.40) [offroadc4]")); + HWND hWnd25 = FindWindowA(0, ("MAME: Off Road Challenge (v1.30) [offroadc3]")); + HWND hWnd26 = FindWindowA(0, ("MAME: Off Road Challenge (v1.10) [offroadc1]")); - if (FFBMode == 0) + if (hWnds > NULL) { - if ((ff20495 > 0x80) & (ff20495 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff20495 > 0x00) & (ff20495 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff20495 > 0x80) & (ff20495 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff20495 > 0x00) & (ff20495 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd > NULL) - { - int ffsanfranrush = 0; - { - INT_PTR ff = helpers->ReadIntPtr(0x0096D760, /* isRelativeOffset*/ true); - INT_PTR ff1 = helpers->ReadIntPtr(ff + 0x34C, /* isRelativeOffset*/ false); - INT_PTR ff2 = helpers->ReadIntPtr(ff1 + 0x34, /* isRelativeOffset*/ false); - INT_PTR ff3 = helpers->ReadIntPtr(ff2 + 0x18, /* isRelativeOffset*/ false); - INT_PTR ff4 = helpers->ReadIntPtr(ff3 + 0x1C, /* isRelativeOffset*/ false); - UINT8 ffsan = helpers->ReadByte(ff4 + 0x70C, /* isRelativeOffset */ false); //SanFranRush - std::string ffs = std::to_string(ffsan); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - ffsanfranrush = sanfran(ffsan); + INT_PTR ff2049 = myHelpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); + INT_PTR ff20491 = myHelpers->ReadIntPtr(ff2049 + 0x10, /* isRelativeOffset*/ false); + INT_PTR ff20492 = myHelpers->ReadIntPtr(ff20491 + 0x34, /* isRelativeOffset*/ false); + INT_PTR ff20493 = myHelpers->ReadIntPtr(ff20492 + 0x18, /* isRelativeOffset*/ false); + INT_PTR ff20494 = myHelpers->ReadIntPtr(ff20493 + 0x54, /* isRelativeOffset*/ false); + UINT8 ff20495 = myHelpers->ReadByte(ff20494 + 0x4E8, /* isRelativeOffset */ false); //SanFranRush2049 + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff20495); + myHelpers->log((char*)ffs.c_str()); if (FFBMode == 0) { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) + if ((ff20495 > 0x80)& (ff20495 < 0x100)) { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; + myHelpers->log("moving wheel left"); + double percentForce = (255 - ff20495) / 126.0; double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) + else if ((ff20495 > 0x00)& (ff20495 < 0x80)) { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; + myHelpers->log("moving wheel right"); + double percentForce = (ff20495) / 126.0; double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); } } else - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + if ((ff20495 > 0x80)& (ff20495 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff20495 > 0x00)& (ff20495 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) + } + else if (hWnd > NULL) + { + int ffsanfranrush = 0; { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + INT_PTR ff = myHelpers->ReadIntPtr(0x0096D760, /* isRelativeOffset*/ true); + INT_PTR ff1 = myHelpers->ReadIntPtr(ff + 0x34C, /* isRelativeOffset*/ false); + INT_PTR ff2 = myHelpers->ReadIntPtr(ff1 + 0x34, /* isRelativeOffset*/ false); + INT_PTR ff3 = myHelpers->ReadIntPtr(ff2 + 0x18, /* isRelativeOffset*/ false); + INT_PTR ff4 = myHelpers->ReadIntPtr(ff3 + 0x1C, /* isRelativeOffset*/ false); + UINT8 ffsan = myHelpers->ReadByte(ff4 + 0x70C, /* isRelativeOffset */ false); //SanFranRush + std::string ffs = std::to_string(ffsan); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + ffsanfranrush = sanfran(ffsan); + + if (FFBMode == 0) + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + else if (hWnd1 > NULL) + { + int ffsanfranrush = 0; + { + INT_PTR ff = myHelpers->ReadIntPtr(0x0096D760, /* isRelativeOffset*/ true); + INT_PTR ff1 = myHelpers->ReadIntPtr(ff + 0x34C, /* isRelativeOffset*/ false); + INT_PTR ff2 = myHelpers->ReadIntPtr(ff1 + 0x34, /* isRelativeOffset*/ false); + INT_PTR ff3 = myHelpers->ReadIntPtr(ff2 + 0x18, /* isRelativeOffset*/ false); + INT_PTR ff4 = myHelpers->ReadIntPtr(ff3 + 0x1C, /* isRelativeOffset*/ false); + UINT8 ffsan = myHelpers->ReadByte(ff4 + 0x70C, /* isRelativeOffset */ false); //SanFranRush + std::string ffs = std::to_string(ffsan); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + ffsanfranrush = sanfran(ffsan); + + if (FFBMode == 0) + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + else if (hWnd2 > NULL) + { + int ffsanfranrush = 0; + { + INT_PTR ff = myHelpers->ReadIntPtr(0x0096D760, /* isRelativeOffset*/ true); + INT_PTR ff1 = myHelpers->ReadIntPtr(ff + 0x34C, /* isRelativeOffset*/ false); + INT_PTR ff2 = myHelpers->ReadIntPtr(ff1 + 0x34, /* isRelativeOffset*/ false); + INT_PTR ff3 = myHelpers->ReadIntPtr(ff2 + 0x18, /* isRelativeOffset*/ false); + INT_PTR ff4 = myHelpers->ReadIntPtr(ff3 + 0x1C, /* isRelativeOffset*/ false); + UINT8 ffsan = myHelpers->ReadByte(ff4 + 0x70C, /* isRelativeOffset */ false); //SanFranRush + std::string ffs = std::to_string(ffsan); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + ffsanfranrush = sanfran(ffsan); + + if (FFBMode == 0) + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd3 > NULL) + { + INT_PTR ff2049 = myHelpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); + INT_PTR ff20491 = myHelpers->ReadIntPtr(ff2049 + 0x10, /* isRelativeOffset*/ false); + INT_PTR ff20492 = myHelpers->ReadIntPtr(ff20491 + 0x34, /* isRelativeOffset*/ false); + INT_PTR ff20493 = myHelpers->ReadIntPtr(ff20492 + 0x18, /* isRelativeOffset*/ false); + INT_PTR ff20494 = myHelpers->ReadIntPtr(ff20493 + 0x54, /* isRelativeOffset*/ false); + UINT8 ff20495 = myHelpers->ReadByte(ff20494 + 0x4E8, /* isRelativeOffset */ false); //SanFranRush2049 + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff20495); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ff20495 > 0x80)& (ff20495 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff20495 > 0x00)& (ff20495 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ff20495 > 0x80)& (ff20495 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff20495 > 0x00)& (ff20495 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + else if (hWnd7 > NULL) + { + int ffsanfranrush = 0; + { + INT_PTR ff = myHelpers->ReadIntPtr(0x0096D760, /* isRelativeOffset*/ true); + INT_PTR ff1 = myHelpers->ReadIntPtr(ff + 0x34C, /* isRelativeOffset*/ false); + INT_PTR ff2 = myHelpers->ReadIntPtr(ff1 + 0x34, /* isRelativeOffset*/ false); + INT_PTR ff3 = myHelpers->ReadIntPtr(ff2 + 0x18, /* isRelativeOffset*/ false); + INT_PTR ff4 = myHelpers->ReadIntPtr(ff3 + 0x1C, /* isRelativeOffset*/ false); + UINT8 ffsan = myHelpers->ReadByte(ff4 + 0x70C, /* isRelativeOffset */ false); //SanFranRush + std::string ffs = std::to_string(ffsan); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + ffsanfranrush = sanfran(ffsan); + + if (FFBMode == 0) + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd4 > NULL) + { + int ffrave = 0; + { + INT_PTR ffrave0 = myHelpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); + INT_PTR ffrave1 = myHelpers->ReadIntPtr(ffrave0 + 0x10, /* isRelativeOffset*/ false); + INT_PTR ffrave2 = myHelpers->ReadIntPtr(ffrave1 + 0x90, /* isRelativeOffset*/ false); + INT_PTR ffrave3 = myHelpers->ReadIntPtr(ffrave2 + 0x18, /* isRelativeOffset*/ false); + INT_PTR ffrave4 = myHelpers->ReadIntPtr(ffrave3 + 0x3D8, /* isRelativeOffset*/ false); + UINT8 ffRaw = myHelpers->ReadByte(ffrave4 + 0x42, /* isRelativeOffset */ false); //Rave Racer 32bit + ffrave = raveracer(ffRaw); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffrave); + myHelpers->log((char*)ffs.c_str()); + } + if (FFBMode == 0) + { + if ((ffrave > 61) && (ffrave < 124)) + { + myHelpers->log("moving wheel right"); + double percentForce = (124 - ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ffrave > 0) && (ffrave < 62)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + } + else + { + if ((ffrave > 61) && (ffrave < 124)) + { + myHelpers->log("moving wheel right"); + double percentForce = (124 - ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + else if ((ffrave > 0) && (ffrave < 62)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + } + } + + if (hWnd5 > NULL) + { + int ffrave = 0; + { + INT_PTR ffrave0 = myHelpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); + INT_PTR ffrave1 = myHelpers->ReadIntPtr(ffrave0 + 0x10, /* isRelativeOffset*/ false); + INT_PTR ffrave2 = myHelpers->ReadIntPtr(ffrave1 + 0x90, /* isRelativeOffset*/ false); + INT_PTR ffrave3 = myHelpers->ReadIntPtr(ffrave2 + 0x18, /* isRelativeOffset*/ false); + INT_PTR ffrave4 = myHelpers->ReadIntPtr(ffrave3 + 0x3D8, /* isRelativeOffset*/ false); + UINT8 ffRaw = myHelpers->ReadByte(ffrave4 + 0x42, /* isRelativeOffset */ false); //Rave Racer 32bit + + ffrave = raveracer(ffRaw); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffrave); + myHelpers->log((char*)ffs.c_str()); + } + if (FFBMode == 0) + { + if ((ffrave > 61) && (ffrave < 124)) + { + myHelpers->log("moving wheel right"); + double percentForce = (124 - ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ffrave > 0) && (ffrave < 62)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + } + else + { + if ((ffrave > 61) && (ffrave < 124)) + { + myHelpers->log("moving wheel right"); + double percentForce = (124 - ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + else if ((ffrave > 0) && (ffrave < 62)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd6 > NULL) + { + int ffrave = 0; + { + INT_PTR ffrave0 = myHelpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); + INT_PTR ffrave1 = myHelpers->ReadIntPtr(ffrave0 + 0x10, /* isRelativeOffset*/ false); + INT_PTR ffrave2 = myHelpers->ReadIntPtr(ffrave1 + 0x90, /* isRelativeOffset*/ false); + INT_PTR ffrave3 = myHelpers->ReadIntPtr(ffrave2 + 0x18, /* isRelativeOffset*/ false); + INT_PTR ffrave4 = myHelpers->ReadIntPtr(ffrave3 + 0x3D8, /* isRelativeOffset*/ false); + UINT8 ffRaw = myHelpers->ReadByte(ffrave4 + 0x42, /* isRelativeOffset */ false); //Rave Racer 32bit + + ffrave = raveracer(ffRaw); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffrave); + myHelpers->log((char*)ffs.c_str()); + } + if (FFBMode == 0) + { + if ((ffrave > 61) && (ffrave < 124)) + { + myHelpers->log("moving wheel right"); + double percentForce = (124 - ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ffrave > 0) && (ffrave < 62)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + } + else + { + if ((ffrave > 61) && (ffrave < 124)) + { + myHelpers->log("moving wheel right"); + double percentForce = (124 - ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + else if ((ffrave > 0) && (ffrave < 62)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd8 > NULL) + { + INT_PTR ff2049 = myHelpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); + INT_PTR ff20491 = myHelpers->ReadIntPtr(ff2049 + 0x10, /* isRelativeOffset*/ false); + INT_PTR ff20492 = myHelpers->ReadIntPtr(ff20491 + 0x34, /* isRelativeOffset*/ false); + INT_PTR ff20493 = myHelpers->ReadIntPtr(ff20492 + 0x18, /* isRelativeOffset*/ false); + INT_PTR ff20494 = myHelpers->ReadIntPtr(ff20493 + 0x54, /* isRelativeOffset*/ false); + UINT8 ff20495 = myHelpers->ReadByte(ff20494 + 0x4E8, /* isRelativeOffset */ false); //SanFranRush2049 + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff20495); + myHelpers->log((char*)ffs.c_str()); + if (FFBMode == 0) + { + if ((ff20495 > 0x80)& (ff20495 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff20495 > 0x00)& (ff20495 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ff20495 > 0x80)& (ff20495 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff20495 > 0x00)& (ff20495 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd9 > NULL) + { + INT_PTR ffcal1 = myHelpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); + INT_PTR ffcal2 = myHelpers->ReadIntPtr(ffcal1 + 0x10, /* isRelativeOffset*/ false); + INT_PTR ffcal3 = myHelpers->ReadIntPtr(ffcal2 + 0xE4, /* isRelativeOffset*/ false); + INT_PTR ffcal4 = myHelpers->ReadIntPtr(ffcal3 + 0x4, /* isRelativeOffset*/ false); + INT_PTR ffcal5 = myHelpers->ReadIntPtr(ffcal4 + 0xC, /* isRelativeOffset*/ false); + UINT8 ffcal6 = myHelpers->ReadByte(ffcal5 + 0x1F8, /* isRelativeOffset */ false); //CaliforniaSpeed32bit + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcal6); + myHelpers->log((char*)ffs.c_str()); + if (FFBMode == 0) + { + if ((ffcal6 > 0x80)& (ffcal6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcal6 > 0x00)& (ffcal6 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcal6 > 0x80)& (ffcal6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcal6 > 0x00)& (ffcal6 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd10 > NULL) + { + INT_PTR ffcal1 = myHelpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); + INT_PTR ffcal2 = myHelpers->ReadIntPtr(ffcal1 + 0x10, /* isRelativeOffset*/ false); + INT_PTR ffcal3 = myHelpers->ReadIntPtr(ffcal2 + 0xE4, /* isRelativeOffset*/ false); + INT_PTR ffcal4 = myHelpers->ReadIntPtr(ffcal3 + 0x4, /* isRelativeOffset*/ false); + INT_PTR ffcal5 = myHelpers->ReadIntPtr(ffcal4 + 0xC, /* isRelativeOffset*/ false); + UINT8 ffcal6 = myHelpers->ReadByte(ffcal5 + 0x1F8, /* isRelativeOffset */ false); //CaliforniaSpeed32bit + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcal6); + myHelpers->log((char*)ffs.c_str()); + if (FFBMode == 0) + { + if ((ffcal6 > 0x80)& (ffcal6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcal6 > 0x00)& (ffcal6 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcal6 > 0x80)& (ffcal6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcal6 > 0x00)& (ffcal6 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd11 > NULL) + { + INT_PTR ffcal1 = myHelpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); + INT_PTR ffcal2 = myHelpers->ReadIntPtr(ffcal1 + 0x10, /* isRelativeOffset*/ false); + INT_PTR ffcal3 = myHelpers->ReadIntPtr(ffcal2 + 0xE4, /* isRelativeOffset*/ false); + INT_PTR ffcal4 = myHelpers->ReadIntPtr(ffcal3 + 0x4, /* isRelativeOffset*/ false); + INT_PTR ffcal5 = myHelpers->ReadIntPtr(ffcal4 + 0xC, /* isRelativeOffset*/ false); + UINT8 ffcal6 = myHelpers->ReadByte(ffcal5 + 0x1F8, /* isRelativeOffset */ false); //CaliforniaSpeed32bit + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcal6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcal6 > 0x80)& (ffcal6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcal6 > 0x00)& (ffcal6 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcal6 > 0x80)& (ffcal6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcal6 > 0x00)& (ffcal6 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd12 > NULL) + { + int ffcrusnwld = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); + INT_PTR ffcru4 = myHelpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); + INT_PTR ffcru5 = myHelpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnwld = crusnwld(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd13 > NULL) + { + int ffcrusnwld = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); + INT_PTR ffcru4 = myHelpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); + INT_PTR ffcru5 = myHelpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnwld = crusnwld(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd14 > NULL) + { + int ffcrusnwld = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); + INT_PTR ffcru4 = myHelpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); + INT_PTR ffcru5 = myHelpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnwld = crusnwld(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd15 > NULL) + { + int ffcrusnwld = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); + INT_PTR ffcru4 = myHelpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); + INT_PTR ffcru5 = myHelpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnwld = crusnwld(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd16 > NULL) + { + int ffcrusnwld = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); + INT_PTR ffcru4 = myHelpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); + INT_PTR ffcru5 = myHelpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnwld = crusnwld(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd17 > NULL) + { + int ffcrusnwld = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); + INT_PTR ffcru4 = myHelpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); + INT_PTR ffcru5 = myHelpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnwld = crusnwld(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd18 > NULL) + { + int ffcrusnwld = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); + INT_PTR ffcru4 = myHelpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); + INT_PTR ffcru5 = myHelpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnwld = crusnwld(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd19 > NULL) + { + int ffcrusnusa = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); + INT_PTR ffcru4 = myHelpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); + INT_PTR ffcru5 = myHelpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnusa = crusnusa(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnusa > 104)& (ffcrusnusa < 215)) + { + myHelpers->log("moving wheel left"); + double percentForce = (214 - ffcrusnusa) / 109.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnusa > 0)& (ffcrusnusa < 105)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnusa) / 104.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnusa > 104)& (ffcrusnusa < 215)) + { + myHelpers->log("moving wheel left"); + double percentForce = (214 - ffcrusnusa) / 109.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnusa > 0)& (ffcrusnusa < 105)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnusa) / 104.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd20 > NULL) + { + int ffcrusnusa = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); + INT_PTR ffcru4 = myHelpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); + INT_PTR ffcru5 = myHelpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnusa = crusnusa(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnusa > 104)& (ffcrusnusa < 215)) + { + myHelpers->log("moving wheel left"); + double percentForce = (214 - ffcrusnusa) / 109.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnusa > 0)& (ffcrusnusa < 105)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnusa) / 104.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnusa > 104)& (ffcrusnusa < 215)) + { + myHelpers->log("moving wheel left"); + double percentForce = (214 - ffcrusnusa) / 109.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnusa > 0)& (ffcrusnusa < 105)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnusa) / 104.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd21 > NULL) + { + int ffcrusnusa = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); + INT_PTR ffcru4 = myHelpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); + INT_PTR ffcru5 = myHelpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnusa = crusnusa(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnusa > 104)& (ffcrusnusa < 215)) + { + myHelpers->log("moving wheel left"); + double percentForce = (214 - ffcrusnusa) / 109.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnusa > 0)& (ffcrusnusa < 105)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnusa) / 104.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnusa > 104)& (ffcrusnusa < 215)) + { + myHelpers->log("moving wheel left"); + double percentForce = (214 - ffcrusnusa) / 109.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnusa > 0)& (ffcrusnusa < 105)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnusa) / 104.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd22 > NULL) + { + INT_PTR ffoff1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffoff2 = myHelpers->ReadIntPtr(ffoff1 + 0x60, /* isRelativeOffset*/ false); + INT_PTR ffoff3 = myHelpers->ReadIntPtr(ffoff2 + 0x4, /* isRelativeOffset*/ false); + INT_PTR ffoff4 = myHelpers->ReadIntPtr(ffoff3 + 0x40, /* isRelativeOffset*/ false); + INT_PTR ffoff5 = myHelpers->ReadIntPtr(ffoff4 + 0x0, /* isRelativeOffset*/ false); + UINT8 ffoff6 = myHelpers->ReadByte(ffoff5 + 0x3C, /* isRelativeOffset */ false); //OffRoadChallenge32bit + std::string ffs = std::to_string(ffoff6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd23 > NULL) + { + INT_PTR ffoff1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffoff2 = myHelpers->ReadIntPtr(ffoff1 + 0x60, /* isRelativeOffset*/ false); + INT_PTR ffoff3 = myHelpers->ReadIntPtr(ffoff2 + 0x4, /* isRelativeOffset*/ false); + INT_PTR ffoff4 = myHelpers->ReadIntPtr(ffoff3 + 0x40, /* isRelativeOffset*/ false); + INT_PTR ffoff5 = myHelpers->ReadIntPtr(ffoff4 + 0x0, /* isRelativeOffset*/ false); + UINT8 ffoff6 = myHelpers->ReadByte(ffoff5 + 0x3C, /* isRelativeOffset */ false); //OffRoadChallenge32bit + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffoff6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd24 > NULL) + { + INT_PTR ffoff1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffoff2 = myHelpers->ReadIntPtr(ffoff1 + 0x60, /* isRelativeOffset*/ false); + INT_PTR ffoff3 = myHelpers->ReadIntPtr(ffoff2 + 0x4, /* isRelativeOffset*/ false); + INT_PTR ffoff4 = myHelpers->ReadIntPtr(ffoff3 + 0x40, /* isRelativeOffset*/ false); + INT_PTR ffoff5 = myHelpers->ReadIntPtr(ffoff4 + 0x0, /* isRelativeOffset*/ false); + UINT8 ffoff6 = myHelpers->ReadByte(ffoff5 + 0x3C, /* isRelativeOffset */ false); //OffRoadChallenge32bit + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffoff6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd25 > NULL) + { + INT_PTR ffoff1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffoff2 = myHelpers->ReadIntPtr(ffoff1 + 0x60, /* isRelativeOffset*/ false); + INT_PTR ffoff3 = myHelpers->ReadIntPtr(ffoff2 + 0x4, /* isRelativeOffset*/ false); + INT_PTR ffoff4 = myHelpers->ReadIntPtr(ffoff3 + 0x40, /* isRelativeOffset*/ false); + INT_PTR ffoff5 = myHelpers->ReadIntPtr(ffoff4 + 0x0, /* isRelativeOffset*/ false); + UINT8 ffoff6 = myHelpers->ReadByte(ffoff5 + 0x3C, /* isRelativeOffset */ false); //OffRoadChallenge32bit + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffoff6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd26 > NULL) + { + INT_PTR ffoff1 = myHelpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); + INT_PTR ffoff2 = myHelpers->ReadIntPtr(ffoff1 + 0x60, /* isRelativeOffset*/ false); + INT_PTR ffoff3 = myHelpers->ReadIntPtr(ffoff2 + 0x4, /* isRelativeOffset*/ false); + INT_PTR ffoff4 = myHelpers->ReadIntPtr(ffoff3 + 0x40, /* isRelativeOffset*/ false); + INT_PTR ffoff5 = myHelpers->ReadIntPtr(ffoff4 + 0x0, /* isRelativeOffset*/ false); + UINT8 ffoff6 = myHelpers->ReadByte(ffoff5 + 0x3C, /* isRelativeOffset */ false); //OffRoadChallenge32bit + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffoff6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } } } } + return 0; } - else if (hWnd1 > NULL) - { - int ffsanfranrush = 0; - { - INT_PTR ff = helpers->ReadIntPtr(0x0096D760, /* isRelativeOffset*/ true); - INT_PTR ff1 = helpers->ReadIntPtr(ff + 0x34C, /* isRelativeOffset*/ false); - INT_PTR ff2 = helpers->ReadIntPtr(ff1 + 0x34, /* isRelativeOffset*/ false); - INT_PTR ff3 = helpers->ReadIntPtr(ff2 + 0x18, /* isRelativeOffset*/ false); - INT_PTR ff4 = helpers->ReadIntPtr(ff3 + 0x1C, /* isRelativeOffset*/ false); - UINT8 ffsan = helpers->ReadByte(ff4 + 0x70C, /* isRelativeOffset */ false); //SanFranRush - std::string ffs = std::to_string(ffsan); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - ffsanfranrush = sanfran(ffsan); - if (FFBMode == 0) - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } +void Mame0199::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; } -} - else if (hWnd2 > NULL) - { - int ffsanfranrush = 0; - { - INT_PTR ff = helpers->ReadIntPtr(0x0096D760, /* isRelativeOffset*/ true); - INT_PTR ff1 = helpers->ReadIntPtr(ff + 0x34C, /* isRelativeOffset*/ false); - INT_PTR ff2 = helpers->ReadIntPtr(ff1 + 0x34, /* isRelativeOffset*/ false); - INT_PTR ff3 = helpers->ReadIntPtr(ff2 + 0x18, /* isRelativeOffset*/ false); - INT_PTR ff4 = helpers->ReadIntPtr(ff3 + 0x1C, /* isRelativeOffset*/ false); - UINT8 ffsan = helpers->ReadByte(ff4 + 0x70C, /* isRelativeOffset */ false); //SanFranRush - std::string ffs = std::to_string(ffsan); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - ffsanfranrush = sanfran(ffsan); - - if (FFBMode == 0) - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd3 > NULL) - { - INT_PTR ff2049 = helpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); - INT_PTR ff20491 = helpers->ReadIntPtr(ff2049 + 0x10, /* isRelativeOffset*/ false); - INT_PTR ff20492 = helpers->ReadIntPtr(ff20491 + 0x34, /* isRelativeOffset*/ false); - INT_PTR ff20493 = helpers->ReadIntPtr(ff20492 + 0x18, /* isRelativeOffset*/ false); - INT_PTR ff20494 = helpers->ReadIntPtr(ff20493 + 0x54, /* isRelativeOffset*/ false); - UINT8 ff20495 = helpers->ReadByte(ff20494 + 0x4E8, /* isRelativeOffset */ false); //SanFranRush2049 - helpers->log("got value: "); - std::string ffs = std::to_string(ff20495); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ff20495 > 0x80) & (ff20495 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff20495 > 0x00) & (ff20495 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff20495 > 0x80) & (ff20495 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff20495 > 0x00) & (ff20495 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd7 > NULL) - { - int ffsanfranrush = 0; - { - INT_PTR ff = helpers->ReadIntPtr(0x0096D760, /* isRelativeOffset*/ true); - INT_PTR ff1 = helpers->ReadIntPtr(ff + 0x34C, /* isRelativeOffset*/ false); - INT_PTR ff2 = helpers->ReadIntPtr(ff1 + 0x34, /* isRelativeOffset*/ false); - INT_PTR ff3 = helpers->ReadIntPtr(ff2 + 0x18, /* isRelativeOffset*/ false); - INT_PTR ff4 = helpers->ReadIntPtr(ff3 + 0x1C, /* isRelativeOffset*/ false); - UINT8 ffsan = helpers->ReadByte(ff4 + 0x70C, /* isRelativeOffset */ false); //SanFranRush - std::string ffs = std::to_string(ffsan); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - ffsanfranrush = sanfran(ffsan); - - if (FFBMode == 0) - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } -} - if (hWnd4 > NULL) - { - int ffrave = 0; - { - INT_PTR ffrave0 = helpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); - INT_PTR ffrave1 = helpers->ReadIntPtr(ffrave0 + 0x10, /* isRelativeOffset*/ false); - INT_PTR ffrave2 = helpers->ReadIntPtr(ffrave1 + 0x90, /* isRelativeOffset*/ false); - INT_PTR ffrave3 = helpers->ReadIntPtr(ffrave2 + 0x18, /* isRelativeOffset*/ false); - INT_PTR ffrave4 = helpers->ReadIntPtr(ffrave3 + 0x3D8, /* isRelativeOffset*/ false); - UINT8 ffRaw = helpers->ReadByte(ffrave4 + 0x42, /* isRelativeOffset */ false); //Rave Racer 32bit - ffrave = raveracer(ffRaw); - helpers->log("got value: "); - std::string ffs = std::to_string(ffrave); - helpers->log((char *)ffs.c_str()); - } - if (FFBMode == 0) - { - if ((ffrave > 61) && (ffrave < 124)) - { - helpers->log("moving wheel right"); - double percentForce = (124 - ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - else if ((ffrave > 0) && (ffrave < 62)) - { - helpers->log("moving wheel left"); - double percentForce = (ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - } - else - { - if ((ffrave > 61) && (ffrave < 124)) - { - helpers->log("moving wheel right"); - double percentForce = (124 - ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - else if ((ffrave > 0) && (ffrave < 62)) - { - helpers->log("moving wheel left"); - double percentForce = (ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - } - } - - if (hWnd5 > NULL) - { - int ffrave = 0; - { - INT_PTR ffrave0 = helpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); - INT_PTR ffrave1 = helpers->ReadIntPtr(ffrave0 + 0x10, /* isRelativeOffset*/ false); - INT_PTR ffrave2 = helpers->ReadIntPtr(ffrave1 + 0x90, /* isRelativeOffset*/ false); - INT_PTR ffrave3 = helpers->ReadIntPtr(ffrave2 + 0x18, /* isRelativeOffset*/ false); - INT_PTR ffrave4 = helpers->ReadIntPtr(ffrave3 + 0x3D8, /* isRelativeOffset*/ false); - UINT8 ffRaw = helpers->ReadByte(ffrave4 + 0x42, /* isRelativeOffset */ false); //Rave Racer 32bit - - ffrave = raveracer(ffRaw); - helpers->log("got value: "); - std::string ffs = std::to_string(ffrave); - helpers->log((char *)ffs.c_str()); - } - if (FFBMode == 0) - { - if ((ffrave > 61) && (ffrave < 124)) - { - helpers->log("moving wheel right"); - double percentForce = (124 - ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - else if ((ffrave > 0) && (ffrave < 62)) - { - helpers->log("moving wheel left"); - double percentForce = (ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - } - else - { - if ((ffrave > 61) && (ffrave < 124)) - { - helpers->log("moving wheel right"); - double percentForce = (124 - ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - else if ((ffrave > 0) && (ffrave < 62)) - { - helpers->log("moving wheel left"); - double percentForce = (ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd6 > NULL) - { - int ffrave = 0; - { - INT_PTR ffrave0 = helpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); - INT_PTR ffrave1 = helpers->ReadIntPtr(ffrave0 + 0x10, /* isRelativeOffset*/ false); - INT_PTR ffrave2 = helpers->ReadIntPtr(ffrave1 + 0x90, /* isRelativeOffset*/ false); - INT_PTR ffrave3 = helpers->ReadIntPtr(ffrave2 + 0x18, /* isRelativeOffset*/ false); - INT_PTR ffrave4 = helpers->ReadIntPtr(ffrave3 + 0x3D8, /* isRelativeOffset*/ false); - UINT8 ffRaw = helpers->ReadByte(ffrave4 + 0x42, /* isRelativeOffset */ false); //Rave Racer 32bit - - ffrave = raveracer(ffRaw); - helpers->log("got value: "); - std::string ffs = std::to_string(ffrave); - helpers->log((char *)ffs.c_str()); - } - if (FFBMode == 0) - { - if ((ffrave > 61) && (ffrave < 124)) - { - helpers->log("moving wheel right"); - double percentForce = (124 - ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - else if ((ffrave > 0) && (ffrave < 62)) - { - helpers->log("moving wheel left"); - double percentForce = (ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - } - else - { - if ((ffrave > 61) && (ffrave < 124)) - { - helpers->log("moving wheel right"); - double percentForce = (124 - ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - else if ((ffrave > 0) && (ffrave < 62)) - { - helpers->log("moving wheel left"); - double percentForce = (ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd8 > NULL) - { - INT_PTR ff2049 = helpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); - INT_PTR ff20491 = helpers->ReadIntPtr(ff2049 + 0x10, /* isRelativeOffset*/ false); - INT_PTR ff20492 = helpers->ReadIntPtr(ff20491 + 0x34, /* isRelativeOffset*/ false); - INT_PTR ff20493 = helpers->ReadIntPtr(ff20492 + 0x18, /* isRelativeOffset*/ false); - INT_PTR ff20494 = helpers->ReadIntPtr(ff20493 + 0x54, /* isRelativeOffset*/ false); - UINT8 ff20495 = helpers->ReadByte(ff20494 + 0x4E8, /* isRelativeOffset */ false); //SanFranRush2049 - helpers->log("got value: "); - std::string ffs = std::to_string(ff20495); - helpers->log((char *)ffs.c_str()); - if (FFBMode == 0) - { - if ((ff20495 > 0x80) & (ff20495 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff20495 > 0x00) & (ff20495 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff20495 > 0x80) & (ff20495 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff20495 > 0x00) & (ff20495 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd9 > NULL) - { - INT_PTR ffcal1 = helpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); - INT_PTR ffcal2 = helpers->ReadIntPtr(ffcal1 + 0x10, /* isRelativeOffset*/ false); - INT_PTR ffcal3 = helpers->ReadIntPtr(ffcal2 + 0xE4, /* isRelativeOffset*/ false); - INT_PTR ffcal4 = helpers->ReadIntPtr(ffcal3 + 0x4, /* isRelativeOffset*/ false); - INT_PTR ffcal5 = helpers->ReadIntPtr(ffcal4 + 0xC, /* isRelativeOffset*/ false); - UINT8 ffcal6 = helpers->ReadByte(ffcal5 + 0x1F8, /* isRelativeOffset */ false); //CaliforniaSpeed32bit - helpers->log("got value: "); - std::string ffs = std::to_string(ffcal6); - helpers->log((char *)ffs.c_str()); - if (FFBMode == 0) - { - if ((ffcal6 > 0x80) & (ffcal6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcal6 > 0x00) & (ffcal6 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcal6 > 0x80) & (ffcal6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcal6 > 0x00) & (ffcal6 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd10 > NULL) - { - INT_PTR ffcal1 = helpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); - INT_PTR ffcal2 = helpers->ReadIntPtr(ffcal1 + 0x10, /* isRelativeOffset*/ false); - INT_PTR ffcal3 = helpers->ReadIntPtr(ffcal2 + 0xE4, /* isRelativeOffset*/ false); - INT_PTR ffcal4 = helpers->ReadIntPtr(ffcal3 + 0x4, /* isRelativeOffset*/ false); - INT_PTR ffcal5 = helpers->ReadIntPtr(ffcal4 + 0xC, /* isRelativeOffset*/ false); - UINT8 ffcal6 = helpers->ReadByte(ffcal5 + 0x1F8, /* isRelativeOffset */ false); //CaliforniaSpeed32bit - helpers->log("got value: "); - std::string ffs = std::to_string(ffcal6); - helpers->log((char *)ffs.c_str()); - if (FFBMode == 0) - { - if ((ffcal6 > 0x80) & (ffcal6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcal6 > 0x00) & (ffcal6 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcal6 > 0x80) & (ffcal6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcal6 > 0x00) & (ffcal6 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd11 > NULL) - { - INT_PTR ffcal1 = helpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); - INT_PTR ffcal2 = helpers->ReadIntPtr(ffcal1 + 0x10, /* isRelativeOffset*/ false); - INT_PTR ffcal3 = helpers->ReadIntPtr(ffcal2 + 0xE4, /* isRelativeOffset*/ false); - INT_PTR ffcal4 = helpers->ReadIntPtr(ffcal3 + 0x4, /* isRelativeOffset*/ false); - INT_PTR ffcal5 = helpers->ReadIntPtr(ffcal4 + 0xC, /* isRelativeOffset*/ false); - UINT8 ffcal6 = helpers->ReadByte(ffcal5 + 0x1F8, /* isRelativeOffset */ false); //CaliforniaSpeed32bit - helpers->log("got value: "); - std::string ffs = std::to_string(ffcal6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcal6 > 0x80) & (ffcal6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcal6 > 0x00) & (ffcal6 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcal6 > 0x80) & (ffcal6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcal6 > 0x00) & (ffcal6 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd12 > NULL) - { - int ffcrusnwld = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); - INT_PTR ffcru4 = helpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); - INT_PTR ffcru5 = helpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnwld = crusnwld(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd13 > NULL) - { - int ffcrusnwld = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); - INT_PTR ffcru4 = helpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); - INT_PTR ffcru5 = helpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnwld = crusnwld(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd14 > NULL) - { - int ffcrusnwld = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); - INT_PTR ffcru4 = helpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); - INT_PTR ffcru5 = helpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnwld = crusnwld(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd15 > NULL) - { - int ffcrusnwld = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); - INT_PTR ffcru4 = helpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); - INT_PTR ffcru5 = helpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnwld = crusnwld(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd16 > NULL) - { - int ffcrusnwld = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); - INT_PTR ffcru4 = helpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); - INT_PTR ffcru5 = helpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnwld = crusnwld(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd17 > NULL) - { - int ffcrusnwld = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); - INT_PTR ffcru4 = helpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); - INT_PTR ffcru5 = helpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnwld = crusnwld(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd18 > NULL) - { - int ffcrusnwld = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); - INT_PTR ffcru4 = helpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); - INT_PTR ffcru5 = helpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnwld = crusnwld(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd19 > NULL) - { - int ffcrusnusa = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); - INT_PTR ffcru4 = helpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); - INT_PTR ffcru5 = helpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnusa = crusnusa(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnusa > 104) & (ffcrusnusa < 215)) - { - helpers->log("moving wheel left"); - double percentForce = (214 - ffcrusnusa) / 109.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnusa > 0) & (ffcrusnusa < 105)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnusa) / 104.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnusa > 104) & (ffcrusnusa < 215)) - { - helpers->log("moving wheel left"); - double percentForce = (214 - ffcrusnusa) / 109.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnusa > 0) & (ffcrusnusa < 105)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnusa) / 104.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd20 > NULL) - { - int ffcrusnusa = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); - INT_PTR ffcru4 = helpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); - INT_PTR ffcru5 = helpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnusa = crusnusa(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnusa > 104) & (ffcrusnusa < 215)) - { - helpers->log("moving wheel left"); - double percentForce = (214 - ffcrusnusa) / 109.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnusa > 0) & (ffcrusnusa < 105)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnusa) / 104.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnusa > 104) & (ffcrusnusa < 215)) - { - helpers->log("moving wheel left"); - double percentForce = (214 - ffcrusnusa) / 109.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnusa > 0) & (ffcrusnusa < 105)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnusa) / 104.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd21 > NULL) - { - int ffcrusnusa = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x134, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x2E8, /* isRelativeOffset*/ false); - INT_PTR ffcru4 = helpers->ReadIntPtr(ffcru3 + 0x0, /* isRelativeOffset*/ false); - INT_PTR ffcru5 = helpers->ReadIntPtr(ffcru4 + 0x20, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru5 + 0x5A0, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnusa = crusnusa(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnusa > 104) & (ffcrusnusa < 215)) - { - helpers->log("moving wheel left"); - double percentForce = (214 - ffcrusnusa) / 109.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnusa > 0) & (ffcrusnusa < 105)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnusa) / 104.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnusa > 104) & (ffcrusnusa < 215)) - { - helpers->log("moving wheel left"); - double percentForce = (214 - ffcrusnusa) / 109.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnusa > 0) & (ffcrusnusa < 105)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnusa) / 104.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd22 > NULL) - { - INT_PTR ffoff1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffoff2 = helpers->ReadIntPtr(ffoff1 + 0x60, /* isRelativeOffset*/ false); - INT_PTR ffoff3 = helpers->ReadIntPtr(ffoff2 + 0x4, /* isRelativeOffset*/ false); - INT_PTR ffoff4 = helpers->ReadIntPtr(ffoff3 + 0x40, /* isRelativeOffset*/ false); - INT_PTR ffoff5 = helpers->ReadIntPtr(ffoff4 + 0x0, /* isRelativeOffset*/ false); - UINT8 ffoff6 = helpers->ReadByte(ffoff5 + 0x3C, /* isRelativeOffset */ false); //OffRoadChallenge32bit - std::string ffs = std::to_string(ffoff6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd23 > NULL) - { - INT_PTR ffoff1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffoff2 = helpers->ReadIntPtr(ffoff1 + 0x60, /* isRelativeOffset*/ false); - INT_PTR ffoff3 = helpers->ReadIntPtr(ffoff2 + 0x4, /* isRelativeOffset*/ false); - INT_PTR ffoff4 = helpers->ReadIntPtr(ffoff3 + 0x40, /* isRelativeOffset*/ false); - INT_PTR ffoff5 = helpers->ReadIntPtr(ffoff4 + 0x0, /* isRelativeOffset*/ false); - UINT8 ffoff6 = helpers->ReadByte(ffoff5 + 0x3C, /* isRelativeOffset */ false); //OffRoadChallenge32bit - helpers->log("got value: "); - std::string ffs = std::to_string(ffoff6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd24 > NULL) - { - INT_PTR ffoff1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffoff2 = helpers->ReadIntPtr(ffoff1 + 0x60, /* isRelativeOffset*/ false); - INT_PTR ffoff3 = helpers->ReadIntPtr(ffoff2 + 0x4, /* isRelativeOffset*/ false); - INT_PTR ffoff4 = helpers->ReadIntPtr(ffoff3 + 0x40, /* isRelativeOffset*/ false); - INT_PTR ffoff5 = helpers->ReadIntPtr(ffoff4 + 0x0, /* isRelativeOffset*/ false); - UINT8 ffoff6 = helpers->ReadByte(ffoff5 + 0x3C, /* isRelativeOffset */ false); //OffRoadChallenge32bit - helpers->log("got value: "); - std::string ffs = std::to_string(ffoff6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd25 > NULL) - { - INT_PTR ffoff1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffoff2 = helpers->ReadIntPtr(ffoff1 + 0x60, /* isRelativeOffset*/ false); - INT_PTR ffoff3 = helpers->ReadIntPtr(ffoff2 + 0x4, /* isRelativeOffset*/ false); - INT_PTR ffoff4 = helpers->ReadIntPtr(ffoff3 + 0x40, /* isRelativeOffset*/ false); - INT_PTR ffoff5 = helpers->ReadIntPtr(ffoff4 + 0x0, /* isRelativeOffset*/ false); - UINT8 ffoff6 = helpers->ReadByte(ffoff5 + 0x3C, /* isRelativeOffset */ false); //OffRoadChallenge32bit - helpers->log("got value: "); - std::string ffs = std::to_string(ffoff6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd26 > NULL) - { - INT_PTR ffoff1 = helpers->ReadIntPtr(0x0C61E0A4, /* isRelativeOffset*/ true); - INT_PTR ffoff2 = helpers->ReadIntPtr(ffoff1 + 0x60, /* isRelativeOffset*/ false); - INT_PTR ffoff3 = helpers->ReadIntPtr(ffoff2 + 0x4, /* isRelativeOffset*/ false); - INT_PTR ffoff4 = helpers->ReadIntPtr(ffoff3 + 0x40, /* isRelativeOffset*/ false); - INT_PTR ffoff5 = helpers->ReadIntPtr(ffoff4 + 0x0, /* isRelativeOffset*/ false); - UINT8 ffoff6 = helpers->ReadByte(ffoff5 + 0x3C, /* isRelativeOffset */ false); //OffRoadChallenge32bit - helpers->log("got value: "); - std::string ffs = std::to_string(ffoff6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } \ No newline at end of file +} \ No newline at end of file diff --git a/Game Files/Mame0206.cpp b/Game Files/Mame0206.cpp index 2d48727..b02e3d1 100644 --- a/Game Files/Mame0206.cpp +++ b/Game Files/Mame0206.cpp @@ -15,6 +15,11 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "Mame0206.h" #include "math.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; static int sanfran(int ffsan) { switch (ffsan) { @@ -1649,1481 +1654,1504 @@ static int raveracer(int ffRaw) { } } +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); + HWND hWnds = FindWindow(NULL, _T("MAME: San Francisco Rush 2049 [sf2049]")); + HWND hWnd = FindWindowA(0, ("MAME: San Francisco Rush: The Rock (boot rom L 1.0, GUTS Oct 6 1997 / MAIN Oct 16 1997) [sfrushrk]")); + HWND hWnd1 = FindWindowA(0, ("MAME: San Francisco Rush (boot rom L 1.0) [sfrush]")); + HWND hWnd2 = FindWindowA(0, ("MAME: San Francisco Rush: The Rock (Wavenet, boot rom L 1.38, GUTS Aug 6 1997 / MAIN Aug 5 1997) [sfrushrkwo]")); + HWND hWnd3 = FindWindowA(0, ("MAME: San Francisco Rush 2049: Special Edition [sf2049se]")); + HWND hWnd4 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV2, World) [raveracw]")); + HWND hWnd5 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV1 Ver.B, Japan) [raveracj]")); + HWND hWnd6 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV1, Japan) [raveracja]")); + HWND hWnd7 = FindWindowA(0, ("MAME: San Francisco Rush (boot rom L 1.06A) [sfrusha]")); + HWND hWnd8 = FindWindowA(0, ("MAME: San Francisco Rush 2049: Tournament Edition [sf2049te]")); + HWND hWnd9 = FindWindowA(0, ("MAME: California Speed (Version 2.1a Apr 17 1998, GUTS 1.25 Apr 17 1998 / MAIN Apr 17 1998) [calspeed]")); + HWND hWnd10 = FindWindowA(0, ("MAME: California Speed (Version 1.0r8 Mar 10 1998, GUTS Mar 10 1998 / MAIN Mar 10 1998) [calspeeda]")); + HWND hWnd11 = FindWindowA(0, ("MAME: California Speed (Version 1.0r7a Mar 4 1998, GUTS Mar 3 1998 / MAIN Jan 19 1998) [calspeedb]")); + HWND hWnd12 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.5) [crusnwld]")); + HWND hWnd13 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.4) [crusnwld24]")); + HWND hWnd14 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.3) [crusnwld23]")); + HWND hWnd15 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.0) [crusnwld20]")); + HWND hWnd16 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.9) [crusnwld19]")); + HWND hWnd17 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.7) [crusnwld17]")); + HWND hWnd18 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.3) [crusnwld13]")); + HWND hWnd19 = FindWindowA(0, ("MAME: Cruis'n USA (rev L4.1) [crusnusa]")); + HWND hWnd20 = FindWindowA(0, ("MAME: Cruis'n USA (rev L4.0) [crusnusa40]")); + HWND hWnd21 = FindWindowA(0, ("MAME: Cruis'n USA (rev L2.1) [crusnusa21]")); + HWND hWnd22 = FindWindowA(0, ("MAME: Off Road Challenge (v1.63) [offroadc]")); + HWND hWnd23 = FindWindowA(0, ("MAME: Off Road Challenge (v1.63) [offroadc]")); + HWND hWnd24 = FindWindowA(0, ("MAME: Off Road Challenge (v1.40) [offroadc4]")); + HWND hWnd25 = FindWindowA(0, ("MAME: Off Road Challenge (v1.30) [offroadc3]")); + HWND hWnd26 = FindWindowA(0, ("MAME: Off Road Challenge (v1.10) [offroadc1]")); + + if (hWnds > NULL) + { + INT_PTR ff2049 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ff20491 = myHelpers->ReadIntPtr(ff2049 + 0x388, /* isRelativeOffset*/ false); + INT_PTR ff20492 = myHelpers->ReadIntPtr(ff20491 + 0x6C4, /* isRelativeOffset*/ false); + UINT8 ff20495 = myHelpers->ReadByte(ff20492 + 0x7C, /* isRelativeOffset */ false); //SanFranRush2049 + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff20495); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ff20495 > 0x80)& (ff20495 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff20495 > 0x00)& (ff20495 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ff20495 > 0x80)& (ff20495 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff20495 > 0x00)& (ff20495 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + else if (hWnd > NULL) + { + int ffsanfranrush = 0; + { + INT_PTR ff = myHelpers->ReadIntPtr(0x0E2B20A4, /* isRelativeOffset*/ true); + INT_PTR ff1 = myHelpers->ReadIntPtr(ff + 0x134, /* isRelativeOffset*/ false); + INT_PTR ff2 = myHelpers->ReadIntPtr(ff1 + 0x5E8, /* isRelativeOffset*/ false); + INT_PTR ff3 = myHelpers->ReadIntPtr(ff2 + 0x42C, /* isRelativeOffset*/ false); + UINT8 ffsan = myHelpers->ReadByte(ff3 + 0x550, /* isRelativeOffset */ false); //SanFranRush + std::string ffs = std::to_string(ffsan); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + ffsanfranrush = sanfran(ffsan); + + if (FFBMode == 0) + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + else if (hWnd1 > NULL) + { + int ffsanfranrush = 0; + { + INT_PTR ff = myHelpers->ReadIntPtr(0x0E2B20A4, /* isRelativeOffset*/ true); + INT_PTR ff1 = myHelpers->ReadIntPtr(ff + 0x134, /* isRelativeOffset*/ false); + INT_PTR ff2 = myHelpers->ReadIntPtr(ff1 + 0x5E8, /* isRelativeOffset*/ false); + INT_PTR ff3 = myHelpers->ReadIntPtr(ff2 + 0x42C, /* isRelativeOffset*/ false); + UINT8 ffsan = myHelpers->ReadByte(ff3 + 0x550, /* isRelativeOffset */ false); //SanFranRush + std::string ffs = std::to_string(ffsan); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + ffsanfranrush = sanfran(ffsan); + + if (FFBMode == 0) + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + else if (hWnd2 > NULL) + { + int ffsanfranrush = 0; + { + INT_PTR ff = myHelpers->ReadIntPtr(0x0E2B20A4, /* isRelativeOffset*/ true); + INT_PTR ff1 = myHelpers->ReadIntPtr(ff + 0x134, /* isRelativeOffset*/ false); + INT_PTR ff2 = myHelpers->ReadIntPtr(ff1 + 0x5E8, /* isRelativeOffset*/ false); + INT_PTR ff3 = myHelpers->ReadIntPtr(ff2 + 0x42C, /* isRelativeOffset*/ false); + UINT8 ffsan = myHelpers->ReadByte(ff3 + 0x550, /* isRelativeOffset */ false); //SanFranRush + std::string ffs = std::to_string(ffsan); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + ffsanfranrush = sanfran(ffsan); + + if (FFBMode == 0) + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd3 > NULL) + { + INT_PTR ff2049 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ff20491 = myHelpers->ReadIntPtr(ff2049 + 0x388, /* isRelativeOffset*/ false); + INT_PTR ff20492 = myHelpers->ReadIntPtr(ff20491 + 0x6C4, /* isRelativeOffset*/ false); + UINT8 ff20495 = myHelpers->ReadByte(ff20492 + 0x7C, /* isRelativeOffset */ false); //SanFranRush2049 + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff20495); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ff20495 > 0x80)& (ff20495 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff20495 > 0x00)& (ff20495 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ff20495 > 0x80)& (ff20495 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff20495 > 0x00)& (ff20495 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + else if (hWnd7 > NULL) + { + int ffsanfranrush = 0; + { + INT_PTR ff = myHelpers->ReadIntPtr(0x0E2B20A4, /* isRelativeOffset*/ true); + INT_PTR ff1 = myHelpers->ReadIntPtr(ff + 0x134, /* isRelativeOffset*/ false); + INT_PTR ff2 = myHelpers->ReadIntPtr(ff1 + 0x5E8, /* isRelativeOffset*/ false); + INT_PTR ff3 = myHelpers->ReadIntPtr(ff2 + 0x42C, /* isRelativeOffset*/ false); + UINT8 ffsan = myHelpers->ReadByte(ff3 + 0x550, /* isRelativeOffset */ false); //SanFranRush + std::string ffs = std::to_string(ffsan); + myHelpers->log((char*)ffs.c_str()); + myHelpers->log("got value: "); + ffsanfranrush = sanfran(ffsan); + + if (FFBMode == 0) + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) + { + myHelpers->log("moving wheel left"); + double percentForce = (233 - ffsanfranrush) / 119.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffsanfranrush) / 112.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd4 > NULL) + { + int ffrave = 0; + { + INT_PTR ffrave0 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffrave1 = myHelpers->ReadIntPtr(ffrave0 + 0x388, /* isRelativeOffset*/ false); + INT_PTR ffrave2 = myHelpers->ReadIntPtr(ffrave1 + 0x1A0, /* isRelativeOffset*/ false); + INT_PTR ffrave3 = myHelpers->ReadIntPtr(ffrave2 + 0x358, /* isRelativeOffset*/ false); + UINT8 ffRaw = myHelpers->ReadByte(ffrave3 + 0x40, /* isRelativeOffset */ false); //Rave Racer 32bit + ffrave = raveracer(ffRaw); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffrave); + myHelpers->log((char*)ffs.c_str()); + } + if (FFBMode == 0) + { + if ((ffrave > 61) && (ffrave < 124)) + { + myHelpers->log("moving wheel right"); + double percentForce = (124 - ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ffrave > 0) && (ffrave < 62)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + } + else + { + if ((ffrave > 61) && (ffrave < 124)) + { + myHelpers->log("moving wheel right"); + double percentForce = (124 - ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + else if ((ffrave > 0) && (ffrave < 62)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + } + } + + if (hWnd5 > NULL) + { + int ffrave = 0; + { + INT_PTR ffrave0 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffrave1 = myHelpers->ReadIntPtr(ffrave0 + 0x388, /* isRelativeOffset*/ false); + INT_PTR ffrave2 = myHelpers->ReadIntPtr(ffrave1 + 0x1A0, /* isRelativeOffset*/ false); + INT_PTR ffrave3 = myHelpers->ReadIntPtr(ffrave2 + 0x358, /* isRelativeOffset*/ false); + UINT8 ffRaw = myHelpers->ReadByte(ffrave3 + 0x40, /* isRelativeOffset */ false); //Rave Racer 32bit + + ffrave = raveracer(ffRaw); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffrave); + myHelpers->log((char*)ffs.c_str()); + } + if (FFBMode == 0) + { + if ((ffrave > 61) && (ffrave < 124)) + { + myHelpers->log("moving wheel right"); + double percentForce = (124 - ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ffrave > 0) && (ffrave < 62)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + } + else + { + if ((ffrave > 61) && (ffrave < 124)) + { + myHelpers->log("moving wheel right"); + double percentForce = (124 - ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + else if ((ffrave > 0) && (ffrave < 62)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd6 > NULL) + { + int ffrave = 0; + { + INT_PTR ffrave0 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffrave1 = myHelpers->ReadIntPtr(ffrave0 + 0x388, /* isRelativeOffset*/ false); + INT_PTR ffrave2 = myHelpers->ReadIntPtr(ffrave1 + 0x1A0, /* isRelativeOffset*/ false); + INT_PTR ffrave3 = myHelpers->ReadIntPtr(ffrave2 + 0x358, /* isRelativeOffset*/ false); + UINT8 ffRaw = myHelpers->ReadByte(ffrave3 + 0x40, /* isRelativeOffset */ false); //Rave Racer 32bit + + ffrave = raveracer(ffRaw); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffrave); + myHelpers->log((char*)ffs.c_str()); + } + if (FFBMode == 0) + { + if ((ffrave > 61) && (ffrave < 124)) + { + myHelpers->log("moving wheel right"); + double percentForce = (124 - ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ffrave > 0) && (ffrave < 62)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + } + else + { + if ((ffrave > 61) && (ffrave < 124)) + { + myHelpers->log("moving wheel right"); + double percentForce = (124 - ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + else if ((ffrave > 0) && (ffrave < 62)) + { + myHelpers->log("moving wheel left"); + double percentForce = (ffrave) / 61.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd8 > NULL) + { + INT_PTR ff2049 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ff20491 = myHelpers->ReadIntPtr(ff2049 + 0x388, /* isRelativeOffset*/ false); + INT_PTR ff20492 = myHelpers->ReadIntPtr(ff20491 + 0x6C4, /* isRelativeOffset*/ false); + UINT8 ff20495 = myHelpers->ReadByte(ff20492 + 0x7C, /* isRelativeOffset */ false); //SanFranRush2049 + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff20495); + myHelpers->log((char*)ffs.c_str()); + if (FFBMode == 0) + { + if ((ff20495 > 0x80)& (ff20495 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff20495 > 0x00)& (ff20495 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ff20495 > 0x80)& (ff20495 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff20495 > 0x00)& (ff20495 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ff20495) / 126.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd9 > NULL) + { + INT_PTR ffcal1 = myHelpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); + INT_PTR ffcal2 = myHelpers->ReadIntPtr(ffcal1 + 0x10, /* isRelativeOffset*/ false); + INT_PTR ffcal3 = myHelpers->ReadIntPtr(ffcal2 + 0xE4, /* isRelativeOffset*/ false); + INT_PTR ffcal4 = myHelpers->ReadIntPtr(ffcal3 + 0x4, /* isRelativeOffset*/ false); + INT_PTR ffcal5 = myHelpers->ReadIntPtr(ffcal4 + 0xC, /* isRelativeOffset*/ false); + UINT8 ffcal6 = myHelpers->ReadByte(ffcal5 + 0x1F8, /* isRelativeOffset */ false); //CaliforniaSpeed32bit + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcal6); + myHelpers->log((char*)ffs.c_str()); + if (FFBMode == 0) + { + if ((ffcal6 > 0x80)& (ffcal6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcal6 > 0x00)& (ffcal6 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcal6 > 0x80)& (ffcal6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcal6 > 0x00)& (ffcal6 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd10 > NULL) + { + INT_PTR ffcal1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffcal2 = myHelpers->ReadIntPtr(ffcal1 + 0x388, /* isRelativeOffset*/ false); + INT_PTR ffcal3 = myHelpers->ReadIntPtr(ffcal2 + 0x640, /* isRelativeOffset*/ false); + UINT8 ffcal6 = myHelpers->ReadByte(ffcal3 + 0x104, /* isRelativeOffset */ false); //CaliforniaSpeed32bit + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcal6); + myHelpers->log((char*)ffs.c_str()); + if (FFBMode == 0) + { + if ((ffcal6 > 0x80)& (ffcal6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcal6 > 0x00)& (ffcal6 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcal6 > 0x80)& (ffcal6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcal6 > 0x00)& (ffcal6 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd11 > NULL) + { + INT_PTR ffcal1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffcal2 = myHelpers->ReadIntPtr(ffcal1 + 0x388, /* isRelativeOffset*/ false); + INT_PTR ffcal3 = myHelpers->ReadIntPtr(ffcal2 + 0x640, /* isRelativeOffset*/ false); + UINT8 ffcal6 = myHelpers->ReadByte(ffcal3 + 0x104, /* isRelativeOffset */ false); //CaliforniaSpeed32bit + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcal6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcal6 > 0x80)& (ffcal6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcal6 > 0x00)& (ffcal6 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcal6 > 0x80)& (ffcal6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcal6 > 0x00)& (ffcal6 < 0x80)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcal6) / 126.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd12 > NULL) + { + int ffcrusnwld = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnwld = crusnwld(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd13 > NULL) + { + int ffcrusnwld = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnwld = crusnwld(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd14 > NULL) + { + int ffcrusnwld = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnwld = crusnwld(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd15 > NULL) + { + int ffcrusnwld = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnwld = crusnwld(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd16 > NULL) + { + int ffcrusnwld = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnwld = crusnwld(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd17 > NULL) + { + int ffcrusnwld = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnwld = crusnwld(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd18 > NULL) + { + int ffcrusnwld = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnwld = crusnwld(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) + { + myHelpers->log("moving wheel left"); + double percentForce = (225 - ffcrusnwld) / 114.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnwld) / 110.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd19 > NULL) + { + int ffcrusnusa = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnusa = crusnusa(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnusa > 104)& (ffcrusnusa < 215)) + { + myHelpers->log("moving wheel left"); + double percentForce = (214 - ffcrusnusa) / 109.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnusa > 0)& (ffcrusnusa < 105)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnusa) / 104.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnusa > 104)& (ffcrusnusa < 215)) + { + myHelpers->log("moving wheel left"); + double percentForce = (214 - ffcrusnusa) / 109.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnusa > 0)& (ffcrusnusa < 105)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnusa) / 104.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd20 > NULL) + { + int ffcrusnusa = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnusa = crusnusa(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnusa > 104)& (ffcrusnusa < 215)) + { + myHelpers->log("moving wheel left"); + double percentForce = (214 - ffcrusnusa) / 109.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnusa > 0)& (ffcrusnusa < 105)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnusa) / 104.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnusa > 104)& (ffcrusnusa < 215)) + { + myHelpers->log("moving wheel left"); + double percentForce = (214 - ffcrusnusa) / 109.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnusa > 0)& (ffcrusnusa < 105)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnusa) / 104.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd21 > NULL) + { + int ffcrusnusa = 0; + { + INT_PTR ffcru1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffcru2 = myHelpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffcru3 = myHelpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffcru6 = myHelpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit + ffcrusnusa = crusnusa(ffcru6); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffcru6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffcrusnusa > 104)& (ffcrusnusa < 215)) + { + myHelpers->log("moving wheel left"); + double percentForce = (214 - ffcrusnusa) / 109.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffcrusnusa > 0)& (ffcrusnusa < 105)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnusa) / 104.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffcrusnusa > 104)& (ffcrusnusa < 215)) + { + myHelpers->log("moving wheel left"); + double percentForce = (214 - ffcrusnusa) / 109.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffcrusnusa > 0)& (ffcrusnusa < 105)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffcrusnusa) / 104.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + if (hWnd22 > NULL) + { + INT_PTR ffoff1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffoff2 = myHelpers->ReadIntPtr(ffoff1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffoff3 = myHelpers->ReadIntPtr(ffoff2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffoff6 = myHelpers->ReadByte(ffoff3 + 0x248, /* isRelativeOffset */ false); //OffRoadChallenge32bit + std::string ffs = std::to_string(ffoff6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd23 > NULL) + { + INT_PTR ffoff1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffoff2 = myHelpers->ReadIntPtr(ffoff1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffoff3 = myHelpers->ReadIntPtr(ffoff2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffoff6 = myHelpers->ReadByte(ffoff3 + 0x248, /* isRelativeOffset */ false); //OffRoadChallenge32bit + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffoff6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd24 > NULL) + { + INT_PTR ffoff1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffoff2 = myHelpers->ReadIntPtr(ffoff1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffoff3 = myHelpers->ReadIntPtr(ffoff2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffoff6 = myHelpers->ReadByte(ffoff3 + 0x248, /* isRelativeOffset */ false); //OffRoadChallenge32bit + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffoff6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd25 > NULL) + { + INT_PTR ffoff1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffoff2 = myHelpers->ReadIntPtr(ffoff1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffoff3 = myHelpers->ReadIntPtr(ffoff2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffoff6 = myHelpers->ReadByte(ffoff3 + 0x248, /* isRelativeOffset */ false); //OffRoadChallenge32bit + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffoff6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + if (hWnd26 > NULL) + { + INT_PTR ffoff1 = myHelpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); + INT_PTR ffoff2 = myHelpers->ReadIntPtr(ffoff1 + 0x290, /* isRelativeOffset*/ false); + INT_PTR ffoff3 = myHelpers->ReadIntPtr(ffoff2 + 0x650, /* isRelativeOffset*/ false); + UINT8 ffoff6 = myHelpers->ReadByte(ffoff3 + 0x248, /* isRelativeOffset */ false); //OffRoadChallenge32bit + myHelpers->log("got value: "); + std::string ffs = std::to_string(ffoff6); + myHelpers->log((char*)ffs.c_str()); + + if (FFBMode == 0) + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ffoff6 > 0x83)& (ffoff6 < 0x100)) + { + myHelpers->log("moving wheel left"); + double percentForce = (255 - ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ffoff6 > 0x00)& (ffoff6 < 0x7D)) + { + myHelpers->log("moving wheel right"); + double percentForce = (ffoff6) / 124.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + } + return 0; +} + void Mame0206::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers) { - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); - HWND hWnds = FindWindow(NULL, _T("MAME: San Francisco Rush 2049 [sf2049]")); - HWND hWnd = FindWindowA(0, ("MAME: San Francisco Rush: The Rock (boot rom L 1.0, GUTS Oct 6 1997 / MAIN Oct 16 1997) [sfrushrk]")); - HWND hWnd1 = FindWindowA(0, ("MAME: San Francisco Rush (boot rom L 1.0) [sfrush]")); - HWND hWnd2 = FindWindowA(0, ("MAME: San Francisco Rush: The Rock (Wavenet, boot rom L 1.38, GUTS Aug 6 1997 / MAIN Aug 5 1997) [sfrushrkwo]")); - HWND hWnd3 = FindWindowA(0, ("MAME: San Francisco Rush 2049: Special Edition [sf2049se]")); - HWND hWnd4 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV2, World) [raveracw]")); - HWND hWnd5 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV1 Ver.B, Japan) [raveracj]")); - HWND hWnd6 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV1, Japan) [raveracja]")); - HWND hWnd7 = FindWindowA(0, ("MAME: San Francisco Rush (boot rom L 1.06A) [sfrusha]")); - HWND hWnd8 = FindWindowA(0, ("MAME: San Francisco Rush 2049: Tournament Edition [sf2049te]")); - HWND hWnd9 = FindWindowA(0, ("MAME: California Speed (Version 2.1a Apr 17 1998, GUTS 1.25 Apr 17 1998 / MAIN Apr 17 1998) [calspeed]")); - HWND hWnd10 = FindWindowA(0, ("MAME: California Speed (Version 1.0r8 Mar 10 1998, GUTS Mar 10 1998 / MAIN Mar 10 1998) [calspeeda]")); - HWND hWnd11 = FindWindowA(0, ("MAME: California Speed (Version 1.0r7a Mar 4 1998, GUTS Mar 3 1998 / MAIN Jan 19 1998) [calspeedb]")); - HWND hWnd12 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.5) [crusnwld]")); - HWND hWnd13 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.4) [crusnwld24]")); - HWND hWnd14 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.3) [crusnwld23]")); - HWND hWnd15 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.0) [crusnwld20]")); - HWND hWnd16 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.9) [crusnwld19]")); - HWND hWnd17 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.7) [crusnwld17]")); - HWND hWnd18 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.3) [crusnwld13]")); - HWND hWnd19 = FindWindowA(0, ("MAME: Cruis'n USA (rev L4.1) [crusnusa]")); - HWND hWnd20 = FindWindowA(0, ("MAME: Cruis'n USA (rev L4.0) [crusnusa40]")); - HWND hWnd21 = FindWindowA(0, ("MAME: Cruis'n USA (rev L2.1) [crusnusa21]")); - HWND hWnd22 = FindWindowA(0, ("MAME: Off Road Challenge (v1.63) [offroadc]")); - HWND hWnd23 = FindWindowA(0, ("MAME: Off Road Challenge (v1.63) [offroadc]")); - HWND hWnd24 = FindWindowA(0, ("MAME: Off Road Challenge (v1.40) [offroadc4]")); - HWND hWnd25 = FindWindowA(0, ("MAME: Off Road Challenge (v1.30) [offroadc3]")); - HWND hWnd26 = FindWindowA(0, ("MAME: Off Road Challenge (v1.10) [offroadc1]")); - if (hWnds > NULL) - { - INT_PTR ff2049 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ff20491 = helpers->ReadIntPtr(ff2049 + 0x388, /* isRelativeOffset*/ false); - INT_PTR ff20492 = helpers->ReadIntPtr(ff20491 + 0x6C4, /* isRelativeOffset*/ false); - UINT8 ff20495 = helpers->ReadByte(ff20492 + 0x7C, /* isRelativeOffset */ false); //SanFranRush2049 - helpers->log("got value: "); - std::string ffs = std::to_string(ff20495); - helpers->log((char *)ffs.c_str()); + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; - if (FFBMode == 0) - { - if ((ff20495 > 0x80) & (ff20495 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff20495 > 0x00) & (ff20495 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff20495 > 0x80) & (ff20495 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff20495 > 0x00) & (ff20495 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd > NULL) - { - int ffsanfranrush = 0; - { - INT_PTR ff = helpers->ReadIntPtr(0x0E2B20A4, /* isRelativeOffset*/ true); - INT_PTR ff1 = helpers->ReadIntPtr(ff + 0x134, /* isRelativeOffset*/ false); - INT_PTR ff2 = helpers->ReadIntPtr(ff1 + 0x5E8, /* isRelativeOffset*/ false); - INT_PTR ff3 = helpers->ReadIntPtr(ff2 + 0x42C, /* isRelativeOffset*/ false); - UINT8 ffsan = helpers->ReadByte(ff3 + 0x550, /* isRelativeOffset */ false); //SanFranRush - std::string ffs = std::to_string(ffsan); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - ffsanfranrush = sanfran(ffsan); + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); - if (FFBMode == 0) - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - else if (hWnd1 > NULL) + while (SDL_WaitEvent(&e) != 0) { - int ffsanfranrush = 0; - { - INT_PTR ff = helpers->ReadIntPtr(0x0E2B20A4, /* isRelativeOffset*/ true); - INT_PTR ff1 = helpers->ReadIntPtr(ff + 0x134, /* isRelativeOffset*/ false); - INT_PTR ff2 = helpers->ReadIntPtr(ff1 + 0x5E8, /* isRelativeOffset*/ false); - INT_PTR ff3 = helpers->ReadIntPtr(ff2 + 0x42C, /* isRelativeOffset*/ false); - UINT8 ffsan = helpers->ReadByte(ff3 + 0x550, /* isRelativeOffset */ false); //SanFranRush - std::string ffs = std::to_string(ffsan); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - ffsanfranrush = sanfran(ffsan); - - if (FFBMode == 0) - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - else if (hWnd2 > NULL) - { - int ffsanfranrush = 0; - { - INT_PTR ff = helpers->ReadIntPtr(0x0E2B20A4, /* isRelativeOffset*/ true); - INT_PTR ff1 = helpers->ReadIntPtr(ff + 0x134, /* isRelativeOffset*/ false); - INT_PTR ff2 = helpers->ReadIntPtr(ff1 + 0x5E8, /* isRelativeOffset*/ false); - INT_PTR ff3 = helpers->ReadIntPtr(ff2 + 0x42C, /* isRelativeOffset*/ false); - UINT8 ffsan = helpers->ReadByte(ff3 + 0x550, /* isRelativeOffset */ false); //SanFranRush - std::string ffs = std::to_string(ffsan); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - ffsanfranrush = sanfran(ffsan); - - if (FFBMode == 0) - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd3 > NULL) - { - INT_PTR ff2049 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ff20491 = helpers->ReadIntPtr(ff2049 + 0x388, /* isRelativeOffset*/ false); - INT_PTR ff20492 = helpers->ReadIntPtr(ff20491 + 0x6C4, /* isRelativeOffset*/ false); - UINT8 ff20495 = helpers->ReadByte(ff20492 + 0x7C, /* isRelativeOffset */ false); //SanFranRush2049 - helpers->log("got value: "); - std::string ffs = std::to_string(ff20495); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ff20495 > 0x80) & (ff20495 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff20495 > 0x00) & (ff20495 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff20495 > 0x80) & (ff20495 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff20495 > 0x00) & (ff20495 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - else if (hWnd7 > NULL) - { - int ffsanfranrush = 0; - { - INT_PTR ff = helpers->ReadIntPtr(0x0E2B20A4, /* isRelativeOffset*/ true); - INT_PTR ff1 = helpers->ReadIntPtr(ff + 0x134, /* isRelativeOffset*/ false); - INT_PTR ff2 = helpers->ReadIntPtr(ff1 + 0x5E8, /* isRelativeOffset*/ false); - INT_PTR ff3 = helpers->ReadIntPtr(ff2 + 0x42C, /* isRelativeOffset*/ false); - UINT8 ffsan = helpers->ReadByte(ff3 + 0x550, /* isRelativeOffset */ false); //SanFranRush - std::string ffs = std::to_string(ffsan); - helpers->log((char *)ffs.c_str()); - helpers->log("got value: "); - ffsanfranrush = sanfran(ffsan); - - if (FFBMode == 0) - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffsanfranrush > 112) & (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffsanfranrush > 0) & (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd4 > NULL) - { - int ffrave = 0; - { - INT_PTR ffrave0 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffrave1 = helpers->ReadIntPtr(ffrave0 + 0x388, /* isRelativeOffset*/ false); - INT_PTR ffrave2 = helpers->ReadIntPtr(ffrave1 + 0x1A0, /* isRelativeOffset*/ false); - INT_PTR ffrave3 = helpers->ReadIntPtr(ffrave2 + 0x358, /* isRelativeOffset*/ false); - UINT8 ffRaw = helpers->ReadByte(ffrave3 + 0x40, /* isRelativeOffset */ false); //Rave Racer 32bit - ffrave = raveracer(ffRaw); - helpers->log("got value: "); - std::string ffs = std::to_string(ffrave); - helpers->log((char *)ffs.c_str()); - } - if (FFBMode == 0) - { - if ((ffrave > 61) && (ffrave < 124)) - { - helpers->log("moving wheel right"); - double percentForce = (124 - ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - else if ((ffrave > 0) && (ffrave < 62)) - { - helpers->log("moving wheel left"); - double percentForce = (ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - } - else - { - if ((ffrave > 61) && (ffrave < 124)) - { - helpers->log("moving wheel right"); - double percentForce = (124 - ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - else if ((ffrave > 0) && (ffrave < 62)) - { - helpers->log("moving wheel left"); - double percentForce = (ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - } - } - - if (hWnd5 > NULL) - { - int ffrave = 0; - { - INT_PTR ffrave0 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffrave1 = helpers->ReadIntPtr(ffrave0 + 0x388, /* isRelativeOffset*/ false); - INT_PTR ffrave2 = helpers->ReadIntPtr(ffrave1 + 0x1A0, /* isRelativeOffset*/ false); - INT_PTR ffrave3 = helpers->ReadIntPtr(ffrave2 + 0x358, /* isRelativeOffset*/ false); - UINT8 ffRaw = helpers->ReadByte(ffrave3 + 0x40, /* isRelativeOffset */ false); //Rave Racer 32bit - - ffrave = raveracer(ffRaw); - helpers->log("got value: "); - std::string ffs = std::to_string(ffrave); - helpers->log((char *)ffs.c_str()); - } - if (FFBMode == 0) - { - if ((ffrave > 61) && (ffrave < 124)) - { - helpers->log("moving wheel right"); - double percentForce = (124 - ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - else if ((ffrave > 0) && (ffrave < 62)) - { - helpers->log("moving wheel left"); - double percentForce = (ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - } - else - { - if ((ffrave > 61) && (ffrave < 124)) - { - helpers->log("moving wheel right"); - double percentForce = (124 - ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - else if ((ffrave > 0) && (ffrave < 62)) - { - helpers->log("moving wheel left"); - double percentForce = (ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd6 > NULL) - { - int ffrave = 0; - { - INT_PTR ffrave0 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffrave1 = helpers->ReadIntPtr(ffrave0 + 0x388, /* isRelativeOffset*/ false); - INT_PTR ffrave2 = helpers->ReadIntPtr(ffrave1 + 0x1A0, /* isRelativeOffset*/ false); - INT_PTR ffrave3 = helpers->ReadIntPtr(ffrave2 + 0x358, /* isRelativeOffset*/ false); - UINT8 ffRaw = helpers->ReadByte(ffrave3 + 0x40, /* isRelativeOffset */ false); //Rave Racer 32bit - - ffrave = raveracer(ffRaw); - helpers->log("got value: "); - std::string ffs = std::to_string(ffrave); - helpers->log((char *)ffs.c_str()); - } - if (FFBMode == 0) - { - if ((ffrave > 61) && (ffrave < 124)) - { - helpers->log("moving wheel right"); - double percentForce = (124 - ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - else if ((ffrave > 0) && (ffrave < 62)) - { - helpers->log("moving wheel left"); - double percentForce = (ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - } - else - { - if ((ffrave > 61) && (ffrave < 124)) - { - helpers->log("moving wheel right"); - double percentForce = (124 - ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - else if ((ffrave > 0) && (ffrave < 62)) - { - helpers->log("moving wheel left"); - double percentForce = (ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd8 > NULL) - { - INT_PTR ff2049 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ff20491 = helpers->ReadIntPtr(ff2049 + 0x388, /* isRelativeOffset*/ false); - INT_PTR ff20492 = helpers->ReadIntPtr(ff20491 + 0x6C4, /* isRelativeOffset*/ false); - UINT8 ff20495 = helpers->ReadByte(ff20492 + 0x7C, /* isRelativeOffset */ false); //SanFranRush2049 - helpers->log("got value: "); - std::string ffs = std::to_string(ff20495); - helpers->log((char *)ffs.c_str()); - if (FFBMode == 0) - { - if ((ff20495 > 0x80) & (ff20495 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff20495 > 0x00) & (ff20495 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff20495 > 0x80) & (ff20495 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff20495 > 0x00) & (ff20495 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ff20495) / 126.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd9 > NULL) - { - INT_PTR ffcal1 = helpers->ReadIntPtr(0x078D624C, /* isRelativeOffset*/ true); - INT_PTR ffcal2 = helpers->ReadIntPtr(ffcal1 + 0x10, /* isRelativeOffset*/ false); - INT_PTR ffcal3 = helpers->ReadIntPtr(ffcal2 + 0xE4, /* isRelativeOffset*/ false); - INT_PTR ffcal4 = helpers->ReadIntPtr(ffcal3 + 0x4, /* isRelativeOffset*/ false); - INT_PTR ffcal5 = helpers->ReadIntPtr(ffcal4 + 0xC, /* isRelativeOffset*/ false); - UINT8 ffcal6 = helpers->ReadByte(ffcal5 + 0x1F8, /* isRelativeOffset */ false); //CaliforniaSpeed32bit - helpers->log("got value: "); - std::string ffs = std::to_string(ffcal6); - helpers->log((char *)ffs.c_str()); - if (FFBMode == 0) - { - if ((ffcal6 > 0x80) & (ffcal6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcal6 > 0x00) & (ffcal6 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcal6 > 0x80) & (ffcal6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcal6 > 0x00) & (ffcal6 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd10 > NULL) - { - INT_PTR ffcal1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffcal2 = helpers->ReadIntPtr(ffcal1 + 0x388, /* isRelativeOffset*/ false); - INT_PTR ffcal3 = helpers->ReadIntPtr(ffcal2 + 0x640, /* isRelativeOffset*/ false); - UINT8 ffcal6 = helpers->ReadByte(ffcal3 + 0x104, /* isRelativeOffset */ false); //CaliforniaSpeed32bit - helpers->log("got value: "); - std::string ffs = std::to_string(ffcal6); - helpers->log((char *)ffs.c_str()); - if (FFBMode == 0) - { - if ((ffcal6 > 0x80) & (ffcal6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcal6 > 0x00) & (ffcal6 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcal6 > 0x80) & (ffcal6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcal6 > 0x00) & (ffcal6 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd11 > NULL) - { - INT_PTR ffcal1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffcal2 = helpers->ReadIntPtr(ffcal1 + 0x388, /* isRelativeOffset*/ false); - INT_PTR ffcal3 = helpers->ReadIntPtr(ffcal2 + 0x640, /* isRelativeOffset*/ false); - UINT8 ffcal6 = helpers->ReadByte(ffcal3 + 0x104, /* isRelativeOffset */ false); //CaliforniaSpeed32bit - helpers->log("got value: "); - std::string ffs = std::to_string(ffcal6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcal6 > 0x80) & (ffcal6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcal6 > 0x00) & (ffcal6 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcal6 > 0x80) & (ffcal6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcal6 > 0x00) & (ffcal6 < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcal6) / 126.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd12 > NULL) - { - int ffcrusnwld = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnwld = crusnwld(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd13 > NULL) - { - int ffcrusnwld = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnwld = crusnwld(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd14 > NULL) - { - int ffcrusnwld = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnwld = crusnwld(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd15 > NULL) - { - int ffcrusnwld = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnwld = crusnwld(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd16 > NULL) - { - int ffcrusnwld = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnwld = crusnwld(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd17 > NULL) - { - int ffcrusnwld = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnwld = crusnwld(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd18 > NULL) - { - int ffcrusnwld = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnwld = crusnwld(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnwld > 110) & (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - ffcrusnwld) / 114.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnwld > 0) & (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnwld) / 110.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd19 > NULL) - { - int ffcrusnusa = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnusa = crusnusa(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnusa > 104) & (ffcrusnusa < 215)) - { - helpers->log("moving wheel left"); - double percentForce = (214 - ffcrusnusa) / 109.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnusa > 0) & (ffcrusnusa < 105)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnusa) / 104.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnusa > 104) & (ffcrusnusa < 215)) - { - helpers->log("moving wheel left"); - double percentForce = (214 - ffcrusnusa) / 109.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnusa > 0) & (ffcrusnusa < 105)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnusa) / 104.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd20 > NULL) - { - int ffcrusnusa = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnusa = crusnusa(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnusa > 104) & (ffcrusnusa < 215)) - { - helpers->log("moving wheel left"); - double percentForce = (214 - ffcrusnusa) / 109.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnusa > 0) & (ffcrusnusa < 105)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnusa) / 104.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnusa > 104) & (ffcrusnusa < 215)) - { - helpers->log("moving wheel left"); - double percentForce = (214 - ffcrusnusa) / 109.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnusa > 0) & (ffcrusnusa < 105)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnusa) / 104.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd21 > NULL) - { - int ffcrusnusa = 0; - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffcru6 = helpers->ReadByte(ffcru3 + 0x248, /* isRelativeOffset */ false); //CrusnWld32bit - ffcrusnusa = crusnusa(ffcru6); - helpers->log("got value: "); - std::string ffs = std::to_string(ffcru6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffcrusnusa > 104) & (ffcrusnusa < 215)) - { - helpers->log("moving wheel left"); - double percentForce = (214 - ffcrusnusa) / 109.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnusa > 0) & (ffcrusnusa < 105)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnusa) / 104.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffcrusnusa > 104) & (ffcrusnusa < 215)) - { - helpers->log("moving wheel left"); - double percentForce = (214 - ffcrusnusa) / 109.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffcrusnusa > 0) & (ffcrusnusa < 105)) - { - helpers->log("moving wheel right"); - double percentForce = (ffcrusnusa) / 104.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - } - if (hWnd22 > NULL) - { - INT_PTR ffoff1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffoff2 = helpers->ReadIntPtr(ffoff1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffoff3 = helpers->ReadIntPtr(ffoff2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffoff6 = helpers->ReadByte(ffoff3 + 0x248, /* isRelativeOffset */ false); //OffRoadChallenge32bit - std::string ffs = std::to_string(ffoff6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd23 > NULL) - { - INT_PTR ffoff1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffoff2 = helpers->ReadIntPtr(ffoff1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffoff3 = helpers->ReadIntPtr(ffoff2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffoff6 = helpers->ReadByte(ffoff3 + 0x248, /* isRelativeOffset */ false); //OffRoadChallenge32bit - helpers->log("got value: "); - std::string ffs = std::to_string(ffoff6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd24 > NULL) - { - INT_PTR ffoff1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffoff2 = helpers->ReadIntPtr(ffoff1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffoff3 = helpers->ReadIntPtr(ffoff2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffoff6 = helpers->ReadByte(ffoff3 + 0x248, /* isRelativeOffset */ false); //OffRoadChallenge32bit - helpers->log("got value: "); - std::string ffs = std::to_string(ffoff6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd25 > NULL) - { - INT_PTR ffoff1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffoff2 = helpers->ReadIntPtr(ffoff1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffoff3 = helpers->ReadIntPtr(ffoff2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffoff6 = helpers->ReadByte(ffoff3 + 0x248, /* isRelativeOffset */ false); //OffRoadChallenge32bit - helpers->log("got value: "); - std::string ffs = std::to_string(ffoff6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } - } - if (hWnd26 > NULL) - { - INT_PTR ffoff1 = helpers->ReadIntPtr(0x02426C78, /* isRelativeOffset*/ true); - INT_PTR ffoff2 = helpers->ReadIntPtr(ffoff1 + 0x290, /* isRelativeOffset*/ false); - INT_PTR ffoff3 = helpers->ReadIntPtr(ffoff2 + 0x650, /* isRelativeOffset*/ false); - UINT8 ffoff6 = helpers->ReadByte(ffoff3 + 0x248, /* isRelativeOffset */ false); //OffRoadChallenge32bit - helpers->log("got value: "); - std::string ffs = std::to_string(ffoff6); - helpers->log((char *)ffs.c_str()); - - if (FFBMode == 0) - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ffoff6 > 0x83) & (ffoff6 < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ffoff6 > 0x00) & (ffoff6 < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (ffoff6) / 124.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; } } \ No newline at end of file diff --git a/Game Files/MarioKartGPDX.cpp b/Game Files/MarioKartGPDX.cpp index 344bc49..fd8b78a 100644 --- a/Game Files/MarioKartGPDX.cpp +++ b/Game Files/MarioKartGPDX.cpp @@ -13,106 +13,132 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "MarioKartGPDX.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + int ff1 = myHelpers->ReadInt32(0x564C5F, /* isRelativeOffset */ true); //shake + int ff2 = myHelpers->ReadInt32(0x559B68,/* isRelativeOffset */ true); + int ff3 = myHelpers->ReadInt32(ff2 + 0x5F8, /* isRelativeOffset */ false); // terrain data + int ff4 = myHelpers->ReadInt32(0x563860, /* isRelativeOffset */ true); //0-255 accl + int ff5 = myHelpers->ReadInt32(ff2 + 0x628, /* isRelativeOffset */ false); //kart flying or on ground + int ff6 = myHelpers->ReadInt32(0x5532C4,/* isRelativeOffset */ true); + int ff7 = myHelpers->ReadInt32(ff6 + 0x1F0, /* isRelativeOffset */ false); + int ff8 = myHelpers->ReadInt32(ff7 + 0x18, /* isRelativeOffset */ false); + int ff9 = myHelpers->ReadInt32(ff8 + 0x7C, /* isRelativeOffset */ false); + int ff10 = myHelpers->ReadInt32(ff9 + 0x164, /* isRelativeOffset */ false); // 1 during race only + int ff11 = myHelpers->ReadInt32(ff2 + 0x520, /* isRelativeOffset */ false); //1065353216 when kart moves + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff1); + myHelpers->log((char*)ffs.c_str()); myHelpers->log("got value: "); + + + // Large Shake when hitting walls, other karts or getting hit by items + if ((4194308 == ff1) & (ff10 == 1)) + + { + double percentForce = 1.0; + double percentForce1 = 3.5; + double percentLength = (500); + myTriggers->Rumble(percentForce1, percentForce1, percentLength); + myTriggers->Sine(200, 200, percentForce); + } + + // small friction when driving on dirt while moving + else if ((3 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) + { + double percentForce = (0.3); + double percentLength = (100); + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Friction(percentForce); + } + // Small constant when hitting bumps + else if ((10 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) + { + double percentForce = (0.2); + double percentLength = (50); + double percentForce1 = 3.0; + myTriggers->Rumble(percentForce1, percentForce1, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + // Wheel rumbles while driving on grass + else if ((4 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) + + { + double percentForce = 0.2; + double percentLength = (50); + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Sine(50, 50, percentForce); + } + //wheel hard to turn while driving through water + else if ((7 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) + { + double percentForce = (0.65); + myTriggers->Friction(percentForce); + } + //Wheel rumbles lightly when driving over tiles + else if ((12 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) + + { + double percentForce = 0.1; + double percentForce1 = 0.2; + double percentLength = (150); + myTriggers->Rumble(percentForce1, 0, percentLength); + myTriggers->Sine(70, 70, percentForce); + } + //Wheel rumbles lightly when driving over sand + else if ((14 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) + + { + double percentForce = 0.1; + double percentForce1 = 0.2; + double percentLength = (50); + myTriggers->Rumble(percentForce1, 0, percentLength); + myTriggers->Sine(70, 70, percentForce); + } + //Wheel rumbles lightly when driving over rough part of track + else if ((11 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) + + { + double percentForce = 0.1; + double percentForce1 = 0.2; + double percentLength = (250); + myTriggers->Rumble(0, percentForce1, percentLength); + myTriggers->Sine(40, 50, percentForce); + } + //Wheel rumbles moderately when driving over wooden bridges + else if ((8 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) + + { + double percentForce = 0.4; + double percentLength = (100); + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->Sine(120, 120, percentForce); + } + } + return 0; +} void MarioKartGPDX100::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - helpers->log("in MKDX Ffbloop"); - - int ff1 = helpers->ReadInt32(0x564C5F, /* isRelativeOffset */ true); //shake - int ff2 = helpers->ReadInt32(0x559B68,/* isRelativeOffset */ true); - int ff3 = helpers->ReadInt32(ff2 + 0x5F8, /* isRelativeOffset */ false); // terrain data - int ff4 = helpers->ReadInt32(0x563860, /* isRelativeOffset */ true); //0-255 accl - int ff5 = helpers->ReadInt32(ff2 + 0x628, /* isRelativeOffset */ false); //kart flying or on ground - int ff6 = helpers->ReadInt32(0x5532C4,/* isRelativeOffset */ true); - int ff7 = helpers->ReadInt32(ff6 + 0x1F0, /* isRelativeOffset */ false); - int ff8 = helpers->ReadInt32(ff7 + 0x18, /* isRelativeOffset */ false); - int ff9 = helpers->ReadInt32(ff8 + 0x7C, /* isRelativeOffset */ false); - int ff10 = helpers->ReadInt32(ff9 + 0x164, /* isRelativeOffset */ false); // 1 during race only - int ff11 = helpers->ReadInt32(ff2 + 0x520, /* isRelativeOffset */ false); //1065353216 when kart moves - helpers->log("got value: "); - std::string ffs = std::to_string(ff1); - helpers->log((char *)ffs.c_str()); helpers->log("got value: "); + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; - // Large Shake when hitting walls, other karts or getting hit by items - if ((4194308 == ff1) & (ff10 == 1)) + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + while (SDL_WaitEvent(&e) != 0) { - double percentForce = 1.0; - double percentForce1 = 3.5; - double percentLength = (500); - triggers->Rumble(percentForce1, percentForce1, percentLength); - triggers->Sine(200, 200, percentForce); - } - - // small friction when driving on dirt while moving - else if ((3 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) - { - double percentForce = (0.3); - double percentLength = (100); - triggers->Rumble(percentForce, 0, percentLength); - triggers->Friction(percentForce); - } - // Small constant when hitting bumps - else if ((10 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) - { - double percentForce = (0.2); - double percentLength = (50); - double percentForce1 = 3.0; - triggers->Rumble(percentForce1, percentForce1, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - // Wheel rumbles while driving on grass - else if ((4 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) - - { - double percentForce = 0.2; - double percentLength = (50); - triggers->Rumble(0, percentForce, percentLength); - triggers->Sine(50, 50, percentForce); - } - //wheel hard to turn while driving through water - else if ((7 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) - { - double percentForce = (0.65); - triggers->Friction(percentForce); - } - //Wheel rumbles lightly when driving over tiles - else if ((12 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) - - { - double percentForce = 0.1; - double percentForce1 = 0.2; - double percentLength = (150); - triggers->Rumble(percentForce1, 0, percentLength); - triggers->Sine(70, 70, percentForce); - } - //Wheel rumbles lightly when driving over sand - else if ((14 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) - - { - double percentForce = 0.1; - double percentForce1 = 0.2; - double percentLength = (50); - triggers->Rumble(percentForce1, 0, percentLength); - triggers->Sine(70, 70, percentForce); - } - //Wheel rumbles lightly when driving over rough part of track - else if ((11 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) - - { - double percentForce = 0.1; - double percentForce1 = 0.2; - double percentLength = (250); - triggers->Rumble(0, percentForce1, percentLength); - triggers->Sine(40, 50, percentForce); - } - //Wheel rumbles moderately when driving over wooden bridges - else if ((8 == ff3) & (ff10 == 1) & (ff5 == 1) & (ff11 == 1065353216)) - - { - double percentForce = 0.4; - double percentLength = (100); - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->Sine(120, 120, percentForce); - } + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/MarioKartGPDX.h b/Game Files/MarioKartGPDX.h index ae3b66d..2a0e60f 100644 --- a/Game Files/MarioKartGPDX.h +++ b/Game Files/MarioKartGPDX.h @@ -14,7 +14,6 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #pragma once #include "../Common Files/Game.h" class MarioKartGPDX100 : public Game { - int lastWasStop = 0; public: void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); diff --git a/Game Files/MarioKartGPDX1.10.cpp b/Game Files/MarioKartGPDX1.10.cpp index 6bd694b..8b12479 100644 --- a/Game Files/MarioKartGPDX1.10.cpp +++ b/Game Files/MarioKartGPDX1.10.cpp @@ -49,194 +49,222 @@ static int RoughTrackRumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEX static int BridgeRumble = GetPrivateProfileInt(TEXT("Settings"), TEXT("BridgeRumble"), 0, settingsFilename); static int BridgeRumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("BridgeRumbleStrength"), 0, settingsFilename); +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + INT_PTR ff1 = myHelpers->ReadIntPtr(0xA46974, /* isRelativeOffset */ true); //shake + INT_PTR ff2 = myHelpers->ReadIntPtr(0x00A416E4,/* isRelativeOffset */ true); + UINT8 ff3 = myHelpers->ReadByte(ff2 + 0x628, /* isRelativeOffset */ false); // terrain data + UINT8 ff5 = myHelpers->ReadByte(ff2 + 0x658, /* isRelativeOffset */ false); //kart flying or on ground + INT_PTR ff6 = myHelpers->ReadIntPtr(0x00A309A0,/* isRelativeOffset */ true); + INT_PTR ff7 = myHelpers->ReadIntPtr(ff6 + 0x304, /* isRelativeOffset */ false); + INT_PTR ff8 = myHelpers->ReadIntPtr(ff7 + 0xE8, /* isRelativeOffset */ false); + INT_PTR ff9 = myHelpers->ReadIntPtr(ff8 + 0x64, /* isRelativeOffset */ false); + INT_PTR ff10 = myHelpers->ReadIntPtr(ff9 + 0x38, /* isRelativeOffset */ false); + UINT8 ff11 = myHelpers->ReadByte(ff10 + 0x4C4, /* isRelativeOffset */ false); // 1 during race only + float Speed = myHelpers->ReadFloat32(ff2 + 0x558, /* isRelativeOffset */ false); //Speed of Kart + UINT8 ff13 = myHelpers->ReadByte(0xA39690, /* isRelativeOffset */ true); //picking up coins + UINT8 ff14 = myHelpers->ReadByte(0xA4528D, /* isRelativeOffset */ true); //picking up weapon box + UINT8 Wheel = myHelpers->ReadByte(0xA4652D, /* isRelativeOffset */ true); //0-255 steering + INT_PTR ff16 = myHelpers->ReadIntPtr(0x00A2E284, /* isRelativeOffset*/ true); + UINT8 ff17 = myHelpers->ReadByte(ff2 + 0x674, /* isRelativeOffset */ false); // Drift + UINT8 ff18 = myHelpers->ReadByte(ff16 + 0x3A4, /* isRelativeOffset */ false); // Boost + + int static oldcoins = 0; + int newcoins = ff13; + int static oldweapon = 0; + int newweapon = ff14; + int static oldhitground = 0; + int newhitground = ff5; + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff1); + myHelpers->log((char*)ffs.c_str()); myHelpers->log("got value: "); + + if ((ConstantEffectForSteering == 1) && (ff11 == 1)) + { + if ((Wheel >= 0) & (Wheel < 128)) + { + double percentForce = ((128 - Wheel) / (ConstantEffectForSteeringStrength / 1.0)); + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((Wheel > 127)& (Wheel < 256)) + { + double percentForce = ((Wheel - 127) / (ConstantEffectForSteeringStrength / 1.0)); + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + } + if ((MainShakeRumble == 1) & (4194308 == ff1) & (ff11 == 1)) + { + // Large Shake when hitting walls, other karts or getting hit by items + double percentForce = ((MainShakeRumbleStrength) / 100.0); + double percentLength = (500); + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->Sine(200, 200, percentForce); + } + else if ((BoostRumble == 1) & (ff18 == 1) & (ff11 == 1)) + { + // Shake when Boost + double percentForce = ((BoostRumbleStrength) / 100.0); + double percentLength = (100); + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->Sine(60, 60, percentForce); + } + else if ((DriftRumble == 1) & (ff17 == 1) & (Wheel >= 0) & (Wheel < 128) & (ff11 == 1)) + { + // Drift Effect including steering left + double percentForce = (((128 - Wheel) / 128.0) * (DriftRumbleControllerStrengthMultiplier / 100.0)); + double percentLength = (100); + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Friction(percentForce); + } + else if ((DriftRumble == 1) & (ff17 == 1) & (Wheel > 127)& (Wheel < 256)& (ff11 == 1)) + { + // Drift Effect including steering right + double percentForce = (((Wheel - 127) / 128.0) * (DriftRumbleControllerStrengthMultiplier / 100.0)); + double percentLength = (100); + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Friction(percentForce); + } + else if ((HitGroundRumble == 1) & (oldhitground != newhitground) & (ff5 == 1) & (ff11 == 1)) + { + // Shake when hitting ground + double percentForce = ((HitGroundRumbleStrength) / 100.0); + double percentLength = (100); + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + Sleep(50); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((WeaponRumble == 1) & (oldweapon != newweapon) & (ff11 == 1)) + { + // Shake when picking up new weapons or using them + double percentForce = ((WeaponRumbleStrength) / 100.0); + double percentLength = (300); + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->Sine(80, 50, percentForce); + } + else if ((CoinRumble == 1) & (oldcoins != newcoins) & (ff11 == 1)) + { + // Shake when picking up coins + double percentForce = ((CoinRumbleStrength) / 100.0); + double percentLength = (200); + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->Sine(50, 50, percentForce); + } + else if ((DirtRumble == 1) & (3 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) + { + // small friction when driving on dirt while moving + double percentForce = ((DirtRumbleStrength) / 100.0); + double percentLength = (100); + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Friction(percentForce); + } + else if ((SpeedBumpRumble == 1) & (10 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) + { + // Small constant when hitting bumps + double percentForce = ((SpeedBumpRumbleStrength) / 100.0); + double percentLength = (50); + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, 0); + } + else if ((GrassRumble == 1) & (4 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) + { + // Wheel rumbles while driving on grass + double percentForce = ((GrassRumbleStrength) / 100.0); + double percentLength = (50); + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Sine(50, 50, percentForce); + } + else if ((CarpetRumble == 1) & (9 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) + { + // Wheel rumbles while driving on carpet + double percentForce = ((CarpetRumbleStrength) / 100.0); + double percentLength = (50); + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Sine(50, 50, percentForce); + } + else if ((WaterRumble == 1) & (7 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)& (Wheel >= 0)& (Wheel < 128)) + { + //wheel hard to turn while driving through water + double percentForce = ((WaterRumbleWheelStrength) / 100.0); + double percentForce1 = ((128 - Wheel / 128.0) * (WaterRumbleControllerStrengthMultiplier / 100.0)); + double percentLength = (100); + myTriggers->Rumble(percentForce1, 0, percentLength); + myTriggers->Friction(percentForce); + } + else if ((WaterRumble == 1) & (7 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)& (Wheel > 127)) + { + double percentForce = ((WaterRumbleWheelStrength) / 100.0); + double percentForce1 = ((Wheel - 127 / 128.0) * (WaterRumbleControllerStrengthMultiplier / 100.0)); + double percentLength = (100); + myTriggers->Rumble(0, percentForce1, percentLength); + myTriggers->Friction(percentForce); + } + else if ((TileRumble == 1) & (12 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) + { + //Wheel rumbles lightly when driving over tiles + double percentForce = ((TileRumbleStrength) / 100.0); + double percentLength = (150); + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Friction(percentForce); + } + else if ((SandRumble == 1) & (14 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) + { + //Wheel rumbles lightly when driving over sand + double percentForce = ((SandRumbleStrength) / 100.0); + double percentLength = (50); + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Sine(70, 70, percentForce); + } + else if ((RoughTrackRumble == 1) & (11 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) + { + //Wheel rumbles lightly when driving over rough part of track + double percentForce = ((RoughTrackRumbleStrength) / 100.0); + double percentLength = (100); + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Sine(40, 50, percentForce); + } + else if ((BridgeRumble == 1) & (8 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) + { + //Wheel rumbles moderately when driving over wooden bridges + double percentForce = ((BridgeRumbleStrength) / 100.0); + double percentLength = (100); + myTriggers->Rumble(percentForce, percentForce, percentLength); + myTriggers->Sine(120, 120, percentForce); + } + oldcoins = newcoins; + oldweapon = newweapon; + oldhitground = newhitground; + } + return 0; +} + void MarioKartGPDX110::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - INT_PTR ff1 = helpers->ReadIntPtr(0xA46974, /* isRelativeOffset */ true); //shake - INT_PTR ff2 = helpers->ReadIntPtr(0x00A416E4,/* isRelativeOffset */ true); - UINT8 ff3 = helpers->ReadByte(ff2 + 0x628, /* isRelativeOffset */ false); // terrain data - UINT8 ff5 = helpers->ReadByte(ff2 + 0x658, /* isRelativeOffset */ false); //kart flying or on ground - INT_PTR ff6 = helpers->ReadIntPtr(0x00A309A0,/* isRelativeOffset */ true); - INT_PTR ff7 = helpers->ReadIntPtr(ff6 + 0x304, /* isRelativeOffset */ false); - INT_PTR ff8 = helpers->ReadIntPtr(ff7 + 0xE8, /* isRelativeOffset */ false); - INT_PTR ff9 = helpers->ReadIntPtr(ff8 + 0x64, /* isRelativeOffset */ false); - INT_PTR ff10 = helpers->ReadIntPtr(ff9 + 0x38, /* isRelativeOffset */ false); - UINT8 ff11 = helpers->ReadByte(ff10 + 0x4C4, /* isRelativeOffset */ false); // 1 during race only - float Speed = helpers->ReadFloat32(ff2 + 0x558, /* isRelativeOffset */ false); //Speed of Kart - UINT8 ff13 = helpers->ReadByte(0xA39690, /* isRelativeOffset */ true); //picking up coins - UINT8 ff14 = helpers->ReadByte(0xA4528D, /* isRelativeOffset */ true); //picking up weapon box - UINT8 Wheel = helpers->ReadByte(0xA4652D, /* isRelativeOffset */ true); //0-255 steering - INT_PTR ff16 = helpers->ReadIntPtr(0x00A2E284, /* isRelativeOffset*/ true); - UINT8 ff17 = helpers->ReadByte(ff2 + 0x674, /* isRelativeOffset */ false); // Drift - UINT8 ff18 = helpers->ReadByte(ff16 + 0x3A4, /* isRelativeOffset */ false); // Boost + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; - int static oldcoins = 0; - int newcoins = ff13; - int static oldweapon = 0; - int newweapon = ff14; - int static oldhitground = 0; - int newhitground = ff5; - helpers->log("got value: "); - std::string ffs = std::to_string(ff1); - helpers->log((char *)ffs.c_str()); helpers->log("got value: "); - - if ((ConstantEffectForSteering == 1) && (ff11 == 1)) + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) { - if ((Wheel >= 0) & (Wheel < 128)) - { - double percentForce = ((128 - Wheel) / (ConstantEffectForSteeringStrength / 1.0)); - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - else if ((Wheel > 127) & (Wheel < 256)) - { - double percentForce = ((Wheel - 127) / (ConstantEffectForSteeringStrength / 1.0)); - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; } - if ((MainShakeRumble == 1) & (4194308 == ff1) & (ff11 == 1)) - { - // Large Shake when hitting walls, other karts or getting hit by items - double percentForce = ((MainShakeRumbleStrength) / 100.0); - double percentLength = (500); - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->Sine(200, 200, percentForce); - } - else if ((BoostRumble == 1) & (ff18 == 1) & (ff11 == 1)) - { - // Shake when Boost - double percentForce = ((BoostRumbleStrength) / 100.0); - double percentLength = (100); - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->Sine(60, 60, percentForce); - } - else if ((DriftRumble == 1) & (ff17 == 1) & (Wheel >= 0) & (Wheel < 128) & (ff11 == 1)) - { - // Drift Effect including steering left - double percentForce = (((128 - Wheel) / 128.0) * (DriftRumbleControllerStrengthMultiplier / 100.0)); - double percentLength = (100); - triggers->Rumble(percentForce, 0, percentLength); - triggers->Friction(percentForce); - } - else if ((DriftRumble == 1) & (ff17 == 1) & (Wheel > 127) & (Wheel < 256) & (ff11 == 1)) - { - // Drift Effect including steering right - double percentForce = (((Wheel - 127) / 128.0) * (DriftRumbleControllerStrengthMultiplier / 100.0)); - double percentLength = (100); - triggers->Rumble(0, percentForce, percentLength); - triggers->Friction(percentForce); - } - else if ((HitGroundRumble == 1) & (oldhitground != newhitground) & (ff5 == 1) & (ff11 == 1)) - { - // Shake when hitting ground - double percentForce = ((HitGroundRumbleStrength) / 100.0); - double percentLength = (100); - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - Sleep(50); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((WeaponRumble == 1) & (oldweapon != newweapon) & (ff11 == 1)) - { - // Shake when picking up new weapons or using them - double percentForce = ((WeaponRumbleStrength) / 100.0); - double percentLength = (300); - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->Sine(80, 50, percentForce); - } - else if ((CoinRumble == 1) & (oldcoins != newcoins) & (ff11 == 1)) - { - // Shake when picking up coins - double percentForce = ((CoinRumbleStrength) / 100.0); - double percentLength = (200); - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->Sine(50, 50, percentForce); - } - else if ((DirtRumble == 1) & (3 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) - { - // small friction when driving on dirt while moving - double percentForce = ((DirtRumbleStrength) / 100.0); - double percentLength = (100); - triggers->Rumble(percentForce, 0, percentLength); - triggers->Friction(percentForce); - } - else if ((SpeedBumpRumble == 1) & (10 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) - { - // Small constant when hitting bumps - double percentForce = ((SpeedBumpRumbleStrength) / 100.0); - double percentLength = (50); - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, 0); - } - else if ((GrassRumble == 1) & (4 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) - { - // Wheel rumbles while driving on grass - double percentForce = ((GrassRumbleStrength) / 100.0); - double percentLength = (50); - triggers->Rumble(0, percentForce, percentLength); - triggers->Sine(50, 50, percentForce); - } - else if ((CarpetRumble == 1) & (9 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) - { - // Wheel rumbles while driving on carpet - double percentForce = ((CarpetRumbleStrength) / 100.0); - double percentLength = (50); - triggers->Rumble(0, percentForce, percentLength); - triggers->Sine(50, 50, percentForce); - } - else if ((WaterRumble == 1) & (7 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1) & (Wheel >= 0) & (Wheel < 128)) - { - //wheel hard to turn while driving through water - double percentForce = ((WaterRumbleWheelStrength) / 100.0); - double percentForce1 = ((128 - Wheel / 128.0) * (WaterRumbleControllerStrengthMultiplier / 100.0)); - double percentLength = (100); - triggers->Rumble(percentForce1, 0, percentLength); - triggers->Friction(percentForce); - } - else if ((WaterRumble == 1) & (7 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1) & (Wheel > 127)) - { - double percentForce = ((WaterRumbleWheelStrength) / 100.0); - double percentForce1 = ((Wheel - 127 / 128.0) * (WaterRumbleControllerStrengthMultiplier / 100.0)); - double percentLength = (100); - triggers->Rumble(0, percentForce1, percentLength); - triggers->Friction(percentForce); - } - else if ((TileRumble == 1) & (12 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) - { - //Wheel rumbles lightly when driving over tiles - double percentForce = ((TileRumbleStrength) / 100.0); - double percentLength = (150); - triggers->Rumble(0, percentForce, percentLength); - triggers->Friction(percentForce); - } - else if ((SandRumble == 1) & (14 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) - { - //Wheel rumbles lightly when driving over sand - double percentForce = ((SandRumbleStrength) / 100.0); - double percentLength = (50); - triggers->Rumble(percentForce, 0, percentLength); - triggers->Sine(70, 70, percentForce); - } - else if ((RoughTrackRumble == 1) & (11 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) - { - //Wheel rumbles lightly when driving over rough part of track - double percentForce = ((RoughTrackRumbleStrength) / 100.0); - double percentLength = (100); - triggers->Rumble(0, percentForce, percentLength); - triggers->Sine(40, 50, percentForce); - } - else if ((BridgeRumble == 1) & (8 == ff3) & (ff11 == 1) & (ff5 == 1) & (Speed > 0.1)) - { - //Wheel rumbles moderately when driving over wooden bridges - double percentForce = ((BridgeRumbleStrength) / 100.0); - double percentLength = (100); - triggers->Rumble(percentForce, percentForce, percentLength); - triggers->Sine(120, 120, percentForce); - } - oldcoins = newcoins; - oldweapon = newweapon; - oldhitground = newhitground; } \ No newline at end of file diff --git a/Game Files/MarioKartGPDX1.10.h b/Game Files/MarioKartGPDX1.10.h index 1a2725b..cf48747 100644 --- a/Game Files/MarioKartGPDX1.10.h +++ b/Game Files/MarioKartGPDX1.10.h @@ -14,7 +14,6 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #pragma once #include "../Common Files/Game.h" class MarioKartGPDX110 : public Game { - int lastWasStop = 0; public: void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); diff --git a/Game Files/OutRun2Fake.cpp b/Game Files/OutRun2Fake.cpp index 0e2da33..30ea696 100644 --- a/Game Files/OutRun2Fake.cpp +++ b/Game Files/OutRun2Fake.cpp @@ -255,7 +255,13 @@ static int RunningThread(void *ptr) } return 0; } + void OutRun2Fake::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + SDL_Thread *thread; thread = SDL_CreateThread(RunningThread, "RunningThread", (void *)NULL); int ff = myHelpers->ReadInt32(0x0827A1A0, /* isRelativeOffset */ false); diff --git a/Game Files/OutRun2Real.cpp b/Game Files/OutRun2Real.cpp index 4330ebf..bba4498 100644 --- a/Game Files/OutRun2Real.cpp +++ b/Game Files/OutRun2Real.cpp @@ -20,6 +20,7 @@ static EffectConstants *myConstants; static Helpers *myHelpers; static SDL_Event e; static int SpeedStrength; +static bool init = true; static wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); static int ShowButtonNumbersForSetup = GetPrivateProfileInt(TEXT("Settings"), TEXT("ShowButtonNumbersForSetup"), 0, settingsFilename); static int ChangeGearsViaPlugin = GetPrivateProfileInt(TEXT("Settings"), TEXT("ChangeGearsViaPlugin"), 0, settingsFilename); @@ -94,6 +95,16 @@ static int RunningThread(void *ptr) float ffspeed = myHelpers->ReadFloat32(0x08273DF0, /* isRelativeOffset */ false); //speedo UINT8 static oldgear = 0; float newgear = gear; + + if (init) + { + DWORD tempdw = 0x08105A48; + DWORD loadffb = (DWORD)(void*)or2FfbFunction; + DWORD tempdw2 = loadffb - tempdw - 5; + *(BYTE*)tempdw = 0xE9; + *(DWORD*)(tempdw + 1) = tempdw2; + init = false; + } if ((ffspeed >= 0.1) && (ffspeed <= 80)) { @@ -153,21 +164,16 @@ static int RunningThread(void *ptr) } void OutRun2Real::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + SDL_Thread *thread; thread = SDL_CreateThread(RunningThread, "RunningThread", (void *)NULL); while (SDL_WaitEvent(&e) != 0) - { - bool init = true; - if (init) - { - DWORD tempdw = 0x08105A48; - DWORD loadffb = (DWORD)(void *)or2FfbFunction; - DWORD tempdw2 = loadffb - tempdw - 5; - *(BYTE *)tempdw = 0xE9; - *(DWORD *)(tempdw + 1) = tempdw2; - init = false; - } + { UINT8 transmission = helpers->ReadByte(0x082932C2, /* isRelativeOffset */ false); // Auto or Manual myTriggers = triggers; myConstants = constants; diff --git a/Game Files/PokkenTournament.cpp b/Game Files/PokkenTournament.cpp index 932c6d5..73e98df 100644 --- a/Game Files/PokkenTournament.cpp +++ b/Game Files/PokkenTournament.cpp @@ -13,52 +13,79 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "PokkenTournament.h" +#include "SDL.h" + +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + INT_PTR ffAddress = myHelpers->ReadIntPtr(0x00E97F10, /* isRelativeOffset*/ true); + INT_PTR ff1 = myHelpers->ReadIntPtr(ffAddress + 0x60, /* isRelativeOffset */ false); + INT_PTR ff2 = myHelpers->ReadIntPtr(ff1 + 0x8, /* isRelativeOffset */ false); + float ff3 = myHelpers->ReadFloat32(ff2 + 0xCC, /* isRelativeOffset */ false); //health + INT_PTR ffAddress4 = myHelpers->ReadIntPtr(0x00EC4C20, /* isRelativeOffset*/ true); + INT_PTR ff5 = myHelpers->ReadIntPtr(ffAddress4 + 0x60, /* isRelativeOffset */ false); + INT_PTR ff6 = myHelpers->ReadIntPtr(ff5 + 0x120, /* isRelativeOffset */ false); + INT_PTR ff7 = myHelpers->ReadIntPtr(ff6 + 0x698, /* isRelativeOffset */ false); //1 during battle except for first startup + + wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("RumbleStrength"), 0, settingsFilename); + int RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("RumbleLength"), 0, settingsFilename); + int HowtoRumble = GetPrivateProfileInt(TEXT("Settings"), TEXT("HowtoRumble"), 0, settingsFilename); + + float static oldFloat = 0.0; + float newFloat = ff3; + + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff3); + myHelpers->log((char*)ffs.c_str()); + + + if ((oldFloat != newFloat)) + { + if (HowtoRumble == 0) + { + double percentForce = ((RumbleStrength) / 100.0); + double percentLength = (RumbleLength); + myTriggers->Rumble(percentForce, percentForce, percentLength); + } + else if (HowtoRumble == 1) + { + double percentForce = ((RumbleStrength) / 100.0); + double percentLength = (RumbleLength); + myTriggers->Rumble(0, percentForce, percentLength); + } + else if (HowtoRumble == 2) + { + double percentForce = ((RumbleStrength) / 100.0); + double percentLength = (RumbleLength); + myTriggers->Rumble(percentForce, 0, percentLength); + } + } + oldFloat = newFloat; + } + return 0; +} void PokkenTournament::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; - INT_PTR ffAddress = helpers->ReadIntPtr(0x00E97F10, /* isRelativeOffset*/ true); - INT_PTR ff1 = helpers->ReadIntPtr(ffAddress + 0x60, /* isRelativeOffset */ false); - INT_PTR ff2 = helpers->ReadIntPtr(ff1 + 0x8, /* isRelativeOffset */ false); - float ff3 = helpers->ReadFloat32(ff2 + 0xCC, /* isRelativeOffset */ false); //health - INT_PTR ffAddress4 = helpers->ReadIntPtr(0x00EC4C20, /* isRelativeOffset*/ true); - INT_PTR ff5 = helpers->ReadIntPtr(ffAddress4 + 0x60, /* isRelativeOffset */ false); - INT_PTR ff6 = helpers->ReadIntPtr(ff5 + 0x120, /* isRelativeOffset */ false); - INT_PTR ff7 = helpers->ReadIntPtr(ff6 + 0x698, /* isRelativeOffset */ false); //1 during battle except for first startup + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int RumbleStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("RumbleStrength"), 0, settingsFilename); - int RumbleLength = GetPrivateProfileInt(TEXT("Settings"), TEXT("RumbleLength"), 0, settingsFilename); - int HowtoRumble = GetPrivateProfileInt(TEXT("Settings"), TEXT("HowtoRumble"), 0, settingsFilename); - - float static oldFloat = 0.0; - float newFloat = ff3; - - helpers->log("got value: "); - std::string ffs = std::to_string(ff3); - helpers->log((char *)ffs.c_str()); - - - if ((oldFloat != newFloat)) + while (SDL_WaitEvent(&e) != 0) { - if (HowtoRumble == 0) - { - double percentForce = ((RumbleStrength) / 100.0); - double percentLength = (RumbleLength); - triggers->Rumble(percentForce, percentForce, percentLength); - } - else if (HowtoRumble == 1) - { - double percentForce = ((RumbleStrength) / 100.0); - double percentLength = (RumbleLength); - triggers->Rumble(0, percentForce, percentLength); - } - else if (HowtoRumble == 2) - { - double percentForce = ((RumbleStrength) / 100.0); - double percentLength = (RumbleLength); - triggers->Rumble(percentForce, 0, percentLength); - } - } - oldFloat = newFloat; + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/PokkenTournament.h b/Game Files/PokkenTournament.h index 8da1cdf..0b5a2d5 100644 --- a/Game Files/PokkenTournament.h +++ b/Game Files/PokkenTournament.h @@ -14,7 +14,6 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #pragma once #include "../Common Files/Game.h" class PokkenTournament : public Game { - int lastWasStop = 0; public: void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); diff --git a/Game Files/RoadFighters3D.cpp b/Game Files/RoadFighters3D.cpp index 98cdfb5..6fb729d 100644 --- a/Game Files/RoadFighters3D.cpp +++ b/Game Files/RoadFighters3D.cpp @@ -292,6 +292,10 @@ static int RunningThread(void *ptr) void RoadFighters3D::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + if (InputDeviceWheelEnable == 1) { SDL_Thread *thread; diff --git a/Game Files/SegaRacingClassic.cpp b/Game Files/SegaRacingClassic.cpp index 9ccc401..c0bc834 100644 --- a/Game Files/SegaRacingClassic.cpp +++ b/Game Files/SegaRacingClassic.cpp @@ -13,93 +13,121 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "SegaRacingClassic.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + UINT8 ff = myHelpers->ReadByte(0x834C19, /* isRelativeOffset */ false); + myHelpers->log("got value: "); + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + wchar_t* settingsFilename = TEXT(".\\FFBPlugin.ini"); + int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); + + if (FFBMode == 0) + { + if ((ff > 0xD7)& (ff < 0xE0)) + { + //Clutch + double percentForce = (224 - ff) / 8.0; + double percentLength = 100; + myTriggers->Friction(percentForce); + } + else if ((ff > 0xBF)& (ff < 0xC8)) + { + //Centering + double percentForce = (200 - ff) / 8.0; + double percentLength = 100; + myTriggers->Spring(pow(percentForce, 0.1)); + } + else if ((ff > 0xB7)& (ff < 0xC0)) + { + //Uncentering + double percentForce = (192 - ff) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, percentForce); + } + else if ((ff > 0xA7)& (ff < 0xB0)) + { + //Roll Left + double percentForce = (176 - ff) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((ff > 0x97)& (ff < 0xA0)) + { + //Roll Right + double percentForce = (160 - ff) / 8.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + } + else + { + if ((ff > 0xD7)& (ff < 0xE0)) + { + //Clutch + double percentForce = (224 - ff) / 8.0; + double percentLength = 100; + myTriggers->Friction(pow(percentForce, 0.5)); + } + else if ((ff > 0xBF)& (ff < 0xC8)) + { + //Centering + double percentForce = (200 - ff) / 8.0; + double percentLength = 100; + myTriggers->Spring(pow(percentForce, 0.1)); + } + else if ((ff > 0xB7)& (ff < 0xC0)) + { + //Uncentering + double percentForce = (192 - ff) / 8.0; + double percentLength = 100; + myTriggers->Sine(70, 80, pow(percentForce, 0.5)); + } + else if ((ff > 0xA7)& (ff < 0xB0)) + { + //Roll Left + double percentForce = (176 - ff) / 8.0; + double percentLength = 100; + myTriggers->Rumble(0, pow(percentForce, 0.5), percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); + } + else if ((ff > 0x97)& (ff < 0xA0)) + { + //Roll Right + double percentForce = (160 - ff) / 8.0; + double percentLength = 100; + myTriggers->Rumble(pow(percentForce, 0.5), 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); + } + } + } + return 0; +} void SegaRacingClassic::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - UINT8 ff = helpers->ReadByte(0x834C19, /* isRelativeOffset */ false); - helpers->log("got value: "); - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); - wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini"); - int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename); - if (FFBMode == 0) - { - if ((ff > 0xD7) & (ff < 0xE0)) - { - //Clutch - double percentForce = (224 - ff) / 8.0; - double percentLength = 100; - triggers->Friction(percentForce); - } - else if ((ff > 0xBF) & (ff < 0xC8)) - { - //Centering - double percentForce = (200 - ff ) / 8.0; - double percentLength = 100; - triggers->Spring(pow(percentForce, 0.1)); - } - else if ((ff > 0xB7) & (ff < 0xC0)) - { - //Uncentering - double percentForce = (192 - ff) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, percentForce); - } - else if ((ff > 0xA7) & (ff < 0xB0)) - { - //Roll Left - double percentForce = (176 - ff) / 8.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ff > 0x97) & (ff < 0xA0)) - { - //Roll Right - double percentForce = (160 - ff) / 8.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - else - { - if ((ff > 0xD7) & (ff < 0xE0)) - { - //Clutch - double percentForce = (224 - ff) / 8.0; - double percentLength = 100; - triggers->Friction(pow(percentForce, 0.5)); - } - else if ((ff > 0xBF) & (ff < 0xC8)) - { - //Centering - double percentForce = (200 - ff) / 8.0; - double percentLength = 100; - triggers->Spring(pow(percentForce, 0.1)); - } - else if ((ff > 0xB7) & (ff < 0xC0)) - { - //Uncentering - double percentForce = (192 - ff) / 8.0; - double percentLength = 100; - triggers->Sine(70, 80, pow(percentForce, 0.5)); - } - else if ((ff > 0xA7) & (ff < 0xB0)) - { - //Roll Left - double percentForce = (176 - ff) / 8.0; - double percentLength = 100; - triggers->Rumble(0, pow(percentForce, 0.5), percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5))); - } - else if ((ff > 0x97) & (ff < 0xA0)) - { - //Roll Right - double percentForce = (160 - ff) / 8.0; - double percentLength = 100; - triggers->Rumble(pow(percentForce, 0.5), 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5))); - } - } + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/SegaRacingClassic.h b/Game Files/SegaRacingClassic.h index 3952a3b..fa5baf6 100644 --- a/Game Files/SegaRacingClassic.h +++ b/Game Files/SegaRacingClassic.h @@ -14,7 +14,6 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #pragma once #include "../Common Files/Game.h" class SegaRacingClassic : public Game { - int lastWasStop = 0; public: void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); diff --git a/Game Files/SegaRally3.cpp b/Game Files/SegaRally3.cpp index 5da0689..f9e1119 100644 --- a/Game Files/SegaRally3.cpp +++ b/Game Files/SegaRally3.cpp @@ -13,40 +13,73 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "SegaRally3.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; +static HANDLE hSection; +static LPVOID secData; +static int ffbOffset = 0; -void SegaRally3::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - helpers->log("in SR3 Ffbloop"); - const int ff = GetTeknoParrotFFB(); - std::string ffs = std::to_string(ff); - helpers->log((char *)ffs.c_str()); +static int TeknoParrotGame() +{ + hSection = CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, 64, L"TeknoParrot_JvsState"); + secData = MapViewOfFile(hSection, FILE_MAP_ALL_ACCESS, 0, 0, 64); + ffbOffset = *((int*)secData + 2); + return 0; +} - if (ff > 15) +static int GetTeknoParrotFFB() +{ + ffbOffset = *((int*)secData + 2); + return ffbOffset; +} + +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) { - helpers->log("moving wheel right"); - // assume that 30 is the weakest and 16 is the strongest - double percentForce = (31 - ff) / 15.0; - double percentLength = 100; - // direction from left => makes wheel turn right - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - lastWasStop = 0; - } - else if (ff > 0) - { - helpers->log("moving wheel left"); - // assume that 1 is the strongest and 15 is the weakest - double percentForce = (16 - ff) / 15.0; - double percentLength = 100; - // direction from right => makes wheel turn left - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - lastWasStop = 0; - } - else - { - if (lastWasStop == 0) { - triggers->Constant(constants->DIRECTION_FROM_LEFT, 0); // just pass the hash of 0 strength so we update lastEffectHash & lastEffectTime - lastWasStop = 1; + myHelpers->log("in SR3 Ffbloop"); + const int ff = GetTeknoParrotFFB(); + std::string ffs = std::to_string(ff); + myHelpers->log((char*)ffs.c_str()); + + if (ff > 15) + { + myHelpers->log("moving wheel right"); + double percentForce = (31 - ff) / 15.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + } + else if (ff > 0) + { + myHelpers->log("moving wheel left"); + double percentForce = (16 - ff) / 15.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); } } +} + +void SegaRally3::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + TeknoParrotGame(); + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/SegaRally3.h b/Game Files/SegaRally3.h index c672d92..88fbf8c 100644 --- a/Game Files/SegaRally3.h +++ b/Game Files/SegaRally3.h @@ -12,10 +12,9 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. */ #pragma once -#include "../Common Files/TeknoParrotGame.h" +#include "../Common Files/Game.h" -class SegaRally3 : public TeknoParrotGame { +class SegaRally3 : public Game { public: - SegaRally3() : TeknoParrotGame() { } void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); }; \ No newline at end of file diff --git a/Game Files/SonicSegaAllStarsRacing.cpp b/Game Files/SonicSegaAllStarsRacing.cpp index 082866c..e43d354 100644 --- a/Game Files/SonicSegaAllStarsRacing.cpp +++ b/Game Files/SonicSegaAllStarsRacing.cpp @@ -13,44 +13,64 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "SonicSegaAllStarsRacing.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; -void SonicSegaAllStarsRacing::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - INT_PTR FFBEnable = helpers->ReadByte(0x5CD858, /* isRelativeOffset*/ true); - INT_PTR FFB = helpers->ReadByte(0x5CD864, /* isRelativeOffset*/ true); +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + INT_PTR FFBEnable = myHelpers->ReadByte(0x5CD858, /* isRelativeOffset*/ true); + INT_PTR FFB = myHelpers->ReadByte(0x5CD864, /* isRelativeOffset*/ true); - { - //Enable FFB - helpers->WriteByte(0x5CD858, 0x03, true); - } - { - //Trigger friction to stop any oscillation - double percentForce = 0.2; - triggers->Friction(percentForce); - } - if ((FFB > 0) & (FFB < 19)) - { - helpers->log("moving wheel right"); - double percentForce = (FFB) / 18.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - lastWasStop = 0; + { + //Enable FFB + myHelpers->WriteByte(0x5CD858, 0x03, true); + } - } - else if ((FFB > 237) & (FFB < 256)) - { - helpers->log("moving wheel right"); - double percentForce = (256 - FFB) / 18.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - lastWasStop = 0; - } - else - { - if (lastWasStop == 0) { - triggers->Constant(constants->DIRECTION_FROM_LEFT, 0); // just pass the hash of 0 strength so we update lastEffectHash & lastEffectTime - lastWasStop = 1; + { + //Trigger friction to stop any oscillation + double percentForce = 0.2; + myTriggers->Friction(percentForce); + } + + if ((FFB > 0)& (FFB < 19)) + { + myHelpers->log("moving wheel right"); + double percentForce = (FFB) / 18.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if ((FFB > 237)& (FFB < 256)) + { + myHelpers->log("moving wheel right"); + double percentForce = (256 - FFB) / 18.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); } } + return 0; +} + +void SonicSegaAllStarsRacing::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } diff --git a/Game Files/SonicSegaAllStarsRacing.h b/Game Files/SonicSegaAllStarsRacing.h index b1005bc..d1e7fd5 100644 --- a/Game Files/SonicSegaAllStarsRacing.h +++ b/Game Files/SonicSegaAllStarsRacing.h @@ -14,7 +14,6 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #pragma once #include "../Common Files/Game.h" class SonicSegaAllStarsRacing : public Game { - int lastWasStop = 0; public: void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); diff --git a/Game Files/TestGame.h b/Game Files/TestGame.h index 0f6d864..e9215e3 100644 --- a/Game Files/TestGame.h +++ b/Game Files/TestGame.h @@ -14,7 +14,6 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #pragma once #include "../Common Files/Game.h" class TestGame : public Game { - int lastWasStop = 0; public: void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); diff --git a/Game Files/WMMT5.cpp b/Game Files/WMMT5.cpp index 86885df..9dbd3f2 100644 --- a/Game Files/WMMT5.cpp +++ b/Game Files/WMMT5.cpp @@ -136,178 +136,197 @@ static int GearChangeThread(void* ptr) return 0; } -void WMMT5::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) +static int RunningThread(void* ptr) { - if (!init) + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) + { + if (!init) + { + init = true; + SDL_CreateThread(InputThread, "InputThread", (void*)NULL); + SDL_CreateThread(SpamThread, "SpamThread", (void*)NULL); + } + + float spring = myHelpers->ReadFloat32(0x196F18C, true); + float friction = myHelpers->ReadFloat32(0x196F190, true); + float collisions = myHelpers->ReadFloat32(0x196F194, true); + float tiresSlip = myHelpers->ReadFloat32(0x196F188, true); + int speed = myHelpers->ReadInt32(0x196FEBC, true); + std::string msg = "spring: " + std::to_string(spring) + " | friction: " + std::to_string(friction) + + " | collisions: " + std::to_string(collisions) + " | tires slip: " + std::to_string(tiresSlip) + + " | speed: " + std::to_string(speed); + myHelpers->log((char*)msg.c_str()); + + double percentForce; + if (0.001 > spring && !gameFfbStarted) + { + myHelpers->log("fake spring+friction until game's FFB starts"); + percentForce = 0.3 * SpringStrength / 100.0; + myTriggers->Spring(percentForce); + percentForce = 0.5 * FrictionStrength / 100.0; + myTriggers->Friction(percentForce); + } + else + { + if (!gameFfbStarted) + { + myHelpers->log("game's FFB started"); + gameFfbStarted = true; + } + percentForce = (1.0 * spring) * SpringStrength / 100.0; + myTriggers->Spring(percentForce); + percentForce = (1.0 * friction) * FrictionStrength / 100.0; + myTriggers->Friction(percentForce); + } + + if (0 < collisions) + { + if (0.209 <= collisions && 0.311 >= collisions) + { + myHelpers->log("joint/stripe on the right"); + percentForce = (1.0 * collisions) * JointsAndStripesStrength / 100.0; + myTriggers->Sine(80, 80, percentForce); + myTriggers->Rumble(0, percentForce, 150); + } + else + { + myHelpers->log("collision on the right"); + percentForce = (1.0 * collisions) * CollisionsStrength / 100.0; + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + myTriggers->Rumble(0, percentForce, 150); + } + } + else if (0 > collisions) + { + if (-0.209 >= collisions && -0.311 <= collisions) + { + myHelpers->log("joint/stripe on the left"); + percentForce = (1.0 * collisions) * JointsAndStripesStrength / 100.0; + myTriggers->Sine(80, 80, percentForce); + myTriggers->Rumble(0, -1.0 * percentForce, 150); + } + else + { + myHelpers->log("collision on the left"); + percentForce = (-1.0 * collisions) * CollisionsStrength / 100.0; + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); + myTriggers->Rumble(0, percentForce, 150); + } + } + else + { + myHelpers->log("resetting collision"); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, 0); + } + + if (0 < tiresSlip) + { + myHelpers->log("tires slip left"); + bool highSpeedVibrations = (294 <= speed) && (1.0 * tiresSlip) < (LimitBetweenHighSpeedVibrationsAndTiresSlip / 1000.0); + percentForce = (-1.0 * tiresSlip) * (highSpeedVibrations ? HighSpeedVibrationsStrength : TiresSlipStrength) / 100.0; + myTriggers->Sine(100, 100, percentForce); + + if (!highSpeedVibrations && ((0 == JointsAndStripesStrength && 0 == CollisionsStrength) || (0.001 > collisions && -0.001 < collisions))) + { + myTriggers->Rumble(0, -1.0 * percentForce, 150); + } + } + else if (0 > tiresSlip) + { + myHelpers->log("tires slip right"); + bool highSpeedVibrations = (294 <= speed) && (-1.0 * tiresSlip) < (LimitBetweenHighSpeedVibrationsAndTiresSlip / 1000.0); + percentForce = (-1.0 * tiresSlip) * (highSpeedVibrations ? HighSpeedVibrationsStrength : TiresSlipStrength) / 100.0; + myTriggers->Sine(100, 100, percentForce); + + if (!highSpeedVibrations && ((0 == JointsAndStripesStrength && 0 == CollisionsStrength) || (0.001 > collisions && -0.001 < collisions))) + { + myTriggers->Rumble(0, percentForce, 150); + } + } + + INT_PTR ptr1 = myHelpers->ReadIntPtr(0x199A450, true); + UINT8 gear = myHelpers->ReadByte(ptr1 + 0x398, false); + + if (0 < WheelSpinStrength) + { + INT_PTR ptr1 = myHelpers->ReadIntPtr(0x1948F10, true); + INT_PTR ptr2 = myHelpers->ReadIntPtr(ptr1 + 0x180 + 0xa8 + 0x18, false); + UINT8 power = myHelpers->ReadByte(ptr2 + 0x98, false); + int rpm = myHelpers->ReadInt32(0x1970038, true); + int diff = 0x0A <= power ? 0 : 20; + + if ( + 1 == gear && 10 < speed && ( + ((30 - diff) > speed && 3500 < rpm) + || ((55 - diff) > speed && 5500 < rpm) + || ((75 - diff) > speed && 7000 < rpm) + || ((100 - diff) > speed && 7800 < rpm) + ) + ) + { + percentForce = (((100.0 - speed) / 100.0) * ((rpm * 100.0 / 8500.0) / 100.0)) * WheelSpinStrength / 100.0; + myTriggers->Sine(120, 120, percentForce); + myTriggers->Rumble(0, percentForce, 150); + + msg = "tires spin: gear: " + std::to_string(gear) + " | speed: " + std::to_string(speed) + + " | rpm: " + std::to_string(rpm) + " | force: " + std::to_string(percentForce); + myHelpers->log((char*)msg.c_str()); + } + else if ( + 2 == gear && 10 < speed && ( + ((110 - (2 * diff)) > speed && 5000 < rpm) + || ((130 - (2 * diff)) > speed && 6000 < rpm) + || ((145 - (2 * diff)) > speed && 6500 < rpm) + || ((160 - (2 * diff)) > speed && 7000 < rpm) + ) + ) + { + percentForce = (((160.0 - speed) / 150.0) * ((rpm * 100.0 / 8500.0) / 100.0)) * WheelSpinStrength / 100.0; + myTriggers->Sine(120, 120, percentForce); + myTriggers->Rumble(0, percentForce, 150); + + msg = "tires spin: gear: " + std::to_string(gear) + " | speed: " + std::to_string(speed) + + " | rpm: " + std::to_string(rpm) + " | force: " + std::to_string(percentForce); + myHelpers->log((char*)msg.c_str()); + } + } + + if (0 < GearChangeStrength) + { + ptr1 = myHelpers->ReadIntPtr(0x199A468, true); + float time = myHelpers->ReadFloat32(ptr1 + 0x18, false); + + if (oldgear != gear && 0 < gear && 0 < time) + { + msg = "oldgear: " + std::to_string(oldgear) + " | gear: " + std::to_string(gear) + + " | time: " + std::to_string(time) + " | speed: " + std::to_string(speed); + myHelpers->log((char*)msg.c_str()); + } + + if (oldgear != gear && 0 < gear && 0.5 < time && 0.1 <= speed) + { + SDL_CreateThread(GearChangeThread, "GearChangeThread", (void*)NULL); + } + oldgear = gear; + } + } + return 0; +} + +void WMMT5::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers){ + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) { - init = true; myTriggers = triggers; myConstants = constants; myHelpers = helpers; - SDL_CreateThread(InputThread, "InputThread", (void*)NULL); - SDL_CreateThread(SpamThread, "SpamThread", (void*)NULL); - } - - float spring = helpers->ReadFloat32(0x196F18C, true); - float friction = helpers->ReadFloat32(0x196F190, true); - float collisions = helpers->ReadFloat32(0x196F194, true); - float tiresSlip = helpers->ReadFloat32(0x196F188, true); - int speed = helpers->ReadInt32(0x196FEBC, true); - std::string msg = "spring: " + std::to_string(spring) + " | friction: " + std::to_string(friction) - + " | collisions: " + std::to_string(collisions) + " | tires slip: " + std::to_string(tiresSlip) - + " | speed: " + std::to_string(speed); - helpers->log((char*)msg.c_str()); - - double percentForce; - if (0.001 > spring && !gameFfbStarted) - { - helpers->log("fake spring+friction until game's FFB starts"); - percentForce = 0.3 * SpringStrength / 100.0; - triggers->Spring(percentForce); - percentForce = 0.5 * FrictionStrength / 100.0; - triggers->Friction(percentForce); - } - else - { - if (!gameFfbStarted) - { - helpers->log("game's FFB started"); - gameFfbStarted = true; - } - percentForce = (1.0 * spring) * SpringStrength / 100.0; - triggers->Spring(percentForce); - percentForce = (1.0 * friction) * FrictionStrength / 100.0; - triggers->Friction(percentForce); - } - - if (0 < collisions) - { - if (0.209 <= collisions && 0.311 >= collisions) - { - helpers->log("joint/stripe on the right"); - percentForce = (1.0 * collisions) * JointsAndStripesStrength / 100.0; - triggers->Sine(80, 80, percentForce); - triggers->Rumble(0, percentForce, 150); - } - else - { - helpers->log("collision on the right"); - percentForce = (1.0 * collisions) * CollisionsStrength / 100.0; - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - triggers->Rumble(0, percentForce, 150); - } - } - else if (0 > collisions) - { - if (-0.209 >= collisions && -0.311 <= collisions) - { - helpers->log("joint/stripe on the left"); - percentForce = (1.0 * collisions) * JointsAndStripesStrength / 100.0; - triggers->Sine(80, 80, percentForce); - triggers->Rumble(0, -1.0 * percentForce, 150); - } - else - { - helpers->log("collision on the left"); - percentForce = (-1.0 * collisions) * CollisionsStrength / 100.0; - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - triggers->Rumble(0, percentForce, 150); - } - } - else - { - helpers->log("resetting collision"); - triggers->Constant(constants->DIRECTION_FROM_LEFT, 0); - } - - if (0 < tiresSlip) - { - helpers->log("tires slip left"); - bool highSpeedVibrations = (294 <= speed) && (1.0 * tiresSlip) < (LimitBetweenHighSpeedVibrationsAndTiresSlip / 1000.0); - percentForce = (-1.0 * tiresSlip) * (highSpeedVibrations ? HighSpeedVibrationsStrength : TiresSlipStrength) / 100.0; - triggers->Sine(100, 100, percentForce); - - if (!highSpeedVibrations && ((0 == JointsAndStripesStrength && 0 == CollisionsStrength) || (0.001 > collisions && -0.001 < collisions))) - { - triggers->Rumble(0, -1.0 * percentForce, 150); - } - } - else if (0 > tiresSlip) - { - helpers->log("tires slip right"); - bool highSpeedVibrations = (294 <= speed) && (-1.0 * tiresSlip) < (LimitBetweenHighSpeedVibrationsAndTiresSlip / 1000.0); - percentForce = (-1.0 * tiresSlip) * (highSpeedVibrations ? HighSpeedVibrationsStrength : TiresSlipStrength) / 100.0; - triggers->Sine(100, 100, percentForce); - - if (!highSpeedVibrations && ((0 == JointsAndStripesStrength && 0 == CollisionsStrength) || (0.001 > collisions && -0.001 < collisions))) - { - triggers->Rumble(0, percentForce, 150); - } - } - - INT_PTR ptr1 = helpers->ReadIntPtr(0x199A450, true); - UINT8 gear = helpers->ReadByte(ptr1 + 0x398, false); - - if (0 < WheelSpinStrength) - { - INT_PTR ptr1 = myHelpers->ReadIntPtr(0x1948F10, true); - INT_PTR ptr2 = myHelpers->ReadIntPtr(ptr1 + 0x180 + 0xa8 + 0x18, false); - UINT8 power = myHelpers->ReadByte(ptr2 + 0x98, false); - int rpm = helpers->ReadInt32(0x1970038, true); - int diff = 0x0A <= power ? 0 : 20; - - if ( - 1 == gear && 10 < speed && ( - ((30 - diff) > speed && 3500 < rpm) - || ((55 - diff) > speed && 5500 < rpm) - || ((75 - diff) > speed && 7000 < rpm) - || ((100 - diff) > speed && 7800 < rpm) - ) - ) - { - percentForce = (((100.0 - speed) / 100.0) * ((rpm * 100.0 / 8500.0) / 100.0)) * WheelSpinStrength / 100.0; - triggers->Sine(120, 120, percentForce); - triggers->Rumble(0, percentForce, 150); - - msg = "tires spin: gear: " + std::to_string(gear) + " | speed: " + std::to_string(speed) - + " | rpm: " + std::to_string(rpm) + " | force: " + std::to_string(percentForce); - helpers->log((char*)msg.c_str()); - } - else if ( - 2 == gear && 10 < speed && ( - ((110 - (2 * diff)) > speed && 5000 < rpm) - || ((130 - (2 * diff)) > speed && 6000 < rpm) - || ((145 - (2 * diff)) > speed && 6500 < rpm) - || ((160 - (2 * diff)) > speed && 7000 < rpm) - ) - ) - { - percentForce = (((160.0 - speed) / 150.0) * ((rpm * 100.0 / 8500.0) / 100.0)) * WheelSpinStrength / 100.0; - triggers->Sine(120, 120, percentForce); - triggers->Rumble(0, percentForce, 150); - - msg = "tires spin: gear: " + std::to_string(gear) + " | speed: " + std::to_string(speed) - + " | rpm: " + std::to_string(rpm) + " | force: " + std::to_string(percentForce); - helpers->log((char*)msg.c_str()); - } - } - - if (0 < GearChangeStrength) - { - ptr1 = helpers->ReadIntPtr(0x199A468, true); - float time = helpers->ReadFloat32(ptr1 + 0x18, false); - - if (oldgear != gear && 0 < gear && 0 < time) - { - msg = "oldgear: " + std::to_string(oldgear) + " | gear: " + std::to_string(gear) - + " | time: " + std::to_string(time) + " | speed: " + std::to_string(speed); - helpers->log((char*)msg.c_str()); - } - - if (oldgear != gear && 0 < gear && 0.5 < time && 0.1 <= speed) - { - SDL_CreateThread(GearChangeThread, "GearChangeThread", (void*)NULL); - } - oldgear = gear; - } + } } \ No newline at end of file diff --git a/Game Files/WMMT5.h b/Game Files/WMMT5.h index da1dabb..b9b34f3 100644 --- a/Game Files/WMMT5.h +++ b/Game Files/WMMT5.h @@ -14,7 +14,6 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #pragma once #include "../Common Files/Game.h" class WMMT5 : public Game { - int lastWasStop = 0; public: void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); diff --git a/Game Files/WackyRaces.cpp b/Game Files/WackyRaces.cpp index 8941ee6..d179b2a 100644 --- a/Game Files/WackyRaces.cpp +++ b/Game Files/WackyRaces.cpp @@ -13,6 +13,11 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include "WackyRaces.h" +#include "SDL.h" +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; +static SDL_Event e; int ttx2wr(int ffRaw) { switch (ffRaw) { @@ -83,53 +88,58 @@ int ttx2wr(int ffRaw) { } } -void WackyRaces::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { - - int ff = 0; - +static int RunningThread(void* ptr) +{ + int cnt; + for (cnt = 0; cnt >= 0; ++cnt) { - long ffAddress = helpers->ReadInt32(0x7E00590, /* isRelativeOffset*/ true); - int ffRaw = helpers->ReadInt32(ffAddress + 0x45, /* isRelativeOffset */ false); - int lampArray[7] = { 16, 1024, 512, 128, 8, 256, 16384 }; - for (int i = 0; i < 7; i++) { - if ((ffRaw & lampArray[i]) == lampArray[i]) { - ffRaw -= lampArray[i]; - } - }; - ff = ttx2wr(ffRaw); - } + int ff = 0; - //helpers->log("got value: "); - //std::string ffs = std::to_string(ff); - //helpers->log((char *)ffs.c_str()); + { + long ffAddress = myHelpers->ReadInt32(0x7E00590, /* isRelativeOffset*/ true); + int ffRaw = myHelpers->ReadInt32(ffAddress + 0x45, /* isRelativeOffset */ false); + int lampArray[7] = { 16, 1024, 512, 128, 8, 256, 16384 }; + for (int i = 0; i < 7; i++) { + if ((ffRaw & lampArray[i]) == lampArray[i]) { + ffRaw -= lampArray[i]; + } + }; + ff = ttx2wr(ffRaw); + } - if (ff > 15) - { - helpers->log("moving wheel left"); - // assume that 30 is the weakest and 16 is the strongest - double percentForce = (31 - ff) / 15.0; - double percentLength = 100; - // direction from left => makes wheel turn right - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); // old logic: 31 - ff - lastWasStop = 0; - } - else if (ff > 0) - { - helpers->log("moving wheel right"); - // assume that 1 is the strongest and 15 is the weakest - double percentForce = (16 - ff) / 15.0; - double percentLength = 100; - // direction from right => makes wheel turn left - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); // old logic: 15 - ff - lastWasStop = 0; - } - else - { - if (lastWasStop == 0) { - triggers->Constant(constants->DIRECTION_FROM_LEFT, 0); // just pass the hash of 0 strength so we update lastEffectHash & lastEffectTime - lastWasStop = 1; + if (ff > 15) + { + myHelpers->log("moving wheel left"); + double percentForce = (31 - ff) / 15.0; + double percentLength = 100; + myTriggers->Rumble(0, percentForce, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce); + } + else if (ff > 0) + { + myHelpers->log("moving wheel right"); + double percentForce = (16 - ff) / 15.0; + double percentLength = 100; + myTriggers->Rumble(percentForce, 0, percentLength); + myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce); } } + return 0; +} + +void WackyRaces::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) { + + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + + SDL_Thread* thread; + thread = SDL_CreateThread(RunningThread, "RunningThread", (void*)NULL); + + while (SDL_WaitEvent(&e) != 0) + { + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + } } \ No newline at end of file diff --git a/Game Files/WackyRaces.h b/Game Files/WackyRaces.h index 21b5729..4651f51 100644 --- a/Game Files/WackyRaces.h +++ b/Game Files/WackyRaces.h @@ -15,7 +15,6 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include "../Common Files/Game.h" class WackyRaces : public Game { - int lastWasStop = 0; public: void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers);