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