diff --git a/Source/Core/Core/Src/BootManager.cpp b/Source/Core/Core/Src/BootManager.cpp index 33f656ca4d..60f718db53 100644 --- a/Source/Core/Core/Src/BootManager.cpp +++ b/Source/Core/Core/Src/BootManager.cpp @@ -34,6 +34,7 @@ #include "Host.h" #include "VideoBackendBase.h" #include "Movie.h" +#include "NetPlay.h" namespace BootManager { @@ -42,7 +43,7 @@ namespace BootManager // Apply fire liberally struct ConfigCache { - bool valid, bCPUThread, bSkipIdle, bEnableFPRF, bMMU, bDCBZOFF, + bool valid, bCPUThread, bSkipIdle, bEnableFPRF, bMMU, bDCBZOFF, m_EnableJIT, bVBeamSpeedHack, bSyncGPU, bFastDiscSpeed, bMergeBlocks, bDSPHLE, bHLE_BS2; int iTLBHack, iCPUCore; std::string strBackend; @@ -91,6 +92,7 @@ bool BootCore(const std::string& _rFilename) config_cache.bDSPHLE = StartUp.bDSPHLE; config_cache.strBackend = StartUp.m_strVideoBackend; config_cache.bHLE_BS2 = StartUp.bHLE_BS2; + config_cache.m_EnableJIT = SConfig::GetInstance().m_EnableJIT; // General settings game_ini.Get("Core", "CPUThread", &StartUp.bCPUThread, StartUp.bCPUThread); @@ -134,6 +136,12 @@ bool BootCore(const std::string& _rFilename) } } + if (NetPlay::GetNetPlayPtr()) + { + StartUp.bDSPHLE = g_NetPlaySettings.m_DSPHLE; + SConfig::GetInstance().m_EnableJIT = g_NetPlaySettings.m_DSPEnableJIT; + } + // Run the game // Init the core if (!Core::Init()) @@ -170,6 +178,7 @@ void Stop() StartUp.m_strVideoBackend = config_cache.strBackend; VideoBackend::ActivateBackend(StartUp.m_strVideoBackend); StartUp.bHLE_BS2 = config_cache.bHLE_BS2; + SConfig::GetInstance().m_EnableJIT = config_cache.m_EnableJIT; } } diff --git a/Source/Core/Core/Src/HW/SI.cpp b/Source/Core/Core/Src/HW/SI.cpp index f4fcec5743..85c84f92dd 100644 --- a/Source/Core/Core/Src/HW/SI.cpp +++ b/Source/Core/Core/Src/HW/SI.cpp @@ -7,6 +7,7 @@ #include "../ConfigManager.h" #include "../CoreTiming.h" #include "../Movie.h" +#include "../NetPlay.h" #include "SystemTimers.h" #include "ProcessorInterface.h" @@ -261,6 +262,8 @@ void Init() if (Movie::IsRecordingInput() || Movie::IsPlayingInput()) AddDevice(Movie::IsUsingPad(i) ? (Movie::IsUsingBongo(i) ? SIDEVICE_GC_TARUKONGA : SIDEVICE_GC_CONTROLLER) : SIDEVICE_NONE, i); + else if (NetPlay::GetNetPlayPtr()) + AddDevice((SIDevices) g_NetPlaySettings.m_Controllers[i], i); else AddDevice(SConfig::GetInstance().m_SIDevice[i], i); } @@ -641,7 +644,7 @@ void RunSIBuffer() int GetTicksToNextSIPoll() { // Poll for input at regular intervals (once per frame) when playing or recording a movie - if (Movie::IsPlayingInput() || Movie::IsRecordingInput()) + if (Movie::IsPlayingInput() || Movie::IsRecordingInput() || NetPlay::GetNetPlayPtr()) { return SystemTimers::GetTicksPerSecond() / VideoInterface::TargetRefreshRate; } diff --git a/Source/Core/Core/Src/NetPlay.cpp b/Source/Core/Core/Src/NetPlay.cpp index 7f4b838ffc..59b6a05538 100644 --- a/Source/Core/Core/Src/NetPlay.cpp +++ b/Source/Core/Core/Src/NetPlay.cpp @@ -15,9 +15,11 @@ #include "HW/EXI_DeviceIPL.h" // for wiimote/ OSD messages #include "Core.h" +#include "ConfigManager.h" std::mutex crit_netplay_ptr; static NetPlay* netplay_ptr = NULL; +NetSettings g_NetPlaySettings; #define RPT_SIZE_HACK (1 << 16) @@ -281,6 +283,16 @@ u8 NetPlay::GetPadNum(u8 numPAD) return i; } +void NetPlay::GetNetSettings() +{ + SConfig &instance = SConfig::GetInstance(); + g_NetPlaySettings.m_DSPHLE = instance.m_LocalCoreStartupParameter.bDSPHLE; + g_NetPlaySettings.m_DSPEnableJIT = instance.m_EnableJIT; + + for (unsigned int i = 0; i < 4; ++i) + g_NetPlaySettings.m_Controllers[i] = SConfig::GetInstance().m_SIDevice[i]; +} + // stuff hacked into dolphin // called from ---CPU--- thread @@ -386,3 +398,8 @@ bool CWII_IPC_HLE_WiiMote::NetPlay_WiimoteInput(int, u16, const void*, u32&) else return false; } + +NetPlay* NetPlay::GetNetPlayPtr() +{ + return netplay_ptr; +} diff --git a/Source/Core/Core/Src/NetPlay.h b/Source/Core/Core/Src/NetPlay.h index 7bed7c6421..8b84f43250 100644 --- a/Source/Core/Core/Src/NetPlay.h +++ b/Source/Core/Core/Src/NetPlay.h @@ -31,6 +31,14 @@ public: u32 nLo; }; +struct NetSettings +{ + bool m_DSPHLE; + bool m_DSPEnableJIT; + u8 m_Controllers[4]; +}; +extern NetSettings g_NetPlaySettings; + struct Rpt : public std::vector { u16 channel; @@ -38,7 +46,7 @@ struct Rpt : public std::vector typedef std::vector NetWiimote; -#define NETPLAY_VERSION "Dolphin NetPlay 2013-04-11" +#define NETPLAY_VERSION "Dolphin NetPlay 2013-07-19" // messages enum @@ -119,10 +127,12 @@ public: //void PushPadStates(unsigned int count); u8 GetPadNum(u8 numPAD); + static NetPlay* GetNetPlayPtr(); protected: //void GetBufferedPad(const u8 pad_nb, NetPad* const netvalues); void ClearBuffers(); + void GetNetSettings(); virtual void SendPadState(const PadMapping local_nb, const NetPad& np) = 0; struct diff --git a/Source/Core/Core/Src/NetPlayClient.cpp b/Source/Core/Core/Src/NetPlayClient.cpp index aa7a678230..f01f2155c6 100644 --- a/Source/Core/Core/Src/NetPlayClient.cpp +++ b/Source/Core/Core/Src/NetPlayClient.cpp @@ -193,6 +193,10 @@ unsigned int NetPlayClient::OnData(sf::Packet& packet) { std::lock_guard lkg(m_crit.game); packet >> m_current_game; + packet >> g_NetPlaySettings.m_DSPEnableJIT; + packet >> g_NetPlaySettings.m_DSPHLE; + for (unsigned int i = 0; i < 4; ++i) + packet >> g_NetPlaySettings.m_Controllers[i]; } m_dialog->OnMsgStartGame(); @@ -317,13 +321,14 @@ bool NetPlayClient::StartGame(const std::string &path) { std::lock_guard lkg(m_crit.game); - if (false == NetPlay::StartGame(path)) - return false; - // tell server i started the game sf::Packet spac; spac << (MessageId)NP_MSG_START_GAME; spac << m_current_game; + spac << (char *)&g_NetPlaySettings; + + if (false == NetPlay::StartGame(path)) + return false; std::lock_guard lks(m_crit.send); m_socket.Send(spac); diff --git a/Source/Core/Core/Src/NetPlayServer.cpp b/Source/Core/Core/Src/NetPlayServer.cpp index 850954ac55..31731daa47 100644 --- a/Source/Core/Core/Src/NetPlayServer.cpp +++ b/Source/Core/Core/Src/NetPlayServer.cpp @@ -590,6 +590,7 @@ bool NetPlayServer::StartGame(const std::string &path) { std::lock_guard lkg(m_crit.game); + GetNetSettings(); if (false == NetPlay::StartGame(path)) return false; @@ -602,7 +603,11 @@ bool NetPlayServer::StartGame(const std::string &path) // tell clients to start game sf::Packet spac; spac << (MessageId)NP_MSG_START_GAME; - spac << m_current_game; + spac << NetPlay::m_current_game; + spac << g_NetPlaySettings.m_DSPEnableJIT; + spac << g_NetPlaySettings.m_DSPHLE; + for (unsigned int i = 0; i < 4; ++i) + spac << g_NetPlaySettings.m_Controllers[i]; std::lock_guard lkp(m_crit.players); std::lock_guard lks(m_crit.send);