1
0
mirror of synced 2024-11-28 00:20:52 +01:00
FFBArcadePlugin/Game Files/RoadFighters3D.cpp
Aaron M eeecf479e1 Added steering write to Road Fighters after error hack
Axis doesn't write values until someone moves axis so this stops it flying to left on startup if they havent moved axis
2019-10-28 09:22:09 +13:00

1360 lines
51 KiB
C++

/*This file is part of FFB Arcade Plugin.
FFB Arcade Plugin is free software : you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
FFB Arcade Plugin is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>.
*/
#include <string>
#include "SDL.h"
#include "RoadFighters3D.h"
#include <Windows.h>
static EffectTriggers *myTriggers;
static EffectConstants *myConstants;
static Helpers *myHelpers;
extern HINSTANCE gl_hjgtDll;
extern HINSTANCE gl_hlibavs;
extern int joystick_index1;
extern int joystick_index2;
extern SDL_Joystick* GameController2;
static bool avoiderror = true;
static bool testbuttonA;
static bool servicebuttonA;
static bool threedeebuttonA;
static bool viewbuttonA;
static bool leverupA;
static bool leverdownA;
static bool leverleftA;
static bool leverrightA;
static bool stophack;
static SDL_Event e;
static void MEMwrite(void *adr, void *ptr, int size)
{
DWORD OldProtection;
VirtualProtect(adr, size, PAGE_EXECUTE_READWRITE, &OldProtection);
memcpy(adr, ptr, size);
VirtualProtect(adr, size, OldProtection, &OldProtection);
}
static wchar_t *settingsFilename = TEXT(".\\FFBPlugin.ini");
static int CabinetID = GetPrivateProfileInt(TEXT("Settings"), TEXT("CabinetID"), 0, settingsFilename);
static int Only2D = GetPrivateProfileInt(TEXT("Settings"), TEXT("Only2D"), 0, settingsFilename);
static int HackToSkipMenuError = GetPrivateProfileInt(TEXT("Settings"), TEXT("HackToSkipMenuError"), 0, settingsFilename);
static int HackToCloseLibmovieErrorAuto = GetPrivateProfileInt(TEXT("Settings"), TEXT("HackToCloseLibmovieErrorAuto"), 0, settingsFilename);
static int InputDeviceWheelEnable = GetPrivateProfileInt(TEXT("Settings"), TEXT("InputDeviceWheelEnable"), 0, settingsFilename);
static int InputDeviceWheelSteeringAxis = GetPrivateProfileInt(TEXT("Settings"), TEXT("InputDeviceWheelSteeringAxis"), 0, settingsFilename);
static int InputDeviceWheelAcclAxis = GetPrivateProfileInt(TEXT("Settings"), TEXT("InputDeviceWheelAcclAxis"), 0, settingsFilename);
static int InputDeviceWheelBrakeAxis = GetPrivateProfileInt(TEXT("Settings"), TEXT("InputDeviceWheelBrakeAxis"), 0, settingsFilename);
static int InputDeviceWheelReverseAxis = GetPrivateProfileInt(TEXT("Settings"), TEXT("InputDeviceWheelReverseAxis"), 0, settingsFilename);
static int InputDeviceCombinedPedals = GetPrivateProfileInt(TEXT("Settings"), TEXT("InputDeviceCombinedPedals"), 0, settingsFilename);
static int SteeringDeadzone = GetPrivateProfileInt(TEXT("Settings"), TEXT("SteeringDeadzone"), 0, settingsFilename);
static int PedalDeadzone = GetPrivateProfileInt(TEXT("Settings"), TEXT("PedalDeadzone"), 0, settingsFilename);
static int SequentialGears = GetPrivateProfileInt(TEXT("Settings"), TEXT("SequentialGears"), 0, settingsFilename);
static int FFBMode = GetPrivateProfileInt(TEXT("Settings"), TEXT("FFBMode"), 0, settingsFilename);
static int ShowButtonNumbersForSetup = GetPrivateProfileInt(TEXT("Settings"), TEXT("ShowButtonNumbersForSetup"), 0, settingsFilename);
static int ShowAxisForSetup = GetPrivateProfileInt(TEXT("Settings"), TEXT("ShowAxisForSetup"), 0, settingsFilename);
static int ExitButton = GetPrivateProfileInt(TEXT("Settings"), TEXT("ExitButton"), 0, settingsFilename);
static int TestButton = GetPrivateProfileInt(TEXT("Settings"), TEXT("TestButton"), 0, settingsFilename);
static int ServiceButton = GetPrivateProfileInt(TEXT("Settings"), TEXT("ServiceButton"), 0, settingsFilename);
static int CreditButton = GetPrivateProfileInt(TEXT("Settings"), TEXT("CreditButton"), 0, settingsFilename);
static int ViewButton = GetPrivateProfileInt(TEXT("Settings"), TEXT("ViewButton"), 0, settingsFilename);
static int ThreeDimensionalButton = GetPrivateProfileInt(TEXT("Settings"), TEXT("ThreeDimensionalButton"), 0, settingsFilename);
static int leverUp = GetPrivateProfileInt(TEXT("Settings"), TEXT("leverUp"), 0, settingsFilename);
static int leverDown = GetPrivateProfileInt(TEXT("Settings"), TEXT("leverDown"), 0, settingsFilename);
static int leverLeft = GetPrivateProfileInt(TEXT("Settings"), TEXT("leverLeft"), 0, settingsFilename);
static int leverRight = GetPrivateProfileInt(TEXT("Settings"), TEXT("leverRight"), 0, settingsFilename);
static int ExitButtonDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("ExitButtonDevice2"), 0, settingsFilename);
static int TestButtonDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("TestButtonDevice2"), 0, settingsFilename);
static int ServiceButtonDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("ServiceButtonDevice2"), 0, settingsFilename);
static int CreditButtonDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("CreditButtonDevice2"), 0, settingsFilename);
static int ViewButtonDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("ViewButtonDevice2"), 0, settingsFilename);
static int ThreeDimensionalButtonDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("ThreeDimensionalButtonDevice2"), 0, settingsFilename);
static int leverUpDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("leverUpDevice2"), 0, settingsFilename);
static int leverDownDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("leverDownDevice2"), 0, settingsFilename);
static int leverLeftDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("leverLeftDevice2"), 0, settingsFilename);
static int leverRightDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("leverRightDevice2"), 0, settingsFilename);
static int RunningThread(void *ptr)
{
int cnt;
for (cnt = 0; cnt >= 0; ++cnt)
{
int menuvalue = myHelpers->ReadIntPtr((INT_PTR)gl_hjgtDll + 0x0094BFFC, false);
int menuvalue1 = myHelpers->ReadIntPtr((INT_PTR)menuvalue + 0x46C, false);
int serviceread3 = myHelpers->ReadIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, false);
int timer = myHelpers->ReadIntPtr((INT_PTR)gl_hjgtDll + 0x954394, false);
int cabid = myHelpers->ReadByte((INT_PTR)gl_hjgtDll + 0x951034, false);
int cabid2 = myHelpers->ReadByte((INT_PTR)gl_hjgtDll + 0x952B9C, false);
float timeroutofmenu = myHelpers->ReadByte((INT_PTR)gl_hjgtDll + 0x94BEE8, false);
uintptr_t jgtBase;
jgtBase = (uintptr_t)GetModuleHandleA("jgt.dll");
if (CabinetID == 2)
{
MEMwrite((void*)(jgtBase + 0x951034), (void*)"\x01", 1);
MEMwrite((void*)(jgtBase + 0x42EBB9), (void*)"\x75", 1);
}
else if (CabinetID == 3)
{
MEMwrite((void*)(jgtBase + 0x951034), (void*)"\x02", 1);
MEMwrite((void*)(jgtBase + 0x42EBB9), (void*)"\x75", 1);
}
else if (CabinetID == 4)
{
MEMwrite((void*)(jgtBase + 0x951034), (void*)"\x03", 1);
MEMwrite((void*)(jgtBase + 0x42EBB9), (void*)"\x75", 1);
}
else
{
MEMwrite((void*)(jgtBase + 0x951034), (void*)"\x00", 1);
MEMwrite((void*)(jgtBase + 0x42EBB9), (void*)"\x74", 1);
}
if (HackToCloseLibmovieErrorAuto == 1)
{
//Remove fucken window error popup
HWND hWnd = FindWindowA(0, ("Libmovie Error Report"));
if (hWnd > NULL)
{
SendMessage(hWnd, WM_CLOSE, NULL, NULL);
}
}
if (HackToSkipMenuError == 1)
{
// Hack to quickly bypass error at start
if (avoiderror)
{
if (cabid > 0)
{
if (menuvalue1 > 700000)
{
myHelpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, 0x02, false);
}
if (menuvalue1 == 0)
{
SDL_Delay(50);
myHelpers->WriteIntPtr((INT_PTR)menuvalue + 0x46C, 0x0F, false);
}
if (menuvalue1 == 15)
{
myHelpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, 0x01, false);
}
if (timeroutofmenu != 0)
{
myHelpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, 0x00, false);
avoiderror = false;
}
}
else
{
if (menuvalue1 > 700000)
{
myHelpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, 0x01, false);
}
if (timeroutofmenu != 0)
{
myHelpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, 0x00, false);
myHelpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B39, 0x7F, false);
avoiderror = false;
}
}
}
}
if (Only2D == 1)
{
//2D Only
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x24C9F, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x24CA0, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x24CA1, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x24CAA, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x24CAB, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x24CAC, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x24CBA, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x24CBB, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x24CBC, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x478F, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x4790, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x4791, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x3E6DB, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x3E6DC, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x3E6DD, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x1391D8, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x1391D9, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x1391DA, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x1391EF, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x1391F0, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x1391F1, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x5962F, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x59630, false);
myHelpers->WriteNop((INT_PTR)gl_hjgtDll + 0x59631, false);
int TwoDee1 = myHelpers->ReadIntPtr((INT_PTR)gl_hjgtDll + 0x00946DA0, false);
int TwoDee2 = myHelpers->ReadIntPtr((INT_PTR)TwoDee1 + 0x38, false);
int TwoDee3 = myHelpers->ReadIntPtr((INT_PTR)TwoDee2 + 0x94, false);
myHelpers->WriteIntPtr((INT_PTR)TwoDee3 + 0x74, 0x00, false);
}
if (InputDeviceWheelEnable == 1)
{
//Write New Calibration Values
myHelpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B00, 0x00, false);
myHelpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B01, 0x7F, false);
myHelpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B0C, 0x00, false);
myHelpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B0D, 0xFF, false);
myHelpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B14, 0x00, false);
myHelpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B15, 0xFF, false);
myHelpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B10, 0x00, false);
myHelpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B11, 0xFF, false);
myHelpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B21, 0x00, false);
// Remove error flashing
myHelpers->WriteByte((INT_PTR)gl_hjgtDll + 0x951154, 0x01, false);
myHelpers->WriteByte((INT_PTR)gl_hjgtDll + 0x951155, 0x01, false);
myHelpers->WriteByte((INT_PTR)gl_hjgtDll + 0x951156, 0x01, false);
}
UINT8 ff1 = myHelpers->ReadByte((INT_PTR)gl_hjgtDll + 0x7D2BB9, false);
UINT8 ff2 = myHelpers->ReadByte((INT_PTR)gl_hjgtDll + 0x7D2BBA, false);
UINT8 ff3 = myHelpers->ReadByte((INT_PTR)gl_hjgtDll + 0x7D2BBB, false);
UINT8 ff4 = myHelpers->ReadByte((INT_PTR)gl_hjgtDll + 0x7D2BBC, false);
//Change timer back to 0 when test menu & FFB Only while timer above 0
if ((timer != 0) || (menuvalue1 == 0x00))
{
if (menuvalue1 == 0x00)
{
myHelpers->WriteFloat32((INT_PTR)gl_hjgtDll + 0x954394, 0, false);
}
if ((ff3 != 0x00) && (ff4 != 0x00))
{
if (FFBMode == 0)
{
if ((ff2 > 0x00) & (ff2 < 0x40))
{
double percentForce = (ff2) / 63.0;
double percentLength = 100;
myTriggers->LeftRight(percentForce, percentForce, percentLength);
myTriggers->Sine(120, 120, percentForce);
}
if ((ff1 > 0x00) & (ff1 < 0x08))
{
//helpers->log("moving wheel left");
double percentForce = (ff1) / 7.0;
double percentLength = 100;
myTriggers->LeftRight(0, percentForce, percentLength);
myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce);
}
else if ((ff1 > 0x07) & (ff1 < 0x10))
{
//helpers->log("moving wheel right");
double percentForce = (16 - ff1) / 8.0;
double percentLength = 100;
myTriggers->LeftRight(percentForce, 0, percentLength);
myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce);
}
}
else if (FFBMode == 1)
{
if ((ff2 > 0x00) & (ff2 < 0x40))
{
double percentForce = (ff2) / 63.0;
double percentLength = 100;
myTriggers->LeftRight(pow(percentForce, 0.5), pow(percentForce, 0.5), percentLength);
myTriggers->Sine(120, 120, pow(percentForce, 0.5));
}
if ((ff1 > 0x00) & (ff1 < 0x08))
{
//helpers->log("moving wheel left");
double percentForce = (ff1) / 7.0;
double percentLength = 100;
myTriggers->LeftRight(pow(percentForce, 0.5), 0, percentLength);
myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, (pow(percentForce, 0.5)));
}
else if ((ff1 > 0x07) & (ff1 < 0x10))
{
//helpers->log("moving wheel right");
double percentForce = (16 - ff1) / 8.0;
double percentLength = 100;
myTriggers->LeftRight(0, pow(percentForce, 0.5), percentLength);
myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, (pow(percentForce, 0.5)));
}
}
}
}
}
return 0;
}
void RoadFighters3D::FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers) {
if (InputDeviceWheelEnable == 1)
{
SDL_Thread *thread;
thread = SDL_CreateThread(RunningThread, "RunningThread", (void *)NULL);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18D84B, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18D84C, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18D84D, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18D852, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18D853, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18D854, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18D85C, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18D85D, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18D85E, false);
// Spicetools shit below. STOPS test buttons showing in menu etc if not nop
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DA89, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DA8A, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DA8B, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DA8C, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DA8D, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DA8E, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DAA3, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DAA4, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DAA5, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DA97, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DA98, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DA99, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DA9A, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DA9B, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x18DA9C, false);
// Dpad stuff here to set as any button
char DpadUpChar[256];
char DpadDownChar[256];
char DpadLeftChar[256];
char DpadRightChar[256];
char DpadUpCharDevice2[256];
char DpadDownCharDevice2[256];
char DpadLeftCharDevice2[256];
char DpadRightCharDevice2[256];
GetPrivateProfileStringA("Settings", "DpadUp", "", DpadUpChar, 256, ".\\FFBplugin.ini");
GetPrivateProfileStringA("Settings", "DpadDown", "", DpadDownChar, 256, ".\\FFBplugin.ini");
GetPrivateProfileStringA("Settings", "DpadLeft", "", DpadLeftChar, 256, ".\\FFBplugin.ini");
GetPrivateProfileStringA("Settings", "DpadRight", "", DpadRightChar, 256, ".\\FFBplugin.ini");
GetPrivateProfileStringA("Settings", "DpadUpDevice2", "", DpadUpCharDevice2, 256, ".\\FFBplugin.ini");
GetPrivateProfileStringA("Settings", "DpadDownDevice2", "", DpadDownCharDevice2, 256, ".\\FFBplugin.ini");
GetPrivateProfileStringA("Settings", "DpadLeftDevice2", "", DpadLeftCharDevice2, 256, ".\\FFBplugin.ini");
GetPrivateProfileStringA("Settings", "DpadRightDevice2", "", DpadRightCharDevice2, 256, ".\\FFBplugin.ini");
std::string exit("ExitButton");
std::string test("TestButton");
std::string service("ServiceButton");
std::string coin("CoinButton");
std::string view("ViewButton");
std::string three("ThreeDimensionalButton");
std::string lvup("leverUp");
std::string lvdown("leverDown");
std::string lvleft("leverLeft");
std::string lvright("leverRight");
std::string exit2("ExitButtonDevice2");
std::string test2("TestButtonDevice2");
std::string service2("ServiceButtonDevice2");
std::string coin2("CoinButtonDevice2");
std::string view2("ViewButtonDevice2");
std::string three2("ThreeDimensionalButtonDevice2");
std::string lvup2("leverUpDevice2");
std::string lvdown2("leverDownDevice2");
std::string lvleft2("leverLeftDevice2");
std::string lvright2("leverRightDevice2");
std::string dpdup(DpadUpChar);
std::string dpddown(DpadDownChar);
std::string dpdleft(DpadLeftChar);
std::string dpdright(DpadRightChar);
std::string dpdup2(DpadUpCharDevice2);
std::string dpddown2(DpadDownCharDevice2);
std::string dpdleft2(DpadLeftCharDevice2);
std::string dpdright2(DpadRightCharDevice2);
int serviceread = helpers->ReadIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, true);
int creditnumber = helpers->ReadIntPtr((INT_PTR)gl_hlibavs + 0x00042C10, false);
int creditnumber1 = helpers->ReadIntPtr((INT_PTR)creditnumber + 0x20, false);
int gearnumber = helpers->ReadIntPtr((INT_PTR)gl_hjgtDll + 0x00953F70, false);
int gearnumber1 = helpers->ReadIntPtr((INT_PTR)gearnumber + 0x5C, false);
int gearnumber2 = helpers->ReadIntPtr((INT_PTR)gearnumber1 + 0x390, false);
int gearnumber3 = helpers->ReadIntPtr((INT_PTR)gearnumber2 + 0x18, false);
//Added 2nd device stuff from here
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);
SDL_JoystickGUID guid, dev_guid;
int numJoysticks = SDL_NumJoysticks();
std::string njs = std::to_string(numJoysticks);
((char)njs.c_str());
for (int i = 0; i < SDL_NumJoysticks(); i++)
{
SDL_Joystick* js2 = SDL_JoystickOpen(i);
joystick_index2 = SDL_JoystickInstanceID(js2);
SDL_JoystickGUID guid = SDL_JoystickGetGUID(js2);
char guid_str[1024];
SDL_JoystickGetGUIDString(guid, guid_str, sizeof(guid_str));
const char* name = SDL_JoystickName(js2);
char text[256];
sprintf(text, "Joystick: %d / Name: %s / GUID: %s\n", i, name, guid_str);
guid = SDL_JoystickGetGUIDFromString(joystick_guid);
dev_guid = SDL_JoystickGetGUID(js2);
SDL_JoystickClose(js2);
if (!memcmp(&guid, &dev_guid, sizeof(SDL_JoystickGUID)))
{
GameController2 = SDL_JoystickOpen(i);
break;
}
}
if (SequentialGears == 1)
{
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x95DDA, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x95DDB, false);
helpers->WriteNop((INT_PTR)gl_hjgtDll + 0x95DDC, false);
}
const int WHEEL_DEAD_ZONE = (SteeringDeadzone * 100.0);
const int ACCL_DEAD_ZONE = (1 + PedalDeadzone * 100.0);
const int BRAKE_DEAD_ZONE = (1 + PedalDeadzone * 100.0);
const int SETUP_DEAD_ZONE = 20000;
while (SDL_WaitEvent(&e) != 0)
{
int menuvalue = myHelpers->ReadIntPtr((INT_PTR)gl_hjgtDll + 0x0094BFFC, false);
int menuvalue1 = myHelpers->ReadIntPtr((INT_PTR)menuvalue + 0x46C, false);
myTriggers = triggers;
myConstants = constants;
myHelpers = helpers;
if ((e.type == SDL_JOYAXISMOTION) & (ShowAxisForSetup == 0))
{
if (e.jaxis.which == joystick_index1)
{
if (e.jaxis.axis == InputDeviceWheelSteeringAxis)
{
//Left of dead zone
if (e.jaxis.value < -WHEEL_DEAD_ZONE)
{
e.jaxis.value = e.jaxis.value - WHEEL_DEAD_ZONE;
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B39, (128 + (e.jaxis.value + WHEEL_DEAD_ZONE) / 255), false);
}
//Right of dead zone
else if (e.jaxis.value > WHEEL_DEAD_ZONE)
{
e.jaxis.value = e.jaxis.value + WHEEL_DEAD_ZONE;
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B39, (127 + (e.jaxis.value - WHEEL_DEAD_ZONE) / 255), false);
}
else if ((e.jaxis.value < WHEEL_DEAD_ZONE) & (e.jaxis.value > -WHEEL_DEAD_ZONE))
{
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B39, 0x7F, false);
}
}
if (InputDeviceWheelReverseAxis == 1)
{
if (InputDeviceCombinedPedals == 1)
{
if (e.jaxis.axis == InputDeviceWheelAcclAxis)
{
if (e.jaxis.value < -ACCL_DEAD_ZONE)
{
e.jaxis.value = e.jaxis.value + ACCL_DEAD_ZONE;
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B3D, ((-e.jaxis.value + ACCL_DEAD_ZONE) / 128.5), false);
}
else if (e.jaxis.value > ACCL_DEAD_ZONE)
{
e.jaxis.value = e.jaxis.value - ACCL_DEAD_ZONE;
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B41, ((e.jaxis.value + ACCL_DEAD_ZONE) / 128), false);
}
else if ((e.jaxis.value < ACCL_DEAD_ZONE) & (e.jaxis.value > -ACCL_DEAD_ZONE))
{
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B41, 0x00, false);
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B3D, 0x00, false);
}
}
}
else
{
if (e.jaxis.axis == InputDeviceWheelAcclAxis)
{
if (e.jaxis.value < -ACCL_DEAD_ZONE)
{
e.jaxis.value = (e.jaxis.value / 255);
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B3D, 127 - e.jaxis.value, false);
}
else if (e.jaxis.value > ACCL_DEAD_ZONE)
{
e.jaxis.value = (e.jaxis.value / 255);
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B3D, 128 - e.jaxis.value, false);
}
}
else if (e.jaxis.axis == InputDeviceWheelBrakeAxis)
{
if (e.jaxis.value < -BRAKE_DEAD_ZONE)
{
e.jaxis.value = (e.jaxis.value / 255);
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B41, 127 - e.jaxis.value, false);
}
else if (e.jaxis.value > BRAKE_DEAD_ZONE)
{
e.jaxis.value = (e.jaxis.value / 255);
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B41, 128 - e.jaxis.value, false);
}
}
}
}
else
{
if (InputDeviceCombinedPedals == 1)
{
if (e.jaxis.axis == InputDeviceWheelAcclAxis)
{
if (e.jaxis.value < -ACCL_DEAD_ZONE)
{
e.jaxis.value = e.jaxis.value - ACCL_DEAD_ZONE;
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B3D, ((e.jaxis.value + ACCL_DEAD_ZONE) / 128), false);
}
else if (e.jaxis.value > ACCL_DEAD_ZONE)
{
e.jaxis.value = e.jaxis.value + ACCL_DEAD_ZONE;
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B41, ((-e.jaxis.value + ACCL_DEAD_ZONE) / 128), false);
}
else if ((e.jaxis.value < ACCL_DEAD_ZONE) & (e.jaxis.value > -ACCL_DEAD_ZONE))
{
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B41, 0xFF, false);
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B3D, 0xFF, false);
}
}
}
else
{
if (e.jaxis.axis == InputDeviceWheelAcclAxis)
{
if (e.jaxis.value < -ACCL_DEAD_ZONE)
{
e.jaxis.value = (e.jaxis.value / 255);
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B3D, 128 + e.jaxis.value, false);
}
else if (e.jaxis.value > ACCL_DEAD_ZONE)
{
e.jaxis.value = (e.jaxis.value / 255);
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B3D, 127 + e.jaxis.value, false);
}
}
if (e.jaxis.axis == InputDeviceWheelBrakeAxis)
{
if (e.jaxis.value < -BRAKE_DEAD_ZONE)
{
e.jaxis.value = (e.jaxis.value / 255);
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B41, 128 + e.jaxis.value, false);
}
else if (e.jaxis.value > BRAKE_DEAD_ZONE)
{
e.jaxis.value = (e.jaxis.value / 255);
helpers->WriteByte((INT_PTR)gl_hjgtDll + 0x7D2B41, 127 + e.jaxis.value, false);
}
}
}
}
}
}
if (ShowAxisForSetup == 1)
{
if (e.type == SDL_JOYAXISMOTION)
{
if (e.jaxis.which == joystick_index1)
{
if (e.jaxis.axis >= 0)
{
if (e.jaxis.value < -SETUP_DEAD_ZONE)
{
e.jaxis.value = e.jaxis.value - SETUP_DEAD_ZONE;
char buff[100];
sprintf_s(buff, "Axis %d Moved", e.jaxis.axis);
MessageBoxA(NULL, buff, "", NULL);
}
else if (e.jaxis.value > SETUP_DEAD_ZONE)
{
char buff[100];
sprintf_s(buff, "Axis %d Moved", e.jaxis.axis);
MessageBoxA(NULL, buff, "", NULL);
}
}
}
}
}
if (ShowButtonNumbersForSetup == 1)
{
if (e.type == SDL_JOYBUTTONDOWN)
{
if (e.jaxis.which == joystick_index1 || e.jaxis.which == joystick_index2)
{
if (e.jbutton.button >= 0)
{
char buff[100];
sprintf_s(buff, "Button %d Pressed", e.jbutton.button);
MessageBoxA(NULL, buff, "", NULL);
}
}
}
}
if (e.jhat.type == SDL_JOYHATMOTION)
{
if (e.jhat.value == SDL_HAT_CENTERED)
{
if (e.jhat.which == joystick_index1)
{
if (testbuttonA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x02, false);
testbuttonA = false;
}
if (servicebuttonA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x01, false);
servicebuttonA = false;
}
if (viewbuttonA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x400, false);
viewbuttonA = false;
}
if (threedeebuttonA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x800, false);
threedeebuttonA = false;
}
if (leverupA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x1040, false);
leverupA = false;
}
if (leverdownA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x2080, false);
leverdownA = false;
}
if (leverleftA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x4000, false);
leverleftA = false;
}
if (leverrightA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x8000, false);
leverrightA = false;
}
}
else if (e.jhat.which == joystick_index2)
{
if (testbuttonA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x02, false);
testbuttonA = false;
}
if (servicebuttonA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x01, false);
servicebuttonA = false;
}
if (viewbuttonA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x400, false);
viewbuttonA = false;
}
if (threedeebuttonA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x800, false);
threedeebuttonA = false;
}
if (leverupA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x1040, false);
leverupA = false;
}
if (leverdownA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x2080, false);
leverdownA = false;
}
if (leverleftA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x4000, false);
leverleftA = false;
}
if (leverrightA)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x8000, false);
leverrightA = false;
}
}
}
if (e.jhat.value == SDL_HAT_UP)
{
if (e.jhat.which == joystick_index1)
{
if (dpdup.compare(exit) == 0)
{
system("taskkill /f /im spice.exe");
}
if (dpdup.compare(test) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x02, false);
testbuttonA = true;
}
if (dpdup.compare(service) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x01, false);
servicebuttonA = true;
}
if (dpdup.compare(coin) == 0)
{
int credit = helpers->ReadIntPtr((INT_PTR)gl_hlibavs + 0x00042C10, false);
helpers->WriteIntPtr((INT_PTR)credit + 0x20, ++creditnumber1, false);
}
if (dpdup.compare(view) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x400, false);
viewbuttonA = true;
}
if (dpdup.compare(three) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x800, false);
threedeebuttonA = true;
}
if (dpdup.compare(lvup) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x1040, false);
leverupA = true;
}
if (dpdup.compare(lvdown) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x2080, false);
leverdownA = true;
}
if (dpdup.compare(lvleft) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x4000, false);
leverleftA = true;
}
if (dpdup.compare(lvright) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x8000, false);
leverrightA = true;
}
}
else if (e.jhat.which == joystick_index2)
{
if (dpdup2.compare(exit2) == 0)
{
system("taskkill /f /im spice.exe");
}
if (dpdup2.compare(test2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x02, false);
testbuttonA = true;
}
if (dpdup2.compare(service2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x01, false);
servicebuttonA = true;
}
if (dpdup2.compare(coin2) == 0)
{
int credit = helpers->ReadIntPtr((INT_PTR)gl_hlibavs + 0x00042C10, false);
helpers->WriteIntPtr((INT_PTR)credit + 0x20, ++creditnumber1, false);
}
if (dpdup2.compare(view2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x400, false);
viewbuttonA = true;
}
if (dpdup2.compare(three2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x800, false);
threedeebuttonA = true;
}
if (dpdup2.compare(lvup2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x1040, false);
leverupA = true;
}
if (dpdup2.compare(lvdown2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x2080, false);
leverdownA = true;
}
if (dpdup2.compare(lvleft2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x4000, false);
leverleftA = true;
}
if (dpdup2.compare(lvright2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x8000, false);
leverrightA = true;
}
}
}
if (e.jhat.value == SDL_HAT_DOWN)
{
if (e.jhat.which == joystick_index1)
{
if (dpddown.compare(exit) == 0)
{
system("taskkill /f /im spice.exe");
}
if (dpddown.compare(test) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x02, false);
testbuttonA = true;
}
if (dpddown.compare(service) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x01, false);
servicebuttonA = true;
}
if (dpddown.compare(coin) == 0)
{
int credit = helpers->ReadIntPtr((INT_PTR)gl_hlibavs + 0x00042C10, false);
helpers->WriteIntPtr((INT_PTR)credit + 0x20, ++creditnumber1, false);
}
if (dpddown.compare(view) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x400, false);
viewbuttonA = true;
}
if (dpddown.compare(three) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x800, false);
threedeebuttonA = true;
}
if (dpddown.compare(lvup) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x1040, false);
leverupA = true;
}
if (dpddown.compare(lvdown) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x2080, false);
leverdownA = true;
}
if (dpddown.compare(lvleft) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x4000, false);
leverleftA = true;
}
if (dpddown.compare(lvright) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x8000, false);
leverrightA = true;
}
}
else if (e.jhat.which == joystick_index2)
{
if (dpddown2.compare(exit2) == 0)
{
system("taskkill /f /im spice.exe");
}
if (dpdup2.compare(test2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x02, false);
testbuttonA = true;
}
if (dpddown2.compare(service2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x01, false);
servicebuttonA = true;
}
if (dpddown2.compare(coin2) == 0)
{
int credit = helpers->ReadIntPtr((INT_PTR)gl_hlibavs + 0x00042C10, false);
helpers->WriteIntPtr((INT_PTR)credit + 0x20, ++creditnumber1, false);
}
if (dpddown2.compare(view2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x400, false);
viewbuttonA = true;
}
if (dpddown2.compare(three2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x800, false);
threedeebuttonA = true;
}
if (dpddown2.compare(lvup2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x1040, false);
leverupA = true;
}
if (dpddown2.compare(lvdown2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x2080, false);
leverdownA = true;
}
if (dpddown2.compare(lvleft2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x4000, false);
leverleftA = true;
}
if (dpddown2.compare(lvright2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x8000, false);
leverrightA = true;
}
}
}
if (e.jhat.value == SDL_HAT_LEFT)
{
if (e.jhat.which == joystick_index1)
{
if (dpdleft.compare(exit) == 0)
{
system("taskkill /f /im spice.exe");
}
if (dpdleft.compare(test) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x02, false);
testbuttonA = true;
}
if (dpdleft.compare(service) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x01, false);
servicebuttonA = true;
}
if (dpdleft.compare(coin) == 0)
{
int credit = helpers->ReadIntPtr((INT_PTR)gl_hlibavs + 0x00042C10, false);
helpers->WriteIntPtr((INT_PTR)credit + 0x20, ++creditnumber1, false);
}
if (dpdleft.compare(view) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x400, false);
viewbuttonA = true;
}
if (dpdleft.compare(three) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x800, false);
threedeebuttonA = true;
}
if (dpdleft.compare(lvup) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x1040, false);
leverupA = true;
}
if (dpdleft.compare(lvdown) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x2080, false);
leverdownA = true;
}
if (dpdleft.compare(lvleft) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x4000, false);
leverleftA = true;
}
if (dpdleft.compare(lvright) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x8000, false);
leverrightA = true;
}
}
else if (e.jhat.which == joystick_index2)
{
if (dpdleft2.compare(exit2) == 0)
{
system("taskkill /f /im spice.exe");
}
if (dpdleft2.compare(test2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x02, false);
testbuttonA = true;
}
if (dpdleft2.compare(service2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x01, false);
servicebuttonA = true;
}
if (dpdleft2.compare(coin2) == 0)
{
int credit = helpers->ReadIntPtr((INT_PTR)gl_hlibavs + 0x00042C10, false);
helpers->WriteIntPtr((INT_PTR)credit + 0x20, ++creditnumber1, false);
}
if (dpdleft2.compare(view2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x400, false);
viewbuttonA = true;
}
if (dpdleft2.compare(three2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x800, false);
threedeebuttonA = true;
}
if (dpdleft2.compare(lvup2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x1040, false);
leverupA = true;
}
if (dpdleft2.compare(lvdown2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x2080, false);
leverdownA = true;
}
if (dpdleft2.compare(lvleft2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x4000, false);
leverleftA = true;
}
if (dpdleft2.compare(lvright2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x8000, false);
leverrightA = true;
}
}
}
if (e.jhat.value == SDL_HAT_RIGHT)
{
if (e.jhat.which == joystick_index1)
{
if (dpdright.compare(exit) == 0)
{
system("taskkill /f /im spice.exe");
}
if (dpdright.compare(test) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x02, false);
testbuttonA = true;
}
if (dpdright.compare(service) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x01, false);
servicebuttonA = true;
}
if (dpdright.compare(coin) == 0)
{
int credit = helpers->ReadIntPtr((INT_PTR)gl_hlibavs + 0x00042C10, false);
helpers->WriteIntPtr((INT_PTR)credit + 0x20, ++creditnumber1, false);
}
if (dpdright.compare(view) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x400, false);
viewbuttonA = true;
}
if (dpdright.compare(three) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x800, false);
threedeebuttonA = true;
}
if (dpdright.compare(lvup) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x1040, false);
leverupA = true;
}
if (dpdright.compare(lvdown) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x2080, false);
leverdownA = true;
}
if (dpdright.compare(lvleft) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x4000, false);
leverleftA = true;
}
if (dpdright.compare(lvright) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x8000, false);
leverrightA = true;
}
}
else if (e.jhat.which == joystick_index2)
{
if (dpdright2.compare(exit2) == 0)
{
system("taskkill /f /im spice.exe");
}
if (dpdright2.compare(test2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x02, false);
testbuttonA = true;
}
if (dpdright2.compare(service2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x01, false);
testbuttonA = true;
}
if (dpdright2.compare(coin2) == 0)
{
int credit = helpers->ReadIntPtr((INT_PTR)gl_hlibavs + 0x00042C10, false);
helpers->WriteIntPtr((INT_PTR)credit + 0x20, ++creditnumber1, false);
}
if (dpdright2.compare(view2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x400, false);
viewbuttonA = true;
}
if (dpdright2.compare(three2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x800, false);
threedeebuttonA = true;
}
if (dpdright2.compare(lvup2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x1040, false);
leverupA = true;
}
if (dpdright2.compare(lvdown2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x2080, false);
leverdownA = true;
}
if (dpdright2.compare(lvleft2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x4000, false);
leverleftA = true;
}
if (dpdright2.compare(lvright2) == 0)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x8000, false);
leverrightA = true;
}
}
}
}
if (e.type == SDL_JOYBUTTONDOWN)
{
if (e.jbutton.which == joystick_index1)
{
if (e.jbutton.button == TestButton)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x02, false);
}
if (e.jbutton.button == ExitButton)
{
system("taskkill /f /im spice.exe");
}
if (e.jbutton.button == ServiceButton)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x01, false);
}
if (e.jbutton.button == CreditButton)
{
int credit = helpers->ReadIntPtr((INT_PTR)gl_hlibavs + 0x00042C10, false);
helpers->WriteIntPtr((INT_PTR)credit + 0x20, ++creditnumber1, false);
}
if (e.jbutton.button == ViewButton)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x400, false);
}
if (e.jbutton.button == ThreeDimensionalButton)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x800, false);
}
if ((e.jbutton.button == leverUp) && (SequentialGears == 0))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x1040, false);
}
if ((e.jbutton.button == leverUp) && (SequentialGears == 1) && (menuvalue1 == 0x00))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x1040, false);
}
if ((e.jbutton.button == leverUp) && (SequentialGears == 1) && (gearnumber3 < 0x06))
{
int Writegearnumber = helpers->ReadIntPtr((INT_PTR)gl_hjgtDll + 0x00953F70, false);
int Writegearnumber1 = helpers->ReadIntPtr((INT_PTR)Writegearnumber + 0x5C, false);
int Writegearnumber2 = helpers->ReadIntPtr((INT_PTR)Writegearnumber1 + 0x390, false);
helpers->WriteIntPtr((INT_PTR)Writegearnumber2 + 0x18, ++gearnumber3, false);
}
if ((e.jbutton.button == leverDown) && (SequentialGears == 0))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x2080, false);
}
if ((e.jbutton.button == leverDown) && (SequentialGears == 1) && (menuvalue1 == 0x00))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x2080, false);
}
if ((e.jbutton.button == leverDown) && (SequentialGears == 1) && (gearnumber3 > 0x01))
{
int Writegearnumber = helpers->ReadIntPtr((INT_PTR)gl_hjgtDll + 0x00953F70, false);
int Writegearnumber1 = helpers->ReadIntPtr((INT_PTR)Writegearnumber + 0x5C, false);
int Writegearnumber2 = helpers->ReadIntPtr((INT_PTR)Writegearnumber1 + 0x390, false);
helpers->WriteIntPtr((INT_PTR)Writegearnumber2 + 0x18, --gearnumber3, false);
}
if (e.jbutton.button == leverLeft)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x4000, false);
}
if (e.jbutton.button == leverRight)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x8000, false);
}
}
else if (e.jbutton.which == joystick_index2)
{
if (e.jbutton.button == TestButtonDevice2)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x02, false);
}
if (e.jbutton.button == ExitButtonDevice2)
{
system("taskkill /f /im spice.exe");
}
if (e.jbutton.button == ServiceButtonDevice2)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x01, false);
}
if (e.jbutton.button == CreditButtonDevice2)
{
int credit = helpers->ReadIntPtr((INT_PTR)gl_hlibavs + 0x00042C10, false);
helpers->WriteIntPtr((INT_PTR)credit + 0x20, ++creditnumber1, false);
}
if (e.jbutton.button == ViewButtonDevice2)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x400, false);
}
if (e.jbutton.button == ThreeDimensionalButtonDevice2)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x800, false);
}
if ((e.jbutton.button == leverUpDevice2) && (SequentialGears == 0))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x1040, false);
}
if ((e.jbutton.button == leverUpDevice2) && (SequentialGears == 1) && (menuvalue1 == 0x00))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x1040, false);
}
if ((e.jbutton.button == leverUpDevice2) && (SequentialGears == 1) && (gearnumber3 < 0x06))
{
int Writegearnumber = helpers->ReadIntPtr((INT_PTR)gl_hjgtDll + 0x00953F70, false);
int Writegearnumber1 = helpers->ReadIntPtr((INT_PTR)Writegearnumber + 0x5C, false);
int Writegearnumber2 = helpers->ReadIntPtr((INT_PTR)Writegearnumber1 + 0x390, false);
helpers->WriteIntPtr((INT_PTR)Writegearnumber2 + 0x18, ++gearnumber3, false);
}
if ((e.jbutton.button == leverDownDevice2) & (SequentialGears == 0))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x2080, false);
}
if ((e.jbutton.button == leverDownDevice2) & (SequentialGears == 1) && (menuvalue1 == 0x00))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x2080, false);
}
if ((e.jbutton.button == leverDownDevice2) & (SequentialGears == 1) & (gearnumber3 > 0x01))
{
int Writegearnumber = helpers->ReadIntPtr((INT_PTR)gl_hjgtDll + 0x00953F70, false);
int Writegearnumber1 = helpers->ReadIntPtr((INT_PTR)Writegearnumber + 0x5C, false);
int Writegearnumber2 = helpers->ReadIntPtr((INT_PTR)Writegearnumber1 + 0x390, false);
helpers->WriteIntPtr((INT_PTR)Writegearnumber2 + 0x18, --gearnumber3, false);
}
if (e.jbutton.button == leverLeftDevice2)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x4000, false);
}
if (e.jbutton.button == leverRightDevice2)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread += 0x8000, false);
}
}
}
if (e.type == SDL_JOYBUTTONUP)
{
if (e.jbutton.which == joystick_index1)
{
if (e.jbutton.button == TestButton)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x02, false);
}
if (e.jbutton.button == ServiceButton)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x01, false);
}
if (e.jbutton.button == ViewButton)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x400, false);
}
if (e.jbutton.button == ThreeDimensionalButton)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x800, false);
}
if ((e.jbutton.button == leverUp) && (SequentialGears == 0))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x1040, false);
}
if ((e.jbutton.button == leverUp) && (SequentialGears == 1) && (menuvalue1 == 0x00))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x1040, false);
}
if ((e.jbutton.button == leverDown) && (SequentialGears == 0))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x2080, false);
}
if ((e.jbutton.button == leverDown) && (SequentialGears == 1) && (menuvalue1 == 0x00))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x2080, false);
}
if (e.jbutton.button == leverLeft)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x4000, false);
}
if (e.jbutton.button == leverRight)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x8000, false);
}
}
else if (e.jbutton.which == joystick_index2)
{
if (e.jbutton.button == TestButtonDevice2)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x02, false);
}
if (e.jbutton.button == ServiceButtonDevice2)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x01, false);
}
if (e.jbutton.button == ViewButtonDevice2)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x400, false);
}
if (e.jbutton.button == ThreeDimensionalButtonDevice2)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x800, false);
}
if ((e.jbutton.button == leverUpDevice2) && (SequentialGears == 0))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x1040, false);
}
if ((e.jbutton.button == leverUpDevice2) && (SequentialGears == 1) && (menuvalue1 == 0x00))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x1040, false);
}
if ((e.jbutton.button == leverDownDevice2) && (SequentialGears == 0))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x2080, false);
}
if ((e.jbutton.button == leverDownDevice2) && (SequentialGears == 1) && (menuvalue1 == 0x00))
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x2080, false);
}
if (e.jbutton.button == leverLeftDevice2)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x4000, false);
}
if (e.jbutton.button == leverRightDevice2)
{
helpers->WriteIntPtr((INT_PTR)gl_hjgtDll + 0x7D2B24, serviceread -= 0x8000, false);
}
}
}
}
}
else
{
SDL_Thread *thread;
thread = SDL_CreateThread(RunningThread, "RunningThread", (void *)NULL);
while (SDL_WaitEvent(&e) != 0)
{
myTriggers = triggers;
myConstants = constants;
myHelpers = helpers;
}
}
}