Gaelco FFB Changes
This commit is contained in:
parent
430ab81e22
commit
af94899cb2
@ -252,18 +252,21 @@ GameId=64
|
|||||||
FeedbackLength=500
|
FeedbackLength=500
|
||||||
EnableDamper=0
|
EnableDamper=0
|
||||||
DamperStrength=100
|
DamperStrength=100
|
||||||
|
DoubleConstant=0
|
||||||
|
|
||||||
[Tokyo Cop]
|
[Tokyo Cop]
|
||||||
GameId=65
|
GameId=65
|
||||||
FeedbackLength=500
|
FeedbackLength=500
|
||||||
EnableDamper=0
|
EnableDamper=0
|
||||||
DamperStrength=100
|
DamperStrength=100
|
||||||
|
DoubleConstant=0
|
||||||
|
|
||||||
[Ring Riders]
|
[Ring Riders]
|
||||||
GameId=66
|
GameId=66
|
||||||
FeedbackLength=500
|
FeedbackLength=500
|
||||||
EnableDamper=0
|
EnableDamper=0
|
||||||
DamperStrength=100
|
DamperStrength=100
|
||||||
|
DoubleConstant=0
|
||||||
|
|
||||||
[Winter X Games SnoCross]
|
[Winter X Games SnoCross]
|
||||||
GameId=44
|
GameId=44
|
||||||
|
@ -13,14 +13,17 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "GaelcoTuningRace.h"
|
#include "GaelcoTuningRace.h"
|
||||||
|
|
||||||
static EffectTriggers* myTriggers;
|
static EffectTriggers* myTriggers;
|
||||||
static EffectConstants* myConstants;
|
static EffectConstants* myConstants;
|
||||||
static Helpers* myHelpers;
|
static Helpers* myHelpers;
|
||||||
|
|
||||||
extern int EnableDamper;
|
extern int EnableDamper;
|
||||||
extern int DamperStrength;
|
extern int DamperStrength;
|
||||||
static bool init;
|
static bool init;
|
||||||
|
|
||||||
static int __stdcall SetMotor(DWORD* a1)
|
static int(__stdcall* SetMotorOri)(DWORD* a1);
|
||||||
|
static int __stdcall SetMotorHook(DWORD* a1)
|
||||||
{
|
{
|
||||||
long double v1 = *(float*)&a1;
|
long double v1 = *(float*)&a1;
|
||||||
|
|
||||||
@ -46,43 +49,17 @@ static int __stdcall SetMotor(DWORD* a1)
|
|||||||
myTriggers->Rumble(0, percentForce, percentLength);
|
myTriggers->Rumble(0, percentForce, percentLength);
|
||||||
myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce);
|
myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce);
|
||||||
}
|
}
|
||||||
return 0;
|
return SetMotorOri(a1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool Hook(void* toHook, void* ourFunct, int len) {
|
|
||||||
if (len < 5) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD curProtection;
|
|
||||||
VirtualProtect(toHook, len, PAGE_EXECUTE_READWRITE, &curProtection);
|
|
||||||
|
|
||||||
memset(toHook, 0x90, len);
|
|
||||||
|
|
||||||
DWORD relativeAddress = ((DWORD)ourFunct - (DWORD)toHook) - 5;
|
|
||||||
|
|
||||||
*(BYTE*)toHook = 0xE9;
|
|
||||||
*(DWORD*)((DWORD)toHook + 1) = relativeAddress;
|
|
||||||
|
|
||||||
DWORD temp;
|
|
||||||
VirtualProtect(toHook, len, curProtection, &temp);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static DWORD jmpBackAddy;
|
|
||||||
|
|
||||||
void GaelcoTuningRace::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) {
|
void GaelcoTuningRace::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) {
|
||||||
|
|
||||||
if (!init)
|
if (!init)
|
||||||
{
|
{
|
||||||
int hookLength = 6;
|
init = true;
|
||||||
DWORD hookAddress = 0x8188ABC;
|
MH_Initialize();
|
||||||
if (hookAddress)
|
MH_CreateHook((void*)0x8188ABC, SetMotorHook, (void**)&SetMotorOri);
|
||||||
{
|
MH_EnableHook(MH_ALL_HOOKS);
|
||||||
jmpBackAddy = hookAddress + hookLength;
|
|
||||||
Hook((void*)hookAddress, SetMotor, hookLength);
|
|
||||||
init = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EnableDamper)
|
if (EnableDamper)
|
||||||
|
@ -20,7 +20,8 @@ extern int EnableDamper;
|
|||||||
extern int DamperStrength;
|
extern int DamperStrength;
|
||||||
static bool init;
|
static bool init;
|
||||||
|
|
||||||
static int __stdcall SetMotor(DWORD* a1, float a2)
|
static int(__stdcall* SetMotorOri)(DWORD* a1, float a2);
|
||||||
|
static int __stdcall SetMotorHook(DWORD* a1, float a2)
|
||||||
{
|
{
|
||||||
if (a2 > 0)
|
if (a2 > 0)
|
||||||
{
|
{
|
||||||
@ -44,46 +45,20 @@ static int __stdcall SetMotor(DWORD* a1, float a2)
|
|||||||
myTriggers->Rumble(0, percentForce, percentLength);
|
myTriggers->Rumble(0, percentForce, percentLength);
|
||||||
myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce);
|
myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce);
|
||||||
}
|
}
|
||||||
return 0;
|
return SetMotorOri(a1, a2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool Hook(void* toHook, void* ourFunct, int len) {
|
|
||||||
if (len < 5) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD curProtection;
|
|
||||||
VirtualProtect(toHook, len, PAGE_EXECUTE_READWRITE, &curProtection);
|
|
||||||
|
|
||||||
memset(toHook, 0x90, len);
|
|
||||||
|
|
||||||
DWORD relativeAddress = ((DWORD)ourFunct - (DWORD)toHook) - 5;
|
|
||||||
|
|
||||||
*(BYTE*)toHook = 0xE9;
|
|
||||||
*(DWORD*)((DWORD)toHook + 1) = relativeAddress;
|
|
||||||
|
|
||||||
DWORD temp;
|
|
||||||
VirtualProtect(toHook, len, curProtection, &temp);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static DWORD jmpBackAddy;
|
|
||||||
|
|
||||||
void RingRiders::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) {
|
void RingRiders::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) {
|
||||||
|
|
||||||
if (!init)
|
if (!init)
|
||||||
{
|
{
|
||||||
int hookLength = 6;
|
init = true;
|
||||||
DWORD hookAddress = 0x8107568;
|
MH_Initialize();
|
||||||
if (hookAddress)
|
MH_CreateHook((void*)0x8107568, SetMotorHook, (void**)&SetMotorOri);
|
||||||
{
|
MH_EnableHook(MH_ALL_HOOKS);
|
||||||
jmpBackAddy = hookAddress + hookLength;
|
|
||||||
Hook((void*)hookAddress, SetMotor, hookLength);
|
|
||||||
init = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EnableDamper == 1)
|
if (EnableDamper)
|
||||||
triggers->Damper(DamperStrength / 100.0);
|
triggers->Damper(DamperStrength / 100.0);
|
||||||
|
|
||||||
myTriggers = triggers;
|
myTriggers = triggers;
|
||||||
|
@ -16,11 +16,13 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>.
|
|||||||
static EffectTriggers* myTriggers;
|
static EffectTriggers* myTriggers;
|
||||||
static EffectConstants* myConstants;
|
static EffectConstants* myConstants;
|
||||||
static Helpers* myHelpers;
|
static Helpers* myHelpers;
|
||||||
|
|
||||||
extern int EnableDamper;
|
extern int EnableDamper;
|
||||||
extern int DamperStrength;
|
extern int DamperStrength;
|
||||||
static bool init;
|
static bool init;
|
||||||
|
|
||||||
static int __stdcall SetMotor(DWORD* a1, float a2)
|
static int(__stdcall* SetMotorOri)(DWORD* a1, float a2);
|
||||||
|
static int __stdcall SetMotorHook(DWORD* a1, float a2)
|
||||||
{
|
{
|
||||||
if (a2 > 0)
|
if (a2 > 0)
|
||||||
{
|
{
|
||||||
@ -44,46 +46,20 @@ static int __stdcall SetMotor(DWORD* a1, float a2)
|
|||||||
myTriggers->Rumble(0, percentForce, percentLength);
|
myTriggers->Rumble(0, percentForce, percentLength);
|
||||||
myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce);
|
myTriggers->Constant(myConstants->DIRECTION_FROM_RIGHT, percentForce);
|
||||||
}
|
}
|
||||||
return 0;
|
return SetMotorOri(a1, a2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool Hook(void* toHook, void* ourFunct, int len) {
|
|
||||||
if (len < 5) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD curProtection;
|
|
||||||
VirtualProtect(toHook, len, PAGE_EXECUTE_READWRITE, &curProtection);
|
|
||||||
|
|
||||||
memset(toHook, 0x90, len);
|
|
||||||
|
|
||||||
DWORD relativeAddress = ((DWORD)ourFunct - (DWORD)toHook) - 5;
|
|
||||||
|
|
||||||
*(BYTE*)toHook = 0xE9;
|
|
||||||
*(DWORD*)((DWORD)toHook + 1) = relativeAddress;
|
|
||||||
|
|
||||||
DWORD temp;
|
|
||||||
VirtualProtect(toHook, len, curProtection, &temp);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static DWORD jmpBackAddy;
|
|
||||||
|
|
||||||
void TokyoCop::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) {
|
void TokyoCop::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) {
|
||||||
|
|
||||||
if (!init)
|
if (!init)
|
||||||
{
|
{
|
||||||
int hookLength = 6;
|
init = true;
|
||||||
DWORD hookAddress = 0x80E6FA4;
|
MH_Initialize();
|
||||||
if (hookAddress)
|
MH_CreateHook((void*)0x80E6FA4, SetMotorHook, (void**)&SetMotorOri);
|
||||||
{
|
MH_EnableHook(MH_ALL_HOOKS);
|
||||||
jmpBackAddy = hookAddress + hookLength;
|
|
||||||
Hook((void*)hookAddress, SetMotor, hookLength);
|
|
||||||
init = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EnableDamper == 1)
|
if (EnableDamper)
|
||||||
triggers->Damper(DamperStrength / 100.0);
|
triggers->Damper(DamperStrength / 100.0);
|
||||||
|
|
||||||
myTriggers = triggers;
|
myTriggers = triggers;
|
||||||
|
Loading…
Reference in New Issue
Block a user