From 10fa123dbc3d403ad7bcc9d503dcfb8676d60bf0 Mon Sep 17 00:00:00 2001 From: Aaron M Date: Sun, 2 Aug 2020 23:26:50 +1200 Subject: [PATCH] Add insert card code for ID Demul games --- Config/FFBPlugin.ini | 2 + Game Files/Demul.cpp | 8 ++ Game Files/DemulInitialDInputs.cpp | 202 +++++++++++++++++++++++++++++ 3 files changed, 212 insertions(+) diff --git a/Config/FFBPlugin.ini b/Config/FFBPlugin.ini index b481c31..7930193 100644 --- a/Config/FFBPlugin.ini +++ b/Config/FFBPlugin.ini @@ -595,6 +595,7 @@ StartButton=99 ShiftUp=99 ShiftDown=99 EmergencyStop=99 +InsertRemoveCard=99 Gear1=99 Gear2=99 Gear3=99 @@ -617,6 +618,7 @@ StartButtonDevice2=99 ShiftUpDevice2=99 ShiftDownDevice2=99 EmergencyStopDevice2=99 +InsertRemoveCardDevice2=99 Gear1Device2=99 Gear2Device2=99 Gear3Device2=99 diff --git a/Game Files/Demul.cpp b/Game Files/Demul.cpp index 1d5e19d..36396b3 100644 --- a/Game Files/Demul.cpp +++ b/Game Files/Demul.cpp @@ -66,6 +66,8 @@ INT_PTR StartViewAddress; INT_PTR ShiftUpDownAddress; INT_PTR ServiceTestAddress; INT_PTR CoinAddress; +INT_PTR CardAddress; +INT_PTR CardAddress2; static HWND hWnd; @@ -608,6 +610,8 @@ void Demul::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers helpers->WriteNop((INT_PTR)gl_padDemul + 0x26FEC, 3, false); helpers->WriteNop((INT_PTR)gl_padDemul + 0x270A3, 3, false); helpers->WriteNop((INT_PTR)gl_padDemul + 0x26FE1, 3, false); + helpers->WriteNop((INT_PTR)gl_padDemul + 0x27048, 4, false); + helpers->WriteNop((INT_PTR)gl_padDemul + 0x2703A, 4, false); } if (Demul111117) @@ -621,6 +625,8 @@ void Demul::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers helpers->WriteNop((INT_PTR)gl_padDemul + 0x26BC2, 3, false); helpers->WriteNop((INT_PTR)gl_padDemul + 0x26BBA, 3, false); helpers->WriteNop((INT_PTR)gl_padDemul + 0x26BE3, 3, false); + helpers->WriteNop((INT_PTR)gl_padDemul + 0x26C1E, 4, false); + helpers->WriteNop((INT_PTR)gl_padDemul + 0x26C10, 4, false); } if (NascarRunning) @@ -872,6 +878,8 @@ void Demul::FFBLoop(EffectConstants* constants, Helpers* helpers, EffectTriggers ShiftUpDownAddress = (int)aAddy - 0xDA; ServiceTestAddress = (int)aAddy - 0x246; CoinAddress = (int)aAddy - 0x19E; + CardAddress = (int)aAddy + 0x3E; + CardAddress2 = (int)aAddy + 0x22; NOPinit = true; InputFind = true; } diff --git a/Game Files/DemulInitialDInputs.cpp b/Game Files/DemulInitialDInputs.cpp index 65c06da..1ce12be 100644 --- a/Game Files/DemulInitialDInputs.cpp +++ b/Game Files/DemulInitialDInputs.cpp @@ -13,6 +13,8 @@ static bool viewbuttonA; static bool shiftupA; static bool shiftdownA; static bool coinA; +static bool cardA; +static bool cardB; static bool Inputsinit = false; static bool InputFind = false; extern SDL_Event e; @@ -24,6 +26,8 @@ extern INT_PTR StartViewAddress; extern INT_PTR ShiftUpDownAddress; extern INT_PTR ServiceTestAddress; extern INT_PTR CoinAddress; +extern INT_PTR CardAddress; +extern INT_PTR CardAddress2; extern wchar_t* settingsFilename; static int InputDeviceWheelEnable = GetPrivateProfileInt(TEXT("Settings"), TEXT("InputDeviceWheelEnable"), 0, settingsFilename); @@ -44,6 +48,7 @@ static int ViewButton = GetPrivateProfileInt(TEXT("Settings"), TEXT("ViewButton" static int StartButton = GetPrivateProfileInt(TEXT("Settings"), TEXT("StartButton"), 0, settingsFilename); static int ShiftUp = GetPrivateProfileInt(TEXT("Settings"), TEXT("ShiftUp"), 0, settingsFilename); static int ShiftDown = GetPrivateProfileInt(TEXT("Settings"), TEXT("ShiftDown"), 0, settingsFilename); +static int InsertRemoveCard = GetPrivateProfileInt(TEXT("Settings"), TEXT("InsertRemoveCard"), 0, settingsFilename); static int ExitButtonDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("ExitButtonDevice2"), 0, settingsFilename); static int TestButtonDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("TestButtonDevice2"), 0, settingsFilename); static int ServiceButtonDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("ServiceButtonDevice2"), 0, settingsFilename); @@ -52,6 +57,7 @@ static int ViewButtonDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("View static int StartButtonDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("StartButtonDevice2"), 0, settingsFilename); static int ShiftUpDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("ShiftUpDevice2"), 0, settingsFilename); static int ShiftDownDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("ShiftDownDevice2"), 0, settingsFilename); +static int InsertRemoveCardDevice2 = GetPrivateProfileInt(TEXT("Settings"), TEXT("InsertRemoveCardDevice2"), 0, settingsFilename); void InitialDInputsEnabled(Helpers* helpers) { @@ -113,6 +119,7 @@ void InitialDInputsEnabled(Helpers* helpers) std::string start("StartButton"); std::string sftup("ShiftUp"); std::string sftdown("ShiftDown"); + std::string card("InsertRemoveCard"); std::string exit2("ExitButtonDevice2"); std::string test2("TestButtonDevice2"); std::string service2("ServiceButtonDevice2"); @@ -121,6 +128,7 @@ void InitialDInputsEnabled(Helpers* helpers) std::string start2("StartButtonDevice2"); std::string sftup2("ShiftUpDevice2"); std::string sftdown2("ShiftDownDevice2"); + std::string card2("InsertRemoveCardDevice2"); std::string dpdup(DpadUpChar); std::string dpddown(DpadDownChar); std::string dpdleft(DpadLeftChar); @@ -138,6 +146,8 @@ void InitialDInputsEnabled(Helpers* helpers) UINT8 startviewread = helpers->ReadByte(StartViewAddress, false); UINT8 shiftupdownread = helpers->ReadByte(ShiftUpDownAddress, false); UINT8 coinread = helpers->ReadByte(CoinAddress, false); + UINT8 cardread = helpers->ReadByte(CardAddress, false); + UINT8 cardread2 = helpers->ReadByte(CardAddress2, false); UINT8 servicetestread = helpers->ReadByte(ServiceTestAddress, false); while (SDL_WaitEvent(&e) != 0) @@ -352,6 +362,10 @@ void InitialDInputsEnabled(Helpers* helpers) helpers->WriteByte(ShiftUpDownAddress, shiftupdownread -= 0x10, false); shiftdownA = false; } + if (coinA) + { + coinA = false; + } } else if (e.jhat.which == joystick_index2) { @@ -385,6 +399,10 @@ void InitialDInputsEnabled(Helpers* helpers) helpers->WriteByte(ShiftUpDownAddress, shiftupdownread -= 0x10, false); shiftdownA = false; } + if (coinA) + { + coinA = false; + } } } if (e.jhat.value == SDL_HAT_UP) @@ -409,6 +427,23 @@ void InitialDInputsEnabled(Helpers* helpers) { helpers->WriteByte(CoinAddress, ++coinread, false); } + if (dpdup.compare(card) == 0) + { + if (!cardA) + { + if (cardread == 0x00) + { + helpers->WriteByte(CardAddress, cardread += 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 += 0x01, false); + } + else + { + helpers->WriteByte(CardAddress, cardread -= 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 -= 0x01, false); + } + cardA = true; + } + } if (dpdup.compare(view) == 0) { helpers->WriteByte(StartViewAddress, startviewread += 0x10, false); @@ -450,6 +485,23 @@ void InitialDInputsEnabled(Helpers* helpers) { helpers->WriteByte(CoinAddress, ++coinread, false); } + if (dpdup2.compare(card2) == 0) + { + if (!cardA) + { + if (cardread == 0x00) + { + helpers->WriteByte(CardAddress, cardread += 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 += 0x01, false); + } + else + { + helpers->WriteByte(CardAddress, cardread -= 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 -= 0x01, false); + } + cardA = true; + } + } if (dpdup2.compare(view2) == 0) { helpers->WriteByte(StartViewAddress, startviewread += 0x10, false); @@ -494,6 +546,23 @@ void InitialDInputsEnabled(Helpers* helpers) { helpers->WriteByte(CoinAddress, ++coinread, false); } + if (dpddown.compare(card) == 0) + { + if (!cardA) + { + if (cardread == 0x00) + { + helpers->WriteByte(CardAddress, cardread += 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 += 0x01, false); + } + else + { + helpers->WriteByte(CardAddress, cardread -= 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 -= 0x01, false); + } + cardA = true; + } + } if (dpddown.compare(view) == 0) { helpers->WriteByte(StartViewAddress, startviewread += 0x10, false); @@ -535,6 +604,23 @@ void InitialDInputsEnabled(Helpers* helpers) { helpers->WriteByte(CoinAddress, ++coinread, false); } + if (dpddown2.compare(card2) == 0) + { + if (!cardA) + { + if (cardread == 0x00) + { + helpers->WriteByte(CardAddress, cardread += 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 += 0x01, false); + } + else + { + helpers->WriteByte(CardAddress, cardread -= 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 -= 0x01, false); + } + cardA = true; + } + } if (dpddown2.compare(view2) == 0) { helpers->WriteByte(StartViewAddress, startviewread += 0x10, false); @@ -579,6 +665,23 @@ void InitialDInputsEnabled(Helpers* helpers) { helpers->WriteByte(CoinAddress, ++coinread, false); } + if (dpdleft.compare(card) == 0) + { + if (!cardA) + { + if (cardread == 0x00) + { + helpers->WriteByte(CardAddress, cardread += 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 += 0x01, false); + } + else + { + helpers->WriteByte(CardAddress, cardread -= 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 -= 0x01, false); + } + cardA = true; + } + } if (dpdleft.compare(view) == 0) { helpers->WriteByte(StartViewAddress, startviewread += 0x10, false); @@ -620,6 +723,23 @@ void InitialDInputsEnabled(Helpers* helpers) { helpers->WriteByte(CoinAddress, ++coinread, false); } + if (dpdleft2.compare(card2) == 0) + { + if (!cardA) + { + if (cardread == 0x00) + { + helpers->WriteByte(CardAddress, cardread += 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 += 0x01, false); + } + else + { + helpers->WriteByte(CardAddress, cardread -= 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 -= 0x01, false); + } + cardA = true; + } + } if (dpdleft2.compare(view2) == 0) { helpers->WriteByte(StartViewAddress, startviewread += 0x10, false); @@ -664,6 +784,23 @@ void InitialDInputsEnabled(Helpers* helpers) { helpers->WriteByte(CoinAddress, ++coinread, false); } + if (dpdright.compare(card) == 0) + { + if (!cardA) + { + if (cardread == 0x00) + { + helpers->WriteByte(CardAddress, cardread += 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 += 0x01, false); + } + else + { + helpers->WriteByte(CardAddress, cardread -= 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 -= 0x01, false); + } + cardA = true; + } + } if (dpdright.compare(view) == 0) { helpers->WriteByte(StartViewAddress, startviewread += 0x10, false); @@ -705,6 +842,23 @@ void InitialDInputsEnabled(Helpers* helpers) { helpers->WriteByte(CoinAddress, ++coinread, false); } + if (dpdright2.compare(card2) == 0) + { + if (!cardA) + { + if (cardread == 0x00) + { + helpers->WriteByte(CardAddress, cardread += 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 += 0x01, false); + } + else + { + helpers->WriteByte(CardAddress, cardread -= 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 -= 0x01, false); + } + cardA = true; + } + } if (dpdright2.compare(view2) == 0) { helpers->WriteByte(StartViewAddress, startviewread += 0x10, false); @@ -749,6 +903,23 @@ void InitialDInputsEnabled(Helpers* helpers) { helpers->WriteByte(CoinAddress, ++coinread, false); } + if (e.jbutton.button == InsertRemoveCard) + { + if (!cardB) + { + if (cardread == 0x00) + { + helpers->WriteByte(CardAddress, cardread += 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 += 0x01, false); + } + else + { + helpers->WriteByte(CardAddress, cardread -= 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 -= 0x01, false); + } + cardB = true; + } + } if (e.jbutton.button == ViewButton) { helpers->WriteByte(StartViewAddress, startviewread += 0x10, false); @@ -784,6 +955,23 @@ void InitialDInputsEnabled(Helpers* helpers) { helpers->WriteByte(CoinAddress, ++coinread, false); } + if (e.jbutton.button == InsertRemoveCardDevice2) + { + if (!cardB) + { + if (cardread == 0x00) + { + helpers->WriteByte(CardAddress, cardread += 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 += 0x01, false); + } + else + { + helpers->WriteByte(CardAddress, cardread -= 0x03, false); + helpers->WriteByte(CardAddress2, cardread2 -= 0x01, false); + } + cardB = true; + } + } if (e.jbutton.button == ViewButtonDevice2) { helpers->WriteByte(StartViewAddress, startviewread += 0x10, false); @@ -818,6 +1006,13 @@ void InitialDInputsEnabled(Helpers* helpers) { helpers->WriteByte(StartViewAddress, startviewread -= 0x10, false); } + if (e.jbutton.button == InsertRemoveCard) + { + if (cardB) + { + cardB = false; + } + } if (e.jbutton.button == StartButton) { helpers->WriteByte(StartViewAddress, startviewread -= 0x80, false); @@ -845,6 +1040,13 @@ void InitialDInputsEnabled(Helpers* helpers) { helpers->WriteByte(StartViewAddress, startviewread -= 0x10, false); } + if (e.jbutton.button == InsertRemoveCardDevice2) + { + if (cardB) + { + cardB = false; + } + } if (e.jbutton.button == StartButtonDevice2) { helpers->WriteByte(StartViewAddress, startviewread -= 0x80, false);