1
0
mirror of synced 2024-11-23 22:40:57 +01:00

Merge pull request #67 from mightymikem/master

A few new games
This commit is contained in:
Boomslangnz 2024-05-12 08:38:08 +12:00 committed by GitHub
commit 8e9106f20c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 613 additions and 0 deletions

View File

@ -51,6 +51,9 @@ cd..
cd Battle Gear 4 Tuned
rename dinput8.dll d3d9.dll
cd..
cd Cruisn Blast
rename dinput8.dll winmm.dll
cd..
cd Crazy Taxi Steam
rename dinput8.dll xinput1_3.dll
cd..
@ -81,6 +84,15 @@ cd..
cd Dirty Drivin'
rename dinput8.dll d3d9.dll
cd..
cd FnF
rename dinput8.dll dinput8.dll
cd..
cd FnFDrift
rename dinput8.dll dinput8.dll
cd..
cd FnFSuperCars
rename dinput8.dll dinput8.dll
cd..
cd H2Overdrive
rename dinput8.dll d3d9.dll
cd..

View File

@ -348,6 +348,34 @@ DefaultCentering=15
EnableDamper=0
DamperStrength=100
[FnF]
GameId=77
FeedbackLength=500
DefaultCentering=15
EnableDamper=0
DamperStrength=100
[FNFDrift]
GameId=78
FeedbackLength=500
DefaultCentering=15
EnableDamper=0
DamperStrength=100
[FNFSuperCars]
GameId=79
FeedbackLength=500
DefaultCentering=15
EnableDamper=0
DamperStrength=100
[Sega Race TV]
GameId=80
FeedbackLength=500
DefaultCentering=15
EnableDamper=0
DamperStrength=100
[KODrive]
GameId=39
PowerMode=0
@ -788,6 +816,13 @@ PowerMode=1
EnableForceSpringEffect = 1;
ForceSpringStrength = 100;
[Cruisn Blast]
GameId=76
FeedbackLength=500
DefaultCentering=15
EnableDamper=0
DamperStrength=100
[WMMT5]
GameId=9
DefaultCentering=0

View File

@ -27,11 +27,15 @@
<ClInclude Include="Game Files\ArcticThunder.h" />
<ClInclude Include="Game Files\Batman.h" />
<ClInclude Include="Game Files\CrazyTaxi.h" />
<ClInclude Include="Game Files\CruisnBlast.h" />
<ClInclude Include="Game Files\D1GP.h" />
<ClInclude Include="Game Files\Daytona3NSE.h" />
<ClInclude Include="Game Files\DeadHeat.h" />
<ClInclude Include="Game Files\DeadHeatRiders.h" />
<ClInclude Include="Game Files\DirtyDrivin.h" />
<ClInclude Include="Game Files\FnF.h" />
<ClInclude Include="Game Files\FnFDrift.h" />
<ClInclude Include="Game Files\FnFSuperCars.h" />
<ClInclude Include="Game Files\FordRacingOther.h" />
<ClInclude Include="Game Files\GaelcoTuningRace.h" />
<ClInclude Include="Game Files\GoldenGun.h" />
@ -64,6 +68,7 @@
<ClInclude Include="Game Files\RoadFighters3D.h" />
<ClInclude Include="Game Files\LGI.h" />
<ClInclude Include="Game Files\LGI3D.h" />
<ClInclude Include="Game Files\SegaRaceTV.h" />
<ClInclude Include="Game Files\Showdown.h" />
<ClInclude Include="Game Files\SpringEffect.h" />
<ClInclude Include="Game Files\StormRacerG.h" />
@ -87,6 +92,7 @@
<ClCompile Include="Game Files\ArcticThunder.cpp" />
<ClCompile Include="Game Files\Batman.cpp" />
<ClCompile Include="Game Files\CrazyTaxi.cpp" />
<ClCompile Include="Game Files\CruisnBlast.cpp" />
<ClCompile Include="Game Files\D1GP.cpp" />
<ClCompile Include="Game Files\Daytona3NSE.cpp" />
<ClCompile Include="Game Files\DeadHeat.cpp" />
@ -97,6 +103,9 @@
<ClCompile Include="Game Files\DemulNascarInputs.cpp" />
<ClCompile Include="Game Files\DemulSmashingDriveInputs.cpp" />
<ClCompile Include="Game Files\DirtyDrivin.cpp" />
<ClCompile Include="Game Files\FnF.cpp" />
<ClCompile Include="Game Files\FnFDrift.cpp" />
<ClCompile Include="Game Files\FnFSuperCars.cpp" />
<ClCompile Include="Game Files\FordRacingOther.cpp" />
<ClCompile Include="Game Files\GaelcoTuningRace.cpp" />
<ClCompile Include="Game Files\GoldenGun.cpp" />
@ -138,6 +147,7 @@
<ClCompile Include="Game Files\R-Tuned.cpp" />
<ClCompile Include="Game Files\Rambo.cpp" />
<ClCompile Include="Game Files\RingRiders.cpp" />
<ClCompile Include="Game Files\SegaRaceTV.cpp" />
<ClCompile Include="Game Files\SegaRally3.cpp" />
<ClCompile Include="Game Files\SegaRacingClassic.cpp" />
<ClCompile Include="Game Files\FordRacing.cpp" />

View File

@ -160,6 +160,11 @@
<ClCompile Include="Game Files\Showdown.cpp" />
<ClCompile Include="Game Files\SpringEffect.cpp" />
<ClCompile Include="Game Files\ArcticThunder.cpp" />
<ClCompile Include="Game Files\CruisnBlast.cpp" />
<ClCompile Include="Game Files\FnF.cpp" />
<ClCompile Include="Game Files\FnFDrift.cpp" />
<ClCompile Include="Game Files\FnFSuperCars.cpp" />
<ClCompile Include="Game Files\SegaRaceTV.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Game Files\Daytona3.h">
@ -403,6 +408,21 @@
<ClInclude Include="Game Files\ArcticThunder.h">
<Filter>Common Header Files</Filter>
</ClInclude>
<ClInclude Include="Game Files\CruisnBlast.h">
<Filter>Common Header Files</Filter>
</ClInclude>
<ClInclude Include="Game Files\FnF.h">
<Filter>Common Header Files</Filter>
</ClInclude>
<ClInclude Include="Game Files\FnFDrift.h">
<Filter>Common Header Files</Filter>
</ClInclude>
<ClInclude Include="Game Files\FnFSuperCars.h">
<Filter>Common Header Files</Filter>
</ClInclude>
<ClInclude Include="Game Files\SegaRaceTV.h">
<Filter>Common Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<MASM Include="DLLWrapper.asm" />

View File

@ -37,12 +37,16 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>.
#include "Game Files/BG4JP.h"
#include "Game Files/ChaseHQ2.h"
#include "Game Files/CrazyTaxi.h"
#include "Game Files/CruisnBlast.h"
#include "Game Files/D1GP.h"
#include "Game Files/Daytona3.h"
#include "Game Files/Daytona3NSE.h"
#include "Game Files/DeadHeat.h"
#include "Game Files/DeadHeatRiders.h"
#include "Game Files/DirtyDrivin.h"
#include "Game Files/FnF.h"
#include "Game Files/FnFDrift.h"
#include "Game Files/FnFSuperCars.h"
#include "Game Files/FordRacing.h"
#include "Game Files/FordRacingOther.h"
#include "Game Files/GaelcoTuningRace.h"
@ -68,6 +72,7 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>.
#include "Game Files/MAMESupermodel.h"
#include "Game Files/OutRun2Fake.h"
#include "Game Files/OutRun2Real.h"
#include "Game Files/SegaRaceTV.h"
#include "Game Files/SegaRacingClassic.h"
#include "Game Files/SegaRally3.h"
#include "Game Files/SegaRally3Other.h"
@ -1068,6 +1073,11 @@ const int MARIO_KART_GPDX_118_CUSTOM = 72;
const int SEGA_SHOWDOWN = 73;
const int SPRING_EFFECT = 74;
const int ARCTIC_THUNDER = 75;
const int CRUISN_BLAST = 76;
const int FNF = 77;
const int FNF_DRIFT = 78;
const int FNF_SUPERCARS = 79;
const int SEGA_RACE_TV = 80;
HINSTANCE Get_hInstance()
{
@ -2595,6 +2605,21 @@ DWORD WINAPI FFBLoop(LPVOID lpParam)
case ARCTIC_THUNDER:
game = new ArcticThunder;
break;
case CRUISN_BLAST:
game = new CruisnBlast;
break;
case FNF:
game = new FnF;
break;
case FNF_DRIFT:
game = new FnFDrift;
break;
case FNF_SUPERCARS:
game = new FnFSuperCars;
break;
case SEGA_RACE_TV:
game = new SegaRaceTV;
break;
case TEST_GAME_CONST:
case TEST_GAME_FRICTION:
case TEST_GAME_SINE:

113
Game Files/CruisnBlast.cpp Normal file
View File

@ -0,0 +1,113 @@
/*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 "CruisnBlast.h"
#include <sstream>
static bool init;
static EffectTriggers* myTriggers;
static EffectConstants* myConstants;
static Helpers* myHelpers;
extern int EnableDamper;
extern int DamperStrength;
static float lastFF = 0;
static int currentScreen = 0;
static int(__cdecl* Wheel_SetHookOrig)(float param_1);
static int __cdecl Wheel_SetHook(float param_1)
{
float puVar1 = myHelpers->ReadFloat32(0x8babbac, false); //menus ffb?! CHECKED COOL
float puVar2 = myHelpers->ReadByte(0x8babba8, false); //in game ffb?! //CHECKED seems to just go 0 when off the road
//int puVar3 = myHelpers->ReadFloat32(0x8babbb0, false); //ffb effects FLOAT??
//int puVar4 = myHelpers->ReadFloat32(0x8babbb4, false);
//int puVar5 = myHelpers->ReadFloat32(0x8babbbc, false); //ffb effects
//int puVar6 = myHelpers->ReadFloat32(0x8babbb8, false); //ffb effects are running (1 at the start i think)
int puVar7 = myHelpers->ReadInt32(0x8babbc0, false); //0 menus, 1 game
if (puVar7 == 1)
{
if (currentScreen == 0)
{
//in game - turn on wheel effects
myHelpers->WriteByte(0x9c28504, 1, false);
currentScreen = 1;
lastFF = 0;
}
else
{
lastFF = param_1;
}
}
else
{
if (currentScreen == 1)
{
//not in game turn off wheel effects
myHelpers->WriteByte(0x9c28504, 0, false);
lastFF = 0;
currentScreen = 0;
}
else
{
lastFF = puVar1;
}
}
if (lastFF >= 0) {
myTriggers->Rumble(0, lastFF, 100.0);
myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, lastFF);
}
if (lastFF <= 0) {
myTriggers->Rumble(0, lastFF * -1, 100.0);
myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, lastFF * -1);
}
return 0;
}
void CruisnBlast::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) {
if (!init)
{
DWORD ImageBase = (DWORD)GetModuleHandleA(0);
if (EnableDamper)
triggers->Damper(DamperStrength / 100.0);
myHelpers = helpers;
myTriggers = triggers;
myConstants = constants;
//set cab type
myHelpers->WriteByte(0xa0a7808, 4, false);
//enable wheel found
//myHelpers->WriteByte(0x8bab744, 1, false);
OutputDebugStringA("CruisnBlast FFB Loop");
MH_Initialize();
MH_CreateHook((LPVOID)(0x8151b50), Wheel_SetHook, (LPVOID*)&Wheel_SetHookOrig);
//remove wheel check for WHEEL_SET function
myHelpers->WriteNop(0x8151b61, 2, false);
//remove outs for WHEEL_SET function just incase we get there
myHelpers->WriteNop(0x8151b90, 1, false);
myHelpers->WriteNop(0x8151b96, 1, false);
myHelpers->WriteNop(0x8151b9c, 1, false);
myHelpers->WriteNop(0x8151b87, 1, false);
MH_EnableHook(MH_ALL_HOOKS);
init = true;
}
}

21
Game Files/CruisnBlast.h Normal file
View File

@ -0,0 +1,21 @@
#pragma once
/*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/TeknoParrotGame.h"
class CruisnBlast : public Game {
public:
void FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers);
};

80
Game Files/FnF.cpp Normal file
View File

@ -0,0 +1,80 @@
/*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 "FnF.h"
static bool init;
static EffectTriggers* myTriggers;
static EffectConstants* myConstants;
static Helpers* myHelpers;
extern int EnableDamper;
extern int DamperStrength;
static int(__cdecl* FnFSendToLptOrig)(uint16_t addr, uint8_t FFB);
static int __cdecl FnFSendToLpt(uint16_t addr, uint8_t FFB)
{
if (addr == 0x378)
{
bool isLeft = FFB < 0x80;
float percentForce;
if (isLeft) {
percentForce = static_cast<float>(FFB) / 0x7F;
myTriggers->Rumble(0, percentForce, 100.0);
myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce);
}
else {
percentForce = static_cast<float>(FFB - 0x80) / 0x7F;
myTriggers->Rumble(0, percentForce, 100.0);
myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce);
}
}
return 0;
}
static void(__cdecl* FnFIgnoreLPTOrig)();
static void __cdecl FnFignoreLPT() {
return;
}
void FnF::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) {
if (!init)
{
//enable IO calls
myHelpers->WriteIntPtr(0x05b2ed4, 1, false);
MH_Initialize();
MH_CreateHook((LPVOID)0x046da10, FnFSendToLpt, (LPVOID*)&FnFSendToLptOrig);
//null all the other functions IO functions
MH_CreateHook((LPVOID)0x046dd60, FnFignoreLPT, (LPVOID*)&FnFIgnoreLPTOrig);
MH_CreateHook((LPVOID)0x046dda0, FnFignoreLPT, (LPVOID*)&FnFIgnoreLPTOrig);
MH_CreateHook((LPVOID)0x046dec0, FnFignoreLPT, (LPVOID*)&FnFIgnoreLPTOrig);
MH_CreateHook((LPVOID)0x046df70, FnFignoreLPT, (LPVOID*)&FnFIgnoreLPTOrig);
MH_EnableHook(MH_ALL_HOOKS);
init = true;
}
if (EnableDamper)
triggers->Damper(DamperStrength / 100.0);
myTriggers = triggers;
myConstants = constants;
myHelpers = helpers;
}

20
Game Files/FnF.h Normal file
View File

@ -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 FnF : public Game {
public:
void FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers);
};

79
Game Files/FnFDrift.cpp Normal file
View File

@ -0,0 +1,79 @@
/*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 "FnFDrift.h"
static bool init;
static EffectTriggers* myTriggers;
static EffectConstants* myConstants;
static Helpers* myHelpers;
extern int EnableDamper;
extern int DamperStrength;
static int(__cdecl* FnFSendToLptOrig)(uint16_t addr, uint8_t FFB);
static int __cdecl FnFSendToLpt(uint16_t addr, uint8_t FFB)
{
if (addr == 0x378)
{
bool isLeft = FFB < 0x80;
float percentForce;
if (isLeft) {
percentForce = static_cast<float>(FFB) / 0x7F;
myTriggers->Rumble(0, percentForce, 100.0);
myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce);
}
else {
percentForce = static_cast<float>(FFB - 0x80) / 0x7F;
myTriggers->Rumble(0, percentForce, 100.0);
myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, percentForce);
}
}
return 0;
}
static void(__cdecl* FnFIgnoreLPTOrig)();
static void __cdecl FnFignoreLPT() {
return;
}
void FnFDrift::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) {
if (!init)
{
//enable IO calls
myHelpers->WriteIntPtr(0x05a3ca4, 1, false);
MH_Initialize();
MH_CreateHook((LPVOID)0x048a410, FnFSendToLpt, (LPVOID*)&FnFSendToLptOrig);
MH_CreateHook((LPVOID)0x048a760, FnFignoreLPT, (LPVOID*)&FnFIgnoreLPTOrig);
MH_CreateHook((LPVOID)0x048a7b0, FnFignoreLPT, (LPVOID*)&FnFIgnoreLPTOrig);
MH_CreateHook((LPVOID)0x048a8f0, FnFignoreLPT, (LPVOID*)&FnFIgnoreLPTOrig);
MH_CreateHook((LPVOID)0x048aa20, FnFignoreLPT, (LPVOID*)&FnFIgnoreLPTOrig);
MH_EnableHook(MH_ALL_HOOKS);
init = true;
}
if (EnableDamper)
triggers->Damper(DamperStrength / 100.0);
myTriggers = triggers;
myConstants = constants;
myHelpers = helpers;
}

21
Game Files/FnFDrift.h Normal file
View File

@ -0,0 +1,21 @@
#pragma once
/*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 FnFDrift : public Game {
public:
void FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers);
};

View File

@ -0,0 +1,72 @@
/*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 "FnFSuperCars.h"
static bool init;
static EffectTriggers* myTriggers;
static EffectConstants* myConstants;
static Helpers* myHelpers;
extern int EnableDamper;
extern int DamperStrength;
static void(__cdecl* FUN_00402cf0Orig)(float param_1);
static void __cdecl FUN_00402cf0(float param_1) {
if (param_1 >= 0) {
myTriggers->Rumble(0, param_1, 100.0);
myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, param_1 );
}
if (param_1 <= 0) {
myTriggers->Rumble(0, param_1 * -1, 100.0);
myTriggers->Constant(myConstants->DIRECTION_FROM_LEFT, param_1 * -1);
}
return;
}
static void(__cdecl* FnFSCIgnoreLPTOrig)();
static void __cdecl FnFSCignoreLPT() {
return ;
}
void FnFSuperCars::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) {
if (!init)
{
OutputDebugStringA("FnFSuperCars::FFBLoop");
MH_Initialize();
MH_CreateHook((LPVOID)0x0402cf0, FUN_00402cf0, (LPVOID*)&FUN_00402cf0Orig);
//remove unwanted instances
MH_CreateHook((LPVOID)0x0402ca0, FnFSCignoreLPT, (LPVOID*)&FnFSCIgnoreLPTOrig);
MH_CreateHook((LPVOID)0x0402c50, FnFSCignoreLPT, (LPVOID*)&FnFSCIgnoreLPTOrig);
MH_CreateHook((LPVOID)0x0402bc0, FnFSCignoreLPT, (LPVOID*)&FnFSCIgnoreLPTOrig);
MH_EnableHook(MH_ALL_HOOKS);
init = true;
}
if (EnableDamper)
triggers->Damper(DamperStrength / 100.0);
myTriggers = triggers;
myConstants = constants;
myHelpers = helpers;
}

22
Game Files/FnFSuperCars.h Normal file
View File

@ -0,0 +1,22 @@
#pragma once
#pragma once
/*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 FnFSuperCars : public Game {
public:
void FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers);
};

63
Game Files/SegaRaceTV.cpp Normal file
View File

@ -0,0 +1,63 @@
/*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 "SegaRaceTV.h"
#include <sstream>
static bool init;
extern int EnableDamper;
extern int DamperStrength;
extern int EnableForceSpringEffect;
extern int ForceSpringStrength;
void SegaRaceTV::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) {
if (!init)
{
OutputDebugStringA("SegaRaceTV::FFBLoop");
//enable IO calls
helpers->WriteIntPtr(0x8b3fe90, 0x1, true);
init = true;
}
int ff = helpers->ReadInt32(0x8b44210, false);
if (EnableDamper)
triggers->Damper(DamperStrength / 100.0);
if (EnableForceSpringEffect)
triggers->Springi(ForceSpringStrength / 100.0);
if (ff > 0 && ff < 128)
{
double percentForce = ((128.0 - ff) / 127.0);
std::ostringstream ss;
ss << "LEFT: " << percentForce << " FF: " << ff;
OutputDebugStringA(ss.str().c_str());
triggers->Rumble(0, percentForce, 100.0);
triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce);
}
else if (ff > 128)
{
double percentForce = ((ff - 128.0) / 127.0);
std::ostringstream ss;
ss << "RIGHT: " << percentForce << " FF: " << ff;
OutputDebugStringA(ss.str().c_str());
triggers->Rumble(percentForce, 0, 100.0);
triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce);
}
}

20
Game Files/SegaRaceTV.h Normal file
View File

@ -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 SegaRaceTV : public Game {
public:
void FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers);
};