diff --git a/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.cpp b/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.cpp index f1eb0ab342..43357ef598 100644 --- a/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.cpp +++ b/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.cpp @@ -2542,6 +2542,20 @@ void CEXISlippi::handleReportGame(u8* payload) #endif } +void CEXISlippi::prepareDelayResponse() +{ + m_read_queue.clear(); + m_read_queue.push_back(1); // Indicate this is a real response + + if (NetPlay::IsNetPlayRunning()) + { + // If we are using the old netplay, we don't want to add any additional delay, so return 0 + m_read_queue.push_back(0); + return; + } + m_read_queue.push_back((u8)SConfig::GetInstance().m_slippiOnlineDelay); +} + void CEXISlippi::DMAWrite(u32 _uAddr, u32 _uSize) { u8* memPtr = Memory::GetPointer(_uAddr); @@ -2677,6 +2691,9 @@ void CEXISlippi::DMAWrite(u32 _uAddr, u32 _uSize) case CMD_GCT_LOAD: prepareGctLoad(&memPtr[bufLoc + 1]); break; + case CMD_GET_DELAY: + prepareDelayResponse(); + break; default: writeToFileAsync(&memPtr[bufLoc], payloadLen + 1, ""); SlippiSpectateServer::getInstance().write(&memPtr[bufLoc], payloadLen + 1); diff --git a/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.h b/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.h index f172579112..278cce5a35 100644 --- a/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.h +++ b/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.h @@ -81,6 +81,7 @@ private: CMD_FILE_LOAD = 0xD2, CMD_GCT_LENGTH = 0xD3, CMD_GCT_LOAD = 0xD4, + CMD_GET_DELAY = 0xD5, }; enum @@ -128,6 +129,7 @@ private: {CMD_FILE_LOAD, 0x40}, {CMD_GCT_LENGTH, 0x0}, {CMD_GCT_LOAD, 0x4}, + {CMD_GET_DELAY, 0x0}, }; struct WriteMessage @@ -195,6 +197,7 @@ private: void prepareFileLoad(u8* payload); void prepareGctLength(); void prepareGctLoad(u8* payload); + void prepareDelayResponse(); int getCharColor(u8 charId, u8 teamId); void FileWriteThread(void);