mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-08-26 12:16:20 +00:00
pull in 54b7318 from ishii
This commit is contained in:
parent
5301d53b08
commit
ece3d5a9ec
3 changed files with 32 additions and 4 deletions
|
@ -1702,7 +1702,9 @@ void CEXISlippi::prepareOnlineMatchState()
|
||||||
|
|
||||||
m_read_queue.clear();
|
m_read_queue.clear();
|
||||||
|
|
||||||
SlippiMatchmaking::ProcessState mmState = matchmaking->GetMatchmakeState();
|
auto errorState = SlippiMatchmaking::ProcessState::ERROR_ENCOUNTERED;
|
||||||
|
|
||||||
|
SlippiMatchmaking::ProcessState mmState = !forcedError.empty() ? errorState : matchmaking->GetMatchmakeState();
|
||||||
|
|
||||||
#ifdef LOCAL_TESTING
|
#ifdef LOCAL_TESTING
|
||||||
if (localSelections.isCharacterSelected || isLocalConnected)
|
if (localSelections.isCharacterSelected || isLocalConnected)
|
||||||
|
@ -1761,6 +1763,8 @@ void CEXISlippi::prepareOnlineMatchState()
|
||||||
#ifndef LOCAL_TESTING
|
#ifndef LOCAL_TESTING
|
||||||
// If we get here, our opponent likely disconnected. Let's trigger a clean up
|
// If we get here, our opponent likely disconnected. Let's trigger a clean up
|
||||||
handleConnectionCleanup();
|
handleConnectionCleanup();
|
||||||
|
prepareOnlineMatchState();
|
||||||
|
return;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1778,6 +1782,8 @@ void CEXISlippi::prepareOnlineMatchState()
|
||||||
std::string p1Name = "";
|
std::string p1Name = "";
|
||||||
std::string p2Name = "";
|
std::string p2Name = "";
|
||||||
|
|
||||||
|
auto directMode = SlippiMatchmaking::OnlinePlayMode::DIRECT;
|
||||||
|
|
||||||
if (localPlayerReady && remotePlayerReady)
|
if (localPlayerReady && remotePlayerReady)
|
||||||
{
|
{
|
||||||
auto isDecider = slippi_netplay->IsDecider();
|
auto isDecider = slippi_netplay->IsDecider();
|
||||||
|
@ -1791,11 +1797,28 @@ void CEXISlippi::prepareOnlineMatchState()
|
||||||
onlineMatchBlock[0x63 + localPlayerIndex * 0x24] = lps.characterColor;
|
onlineMatchBlock[0x63 + localPlayerIndex * 0x24] = lps.characterColor;
|
||||||
|
|
||||||
#ifdef LOCAL_TESTING
|
#ifdef LOCAL_TESTING
|
||||||
rps.characterId = 2;
|
rps.characterId = 0x2;
|
||||||
rps.characterColor = 2;
|
rps.characterColor = 2;
|
||||||
rps.playerName = std::string("Player");
|
rps.playerName = std::string("Player");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Check if someone is picking dumb characters in non-direct
|
||||||
|
auto localCharOk = lps.characterId < 26;
|
||||||
|
auto remoteCharOk = rps.characterId < 26;
|
||||||
|
if (lastSearch.mode != directMode && (!localCharOk || !remoteCharOk))
|
||||||
|
{
|
||||||
|
// If we get here, someone is doing something bad, clear the lobby
|
||||||
|
handleConnectionCleanup();
|
||||||
|
if (!localCharOk)
|
||||||
|
forcedError = "The character you selected is not allowed in this mode";
|
||||||
|
prepareOnlineMatchState();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Overwrite local player character
|
||||||
|
onlineMatchBlock[0x60 + localPlayerIndex * 0x24] = lps.characterId;
|
||||||
|
onlineMatchBlock[0x63 + localPlayerIndex * 0x24] = lps.characterColor;
|
||||||
|
|
||||||
// Overwrite remote player character
|
// Overwrite remote player character
|
||||||
onlineMatchBlock[0x60 + remotePlayerIndex * 0x24] = rps.characterId;
|
onlineMatchBlock[0x60 + remotePlayerIndex * 0x24] = rps.characterId;
|
||||||
onlineMatchBlock[0x63 + remotePlayerIndex * 0x24] = rps.characterColor;
|
onlineMatchBlock[0x63 + remotePlayerIndex * 0x24] = rps.characterColor;
|
||||||
|
@ -1856,7 +1879,7 @@ void CEXISlippi::prepareOnlineMatchState()
|
||||||
m_read_queue.insert(m_read_queue.end(), oppName.begin(), oppName.end());
|
m_read_queue.insert(m_read_queue.end(), oppName.begin(), oppName.end());
|
||||||
|
|
||||||
// Add error message if there is one
|
// Add error message if there is one
|
||||||
auto errorStr = matchmaking->GetErrorMessage();
|
auto errorStr = auto errorStr = !forcedError.empty() ? forcedError : matchmaking->GetErrorMessage();
|
||||||
errorStr = ConvertStringForGame(errorStr, 120);
|
errorStr = ConvertStringForGame(errorStr, 120);
|
||||||
m_read_queue.insert(m_read_queue.end(), errorStr.begin(), errorStr.end());
|
m_read_queue.insert(m_read_queue.end(), errorStr.begin(), errorStr.end());
|
||||||
|
|
||||||
|
@ -2071,6 +2094,9 @@ void CEXISlippi::handleConnectionCleanup()
|
||||||
// Reset random stage pool
|
// Reset random stage pool
|
||||||
stagePool.clear();
|
stagePool.clear();
|
||||||
|
|
||||||
|
// Reset any forced errors
|
||||||
|
forcedError.clear()
|
||||||
|
|
||||||
#ifdef LOCAL_TESTING
|
#ifdef LOCAL_TESTING
|
||||||
isLocalConnected = false;
|
isLocalConnected = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -205,6 +205,8 @@ namespace ExpansionInterface
|
||||||
|
|
||||||
std::default_random_engine generator;
|
std::default_random_engine generator;
|
||||||
|
|
||||||
|
std::string forcedError = "";
|
||||||
|
|
||||||
// Frame skipping variables
|
// Frame skipping variables
|
||||||
int framesToSkip = 0;
|
int framesToSkip = 0;
|
||||||
bool isCurrentlySkipping = false;
|
bool isCurrentlySkipping = false;
|
||||||
|
|
|
@ -19,7 +19,7 @@ AboutDialog::AboutDialog(QWidget* parent) : QDialog(parent)
|
||||||
|
|
||||||
const QString text =
|
const QString text =
|
||||||
QStringLiteral(R"(
|
QStringLiteral(R"(
|
||||||
<p style='font-size:38pt; font-weight:400;'>Dolphin</p>
|
<p style='font-size:38pt; font-weight:400;'>Slippi Dolphin</p>
|
||||||
|
|
||||||
<p style='font-size:18pt;'>%VERSION_STRING%</p>
|
<p style='font-size:18pt;'>%VERSION_STRING%</p>
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue