diff --git a/OpenParrot/src/Functions/Games/Nesica/NesicaGeneric.cpp b/OpenParrot/src/Functions/Games/Nesica/NesicaGeneric.cpp index d40925f..5fb90ff 100644 --- a/OpenParrot/src/Functions/Games/Nesica/NesicaGeneric.cpp +++ b/OpenParrot/src/Functions/Games/Nesica/NesicaGeneric.cpp @@ -39,6 +39,18 @@ static InitFunction initFunction_GC2([]() #endif }, GameID::GrooveCoaster2); +static InitFunction initFunction_PB([]() +{ + uintptr_t imageBase = (uintptr_t)GetModuleHandleA(0); + init_FastIoEmu(); + init_RfidEmu(); + init_RegHooks(); + init_NesysEmu(); + + // Nesys error workaround + injector::WriteMemoryRaw(imageBase + 0xA77B, "\xA3\xEC\x0D\x4F\x00\x90", 6, true); +}, GameID::PuzzleBobble); + static InitFunction initFunction_SOR([]() { uintptr_t imageBase = (uintptr_t)GetModuleHandleA(0); diff --git a/OpenParrot/src/Utility/GameDetect.cpp b/OpenParrot/src/Utility/GameDetect.cpp index 42d10e6..b31f820 100644 --- a/OpenParrot/src/Utility/GameDetect.cpp +++ b/OpenParrot/src/Utility/GameDetect.cpp @@ -78,6 +78,7 @@ void GameDetect::DetectCurrentGame() break; case 0xffe46764: // Akai Katana Shin case 0x48362a6a: + case 0x2e65f7ad: currentGame = GameID::Nesica; NesicaKey = NesicaKey::None; isNesica = true; @@ -94,10 +95,51 @@ void GameDetect::DetectCurrentGame() isNesica = true; break; case 0x28503c4c: // Nitroplus Blasterz 303910 + case 0x6673e73b: currentGame = GameID::Nesica; NesicaKey = NesicaKey::None; isNesica = true; break; + case 0x57c889e6: // Space Invaders + currentGame = GameID::Nesica; + NesicaKey = NesicaKey::None; + isNesica = true; + break; + case 0x62c933d9: // Strania - The Stella Machina + currentGame = GameID::Nesica; + NesicaKey = NesicaKey::None; + isNesica = true; + break; + case 0x549627f4: // Aquapazza Aquaplus Dream Match + currentGame = GameID::Nesica; + NesicaKey = NesicaKey::None; + isNesica = true; + break; + case 0xc0cbafd3: // Do Not Fall - Run for Your Drink + currentGame = GameID::Nesica; + NesicaKey = NesicaKey::None; + isNesica = true; + break; + case 0x87670e0f: // Elevator Action + currentGame = GameID::Nesica; + NesicaKey = NesicaKey::None; + isNesica = true; + break; + case 0x29025abc: // En-Eins Perfektewelt + currentGame = GameID::Nesica; + NesicaKey = NesicaKey::None; + isNesica = true; + break; + case 0x3a998b11: // Rastan Saga + currentGame = GameID::Nesica; + NesicaKey = NesicaKey::None; + isNesica = true; + break; + case 0x358ec3ff: // Puzzle Bobble + currentGame = GameID::PuzzleBobble; + NesicaKey = NesicaKey::None; + isNesica = true; + break; case 0x6DA10E60: currentGame = GameID::FordRacing; break; diff --git a/OpenParrot/src/Utility/GameID.h b/OpenParrot/src/Utility/GameID.h index 7f751d1..ce94551 100644 --- a/OpenParrot/src/Utility/GameID.h +++ b/OpenParrot/src/Utility/GameID.h @@ -40,5 +40,6 @@ enum class GameID SchoolOfRagnarok, PokkenTournament, ExBoardGeneric, - GrooveCoaster2 + GrooveCoaster2, + PuzzleBobble }; \ No newline at end of file