pull in project-slippi/Ishiiruka/commit/29c3127385db6d67806d3a90fc7514e43d114169

add EXI for fetching delay frames
This commit is contained in:
Nikhil Narayana 2021-12-18 16:55:09 -08:00
commit 486bc55d8b
2 changed files with 20 additions and 0 deletions

View file

@ -2542,6 +2542,20 @@ void CEXISlippi::handleReportGame(u8* payload)
#endif #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) void CEXISlippi::DMAWrite(u32 _uAddr, u32 _uSize)
{ {
u8* memPtr = Memory::GetPointer(_uAddr); u8* memPtr = Memory::GetPointer(_uAddr);
@ -2677,6 +2691,9 @@ void CEXISlippi::DMAWrite(u32 _uAddr, u32 _uSize)
case CMD_GCT_LOAD: case CMD_GCT_LOAD:
prepareGctLoad(&memPtr[bufLoc + 1]); prepareGctLoad(&memPtr[bufLoc + 1]);
break; break;
case CMD_GET_DELAY:
prepareDelayResponse();
break;
default: default:
writeToFileAsync(&memPtr[bufLoc], payloadLen + 1, ""); writeToFileAsync(&memPtr[bufLoc], payloadLen + 1, "");
SlippiSpectateServer::getInstance().write(&memPtr[bufLoc], payloadLen + 1); SlippiSpectateServer::getInstance().write(&memPtr[bufLoc], payloadLen + 1);

View file

@ -81,6 +81,7 @@ private:
CMD_FILE_LOAD = 0xD2, CMD_FILE_LOAD = 0xD2,
CMD_GCT_LENGTH = 0xD3, CMD_GCT_LENGTH = 0xD3,
CMD_GCT_LOAD = 0xD4, CMD_GCT_LOAD = 0xD4,
CMD_GET_DELAY = 0xD5,
}; };
enum enum
@ -128,6 +129,7 @@ private:
{CMD_FILE_LOAD, 0x40}, {CMD_FILE_LOAD, 0x40},
{CMD_GCT_LENGTH, 0x0}, {CMD_GCT_LENGTH, 0x0},
{CMD_GCT_LOAD, 0x4}, {CMD_GCT_LOAD, 0x4},
{CMD_GET_DELAY, 0x0},
}; };
struct WriteMessage struct WriteMessage
@ -195,6 +197,7 @@ private:
void prepareFileLoad(u8* payload); void prepareFileLoad(u8* payload);
void prepareGctLength(); void prepareGctLength();
void prepareGctLoad(u8* payload); void prepareGctLoad(u8* payload);
void prepareDelayResponse();
int getCharColor(u8 charId, u8 teamId); int getCharColor(u8 charId, u8 teamId);
void FileWriteThread(void); void FileWriteThread(void);