diff --git a/Config/FFBPlugin.ini b/Config/FFBPlugin.ini index 08d68fe..c3064e5 100644 --- a/Config/FFBPlugin.ini +++ b/Config/FFBPlugin.ini @@ -52,6 +52,8 @@ ResetFFBStrength= ; Step is the amount to adjust when increasing or decreasing per button where FFB strength is represented on ; a scale of 0-100. StepFFBStrength=5 +; Set to 1 if you want FFB strength adjustments to persist between loads, else 0. +EnableFFBStrengthPersistence=0 ; Set to 1 if you want FFB strength adjustments text to speech over speaker EnableFFBStrengthTextToSpeech=0 diff --git a/Config/PersistentValues.h b/Config/PersistentValues.h index b27ab47..2eb9452 100644 --- a/Config/PersistentValues.h +++ b/Config/PersistentValues.h @@ -9,9 +9,46 @@ extern int configAlternativeMaxForceLeft; extern int configAlternativeMinForceRight; extern int configAlternativeMaxForceRight; extern char* romname; +extern char* romnameM2; +extern char* romnameDemul; extern LPCSTR CustomAlternativeMaxForceLeft; extern LPCSTR CustomAlternativeMaxForceRight; extern LPCSTR CustomMaxForce; +extern int EnableFFBStrengthPersistence; + +int defaultMaxForce; +int defaultAlternativeMaxForceLeft; +int defaultAlternativeMaxForceRight; + +//Demul Emulator Games +static std::string Nascar("Nascar"); +static std::string InitialDArcadeStage("Initial D Arcade Stage"); +static std::string SmashingDrive("Smashing Drive"); +static std::string MaximumSpeed("Maximum Speed"); +static std::string FasterThanSpeed("Faster Than Speed"); +static std::string ATVTrack("ATV Track"); + +//M2 Emulator Games +static std::string SegaRallyChampionship("Sega Rally Championship"); +static std::string SegaRallyChampionshipRevB("Sega Rally Championship (Rev B)"); +static std::string SegaRallyProDrivin("Sega Rally Pro Drivin'"); +static std::string DaytonaUSA("Daytona USA"); +static std::string DaytonaUSA93Edition("Daytona USA '93 Edition"); +static std::string DaytonaUSASaturnAds("Daytona USA (Saturn Ads)"); +static std::string DaytonaUSASpecialEdition("Daytona USA Special Edition"); +static std::string DaytonaUSATurbo("Daytona USA Turbo"); +static std::string DaytonaUSATurboRevA("Daytona USA Turbo (Rev A)"); +static std::string DaytonaUSAGTX2004("Daytona USA: GTX 2004"); +static std::string DaytonaUSAToTheMaxx("Daytona USA: To The Maxx"); +static std::string Indianapolis500RevADeluxe("Indianapolis 500 (Rev A, Deluxe)"); +static std::string Indianapolis500RevATwinNewerrev("Indianapolis 500 (Rev A, Twin, Newer rev)"); +static std::string Indianapolis500RevATwinOlderrev("Indianapolis 500 (Rev A, Twin, Older rev)"); +static std::string OverRev("Over Rev"); +static std::string OverRevModel2B("Over Rev (Model 2B)"); +static std::string SuperGT24h("Super GT 24h"); +static std::string SegaTouringCarChampionship("Sega Touring Car Championship"); +static std::string SegaTouringCarChampionshipRevA("Sega Touring Car Championship (Rev A)"); +static std::string SegaTouringCarChampionshipRevB("Sega Touring Car Championship (Rev B)"); //Supermodel Emulator Games static std::string dayto2pe("dayto2pe"); @@ -204,34 +241,46 @@ static std::string victlapw("victlapw"); void DefaultConfigValues() { - if (configGameId == 1) + if (EnableFFBStrengthPersistence == 1) { - configMinForce = 0; - configMaxForce = 90; - configAlternativeMinForceLeft = 0; - configAlternativeMaxForceLeft = -90; - configAlternativeMinForceRight = 0; - configAlternativeMaxForceRight = 90; - } - else if ((configGameId == 2) || (configGameId == 3) || (configGameId == 29)) - { - configMinForce = 0; - configMaxForce = 75; - configAlternativeMinForceLeft = 0; - configAlternativeMaxForceLeft = -75; - configAlternativeMinForceRight = 0; - configAlternativeMaxForceRight = 75; - } - else if (configGameId == 22) - { - if (romname == superchs || romname == superchsj || romname == superchsp || romname == superchsu) + if (configGameId == 1) { configMinForce = 0; - configMaxForce = 80; + configMaxForce = 90; configAlternativeMinForceLeft = 0; - configAlternativeMaxForceLeft = -80; + configAlternativeMaxForceLeft = -90; configAlternativeMinForceRight = 0; - configAlternativeMaxForceRight = 80; + configAlternativeMaxForceRight = 90; + } + else if ((configGameId == 2) || (configGameId == 3) || (configGameId == 29)) + { + configMinForce = 0; + configMaxForce = 75; + configAlternativeMinForceLeft = 0; + configAlternativeMaxForceLeft = -75; + configAlternativeMinForceRight = 0; + configAlternativeMaxForceRight = 75; + } + else if (configGameId == 22) + { + if (romname == superchs || romname == superchsj || romname == superchsp || romname == superchsu) + { + configMinForce = 0; + configMaxForce = 80; + configAlternativeMinForceLeft = 0; + configAlternativeMaxForceLeft = -80; + configAlternativeMinForceRight = 0; + configAlternativeMaxForceRight = 80; + } + else + { + configMinForce = 0; + configMaxForce = 100; + configAlternativeMinForceLeft = 0; + configAlternativeMaxForceLeft = -100; + configAlternativeMinForceRight = 0; + configAlternativeMaxForceRight = 100; + } } else { @@ -245,17 +294,18 @@ void DefaultConfigValues() } else { - configMinForce = 0; - configMaxForce = 100; - configAlternativeMinForceLeft = 0; - configAlternativeMaxForceLeft = -100; - configAlternativeMinForceRight = 0; - configAlternativeMaxForceRight = 100; + configMaxForce = defaultMaxForce; + configAlternativeMaxForceLeft = defaultAlternativeMaxForceLeft; + configAlternativeMaxForceRight = defaultAlternativeMaxForceRight; } } void CustomFFBStrengthSetup() { + defaultMaxForce = configMaxForce; + defaultAlternativeMaxForceLeft = configAlternativeMaxForceLeft; + defaultAlternativeMaxForceRight = configAlternativeMaxForceRight; + if (configGameId == 34) { if (romname == dayto2pe || romname == daytona2) @@ -706,6 +756,166 @@ void CustomFFBStrengthSetup() } } } + else if (configGameId == 25) + { + if (romnameM2 == DaytonaUSA || romnameM2 == DaytonaUSA93Edition || romnameM2 == DaytonaUSASaturnAds || romnameM2 == DaytonaUSASpecialEdition || romnameM2 == DaytonaUSATurbo || romnameM2 == DaytonaUSATurboRevA || romnameM2 == DaytonaUSAGTX2004 || romnameM2 == DaytonaUSAToTheMaxx) + { + if (AlternativeFFB == 1) + { + CustomAlternativeMaxForceLeft = "AlternativeMaxForceLeftDaytona"; + CustomAlternativeMaxForceRight = "AlternativeMaxForceRightDaytona"; + } + else + { + CustomMaxForce = "MaxForceDaytona"; + } + } + + if (romnameM2 == SegaRallyChampionship || romnameM2 == SegaRallyChampionshipRevB || romnameM2 == SegaRallyProDrivin) + { + if (AlternativeFFB == 1) + { + CustomAlternativeMaxForceLeft = "AlternativeMaxForceLeftSRally"; + CustomAlternativeMaxForceRight = "AlternativeMaxForceRightSRally"; + } + else + { + CustomMaxForce = "MaxForceSRally"; + } + } + + if (romnameM2 == Indianapolis500RevADeluxe || romnameM2 == Indianapolis500RevATwinNewerrev || romnameM2 == Indianapolis500RevATwinOlderrev) + { + if (AlternativeFFB == 1) + { + CustomAlternativeMaxForceLeft = "AlternativeMaxForceLeftIndy500"; + CustomAlternativeMaxForceRight = "AlternativeMaxForceRightIndy500"; + } + else + { + CustomMaxForce = "MaxForceIndy500"; + } + } + + if (romnameM2 == SegaTouringCarChampionship || romnameM2 == SegaTouringCarChampionshipRevA || romnameM2 == SegaTouringCarChampionshipRevB) + { + if (AlternativeFFB == 1) + { + CustomAlternativeMaxForceLeft = "AlternativeMaxForceLeftSTCC"; + CustomAlternativeMaxForceRight = "AlternativeMaxForceRightSTCC"; + } + else + { + CustomMaxForce = "MaxForceSTCC"; + } + } + + if (romnameM2 == OverRev || romnameM2 == OverRevModel2B) + { + if (AlternativeFFB == 1) + { + CustomAlternativeMaxForceLeft = "AlternativeMaxForceLeftOverRev"; + CustomAlternativeMaxForceRight = "AlternativeMaxForceRightOverRev"; + } + else + { + CustomMaxForce = "MaxForceOverRev"; + } + } + + if (romnameM2 == SuperGT24h) + { + if (AlternativeFFB == 1) + { + CustomAlternativeMaxForceLeft = "AlternativeMaxForceLeftSuperGT"; + CustomAlternativeMaxForceRight = "AlternativeMaxForceRightSuperGT"; + } + else + { + CustomMaxForce = "MaxForceSuperGT"; + } + } + } + else if (configGameId == 26) + { + if (romnameDemul == Nascar) + { + if (AlternativeFFB == 1) + { + CustomAlternativeMaxForceLeft = "AlternativeMaxForceLeftNascarRacing"; + CustomAlternativeMaxForceRight = "AlternativeMaxForceRightNascarRacing"; + } + else + { + CustomMaxForce = "MaxForceNascarRacing"; + } + } + + if (romnameDemul == InitialDArcadeStage) + { + if (AlternativeFFB == 1) + { + CustomAlternativeMaxForceLeft = "AlternativeMaxForceLeftInitialDDemul"; + CustomAlternativeMaxForceRight = "AlternativeMaxForceRightInitialDDemul"; + } + else + { + CustomMaxForce = "MaxForceInitialDDemul"; + } + } + + if (romnameDemul == SmashingDrive) + { + if (AlternativeFFB == 1) + { + CustomAlternativeMaxForceLeft = "AlternativeMaxForceLeftSmashingDrive"; + CustomAlternativeMaxForceRight = "AlternativeMaxForceRightSmashingDrive"; + } + else + { + CustomMaxForce = "MaxForceSmashingDrive"; + } + } + + if (romnameDemul == MaximumSpeed) + { + if (AlternativeFFB == 1) + { + CustomAlternativeMaxForceLeft = "AlternativeMaxForceLeftMaximumSpeed"; + CustomAlternativeMaxForceRight = "AlternativeMaxForceRightMaximumSpeed"; + } + else + { + CustomMaxForce = "MaxForceMaximumSpeed"; + } + } + + if (romnameDemul == FasterThanSpeed) + { + if (AlternativeFFB == 1) + { + CustomAlternativeMaxForceLeft = "AlternativeMaxForceLeftFasterSpeed"; + CustomAlternativeMaxForceRight = "AlternativeMaxForceRightFasterSpeed"; + } + else + { + CustomMaxForce = "MaxForceFasterSpeed"; + } + } + + if (romnameDemul == ATVTrack) + { + if (AlternativeFFB == 1) + { + CustomAlternativeMaxForceLeft = "AlternativeMaxForceLeftATVTrack"; + CustomAlternativeMaxForceRight = "AlternativeMaxForceRightATVTrack"; + } + else + { + CustomMaxForce = "MaxForceATVTrack"; + } + } + } else { if (AlternativeFFB == 1) diff --git a/DllMain.cpp b/DllMain.cpp index bfb72eb..17d9546 100644 --- a/DllMain.cpp +++ b/DllMain.cpp @@ -929,6 +929,7 @@ int IncreaseFFBStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("IncreaseF int DecreaseFFBStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("DecreaseFFBStrength"), NULL, settingsFilename); int ResetFFBStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("ResetFFBStrength"), NULL, settingsFilename); int StepFFBStrength = GetPrivateProfileInt(TEXT("Settings"), TEXT("StepFFBStrength"), 5, settingsFilename); +int EnableFFBStrengthPersistence = GetPrivateProfileInt(TEXT("Settings"), TEXT("EnableFFBStrengthPersistence"), 0, settingsFilename); int EnableFFBStrengthTextToSpeech = GetPrivateProfileInt(TEXT("Settings"), TEXT("EnableFFBStrengthTextToSpeech"), 0, settingsFilename); extern void DefaultConfigValues(); @@ -1948,14 +1949,17 @@ int WorkaroundToFixRumble(void* ptr) void WritePersistentMaxForce() { - if (AlternativeFFB == 1) + if (EnableFFBStrengthPersistence == 1) { - WritePrivateProfileStringA("Settings", CustomAlternativeMaxForceLeft, (char*)(std::to_string(configAlternativeMaxForceLeft)).c_str(), ".\\FFBPlugin.ini"); - WritePrivateProfileStringA("Settings", CustomAlternativeMaxForceRight, (char*)(std::to_string(configAlternativeMaxForceRight)).c_str(), ".\\FFBPlugin.ini"); - } - else - { - WritePrivateProfileStringA("Settings", CustomMaxForce, (char*)(std::to_string(configMaxForce)).c_str(), ".\\FFBPlugin.ini"); + if (AlternativeFFB == 1) + { + WritePrivateProfileStringA("Settings", CustomAlternativeMaxForceLeft, (char*)(std::to_string(configAlternativeMaxForceLeft)).c_str(), ".\\FFBPlugin.ini"); + WritePrivateProfileStringA("Settings", CustomAlternativeMaxForceRight, (char*)(std::to_string(configAlternativeMaxForceRight)).c_str(), ".\\FFBPlugin.ini"); + } + else + { + WritePrivateProfileStringA("Settings", CustomMaxForce, (char*)(std::to_string(configMaxForce)).c_str(), ".\\FFBPlugin.ini"); + } } } diff --git a/Game Files/Demul.cpp b/Game Files/Demul.cpp index b4ee504..7768346 100644 --- a/Game Files/Demul.cpp +++ b/Game Files/Demul.cpp @@ -22,6 +22,14 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include "../Common Files/CRCCheck.h" #include "../Common Files/SignatureScanning.h" +//Demul Emulator Games +std::string Nascar("Nascar"); +std::string InitialDArcadeStage("Initial D Arcade Stage"); +std::string SmashingDrive("Smashing Drive"); +std::string MaximumSpeed("Maximum Speed"); +std::string FasterThanSpeed("Faster Than Speed"); +std::string ATVTrack("ATV Track"); + extern void NascarInputsEnabled(Helpers* helpers); extern void InitialDInputsEnabled(Helpers* helpers); extern void SmashingDriveInputsEnabled(Helpers* helpers); @@ -164,6 +172,8 @@ static INT_PTR FFBAddress; static int ffnascar = 0; static int fffaster = 0; +char* romnameDemul; + int nascar(int ffnas) { switch (ffnas) { @@ -686,6 +696,8 @@ void Demul::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers NascarRunning = true; WindowSearch = true; + + sprintf(romnameDemul, "%s", Nascar); } if (!EnumWindows(FindWindowBySubstr, (LPARAM)substring2)) @@ -703,6 +715,8 @@ void Demul::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers InitialDRunning = true; WindowSearch = true; + + sprintf(romnameDemul, "%s", InitialDArcadeStage); } if (!EnumWindows(FindWindowBySubstr, (LPARAM)substring3)) @@ -720,6 +734,8 @@ void Demul::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers SmashingDriveRunning = true; WindowSearch = true; + + sprintf(romnameDemul, "%s", SmashingDrive); } if (!EnumWindows(FindWindowBySubstr, (LPARAM)substring4)) @@ -737,6 +753,8 @@ void Demul::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers MaximumSpeedRunning = true; WindowSearch = true; + + sprintf(romnameDemul, "%s", MaximumSpeed); } if (!EnumWindows(FindWindowBySubstr, (LPARAM)substring5)) @@ -754,6 +772,8 @@ void Demul::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers FasterThanSpeedRunning = true; WindowSearch = true; + + sprintf(romnameDemul, "%s", FasterThanSpeed); } if (!EnumWindows(FindWindowBySubstr, (LPARAM)substring6)) @@ -771,6 +791,8 @@ void Demul::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers ATVTrackRunning = true; WindowSearch = true; + + sprintf(romnameDemul, "%s", ATVTrack); } } } diff --git a/Game Files/M2Emulator.cpp b/Game Files/M2Emulator.cpp index beb764a..c8c5378 100644 --- a/Game Files/M2Emulator.cpp +++ b/Game Files/M2Emulator.cpp @@ -17,6 +17,28 @@ along with FFB Arcade Plugin.If not, see < https://www.gnu.org/licenses/>. #include "math.h" #include "SDL.h" +//M2 Emulator Games +std::string SegaRallyChampionship("Sega Rally Championship"); +std::string SegaRallyChampionshipRevB("Sega Rally Championship (Rev B)"); +std::string SegaRallyProDrivin("Sega Rally Pro Drivin'"); +std::string DaytonaUSA("Daytona USA"); +std::string DaytonaUSA93Edition("Daytona USA '93 Edition"); +std::string DaytonaUSASaturnAds("Daytona USA (Saturn Ads)"); +std::string DaytonaUSASpecialEdition("Daytona USA Special Edition"); +std::string DaytonaUSATurbo("Daytona USA Turbo"); +std::string DaytonaUSATurboRevA("Daytona USA Turbo (Rev A)"); +std::string DaytonaUSAGTX2004("Daytona USA: GTX 2004"); +std::string DaytonaUSAToTheMaxx("Daytona USA: To The Maxx"); +std::string Indianapolis500RevADeluxe("Indianapolis 500 (Rev A, Deluxe)"); +std::string Indianapolis500RevATwinNewerrev("Indianapolis 500 (Rev A, Twin, Newer rev)"); +std::string Indianapolis500RevATwinOlderrev("Indianapolis 500 (Rev A, Twin, Older rev)"); +std::string OverRev("Over Rev"); +std::string OverRevModel2B("Over Rev (Model 2B)"); +std::string SuperGT24h("Super GT 24h"); +std::string SegaTouringCarChampionship("Sega Touring Car Championship"); +std::string SegaTouringCarChampionshipRevA("Sega Touring Car Championship (Rev A)"); +std::string SegaTouringCarChampionshipRevB("Sega Touring Car Championship (Rev B)"); + //Config Settings extern wchar_t* settingsFilename; extern int DeviceGUID; @@ -140,28 +162,114 @@ static bool Hook(void * toHook, void * ourFunct, int len) { static DWORD jmpBackAddy; +char* romnameM2; + void M2Emulator::FFBLoop(EffectConstants * constants, Helpers * helpers, EffectTriggers * triggers) { - HWND hWnd1 = FindWindowA(0, ("Sega Rally Championship")); - HWND hWnd2 = FindWindowA(0, ("Daytona USA")); - HWND hWnd3 = FindWindowA(0, ("Indianapolis 500 (Rev A, Deluxe)")); - HWND hWnd4 = FindWindowA(0, ("Sega Touring Car Championship (Rev A)")); - HWND hWnd5 = FindWindowA(0, ("Over Rev")); - HWND hWnd6 = FindWindowA(0, ("Super GT 24h")); - HWND hWnd7 = FindWindowA(0, ("Daytona USA '93 Edition")); - HWND hWnd8 = FindWindowA(0, ("Daytona USA (Saturn Ads)")); - HWND hWnd9 = FindWindowA(0, ("Daytona USA Special Edition")); - HWND hWnd10 = FindWindowA(0, ("Daytona USA Turbo")); - HWND hWnd11 = FindWindowA(0, ("Daytona USA Turbo (Rev A)")); - HWND hWnd12 = FindWindowA(0, ("Daytona USA: GTX 2004")); - HWND hWnd13 = FindWindowA(0, ("Daytona USA: To The Maxx")); - HWND hWnd14 = FindWindowA(0, ("Sega Rally Championship (Rev B)")); - HWND hWnd15 = FindWindowA(0, ("Sega Rally Pro Drivin'")); - HWND hWnd16 = FindWindowA(0, ("Indianapolis 500 (Rev A, Twin, Newer rev)")); - HWND hWnd17 = FindWindowA(0, ("Indianapolis 500 (Rev A, Twin, Older rev)")); - HWND hWnd18 = FindWindowA(0, ("Sega Touring Car Championship")); - HWND hWnd19 = FindWindowA(0, ("Sega Touring Car Championship (Rev B)")); - HWND hWnd20 = FindWindowA(0, ("Over Rev (Model 2B)")); + HWND hWnd1 = FindWindowA(0, SegaRallyChampionship.c_str()); + HWND hWnd2 = FindWindowA(0, DaytonaUSA.c_str()); + HWND hWnd3 = FindWindowA(0, Indianapolis500RevADeluxe.c_str()); + HWND hWnd4 = FindWindowA(0, SegaTouringCarChampionshipRevA.c_str()); + HWND hWnd5 = FindWindowA(0, OverRev.c_str()); + HWND hWnd6 = FindWindowA(0, SuperGT24h.c_str()); + HWND hWnd7 = FindWindowA(0, DaytonaUSA93Edition.c_str()); + HWND hWnd8 = FindWindowA(0, DaytonaUSASaturnAds.c_str()); + HWND hWnd9 = FindWindowA(0, DaytonaUSASpecialEdition.c_str()); + HWND hWnd10 = FindWindowA(0, DaytonaUSATurbo.c_str()); + HWND hWnd11 = FindWindowA(0, DaytonaUSATurboRevA.c_str()); + HWND hWnd12 = FindWindowA(0, DaytonaUSAGTX2004.c_str()); + HWND hWnd13 = FindWindowA(0, DaytonaUSAToTheMaxx.c_str()); + HWND hWnd14 = FindWindowA(0, SegaRallyChampionshipRevB.c_str()); + HWND hWnd15 = FindWindowA(0, SegaRallyProDrivin.c_str()); + HWND hWnd16 = FindWindowA(0, Indianapolis500RevATwinNewerrev.c_str()); + HWND hWnd17 = FindWindowA(0, Indianapolis500RevATwinOlderrev.c_str()); + HWND hWnd18 = FindWindowA(0, SegaTouringCarChampionship.c_str()); + HWND hWnd19 = FindWindowA(0, SegaTouringCarChampionshipRevB.c_str()); + HWND hWnd20 = FindWindowA(0, OverRevModel2B.c_str()); + + romnameM2 = new char[256]; + + // TODO: would be better to dump all the game names in an array and loop instead with a single hWnd + if (hWnd1 > NULL) + { + sprintf(romnameM2, "%s", SegaRallyChampionship); + } + else if(hWnd2 > NULL) + { + sprintf(romnameM2, "%s", DaytonaUSA); + } + else if (hWnd3 > NULL) + { + sprintf(romnameM2, "%s", Indianapolis500RevADeluxe); + } + else if (hWnd4 > NULL) + { + sprintf(romnameM2, "%s", SegaTouringCarChampionshipRevA); + } + else if (hWnd5 > NULL) + { + sprintf(romnameM2, "%s", OverRev); + } + else if (hWnd6 > NULL) + { + sprintf(romnameM2, "%s", SuperGT24h); + } + else if (hWnd7 > NULL) + { + sprintf(romnameM2, "%s", DaytonaUSA93Edition); + } + else if (hWnd8 > NULL) + { + sprintf(romnameM2, "%s", DaytonaUSASaturnAds); + } + else if (hWnd9 > NULL) + { + sprintf(romnameM2, "%s", DaytonaUSASpecialEdition); + } + else if (hWnd10 > NULL) + { + sprintf(romnameM2, "%s", DaytonaUSATurbo); + } + else if (hWnd11 > NULL) + { + sprintf(romnameM2, "%s", DaytonaUSATurboRevA); + } + else if (hWnd12 > NULL) + { + sprintf(romnameM2, "%s", DaytonaUSAGTX2004); + } + else if (hWnd13 > NULL) + { + sprintf(romnameM2, "%s", DaytonaUSAToTheMaxx); + } + else if (hWnd14 > NULL) + { + sprintf(romnameM2, "%s", SegaRallyChampionshipRevB); + } + else if (hWnd15 > NULL) + { + sprintf(romnameM2, "%s", SegaRallyProDrivin); + } + else if (hWnd16 > NULL) + { + sprintf(romnameM2, "%s", Indianapolis500RevATwinNewerrev); + } + else if (hWnd17 > NULL) + { + sprintf(romnameM2, "%s", Indianapolis500RevATwinOlderrev); + } + else if (hWnd18 > NULL) + { + sprintf(romnameM2, "%s", SegaTouringCarChampionship); + } + else if (hWnd19 > NULL) + { + sprintf(romnameM2, "%s", SegaTouringCarChampionshipRevB); + } + else if (hWnd20 > NULL) + { + sprintf(romnameM2, "%s", OverRevModel2B); + } if (EnableForceSpringEffect == 1) {