From 36674acddc74aaa3dba0b9a0f9afc95bbd5d33ac Mon Sep 17 00:00:00 2001 From: Aaron M Date: Mon, 25 May 2020 13:16:45 +1200 Subject: [PATCH] Modify so Rave Racer will work on any version of MAME until FFB Output Added Force Feedback has to be enabled in test menu --- Config/FFBPlugin.ini | 20 + Dinput8Wrapper.vcxproj | 2 - Dinput8Wrapper.vcxproj.filters | 12 +- DllMain.cpp | 5 - Game Files/OldMame.cpp | 2225 -------------------------------- Game Files/OldMame.h | 20 - Game Files/OutputReading.cpp | 335 +++++ 7 files changed, 359 insertions(+), 2260 deletions(-) delete mode 100644 Game Files/OldMame.cpp delete mode 100644 Game Files/OldMame.h diff --git a/Config/FFBPlugin.ini b/Config/FFBPlugin.ini index 0608255..80c2a1a 100644 --- a/Config/FFBPlugin.ini +++ b/Config/FFBPlugin.ini @@ -1098,6 +1098,16 @@ RumbleStrengthLeftMotorVaporTrx=100 RumbleStrengthRightMotorVaporTrx=100 EnableForceSpringEffectVaporTrx=0 ForceSpringStrengthVaporTrx=80 +PowerModeRaveRacer=0 +FeedbackLengthRaveRacer=500 +MinForceRaveRacerh=0 +MaxForceRaveRacer=100 +AlternativeMinForceLeftRaveRacer=0 +AlternativeMaxForceLeftRaveRacer=-100 +AlternativeMinForceRightRaveRacer=0 +AlternativeMaxForceRightRaveRacer=100 +EnableForceSpringEffectRaveRacer=0 +ForceSpringStrengthRaveRacer=80 [MAME 64bit Outputs] GameId=22 @@ -1448,6 +1458,16 @@ RumbleStrengthLeftMotorVaporTrx=100 RumbleStrengthRightMotorVaporTrx=100 EnableForceSpringEffectVaporTrx=0 ForceSpringStrengthVaporTrx=80 +PowerModeRaveRacer=0 +FeedbackLengthRaveRacer=500 +MinForceRaveRacerh=0 +MaxForceRaveRacer=100 +AlternativeMinForceLeftRaveRacer=0 +AlternativeMaxForceLeftRaveRacer=-100 +AlternativeMinForceRightRaveRacer=0 +AlternativeMaxForceRightRaveRacer=100 +EnableForceSpringEffectRaveRacer=0 +ForceSpringStrengthRaveRacer=80 ; *********************************************************************************************************************************** ; ************************************************* Test cases are established below ************************************************ diff --git a/Dinput8Wrapper.vcxproj b/Dinput8Wrapper.vcxproj index f1a5bea..d72825b 100644 --- a/Dinput8Wrapper.vcxproj +++ b/Dinput8Wrapper.vcxproj @@ -36,7 +36,6 @@ - @@ -80,7 +79,6 @@ - diff --git a/Dinput8Wrapper.vcxproj.filters b/Dinput8Wrapper.vcxproj.filters index c09b17c..229c5fb 100644 --- a/Dinput8Wrapper.vcxproj.filters +++ b/Dinput8Wrapper.vcxproj.filters @@ -114,8 +114,6 @@ - - @@ -125,6 +123,7 @@ + @@ -242,12 +241,6 @@ Common Header Files - - Common Header Files - - - Common Header Files - Common Header Files @@ -278,6 +271,9 @@ Common Header Files + + Common Header Files + diff --git a/DllMain.cpp b/DllMain.cpp index c20da0f..2fdd2d8 100644 --- a/DllMain.cpp +++ b/DllMain.cpp @@ -52,7 +52,6 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include "Game Files/SegaRacingClassic.h" #include "Game Files/SegaRally3.h" #include "Game Files/SnoCross.h" -#include "Game Files/OldMame.h" #include "Game Files/WackyRaces.h" #include "Game Files/WMMT5.h" #include "Game Files/Machstorm.h" @@ -949,7 +948,6 @@ const int Road_Fighters_3D = 29; const int LGI_3D = 30; const int LGI_ = 31; const int INITIAL_D_0 = 32; -const int OLDMAME_ = 33; const int SUPERMODEL_READING = 34; const int OUTRUN_2Real = 35; const int ALIENS_EXTERMINATION = 36; @@ -2078,9 +2076,6 @@ DWORD WINAPI FFBLoop(LPVOID lpParam) case LGI_: game = new LGI; break; - case OLDMAME_: - game = new OldMame; - break; case KO_Drive: game = new KODrive; break; diff --git a/Game Files/OldMame.cpp b/Game Files/OldMame.cpp deleted file mode 100644 index 47fc6df..0000000 --- a/Game Files/OldMame.cpp +++ /dev/null @@ -1,2225 +0,0 @@ -/*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 -#include "OldMame.h" -#include "math.h" - -static int sanfran(int ffsan) { - switch (ffsan) { - - case 0xFF: - return 232; - case 0xFE: - return 231; - case 0xFD: - return 230; - case 0xFC: - return 229; - case 0xFB: - return 228; - case 0xFA: - return 227; - case 0xF9: - return 226; - case 0xF8: - return 225; - case 0xF7: - return 224; - case 0xF6: - return 223; - case 0xF5: - return 222; - case 0xF4: - return 221; - case 0xF3: - return 220; - case 0xF2: - return 219; - case 0xF1: - return 218; - case 0xEF: - return 217; - case 0xEE: - return 216; - case 0xED: - return 215; - case 0xEC: - return 214; - case 0xEB: - return 213; - case 0xEA: - return 212; - case 0xE9: - return 211; - case 0xE8: - return 210; - case 0xE7: - return 209; - case 0xE6: - return 208; - case 0xE5: - return 207; - case 0xE4: - return 206; - case 0xE3: - return 205; - case 0xE2: - return 204; - case 0xE1: - return 203; - case 0xDF: - return 202; - case 0xDE: - return 201; - case 0xDD: - return 200; - case 0xDC: - return 199; - case 0xDB: - return 198; - case 0xDA: - return 197; - case 0xD9: - return 196; - case 0xD8: - return 195; - case 0xD7: - return 194; - case 0xD6: - return 193; - case 0xD5: - return 192; - case 0xD4: - return 191; - case 0xD3: - return 190; - case 0xD2: - return 189; - case 0xD1: - return 188; - case 0xCF: - return 187; - case 0xCE: - return 186; - case 0xCD: - return 185; - case 0xCC: - return 184; - case 0xCB: - return 183; - case 0xCA: - return 182; - case 0xC9: - return 181; - case 0xC8: - return 180; - case 0xC7: - return 179; - case 0xC6: - return 178; - case 0xC5: - return 177; - case 0xC4: - return 176; - case 0xC3: - return 175; - case 0xC2: - return 174; - case 0xC1: - return 173; - case 0xBF: - return 172; - case 0xBE: - return 171; - case 0xBD: - return 170; - case 0xBC: - return 169; - case 0xBB: - return 168; - case 0xBA: - return 167; - case 0xB9: - return 166; - case 0xB8: - return 165; - case 0xB7: - return 164; - case 0xB6: - return 163; - case 0xB5: - return 162; - case 0xB4: - return 161; - case 0xB3: - return 160; - case 0xB2: - return 159; - case 0xB1: - return 158; - case 0xAF: - return 157; - case 0xAE: - return 156; - case 0xAD: - return 155; - case 0xAC: - return 154; - case 0xAB: - return 153; - case 0xAA: - return 152; - case 0xA9: - return 151; - case 0xA8: - return 150; - case 0xA7: - return 149; - case 0xA6: - return 148; - case 0xA5: - return 147; - case 0xA4: - return 146; - case 0xA3: - return 145; - case 0xA2: - return 144; - case 0xA1: - return 143; - case 0x9F: - return 142; - case 0x9E: - return 141; - case 0x9D: - return 140; - case 0x9C: - return 139; - case 0x9B: - return 138; - case 0x9A: - return 137; - case 0x99: - return 136; - case 0x98: - return 135; - case 0x97: - return 134; - case 0x96: - return 133; - case 0x95: - return 132; - case 0x94: - return 131; - case 0x93: - return 130; - case 0x92: - return 129; - case 0x91: - return 128; - case 0x8F: - return 127; - case 0x8E: - return 126; - case 0x8D: - return 125; - case 0x8C: - return 124; - case 0x8B: - return 123; - case 0x8A: - return 122; - case 0x89: - return 121; - case 0x88: - return 120; - case 0x87: - return 119; - case 0x86: - return 118; - case 0x85: - return 117; - case 0x84: - return 116; - case 0x83: - return 115; - case 0x82: - return 114; - case 0x81: - return 113; - - case 0x7F: - return 112; - case 0x7E: - return 111; - case 0x7D: - return 110; - case 0x7C: - return 109; - case 0x7B: - return 108; - case 0x7A: - return 107; - case 0x79: - return 106; - case 0x78: - return 105; - case 0x77: - return 104; - case 0x76: - return 103; - case 0x75: - return 102; - case 0x74: - return 101; - case 0x73: - return 100; - case 0x72: - return 99; - case 0x71: - return 98; - case 0x6F: - return 97; - case 0x6E: - return 96; - case 0x6D: - return 95; - case 0x6C: - return 94; - case 0x6B: - return 93; - case 0x6A: - return 92; - case 0x69: - return 91; - case 0x68: - return 90; - case 0x67: - return 89; - case 0x66: - return 88; - case 0x65: - return 87; - case 0x64: - return 86; - case 0x63: - return 85; - case 0x62: - return 84; - case 0x61: - return 83; - case 0x5F: - return 82; - case 0x5E: - return 81; - case 0x5D: - return 80; - case 0x5C: - return 79; - case 0x5B: - return 78; - case 0x5A: - return 77; - case 0x59: - return 76; - case 0x58: - return 75; - case 0x57: - return 74; - case 0x56: - return 73; - case 0x55: - return 72; - case 0x54: - return 71; - case 0x53: - return 70; - case 0x52: - return 69; - case 0x51: - return 68; - case 0x4F: - return 67; - case 0x4E: - return 66; - case 0x4D: - return 65; - case 0x4C: - return 64; - case 0x4B: - return 63; - case 0x4A: - return 62; - case 0x49: - return 61; - case 0x48: - return 60; - case 0x47: - return 59; - case 0x46: - return 58; - case 0x45: - return 57; - case 0x44: - return 56; - case 0x43: - return 55; - case 0x42: - return 54; - case 0x41: - return 53; - case 0x3F: - return 52; - case 0x3E: - return 51; - case 0x3D: - return 50; - case 0x3C: - return 49; - case 0x3B: - return 48; - case 0x3A: - return 47; - case 0x39: - return 46; - case 0x38: - return 45; - case 0x37: - return 44; - case 0x36: - return 43; - case 0x35: - return 42; - case 0x34: - return 41; - case 0x33: - return 40; - case 0x32: - return 39; - case 0x31: - return 38; - case 0x29: - return 37; - case 0x28: - return 36; - case 0x27: - return 35; - case 0x26: - return 34; - case 0x25: - return 33; - case 0x24: - return 32; - case 0x23: - return 31; - case 0x22: - return 30; - case 0x21: - return 29; - case 0x1F: - return 28; - case 0x1E: - return 27; - case 0x1D: - return 26; - case 0x1C: - return 25; - case 0x1B: - return 24; - case 0x1A: - return 23; - case 0x19: - return 22; - case 0x18: - return 21; - case 0x17: - return 20; - case 0x16: - return 19; - case 0x15: - return 18; - case 0x14: - return 17; - case 0x13: - return 16; - case 0x12: - return 15; - case 0x11: - return 14; - case 0x0F: - return 13; - case 0x0E: - return 12; - case 0x0D: - return 11; - case 0x0C: - return 10; - case 0x0B: - return 9; - case 0x0A: - return 8; - case 0x09: - return 7; - case 0x08: - return 6; - case 0x07: - return 5; - case 0x06: - return 4; - case 0x05: - return 3; - case 0x04: - return 2; - case 0x03: - return 1; - default: - return 0; - } -} - -static int crusnwld(int ffcru) { - switch (ffcru) { - - case 0xFF: - return 225; - case 0xFE: - return 224; - case 0xFD: - return 223; - case 0xFC: - return 222; - case 0xFB: - return 221; - case 0xFA: - return 220; - case 0xF9: - return 219; - case 0xF8: - return 218; - case 0xF7: - return 217; - case 0xF6: - return 216; - case 0xF5: - return 215; - case 0xF4: - return 214; - case 0xF3: - return 213; - case 0xF2: - return 212; - case 0xF1: - return 211; - case 0xEF: - return 210; - case 0xEE: - return 209; - case 0xED: - return 208; - case 0xEC: - return 207; - case 0xEB: - return 206; - case 0xEA: - return 205; - case 0xE9: - return 204; - case 0xE8: - return 203; - case 0xE7: - return 202; - case 0xE6: - return 201; - case 0xE5: - return 200; - case 0xE4: - return 199; - case 0xE3: - return 198; - case 0xE2: - return 197; - case 0xE1: - return 196; - case 0xDF: - return 195; - case 0xDE: - return 194; - case 0xDD: - return 193; - case 0xDC: - return 192; - case 0xDB: - return 191; - case 0xDA: - return 190; - case 0xD9: - return 189; - case 0xD8: - return 188; - case 0xD7: - return 187; - case 0xD6: - return 186; - case 0xD5: - return 185; - case 0xD4: - return 184; - case 0xD3: - return 183; - case 0xD2: - return 182; - case 0xD1: - return 181; - case 0xCF: - return 180; - case 0xCE: - return 179; - case 0xCD: - return 178; - case 0xCC: - return 177; - case 0xCB: - return 176; - case 0xCA: - return 175; - case 0xC9: - return 174; - case 0xC7: - return 173; - case 0xC6: - return 172; - case 0xC5: - return 171; - case 0xC3: - return 170; - case 0xBF: - return 169; - case 0xBE: - return 168; - case 0xBD: - return 167; - case 0xBC: - return 166; - case 0xBB: - return 165; - case 0xBA: - return 164; - case 0xB9: - return 163; - case 0xB8: - return 162; - case 0xB7: - return 161; - case 0xB6: - return 160; - case 0xB5: - return 159; - case 0xB4: - return 158; - case 0xB3: - return 157; - case 0xB2: - return 156; - case 0xB1: - return 155; - case 0xAF: - return 154; - case 0xAE: - return 153; - case 0xAD: - return 152; - case 0xAC: - return 151; - case 0xAB: - return 150; - case 0xAA: - return 149; - case 0xA9: - return 148; - case 0xA8: - return 147; - case 0xA7: - return 146; - case 0xA6: - return 145; - case 0xA5: - return 144; - case 0xA4: - return 143; - case 0xA3: - return 142; - case 0xA2: - return 141; - case 0xA1: - return 140; - case 0x9F: - return 139; - case 0x9E: - return 138; - case 0x9D: - return 137; - case 0x9C: - return 136; - case 0x9B: - return 135; - case 0x9A: - return 134; - case 0x99: - return 133; - case 0x98: - return 132; - case 0x97: - return 131; - case 0x96: - return 130; - case 0x95: - return 129; - case 0x94: - return 128; - case 0x93: - return 127; - case 0x92: - return 126; - case 0x91: - return 125; - case 0x8F: - return 124; - case 0x8E: - return 123; - case 0x8D: - return 122; - case 0x8C: - return 121; - case 0x8B: - return 120; - case 0x8A: - return 119; - case 0x89: - return 118; - case 0x88: - return 117; - case 0x87: - return 116; - case 0x86: - return 115; - case 0x85: - return 114; - case 0x84: - return 113; - case 0x83: - return 112; - case 0x82: - return 111; - - - case 0x7E: - return 110; - case 0x7D: - return 109; - case 0x7C: - return 108; - case 0x7B: - return 107; - case 0x7A: - return 106; - case 0x79: - return 105; - case 0x78: - return 104; - case 0x77: - return 103; - case 0x76: - return 102; - case 0x75: - return 101; - case 0x74: - return 100; - case 0x73: - return 99; - case 0x72: - return 98; - case 0x71: - return 97; - case 0x6F: - return 96; - case 0x6E: - return 95; - case 0x6D: - return 94; - case 0x6C: - return 93; - case 0x6B: - return 92; - case 0x6A: - return 91; - case 0x69: - return 90; - case 0x68: - return 89; - case 0x67: - return 88; - case 0x66: - return 87; - case 0x65: - return 86; - case 0x64: - return 85; - case 0x63: - return 84; - case 0x62: - return 83; - case 0x61: - return 82; - case 0x5F: - return 81; - case 0x5E: - return 80; - case 0x5D: - return 79; - case 0x5C: - return 78; - case 0x5B: - return 77; - case 0x5A: - return 76; - case 0x59: - return 75; - case 0x58: - return 74; - case 0x57: - return 73; - case 0x56: - return 72; - case 0x55: - return 71; - case 0x54: - return 70; - case 0x53: - return 69; - case 0x52: - return 68; - case 0x51: - return 67; - case 0x4F: - return 66; - case 0x4E: - return 65; - case 0x4D: - return 64; - case 0x4C: - return 63; - case 0x4B: - return 62; - case 0x4A: - return 61; - case 0x49: - return 60; - case 0x48: - return 59; - case 0x47: - return 58; - case 0x46: - return 57; - case 0x45: - return 56; - case 0x44: - return 55; - case 0x43: - return 54; - case 0x42: - return 53; - case 0x41: - return 52; - case 0x3F: - return 51; - case 0x3E: - return 50; - case 0x3D: - return 49; - case 0x3C: - return 48; - case 0x3B: - return 47; - case 0x3A: - return 46; - case 0x39: - return 45; - case 0x38: - return 44; - case 0x37: - return 43; - case 0x36: - return 42; - case 0x35: - return 41; - case 0x34: - return 40; - case 0x33: - return 39; - case 0x32: - return 38; - case 0x31: - return 37; - case 0x29: - return 36; - case 0x28: - return 35; - case 0x27: - return 34; - case 0x26: - return 33; - case 0x25: - return 32; - case 0x24: - return 31; - case 0x23: - return 30; - case 0x22: - return 29; - case 0x21: - return 28; - case 0x1F: - return 27; - case 0x1E: - return 26; - case 0x1D: - return 25; - case 0x1C: - return 24; - case 0x1B: - return 23; - case 0x1A: - return 22; - case 0x19: - return 21; - case 0x18: - return 20; - case 0x17: - return 19; - case 0x16: - return 18; - case 0x15: - return 17; - case 0x14: - return 16; - case 0x13: - return 15; - case 0x12: - return 14; - case 0x11: - return 13; - case 0x0F: - return 12; - case 0x0E: - return 11; - case 0x0D: - return 10; - case 0x0C: - return 9; - case 0x0B: - return 8; - case 0x0A: - return 7; - case 0x09: - return 6; - case 0x07: - return 5; - case 0x06: - return 4; - case 0x05: - return 3; - case 0x03: - return 2; - case 0x01: - return 1; - default: - return 0; - } -} - -static int crusnusa(int ffusa) { - switch (ffusa) { - - case 0xFF: - return 214; - case 0xFE: - return 213; - case 0xFC: - return 212; - case 0xFB: - return 211; - case 0xFA: - return 210; - case 0xF9: - return 209; - case 0xF8: - return 208; - case 0xF7: - return 207; - case 0xF6: - return 206; - case 0xF5: - return 205; - case 0xF4: - return 204; - case 0xF3: - return 203; - case 0xF2: - return 202; - case 0xF1: - return 201; - case 0xEF: - return 200; - case 0xEE: - return 199; - case 0xED: - return 198; - case 0xEC: - return 197; - case 0xEB: - return 196; - case 0xEA: - return 195; - case 0xE9: - return 194; - case 0xE8: - return 193; - case 0xE7: - return 192; - case 0xE6: - return 191; - case 0xE5: - return 190; - case 0xE4: - return 189; - case 0xE3: - return 188; - case 0xE2: - return 187; - case 0xE1: - return 186; - case 0xDF: - return 185; - case 0xDE: - return 184; - case 0xDD: - return 183; - case 0xDC: - return 182; - case 0xDB: - return 181; - case 0xDA: - return 180; - case 0xD9: - return 179; - case 0xD8: - return 178; - case 0xD7: - return 177; - case 0xD3: - return 176; - case 0xD2: - return 175; - case 0xD1: - return 174; - case 0xCF: - return 173; - case 0xCE: - return 172; - case 0xCD: - return 171; - case 0xCC: - return 170; - case 0xCB: - return 169; - case 0xCA: - return 168; - case 0xC9: - return 167; - case 0xC7: - return 166; - case 0xC6: - return 165; - case 0xC5: - return 164; - case 0xC3: - return 163; - case 0xBF: - return 162; - case 0xBE: - return 161; - case 0xBD: - return 160; - case 0xBC: - return 159; - case 0xBB: - return 158; - case 0xBA: - return 157; - case 0xB9: - return 156; - case 0xB8: - return 155; - case 0xB7: - return 154; - case 0xB6: - return 153; - case 0xB5: - return 152; - case 0xB4: - return 151; - case 0xB3: - return 150; - case 0xB2: - return 149; - case 0xB1: - return 148; - case 0xAF: - return 147; - case 0xAE: - return 146; - case 0xAD: - return 145; - case 0xAC: - return 144; - case 0xAB: - return 143; - case 0xAA: - return 142; - case 0xA9: - return 141; - case 0xA8: - return 140; - case 0xA7: - return 139; - case 0xA6: - return 138; - case 0xA5: - return 137; - case 0xA4: - return 136; - case 0xA3: - return 135; - case 0xA2: - return 134; - case 0xA1: - return 133; - case 0x9F: - return 132; - case 0x9E: - return 131; - case 0x9D: - return 130; - case 0x9C: - return 129; - case 0x9B: - return 128; - case 0x9A: - return 127; - case 0x99: - return 126; - case 0x98: - return 125; - case 0x97: - return 124; - case 0x96: - return 123; - case 0x95: - return 122; - case 0x94: - return 121; - case 0x93: - return 120; - case 0x92: - return 119; - case 0x91: - return 118; - case 0x8F: - return 117; - case 0x8E: - return 116; - case 0x8D: - return 115; - case 0x8C: - return 114; - case 0x8B: - return 113; - case 0x8A: - return 112; - case 0x89: - return 111; - case 0x88: - return 110; - case 0x87: - return 109; - case 0x86: - return 108; - case 0x84: - return 107; - case 0x83: - return 106; - case 0x82: - return 105; - - - case 0x7E: - return 104; - case 0x7D: - return 103; - case 0x7C: - return 102; - case 0x7B: - return 101; - case 0x7A: - return 100; - case 0x79: - return 99; - case 0x78: - return 98; - case 0x77: - return 97; - case 0x76: - return 96; - case 0x75: - return 95; - case 0x74: - return 94; - case 0x73: - return 93; - case 0x71: - return 92; - case 0x6F: - return 91; - case 0x6E: - return 90; - case 0x6D: - return 89; - case 0x6C: - return 88; - case 0x6B: - return 87; - case 0x6A: - return 86; - case 0x69: - return 85; - case 0x68: - return 84; - case 0x67: - return 83; - case 0x66: - return 82; - case 0x65: - return 81; - case 0x64: - return 80; - case 0x63: - return 79; - case 0x62: - return 78; - case 0x61: - return 77; - case 0x5F: - return 76; - case 0x5E: - return 75; - case 0x5D: - return 74; - case 0x5C: - return 73; - case 0x5B: - return 72; - case 0x5A: - return 71; - case 0x59: - return 70; - case 0x58: - return 69; - case 0x57: - return 68; - case 0x56: - return 67; - case 0x55: - return 66; - case 0x54: - return 65; - case 0x53: - return 64; - case 0x52: - return 63; - case 0x51: - return 62; - case 0x4F: - return 61; - case 0x4E: - return 60; - case 0x4D: - return 59; - case 0x4C: - return 58; - case 0x4B: - return 57; - case 0x4A: - return 56; - case 0x49: - return 55; - case 0x48: - return 54; - case 0x47: - return 53; - case 0x46: - return 52; - case 0x45: - return 51; - case 0x44: - return 50; - case 0x43: - return 49; - case 0x42: - return 48; - case 0x41: - return 47; - case 0x3F: - return 46; - case 0x3E: - return 45; - case 0x3D: - return 44; - case 0x3B: - return 43; - case 0x3A: - return 42; - case 0x39: - return 41; - case 0x38: - return 40; - case 0x37: - return 39; - case 0x36: - return 38; - case 0x35: - return 37; - case 0x34: - return 36; - case 0x33: - return 35; - case 0x32: - return 34; - case 0x31: - return 33; - case 0x29: - return 32; - case 0x28: - return 31; - case 0x27: - return 30; - case 0x26: - return 29; - case 0x25: - return 28; - case 0x24: - return 27; - case 0x23: - return 26; - case 0x22: - return 25; - case 0x21: - return 24; - case 0x1F: - return 23; - case 0x1E: - return 22; - case 0x1D: - return 21; - case 0x1B: - return 20; - case 0x1A: - return 19; - case 0x19: - return 18; - case 0x18: - return 17; - case 0x17: - return 16; - case 0x16: - return 15; - case 0x15: - return 14; - case 0x14: - return 13; - case 0x13: - return 12; - case 0x12: - return 11; - case 0x11: - return 10; - case 0x0F: - return 9; - case 0x0D: - return 8; - case 0x0C: - return 7; - case 0x0B: - return 6; - case 0x09: - return 5; - case 0x07: - return 4; - case 0x06: - return 3; - case 0x03: - return 2; - case 0x01: - return 1; - default: - return 0; - } -} - -static int raveracer(int ffRaw) { - switch (ffRaw) { - - //case 0xFE: - //return 128; - case 0x7E: - return 123; - //case 0xBE: - //return 126; - case 0x3E: - return 122; - case 0xDE: - return 121; - case 0x5E: - return 120; - case 0x9E: - return 119; - case 0x1E: - return 118; - case 0xEE: - return 117; - case 0x6E: - return 116; - case 0xAE: - return 115; - case 0xCE: - return 114; - case 0x2E: - return 113; - case 0x4E: - return 112; - case 0x8E: - return 111; - case 0x0E: - return 110; - case 0xF6: - return 109; - case 0x76: - return 108; - case 0xB6: - return 107; - case 0x36: - return 106; - case 0xD6: - return 105; - case 0x56: - return 104; - case 0x96: - return 103; - case 0x16: - return 102; - case 0xE6: - return 101; - case 0x66: - return 100; - case 0xA6: - return 99; - case 0xC6: - return 98; - case 0x26: - return 97; - case 0x46: - return 96; - case 0x86: - return 95; - case 0x06: - return 94; - case 0xFA: - return 93; - case 0x7A: - return 92; - case 0xBA: - return 91; - case 0x3A: - return 90; - case 0xDA: - return 89; - case 0x5A: - return 88; - case 0x9A: - return 87; - case 0x1A: - return 86; - case 0xEA: - return 85; - case 0x6A: - return 84; - case 0xAA: - return 83; - case 0xCA: - return 82; - case 0x2A: - return 81; - case 0x4A: - return 80; - case 0x8A: - return 79; - case 0x0A: - return 78; - case 0xF2: - return 77; - case 0x72: - return 76; - case 0xB2: - return 75; - case 0x32: - return 74; - case 0xD2: - return 73; - case 0x52: - return 72; - case 0x92: - return 71; - case 0x12: - return 70; - case 0xE2: - return 69; - case 0x62: - return 68; - case 0xA2: - return 67; - case 0xC2: - return 66; - case 0x22: - return 65; - case 0x42: - return 64; - case 0x82: - return 63; - case 0x02: - return 62; - - - case 0x80: - return 61; - case 0x40: - return 60; - case 0x20: - return 59; - case 0xC0: - return 58; - case 0xA0: - return 57; - case 0x60: - return 56; - case 0xE0: - return 55; - case 0x10: - return 54; - case 0x90: - return 53; - case 0x50: - return 52; - case 0xD0: - return 51; - case 0x30: - return 50; - case 0xB0: - return 49; - case 0x70: - return 48; - case 0xF0: - return 47; - case 0x08: - return 46; - case 0x88: - return 45; - case 0x48: - return 44; - case 0x28: - return 43; - case 0xC8: - return 42; - case 0xA8: - return 41; - case 0x68: - return 40; - case 0xE8: - return 39; - case 0x18: - return 38; - case 0x98: - return 37; - case 0x58: - return 36; - case 0xD8: - return 35; - case 0x38: - return 34; - case 0xB8: - return 33; - case 0x78: - return 32; - case 0xF8: - return 31; - case 0x04: - return 30; - case 0x84: - return 29; - case 0x44: - return 28; - case 0x24: - return 27; - case 0xC4: - return 26; - case 0xA4: - return 25; - case 0x64: - return 24; - case 0xE4: - return 23; - case 0x14: - return 22; - case 0x94: - return 21; - case 0x54: - return 20; - case 0xD4: - return 19; - case 0x34: - return 18; - case 0xB4: - return 17; - case 0x74: - return 16; - case 0xF4: - return 15; - case 0x0C: - return 14; - case 0x8C: - return 13; - case 0x4C: - return 12; - case 0x2C: - return 11; - case 0xCC: - return 10; - case 0xAC: - return 9; - case 0x6C: - return 8; - case 0xEC: - return 7; - case 0x1C: - return 6; - case 0x9C: - return 5; - case 0x5C: - return 4; - case 0xDC: - return 3; - case 0x3C: - return 2; - //case 0xBC: - //return 3; - case 0x7C: - return 1; - //case 0xFC: - //return 1; - } -} - -UINT8 FFB; - -void OldMame::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers* triggers) { - - HWND hWnds = FindWindow(NULL, _T("MAME: San Francisco Rush 2049 [sf2049]")); - HWND hWnd = FindWindowA(0, ("MAME: San Francisco Rush: The Rock (boot rom L 1.0, GUTS Oct 6 1997 / MAIN Oct 16 1997) [sfrushrk]")); - HWND hWnd1 = FindWindowA(0, ("MAME: San Francisco Rush (boot rom L 1.0) [sfrush]")); - HWND hWnd2 = FindWindowA(0, ("MAME: San Francisco Rush: The Rock (Wavenet, boot rom L 1.38, GUTS Aug 6 1997 / MAIN Aug 5 1997) [sfrushrkwo]")); - HWND hWnd3 = FindWindowA(0, ("MAME: San Francisco Rush 2049: Special Edition [sf2049se]")); - HWND hWnd4 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV2, World) [raveracw]")); - HWND hWnd5 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV1 Ver.B, Japan) [raveracj]")); - HWND hWnd6 = FindWindowA(0, ("MAME: Rave Racer (Rev. RV1, Japan) [raveracja]")); - HWND hWnd7 = FindWindowA(0, ("MAME: San Francisco Rush (boot rom L 1.06A) [sfrusha]")); - HWND hWnd8 = FindWindowA(0, ("MAME: San Francisco Rush 2049: Tournament Edition [sf2049te]")); - HWND hWnd9 = FindWindowA(0, ("MAME: California Speed (Version 2.1a Apr 17 1998, GUTS 1.25 Apr 17 1998 / MAIN Apr 17 1998) [calspeed]")); - HWND hWnd10 = FindWindowA(0, ("MAME: California Speed (Version 1.0r8 Mar 10 1998, GUTS Mar 10 1998 / MAIN Mar 10 1998) [calspeeda]")); - HWND hWnd11 = FindWindowA(0, ("MAME: California Speed (Version 1.0r7a Mar 4 1998, GUTS Mar 3 1998 / MAIN Jan 19 1998) [calspeedb]")); - HWND hWnd12 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.5) [crusnwld]")); - HWND hWnd13 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.4) [crusnwld24]")); - HWND hWnd14 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.3) [crusnwld23]")); - HWND hWnd15 = FindWindowA(0, ("MAME: Cruis'n World (rev L2.0) [crusnwld20]")); - HWND hWnd16 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.9) [crusnwld19]")); - HWND hWnd17 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.7) [crusnwld17]")); - HWND hWnd18 = FindWindowA(0, ("MAME: Cruis'n World (rev L1.3) [crusnwld13]")); - HWND hWnd19 = FindWindowA(0, ("MAME: Cruis'n USA (rev L4.1) [crusnusa]")); - HWND hWnd20 = FindWindowA(0, ("MAME: Cruis'n USA (rev L4.0) [crusnusa40]")); - HWND hWnd21 = FindWindowA(0, ("MAME: Cruis'n USA (rev L2.1) [crusnusa21]")); - HWND hWnd22 = FindWindowA(0, ("MAME: Off Road Challenge (v1.63) [offroadc]")); - HWND hWnd23 = FindWindowA(0, ("MAME: Off Road Challenge (v1.63) [offroadc]")); - HWND hWnd24 = FindWindowA(0, ("MAME: Off Road Challenge (v1.40) [offroadc4]")); - HWND hWnd25 = FindWindowA(0, ("MAME: Off Road Challenge (v1.30) [offroadc3]")); - HWND hWnd26 = FindWindowA(0, ("MAME: Off Road Challenge (v1.10) [offroadc1]")); - - char MameVersionChar[256]; - GetPrivateProfileStringA("Settings", "MameVersion", "", MameVersionChar, 256, ".\\FFBplugin.ini"); - std::string Mame019932bit("MAME019932bit"); - std::string Mame019964bit("MAME019964bit"); - std::string Mame019964bitHack("MAME019964bitHack"); - std::string Mame0199UI64bit("MAME0199UI64bit"); - std::string Mame020632bit("MAME020632bit"); - std::string Mame020664bit("MAME020664bit"); - std::string Mame0206UI64bit("MAME0206UI64bit"); - std::string mameversion(MameVersionChar); - - if ((hWnd > NULL) || (hWnd1 > NULL) || (hWnd2 > NULL) || (hWnd7 > NULL)) //Sfrush - { - int ffsanfranrush = 0; - { - if (mameversion.compare(Mame019932bit) == 0) - { - INT_PTR ff = helpers->ReadIntPtr(0x39B5D00, true); - INT_PTR ff1 = helpers->ReadIntPtr(ff + 0x708, false); - INT_PTR ff2 = helpers->ReadIntPtr(ff1 + 0x398, false); - INT_PTR ff3 = helpers->ReadIntPtr(ff2 + 0x34, false); - INT_PTR ff4 = helpers->ReadIntPtr(ff3 + 0x24, false); - FFB = helpers->ReadByte(ff4 + 0x5C0, false); - } - if (mameversion.compare(Mame019964bit) == 0) - { - INT_PTR ff64 = helpers->ReadIntPtr(0x0C5E4FE8, true); - INT_PTR ff164 = helpers->ReadIntPtr(ff64 + 0x48, false); - INT_PTR ff264 = helpers->ReadIntPtr(ff164 + 0x48, false); - INT_PTR ff364 = helpers->ReadIntPtr(ff264 + 0x668, false); - INT_PTR ff464 = helpers->ReadIntPtr(ff364 + 0x90, false); - FFB = helpers->ReadByte(ff464 + 0x764, false); - } - if (mameversion.compare(Mame019964bitHack) == 0) - { - INT_PTR ff64hack = helpers->ReadIntPtr(0x0C50CFE8, true); - INT_PTR ff164hack = helpers->ReadIntPtr(ff64hack + 0x48, false); - INT_PTR ff264hack = helpers->ReadIntPtr(ff164hack + 0x48, false); - INT_PTR ff364hack = helpers->ReadIntPtr(ff264hack + 0x48, false); - INT_PTR ff464hack = helpers->ReadIntPtr(ff364hack + 0x90, false); - FFB = helpers->ReadByte(ff464hack + 0x764, false); - } - if (mameversion.compare(Mame0199UI64bit) == 0) - { - INT_PTR ff64ui = helpers->ReadIntPtr(0x0C075FB8, true); - INT_PTR ff164ui = helpers->ReadIntPtr(ff64ui + 0x1A0, false); - INT_PTR ff264ui = helpers->ReadIntPtr(ff164ui + 0x10, false); - INT_PTR ff364ui = helpers->ReadIntPtr(ff264ui + 0x8, false); - INT_PTR ff464ui = helpers->ReadIntPtr(ff364ui + 0x18, false); - FFB = helpers->ReadByte(ff464ui + 0x54, false); - } - if (mameversion.compare(Mame020632bit) == 0) - { - INT_PTR ff = helpers->ReadIntPtr(0x0E2B20A4, true); - INT_PTR ff1 = helpers->ReadIntPtr(ff + 0x134, false); - INT_PTR ff2 = helpers->ReadIntPtr(ff1 + 0x5D8, false); - INT_PTR ff3 = helpers->ReadIntPtr(ff2 + 0x564, false); - FFB = helpers->ReadByte(ff3 + 0x550, false); - } - if (mameversion.compare(Mame020664bit) == 0) - { - INT_PTR ff64 = helpers->ReadIntPtr(0x0E198068, true); - INT_PTR ff164 = helpers->ReadIntPtr(ff64 + 0x48, false); - INT_PTR ff264 = helpers->ReadIntPtr(ff164 + 0x40, false); - INT_PTR ff364 = helpers->ReadIntPtr(ff264 + 0x540, false); - INT_PTR ff464 = helpers->ReadIntPtr(ff364 + 0x68, false); - FFB = helpers->ReadByte(ff464 + 0x7DC, false); - } - if (mameversion.compare(Mame0206UI64bit) == 0) - { - INT_PTR ff64ui = helpers->ReadIntPtr(0x0DBCF058, true); - INT_PTR ff164ui = helpers->ReadIntPtr(ff64ui + 0x48, false); - INT_PTR ff264ui = helpers->ReadIntPtr(ff164ui + 0x40, false); - INT_PTR ff364ui = helpers->ReadIntPtr(ff264ui + 0x5A0, false); - INT_PTR ff464ui = helpers->ReadIntPtr(ff364ui + 0x8, false); - FFB = helpers->ReadByte(ff464ui + 0x7DC, false); - } - - ffsanfranrush = sanfran(FFB); - - if ((ffsanfranrush > 112)& (ffsanfranrush < 233)) - { - helpers->log("moving wheel left"); - double percentForce = (233 - ffsanfranrush) / 119.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffsanfranrush > 0)& (ffsanfranrush < 113)) - { - helpers->log("moving wheel right"); - double percentForce = (ffsanfranrush) / 112.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - } - if ((hWnd4 > NULL) || (hWnd5 > NULL) || (hWnd6 > NULL)) //Rave Racer - { - int ffrave = 0; - { - if (mameversion.compare(Mame019932bit) == 0) - { - INT_PTR ffrave0 = helpers->ReadIntPtr(0x78D624C, true); - INT_PTR ffrave1 = helpers->ReadIntPtr(ffrave0 + 0x0, false); - INT_PTR ffrave2 = helpers->ReadIntPtr(ffrave1 + 0x34C, false); - INT_PTR ffrave3 = helpers->ReadIntPtr(ffrave2 + 0x8, false); - INT_PTR ffrave4 = helpers->ReadIntPtr(ffrave3 + 0x490, false); - FFB = helpers->ReadByte(ffrave4 + 0x42, false); - } - if (mameversion.compare(Mame019964bit) == 0) - { - INT_PTR ffrave640 = helpers->ReadIntPtr(0x0C5E4FE8, true); - INT_PTR ffrave641 = helpers->ReadIntPtr(ffrave640 + 0x90, false); - INT_PTR ffrave642 = helpers->ReadIntPtr(ffrave641 + 0x8, false); - INT_PTR ffrave643 = helpers->ReadIntPtr(ffrave642 + 0x130, false); - INT_PTR ffrave644 = helpers->ReadIntPtr(ffrave643 + 0x720, false); - FFB = helpers->ReadByte(ffrave644 + 0x42, false); - } - if (mameversion.compare(Mame0199UI64bit) == 0) - { - INT_PTR ffraveui640 = helpers->ReadIntPtr(0x0C075FB8, true); - INT_PTR ffraveui641 = helpers->ReadIntPtr(ffraveui640 + 0x48, false); - INT_PTR ffraveui642 = helpers->ReadIntPtr(ffraveui641 + 0x48, false); - INT_PTR ffraveui643 = helpers->ReadIntPtr(ffraveui642 + 0x740, false); - INT_PTR ffraveui644 = helpers->ReadIntPtr(ffraveui643 + 0x1F8, false); - FFB = helpers->ReadByte(ffraveui644 + 0x42, false); - } - if (mameversion.compare(Mame020632bit) == 0) - { - INT_PTR ffrave0 = helpers->ReadIntPtr(0x02426C78, true); - INT_PTR ffrave1 = helpers->ReadIntPtr(ffrave0 + 0x388, false); - INT_PTR ffrave2 = helpers->ReadIntPtr(ffrave1 + 0x1A0, false); - INT_PTR ffrave3 = helpers->ReadIntPtr(ffrave2 + 0x358, false); - FFB = helpers->ReadByte(ffrave3 + 0x40, false); - } - if (mameversion.compare(Mame020664bit) == 0) - { - INT_PTR ffrave640 = helpers->ReadIntPtr(0x0E198068, true); - INT_PTR ffrave641 = helpers->ReadIntPtr(ffrave640 + 0x2E8, false); - INT_PTR ffrave642 = helpers->ReadIntPtr(ffrave641 + 0x28, false); - INT_PTR ffrave643 = helpers->ReadIntPtr(ffrave642 + 0x0, false); - FFB = helpers->ReadByte(ffrave643 + 0x40, false); - } - if (mameversion.compare(Mame0206UI64bit) == 0) - { - INT_PTR ffraveui640 = helpers->ReadIntPtr(0x0DBCF058, true); - INT_PTR ffraveui641 = helpers->ReadIntPtr(ffraveui640 + 0x48, false); - INT_PTR ffraveui642 = helpers->ReadIntPtr(ffraveui641 + 0x40, false); - INT_PTR ffraveui643 = helpers->ReadIntPtr(ffraveui642 + 0x2D8, false); - INT_PTR ffraveui644 = helpers->ReadIntPtr(ffraveui643 + 0x630, false); - FFB = helpers->ReadByte(ffraveui644 + 0x40, false); - } - - ffrave = raveracer(FFB); - } - if ((ffrave > 61) && (ffrave < 124)) - { - helpers->log("moving wheel right"); - double percentForce = (124 - ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - else if ((ffrave > 0) && (ffrave < 62)) - { - helpers->log("moving wheel left"); - double percentForce = (ffrave) / 61.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - } - if ((hWnd3 > NULL) || (hWnd8 > NULL) || (hWnds > NULL)) //Sfrush2049 - { - if (mameversion.compare(Mame019932bit) == 0) - { - INT_PTR ff2049 = helpers->ReadIntPtr(0x2956BA8, true); - INT_PTR ff20491 = helpers->ReadIntPtr(ff2049 + 0x160, false); - INT_PTR ff20492 = helpers->ReadIntPtr(ff20491 + 0x30C, false); - INT_PTR ff20493 = helpers->ReadIntPtr(ff20492 + 0x38C, false); - INT_PTR ff20494 = helpers->ReadIntPtr(ff20493 + 0xB0, false); - FFB = helpers->ReadByte(ff20494 + 0x4C8, false); - } - if (mameversion.compare(Mame019964bit) == 0) - { - INT_PTR ff204964 = helpers->ReadIntPtr(0x0C5E4FE8, true); - INT_PTR ff2049164 = helpers->ReadIntPtr(ff204964 + 0x48, false); - INT_PTR ff2049264 = helpers->ReadIntPtr(ff2049164 + 0x48, false); - INT_PTR ff2049364 = helpers->ReadIntPtr(ff2049264 + 0x310, false); - INT_PTR ff2049464 = helpers->ReadIntPtr(ff2049364 + 0x130, false); - FFB = helpers->ReadByte(ff2049464 + 0x79C, false); - } - if (mameversion.compare(Mame0199UI64bit) == 0) - { - INT_PTR ff204964ui = helpers->ReadIntPtr(0x0CF9F7D0, true); - INT_PTR ff2049164ui = helpers->ReadIntPtr(ff204964ui + 0x48, false); - INT_PTR ff2049264ui = helpers->ReadIntPtr(ff2049164ui + 0x48, false); - INT_PTR ff2049364ui = helpers->ReadIntPtr(ff2049264ui + 0x10, false); - INT_PTR ff2049464ui = helpers->ReadIntPtr(ff2049364ui + 0x2D0, false); - FFB = helpers->ReadByte(ff2049464ui + 0x79C, false); - } - if (mameversion.compare(Mame020632bit) == 0) - { - INT_PTR ff2049 = helpers->ReadIntPtr(0x02426C78, true); - INT_PTR ff20491 = helpers->ReadIntPtr(ff2049 + 0x388, false); - INT_PTR ff20492 = helpers->ReadIntPtr(ff20491 + 0x6C4, false); - FFB = helpers->ReadByte(ff20492 + 0x7C, false); - } - if (mameversion.compare(Mame020664bit) == 0) - { - INT_PTR ff204964 = helpers->ReadIntPtr(0x0E198068, true); - INT_PTR ff2049164 = helpers->ReadIntPtr(ff204964 + 0x48, false); - INT_PTR ff2049264 = helpers->ReadIntPtr(ff2049164 + 0x40, false); - INT_PTR ff2049364 = helpers->ReadIntPtr(ff2049264 + 0x540, false); - FFB = helpers->ReadByte(ff2049364 + 0x7FC, false); - } - if (mameversion.compare(Mame0206UI64bit) == 0) - { - INT_PTR ff204964ui = helpers->ReadIntPtr(0x0DBCF058, true); - INT_PTR ff2049164ui = helpers->ReadIntPtr(ff204964ui + 0x48, false); - INT_PTR ff2049264ui = helpers->ReadIntPtr(ff2049164ui + 0x40, false); - INT_PTR ff2049364ui = helpers->ReadIntPtr(ff2049264ui + 0x7F0, false); - INT_PTR ff2049464ui = helpers->ReadIntPtr(ff2049364ui + 0x48, false); - FFB = helpers->ReadByte(ff2049464ui + 0x62C, false); - } - - if ((FFB > 0x80)& (FFB < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - FFB) / 126.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((FFB > 0x00)& (FFB < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (FFB) / 126.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - if ((hWnd9 > NULL) || (hWnd10 > NULL) || (hWnd11 > NULL)) //CaliforniaSpeed - { - if (mameversion.compare(Mame019932bit) == 0) - { - INT_PTR ffcal1 = helpers->ReadIntPtr(0xC61E0A4, true); - INT_PTR ffcal2 = helpers->ReadIntPtr(ffcal1 + 0x118, false); - INT_PTR ffcal3 = helpers->ReadIntPtr(ffcal2 + 0x1C, false); - INT_PTR ffcal4 = helpers->ReadIntPtr(ffcal3 + 0x7D4, false); - INT_PTR ffcal5 = helpers->ReadIntPtr(ffcal4 + 0x0, false); - FFB = helpers->ReadByte(ffcal5 + 0x598, false); - } - if (mameversion.compare(Mame019964bit) == 0) - { - INT_PTR ffcal164 = helpers->ReadIntPtr(0x0C5E4FE8, true); - INT_PTR ffcal264 = helpers->ReadIntPtr(ffcal164 + 0x48, false); - INT_PTR ffcal364 = helpers->ReadIntPtr(ffcal264 + 0x48, false); - INT_PTR ffcal464 = helpers->ReadIntPtr(ffcal364 + 0x310, false); - INT_PTR ffcal564 = helpers->ReadIntPtr(ffcal464 + 0x398, false); - FFB = helpers->ReadByte(ffcal564 + 0x5AC, false); - } - if (mameversion.compare(Mame0199UI64bit) == 0) - { - INT_PTR ffcal164ui = helpers->ReadIntPtr(0x0C075FB8, true); - INT_PTR ffcal264ui = helpers->ReadIntPtr(ffcal164ui + 0x48, false); - INT_PTR ffcal364ui = helpers->ReadIntPtr(ffcal264ui + 0x48, false); - INT_PTR ffcal464ui = helpers->ReadIntPtr(ffcal364ui + 0x140, false); - INT_PTR ffcal564ui = helpers->ReadIntPtr(ffcal464ui + 0x408, false); - FFB = helpers->ReadByte(ffcal564ui + 0x5AC, false); - } - if (mameversion.compare(Mame020632bit) == 0) - { - INT_PTR ffcal1 = helpers->ReadIntPtr(0x02426C78, true); - INT_PTR ffcal2 = helpers->ReadIntPtr(ffcal1 + 0x388, false); - INT_PTR ffcal3 = helpers->ReadIntPtr(ffcal2 + 0x640, false); - FFB = helpers->ReadByte(ffcal3 + 0x104, false); - } - if (mameversion.compare(Mame020664bit) == 0) - { - INT_PTR ffcal164 = helpers->ReadIntPtr(0x0E198068, true); - INT_PTR ffcal264 = helpers->ReadIntPtr(ffcal164 + 0x48, false); - INT_PTR ffcal364 = helpers->ReadIntPtr(ffcal264 + 0x40, false); - INT_PTR ffcal464 = helpers->ReadIntPtr(ffcal364 + 0x570, false); - FFB = helpers->ReadByte(ffcal464 + 0x7E4, false); - } - if (mameversion.compare(Mame0206UI64bit) == 0) - { - INT_PTR ffcal164ui = helpers->ReadIntPtr(0x0DBCF058, true); - INT_PTR ffcal264ui = helpers->ReadIntPtr(ffcal164ui + 0x48, false); - INT_PTR ffcal364ui = helpers->ReadIntPtr(ffcal264ui + 0x40, false); - INT_PTR ffcal464ui = helpers->ReadIntPtr(ffcal364ui + 0x5A0, false); - FFB = helpers->ReadByte(ffcal464ui + 0x7B4, false); - } - - if ((FFB > 0x80)& (FFB < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - FFB) / 126.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((FFB > 0x00)& (FFB < 0x80)) - { - helpers->log("moving wheel right"); - double percentForce = (FFB) / 126.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - if ((hWnd12 > NULL) || (hWnd13 > NULL) || (hWnd14 > NULL) || (hWnd15 > NULL) || (hWnd16 > NULL) || (hWnd17 > NULL) || (hWnd18 > NULL)) - { - int ffcrusnwld = 0; - { - if (mameversion.compare(Mame019932bit) == 0) - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x0C61E0A4, true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x134, false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x2E8, false); - INT_PTR ffcru4 = helpers->ReadIntPtr(ffcru3 + 0x0, false); - INT_PTR ffcru5 = helpers->ReadIntPtr(ffcru4 + 0x20, false); - FFB = helpers->ReadByte(ffcru5 + 0x5A0, false); - } - if (mameversion.compare(Mame019964bit) == 0) - { - INT_PTR ffcru164 = helpers->ReadIntPtr(0x0C5E4FE8, true); - INT_PTR ffcru264 = helpers->ReadIntPtr(ffcru164 + 0x48, false); - INT_PTR ffcru364 = helpers->ReadIntPtr(ffcru264 + 0x48, false); - INT_PTR ffcru464 = helpers->ReadIntPtr(ffcru364 + 0xF0, false); - INT_PTR ffcru564 = helpers->ReadIntPtr(ffcru464 + 0x1F0, false); - FFB = helpers->ReadByte(ffcru564 + 0x774, false); - } - if (mameversion.compare(Mame0199UI64bit) == 0) - { - INT_PTR ffcru1ui = helpers->ReadIntPtr(0x0C075FB8, true); - INT_PTR ffcru2ui = helpers->ReadIntPtr(ffcru1ui + 0x48, false); - INT_PTR ffcru3ui = helpers->ReadIntPtr(ffcru2ui + 0x48, false); - INT_PTR ffcru4ui = helpers->ReadIntPtr(ffcru3ui + 0xF0, false); - INT_PTR ffcru5ui = helpers->ReadIntPtr(ffcru4ui + 0x1F0, false); - FFB = helpers->ReadByte(ffcru5ui + 0x774, false); - } - if (mameversion.compare(Mame020632bit) == 0) - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x02426C78, true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x290, false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x650, false); - FFB = helpers->ReadByte(ffcru3 + 0x248, false); - } - if (mameversion.compare(Mame020664bit) == 0) - { - INT_PTR ffcru164 = helpers->ReadIntPtr(0x0E198068, true); - INT_PTR ffcru264 = helpers->ReadIntPtr(ffcru164 + 0xB8, false); - INT_PTR ffcru364 = helpers->ReadIntPtr(ffcru264 + 0x8, false); - INT_PTR ffcru464 = helpers->ReadIntPtr(ffcru364 + 0x0, false); - INT_PTR ffcru564 = helpers->ReadIntPtr(ffcru464 + 0x0, false); - FFB = helpers->ReadByte(ffcru564 + 0x54, false); - } - if (mameversion.compare(Mame0206UI64bit) == 0) - { - INT_PTR ffcru1ui = helpers->ReadIntPtr(0x0DBCF058, true); - INT_PTR ffcru2ui = helpers->ReadIntPtr(ffcru1ui + 0x48, false); - INT_PTR ffcru3ui = helpers->ReadIntPtr(ffcru2ui + 0x40, false); - INT_PTR ffcru4ui = helpers->ReadIntPtr(ffcru3ui + 0x10, false); - INT_PTR ffcru5ui = helpers->ReadIntPtr(ffcru4ui + 0x2B8, false); - FFB = helpers->ReadByte(ffcru5ui + 0x7A4, false); - } - - ffcrusnwld = crusnwld(FFB); - - if ((ffcrusnwld > 110)& (ffcrusnwld < 226)) - { - helpers->log("moving wheel left"); - double percentForce = (225 - FFB) / 114.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnwld > 0)& (ffcrusnwld < 111)) - { - helpers->log("moving wheel right"); - double percentForce = (FFB) / 110.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - } - if ((hWnd19 > NULL) || (hWnd20 > NULL) || (hWnd21 > NULL)) //Crusn USA - { - int ffcrusnusa = 0; - { - if (mameversion.compare(Mame019932bit) == 0) - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x0C61E0A4, true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x134, false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x2E8, false); - INT_PTR ffcru4 = helpers->ReadIntPtr(ffcru3 + 0x0, false); - INT_PTR ffcru5 = helpers->ReadIntPtr(ffcru4 + 0x20, false); - FFB = helpers->ReadByte(ffcru5 + 0x5A0, false); - } - if (mameversion.compare(Mame019964bit) == 0) - { - INT_PTR ffcru164 = helpers->ReadIntPtr(0x0C5E4FE8, true); - INT_PTR ffcru264 = helpers->ReadIntPtr(ffcru164 + 0x48, false); - INT_PTR ffcru364 = helpers->ReadIntPtr(ffcru264 + 0x48, false); - INT_PTR ffcru464 = helpers->ReadIntPtr(ffcru364 + 0xF0, false); - INT_PTR ffcru564 = helpers->ReadIntPtr(ffcru464 + 0x1F0, false); - FFB = helpers->ReadByte(ffcru564 + 0x774, false); - } - if (mameversion.compare(Mame0199UI64bit) == 0) - { - INT_PTR ffcru1ui = helpers->ReadIntPtr(0x0C075FB8, true); - INT_PTR ffcru2ui = helpers->ReadIntPtr(ffcru1ui + 0x48, false); - INT_PTR ffcru3ui = helpers->ReadIntPtr(ffcru2ui + 0x48, false); - INT_PTR ffcru4ui = helpers->ReadIntPtr(ffcru3ui + 0xF0, false); - INT_PTR ffcru5ui = helpers->ReadIntPtr(ffcru4ui + 0x1F0, false); - FFB = helpers->ReadByte(ffcru5ui + 0x774, false); - } - if (mameversion.compare(Mame020632bit) == 0) - { - INT_PTR ffcru1 = helpers->ReadIntPtr(0x02426C78, true); - INT_PTR ffcru2 = helpers->ReadIntPtr(ffcru1 + 0x290, false); - INT_PTR ffcru3 = helpers->ReadIntPtr(ffcru2 + 0x650, false); - FFB = helpers->ReadByte(ffcru3 + 0x248, false); - } - if (mameversion.compare(Mame020664bit) == 0) - { - INT_PTR ffcru164 = helpers->ReadIntPtr(0x0E198068, true); - INT_PTR ffcru264 = helpers->ReadIntPtr(ffcru164 + 0xB8, false); - INT_PTR ffcru364 = helpers->ReadIntPtr(ffcru264 + 0x8, false); - INT_PTR ffcru464 = helpers->ReadIntPtr(ffcru364 + 0x0, false); - INT_PTR ffcru564 = helpers->ReadIntPtr(ffcru464 + 0x0, false); - FFB = helpers->ReadByte(ffcru564 + 0x54, false); - } - if (mameversion.compare(Mame0206UI64bit) == 0) - { - INT_PTR ffcru1ui = helpers->ReadIntPtr(0x0DBCF058, true); - INT_PTR ffcru2ui = helpers->ReadIntPtr(ffcru1ui + 0x48, false); - INT_PTR ffcru3ui = helpers->ReadIntPtr(ffcru2ui + 0x40, false); - INT_PTR ffcru4ui = helpers->ReadIntPtr(ffcru3ui + 0x10, false); - INT_PTR ffcru5ui = helpers->ReadIntPtr(ffcru4ui + 0x2B8, false); - FFB = helpers->ReadByte(ffcru5ui + 0x7A4, false); - } - - ffcrusnusa = crusnusa(FFB); - - if ((ffcrusnusa > 104) & (ffcrusnusa < 215)) - { - helpers->log("moving wheel left"); - double percentForce = (215 - FFB) / 110.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((ffcrusnusa > 0) & (ffcrusnusa < 105)) - { - helpers->log("moving wheel right"); - double percentForce = (FFB) / 104.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } - } - if ((hWnd22 > NULL) || (hWnd23 > NULL) || (hWnd24 > NULL) || (hWnd25 > NULL) || (hWnd26 > NULL)) //OffRoadChallenge - { - if (mameversion.compare(Mame019932bit) == 0) - { - INT_PTR ffoff1 = helpers->ReadIntPtr(0x0C61E0A4, true); - INT_PTR ffoff2 = helpers->ReadIntPtr(ffoff1 + 0x60, false); - INT_PTR ffoff3 = helpers->ReadIntPtr(ffoff2 + 0x4, false); - INT_PTR ffoff4 = helpers->ReadIntPtr(ffoff3 + 0x40, false); - INT_PTR ffoff5 = helpers->ReadIntPtr(ffoff4 + 0x0, false); - FFB = helpers->ReadByte(ffoff5 + 0x3C, false); - } - if (mameversion.compare(Mame019964bit) == 0) - { - INT_PTR ffoff164 = helpers->ReadIntPtr(0x0C5E4FE8, true); - INT_PTR ffoff264 = helpers->ReadIntPtr(ffoff164 + 0xB8, false); - INT_PTR ffoff364 = helpers->ReadIntPtr(ffoff264 + 0x8, false); - INT_PTR ffoff464 = helpers->ReadIntPtr(ffoff364 + 0x0, false); - INT_PTR ffoff564 = helpers->ReadIntPtr(ffoff464 + 0x0, false); - FFB = helpers->ReadByte(ffoff564 + 0x54, false); - } - if (mameversion.compare(Mame0199UI64bit) == 0) - { - INT_PTR ffoff164UI = helpers->ReadIntPtr(0x0C075FB8, true); - INT_PTR ffoff264UI = helpers->ReadIntPtr(ffoff164UI + 0xB8, false); - INT_PTR ffoff364UI = helpers->ReadIntPtr(ffoff264UI + 0x8, false); - INT_PTR ffoff464UI = helpers->ReadIntPtr(ffoff364UI + 0x40, false); - INT_PTR ffoff564UI = helpers->ReadIntPtr(ffoff464UI + 0x0, false); - FFB = helpers->ReadByte(ffoff564UI + 0x54, false); - } - if (mameversion.compare(Mame020632bit) == 0) - { - INT_PTR ffoff1 = helpers->ReadIntPtr(0x02426C78, true); - INT_PTR ffoff2 = helpers->ReadIntPtr(ffoff1 + 0x290, false); - INT_PTR ffoff3 = helpers->ReadIntPtr(ffoff2 + 0x650, false); - FFB = helpers->ReadByte(ffoff3 + 0x248, false); - } - if (mameversion.compare(Mame020664bit) == 0) - { - INT_PTR ffoff164 = helpers->ReadIntPtr(0x0E198068, true); - INT_PTR ffoff264 = helpers->ReadIntPtr(ffoff164 + 0x48, false); - INT_PTR ffoff364 = helpers->ReadIntPtr(ffoff264 + 0x40, false); - INT_PTR ffoff464 = helpers->ReadIntPtr(ffoff364 + 0x120, false); - INT_PTR ffoff564 = helpers->ReadIntPtr(ffoff464 + 0x1A8, false); - FFB = helpers->ReadByte(ffoff564 + 0x7A4, false); - } - if (mameversion.compare(Mame0206UI64bit) == 0) - { - INT_PTR ffoff164UI = helpers->ReadIntPtr(0x0DBCF058, true); - INT_PTR ffoff264UI = helpers->ReadIntPtr(ffoff164UI + 0x48, false); - INT_PTR ffoff364UI = helpers->ReadIntPtr(ffoff264UI + 0x40, false); - INT_PTR ffoff464UI = helpers->ReadIntPtr(ffoff364UI + 0x588, false); - FFB = helpers->ReadByte(ffoff464UI + 0x4CC, false); - } - - if ((FFB > 0x83)& (FFB < 0x100)) - { - helpers->log("moving wheel left"); - double percentForce = (255 - FFB) / 124.0; - double percentLength = 100; - triggers->Rumble(0, percentForce, percentLength); - triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); - } - else if ((FFB > 0x00)& (FFB < 0x7D)) - { - helpers->log("moving wheel right"); - double percentForce = (FFB) / 124.0; - double percentLength = 100; - triggers->Rumble(percentForce, 0, percentLength); - triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); - } - } -} \ No newline at end of file diff --git a/Game Files/OldMame.h b/Game Files/OldMame.h deleted file mode 100644 index a64cb29..0000000 --- a/Game Files/OldMame.h +++ /dev/null @@ -1,20 +0,0 @@ -/*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 OldMame : public Game { - -public: - void FFBLoop(EffectConstants *constants, Helpers *helpers, EffectTriggers* triggers); -}; \ No newline at end of file diff --git a/Game Files/OutputReading.cpp b/Game Files/OutputReading.cpp index c58b724..b17aaff 100644 --- a/Game Files/OutputReading.cpp +++ b/Game Files/OutputReading.cpp @@ -15,6 +15,7 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include #include #include "SDL.h" +#include "../Common Files/SignatureScanning.h" HINSTANCE ProcDLL = NULL; extern int joystick_index1; @@ -499,6 +500,17 @@ static int configFeedbackLengthVaporTrx = GetPrivateProfileInt(TEXT("Settings"), static int EnableForceSpringEffectVaporTrx = GetPrivateProfileInt(TEXT("Settings"), TEXT("EnableForceSpringEffectVaporTrx"), 0, settingsFilename); static int ForceSpringStrengthVaporTrx = GetPrivateProfileInt(TEXT("Settings"), TEXT("ForceSpringStrengthVaporTrx"), 0, settingsFilename); +static int configMinForceRaveRacer = GetPrivateProfileInt(TEXT("Settings"), TEXT("MinForceRaveRacer"), 0, settingsFilename); +static int configMaxForceRaveRacer = GetPrivateProfileInt(TEXT("Settings"), TEXT("MaxForceRaveRacer"), 100, settingsFilename); +static int configAlternativeMinForceLeftRaveRacer = GetPrivateProfileInt(TEXT("Settings"), TEXT("AlternativeMinForceLeftRaveRacer"), 0, settingsFilename); +static int configAlternativeMaxForceLeftRaveRacer = GetPrivateProfileInt(TEXT("Settings"), TEXT("AlternativeMaxForceLeftRaveRacer"), 100, settingsFilename); +static int configAlternativeMinForceRightRaveRacer = GetPrivateProfileInt(TEXT("Settings"), TEXT("AlternativeMinForceRightRaveRacer"), 0, settingsFilename); +static int configAlternativeMaxForceRightRaveRacer = GetPrivateProfileInt(TEXT("Settings"), TEXT("AlternativeMaxForceRightRaveRacer"), 100, settingsFilename); +static int PowerModeRaveRacer = GetPrivateProfileInt(TEXT("Settings"), TEXT("PowerModeRaveRacer"), 0, settingsFilename); +static int configFeedbackLengthRaveRacer = GetPrivateProfileInt(TEXT("Settings"), TEXT("FeedbackLengthRaveRacer"), 120, settingsFilename); +static int EnableForceSpringEffectRaveRacer = GetPrivateProfileInt(TEXT("Settings"), TEXT("EnableForceSpringEffectRaveRacer"), 0, settingsFilename); +static int ForceSpringStrengthRaveRacer = GetPrivateProfileInt(TEXT("Settings"), TEXT("ForceSpringStrengthRaveRacer"), 0, settingsFilename); + static bool init = false; static bool initSpring = false; static bool EmuName = false; @@ -513,6 +525,7 @@ static bool HardDrivinFrame = false; static bool Motion = false; static bool MotionFalse = false; static bool StartEffectOnce = false; +static bool RaveRacerFind = false; HINSTANCE hInstance; HINSTANCE hPrevInstance; @@ -536,6 +549,7 @@ int stateFFB2; int stateFFB3; int stateFFBDevice2; int stateFFBDevice3; +static int FFBAddress; std::string wheelA("wheel"); @@ -817,6 +831,268 @@ static BOOL CALLBACK FindWindowBySubstr(HWND hwnd, LPARAM substring) return true; } +static int raveracer(int ffRaw) { + switch (ffRaw) { + + //case 0xFE: + //return 128; + case 0x7E: + return 123; + //case 0xBE: + //return 126; + case 0x3E: + return 122; + case 0xDE: + return 121; + case 0x5E: + return 120; + case 0x9E: + return 119; + case 0x1E: + return 118; + case 0xEE: + return 117; + case 0x6E: + return 116; + case 0xAE: + return 115; + case 0xCE: + return 114; + case 0x2E: + return 113; + case 0x4E: + return 112; + case 0x8E: + return 111; + case 0x0E: + return 110; + case 0xF6: + return 109; + case 0x76: + return 108; + case 0xB6: + return 107; + case 0x36: + return 106; + case 0xD6: + return 105; + case 0x56: + return 104; + case 0x96: + return 103; + case 0x16: + return 102; + case 0xE6: + return 101; + case 0x66: + return 100; + case 0xA6: + return 99; + case 0xC6: + return 98; + case 0x26: + return 97; + case 0x46: + return 96; + case 0x86: + return 95; + case 0x06: + return 94; + case 0xFA: + return 93; + case 0x7A: + return 92; + case 0xBA: + return 91; + case 0x3A: + return 90; + case 0xDA: + return 89; + case 0x5A: + return 88; + case 0x9A: + return 87; + case 0x1A: + return 86; + case 0xEA: + return 85; + case 0x6A: + return 84; + case 0xAA: + return 83; + case 0xCA: + return 82; + case 0x2A: + return 81; + case 0x4A: + return 80; + case 0x8A: + return 79; + case 0x0A: + return 78; + case 0xF2: + return 77; + case 0x72: + return 76; + case 0xB2: + return 75; + case 0x32: + return 74; + case 0xD2: + return 73; + case 0x52: + return 72; + case 0x92: + return 71; + case 0x12: + return 70; + case 0xE2: + return 69; + case 0x62: + return 68; + case 0xA2: + return 67; + case 0xC2: + return 66; + case 0x22: + return 65; + case 0x42: + return 64; + case 0x82: + return 63; + case 0x02: + return 62; + + + case 0x80: + return 61; + case 0x40: + return 60; + case 0x20: + return 59; + case 0xC0: + return 58; + case 0xA0: + return 57; + case 0x60: + return 56; + case 0xE0: + return 55; + case 0x10: + return 54; + case 0x90: + return 53; + case 0x50: + return 52; + case 0xD0: + return 51; + case 0x30: + return 50; + case 0xB0: + return 49; + case 0x70: + return 48; + case 0xF0: + return 47; + case 0x08: + return 46; + case 0x88: + return 45; + case 0x48: + return 44; + case 0x28: + return 43; + case 0xC8: + return 42; + case 0xA8: + return 41; + case 0x68: + return 40; + case 0xE8: + return 39; + case 0x18: + return 38; + case 0x98: + return 37; + case 0x58: + return 36; + case 0xD8: + return 35; + case 0x38: + return 34; + case 0xB8: + return 33; + case 0x78: + return 32; + case 0xF8: + return 31; + case 0x04: + return 30; + case 0x84: + return 29; + case 0x44: + return 28; + case 0x24: + return 27; + case 0xC4: + return 26; + case 0xA4: + return 25; + case 0x64: + return 24; + case 0xE4: + return 23; + case 0x14: + return 22; + case 0x94: + return 21; + case 0x54: + return 20; + case 0xD4: + return 19; + case 0x34: + return 18; + case 0xB4: + return 17; + case 0x74: + return 16; + case 0xF4: + return 15; + case 0x0C: + return 14; + case 0x8C: + return 13; + case 0x4C: + return 12; + case 0x2C: + return 11; + case 0xCC: + return 10; + case 0xAC: + return 9; + case 0x6C: + return 8; + case 0xEC: + return 7; + case 0x1C: + return 6; + case 0x9C: + return 5; + case 0x5C: + return 4; + case 0xDC: + return 3; + case 0x3C: + return 2; + //case 0xBC: + //return 3; + case 0x7C: + return 1; + //case 0xFC: + //return 1; + } +} + DWORD WINAPI ThreadForOutputs(LPVOID lpParam) { WinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow); @@ -946,6 +1222,9 @@ std::string racedrivc2("racedrivc2"); std::string racedrivc4("racedrivc4"); std::string racedrivc("racedrivc"); std::string racedrivpan("racedrivpan"); +std::string raveracw("raveracw"); +std::string raveracj("raveracj"); +std::string raveracja("raveracja"); std::string othunder("othunder"); std::string othundero("othundero"); std::string othunderuo("othunderuo"); @@ -1021,6 +1300,7 @@ std::string RacingFullValueActive1("RacingFullValueActive1"); std::string RacingFullValueActive2("RacingFullValueActive2"); std::string RacingActive1("RacingActive1"); std::string RacingActive2("RacingActive2"); +std::string RaveRacerActive("RaveRacerActive"); std::string AfterburnerActive("AfterburnerActive"); std::string OutrunActive("OutrunActive"); std::string PDriftActive("PDriftActive"); @@ -1826,6 +2106,22 @@ void OutputReading::FFBLoop(EffectConstants* constants, Helpers* helpers, Effect RunningFFB = "RacingFullValueActive1"; } + if (romname == raveracw || romname == raveracj || romname == raveracja) + { + configMinForce = configMinForceRaveRacer; + configMaxForce = configMaxForceRaveRacer; + configAlternativeMinForceLeft = configAlternativeMinForceLeftRaveRacer; + configAlternativeMaxForceLeft = configAlternativeMaxForceLeftRaveRacer; + configAlternativeMinForceRight = configAlternativeMinForceRightRaveRacer; + configAlternativeMaxForceRight = configAlternativeMaxForceRightRaveRacer; + configFeedbackLength = configFeedbackLengthRaveRacer; + PowerMode = PowerModeRaveRacer; + EnableForceSpringEffect = EnableForceSpringEffectRaveRacer; + ForceSpringStrength = ForceSpringStrengthRaveRacer; + + RunningFFB = "RaveRacerActive"; + } + if ((RunningFFB != NULL) && (RunningFFB[0] != '\0')) { RomGameName = true; @@ -2665,6 +2961,45 @@ void OutputReading::FFBLoop(EffectConstants* constants, Helpers* helpers, Effect } } + if (RunningFFB == RaveRacerActive) //Rave Racer + { + if (!RaveRacerFind) + { + aAddy2 = PatternScan("\x08\x00\x20\x00\x20\x00\x20\x00\x20\x00\x03", "xxxxxxxxxxx"); + + UINT8 CheckAddy2 = (int)aAddy2 + 0x1B; + if (CheckAddy2 == 0x3B) + { + FFBAddress = (int)aAddy2 + 0x20; + RaveRacerFind = true; + } + } + else + { + UINT8 FFB = helpers->ReadByte(FFBAddress, false); + UINT8 ffrave = raveracer(FFB); + + helpers->log("got value: "); + std::string ffs = std::to_string(ffrave); + helpers->log((char*)ffs.c_str()); + + if ((ffrave > 0x3D) && (ffrave < 0x7C)) + { + double percentForce = (124 - ffrave) / 61.0; + double percentLength = 100; + triggers->Rumble(percentForce, 0, percentLength); + triggers->Constant(constants->DIRECTION_FROM_LEFT, percentForce); + } + else if ((ffrave > 0x00) && (ffrave < 0x3E)) + { + double percentForce = (ffrave) / 61.0; + double percentLength = 100; + triggers->Rumble(0, percentForce, percentLength); + triggers->Constant(constants->DIRECTION_FROM_RIGHT, percentForce); + } + } + } + if (RunningFFB == HardDrivinActive) //Hard Drivin { if (Emulator == MAME)