From 0ae69f17ef7bf158abfb9e94cf2bf995970fbe7c Mon Sep 17 00:00:00 2001 From: mightymikem <97259811+mightymikem@users.noreply.github.com> Date: Fri, 18 Oct 2024 16:09:36 +0100 Subject: [PATCH] Added Hummer support --- Config/FFBPlugin.ini | 15 +++++++ Dinput8Wrapper.vcxproj | 2 + Dinput8Wrapper.vcxproj.filters | 8 ++++ DllMain.cpp | 6 ++- Game Files/Hummer.cpp | 74 ++++++++++++++++++++++++++++++++++ Game Files/Hummer.h | 20 +++++++++ Includes/FFBPluginReadme.txt | 1 + 7 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 Game Files/Hummer.cpp create mode 100644 Game Files/Hummer.h diff --git a/Config/FFBPlugin.ini b/Config/FFBPlugin.ini index 48cfde0..28a9826 100644 --- a/Config/FFBPlugin.ini +++ b/Config/FFBPlugin.ini @@ -369,6 +369,14 @@ DefaultCentering=15 EnableDamper=0 DamperStrength=100 +[FNF SuperCars 369] +GameId=86 +FeedbackLength=500 +DefaultCentering=15 +EnableDamper=0 +DamperStrength=100 + + [Sega Race TV] GameId=80 FeedbackLength=500 @@ -389,6 +397,13 @@ FeedbackLength=500 EnableDamper=0 DamperStrength=100 +[Hummer] +GameId=84 +FeedbackLength=500 +DefaultCentering=15 +EnableDamper=0 +DamperStrength=100 + [KODrive] GameId=39 PowerMode=0 diff --git a/Dinput8Wrapper.vcxproj b/Dinput8Wrapper.vcxproj index b2fd9a1..148eeb1 100644 --- a/Dinput8Wrapper.vcxproj +++ b/Dinput8Wrapper.vcxproj @@ -43,6 +43,7 @@ + @@ -116,6 +117,7 @@ + diff --git a/Dinput8Wrapper.vcxproj.filters b/Dinput8Wrapper.vcxproj.filters index 00f1681..792ca76 100644 --- a/Dinput8Wrapper.vcxproj.filters +++ b/Dinput8Wrapper.vcxproj.filters @@ -168,6 +168,8 @@ + + @@ -435,6 +437,12 @@ Common Header Files + + Common Header Files + + + Common Header Files + diff --git a/DllMain.cpp b/DllMain.cpp index 693c78e..19baf4a 100644 --- a/DllMain.cpp +++ b/DllMain.cpp @@ -53,6 +53,7 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include "Game Files/GRIDReal.h" #include "Game Files/GRIDCustom.h" #include "Game Files/GoldenGun.h" +#include "Game Files/Hummer.h" #include "Game Files/HummerExtreme.h" #include "Game Files/InitialD0v131.h" #include "Game Files/InitialD0v211.h" @@ -1084,7 +1085,7 @@ const int SEGA_RACE_TV = 80; const int HUMMER_EXTREME = 81; const int INITIAL_D_THEARCADE_V231 = 82; const int WASTELAND_RACERS_2071 = 83; - +const int HUMMER = 84; HINSTANCE Get_hInstance() { MEMORY_BASIC_INFORMATION mbi; @@ -2626,6 +2627,9 @@ DWORD WINAPI FFBLoop(LPVOID lpParam) case SEGA_RACE_TV: game = new SegaRaceTV; break; + case HUMMER: + game = new Hummer; + break; case HUMMER_EXTREME: game = new HummerExtreme; break; diff --git a/Game Files/Hummer.cpp b/Game Files/Hummer.cpp new file mode 100644 index 0000000..e83f832 --- /dev/null +++ b/Game Files/Hummer.cpp @@ -0,0 +1,74 @@ +/*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 +#include "Hummer.h" + +static EffectTriggers* myTriggers; +static EffectConstants* myConstants; +static Helpers* myHelpers; + +extern int EnableDamper; +extern int DamperStrength; + +static bool init = false; +extern int EnableDamper; +extern int DamperStrength; + +static void(__cdecl* clSteerDualDeviceSetTRQCurveHalfPointOrig)(void* thisParam, int param_1, float param_2, float param_3); +static void __cdecl clSteerDualDeviceSetTRQCurveHalfPoint(void* thisParam, int param_1, float param_2, float param_3) { + return clSteerDualDeviceSetTRQCurveHalfPointOrig(thisParam, param_1, param_2, param_3); +} + +static void(__cdecl* clSteerDualDeviceSetVibrateOrig)(void* thisParam, int param_1, float param_2, float param_3); +static void __cdecl clSteerDualDeviceSetVibrate(void* thisParam, int param_1, float param_2, float param_3) { + myTriggers->Sine(param_3 * 100, 1, param_2 * 60); + myTriggers->Rumble(param_2 * 60, 0, param_3 * 100); + return clSteerDualDeviceSetVibrateOrig(thisParam, param_1, param_2, param_3); +} + +static void(__cdecl* clSteerDualDeviceSetViscosityOrig)(void* thisParam, int param_1, float param_2, float param_3); +static void __cdecl clSteerDualDeviceSetViscosity(void* thisParam, int param_1, float param_2, float param_3) { + myTriggers->Friction((double)param_2); + return clSteerDualDeviceSetViscosityOrig(thisParam, param_1, param_2, param_3); +} + +static void(__cdecl* clSteerDualDeviceInitCenterOrig)(void* thisParam, int param_1, unsigned char param_2); +static void __cdecl clSteerDualDeviceInitCenter(void* thisParam, int param_1, unsigned char param_2) { + myTriggers->Springi(param_2); + return clSteerDualDeviceInitCenterOrig(thisParam, param_1, param_2); +} + +static int(__cdecl* clSteerDualDeviceWaitOrig)(int param_1); +static int __cdecl clSteerDualDeviceWait(int param_1) { + return 0; +} +void Hummer::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) { + + if (!init) + { + init = true; + myTriggers = triggers; + myConstants = constants; + myHelpers = helpers; + MH_Initialize(); + //checking wheel is cool for an update + MH_CreateHook((LPVOID)0x82cdd1a, clSteerDualDeviceWait, (LPVOID*)&clSteerDualDeviceWaitOrig); + //Ingame effects + MH_CreateHook((LPVOID)0x82cd9ba, clSteerDualDeviceSetTRQCurveHalfPoint, (LPVOID*)&clSteerDualDeviceSetTRQCurveHalfPointOrig); + MH_CreateHook((LPVOID)0x82cdbfa, clSteerDualDeviceSetVibrate, (LPVOID*)&clSteerDualDeviceSetVibrateOrig); + MH_CreateHook((LPVOID)0x82cdada, clSteerDualDeviceSetViscosity, (LPVOID*)&clSteerDualDeviceSetViscosityOrig); + MH_CreateHook((LPVOID)0x82cd786, clSteerDualDeviceInitCenter, (LPVOID*)&clSteerDualDeviceInitCenterOrig); + MH_EnableHook(MH_ALL_HOOKS); + } +} \ No newline at end of file diff --git a/Game Files/Hummer.h b/Game Files/Hummer.h new file mode 100644 index 0000000..02f3f5a --- /dev/null +++ b/Game Files/Hummer.h @@ -0,0 +1,20 @@ +/*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/>. +*/ + +#pragma once +#include "../Common Files/Game.h" + +class Hummer : public Game { +public: + void FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers); +}; diff --git a/Includes/FFBPluginReadme.txt b/Includes/FFBPluginReadme.txt index 811f094..ccf197d 100644 --- a/Includes/FFBPluginReadme.txt +++ b/Includes/FFBPluginReadme.txt @@ -211,6 +211,7 @@ TEKNOPARROT: -GTI Club Supermini Festa -House of the dead 4 -Hummer Extreme +-Hummer -Initial D Arcade Stage 4 -Initial D Arcade Stage 4 Japan -Initial D Arcade Stage 5