Skip to content
This repository was archived by the owner on Jan 5, 2024. It is now read-only.

Commit 69f956d

Browse files
committed
Added settings flag and support for experimental multiplayer speedboosts based on topkek's changes
These changes are on by default
1 parent f526b81 commit 69f956d

File tree

4 files changed

+36
-10
lines changed

4 files changed

+36
-10
lines changed

Managers/NetworkClient.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ namespace RTE {
283283
return;
284284
}
285285

286-
DrawFrame();
286+
if (!g_SettingsMan.UseExperimentalMultiplayerSpeedboosts()) { DrawFrame(); }
287287

288288
m_PostEffects[m_CurrentFrame].clear();
289289
m_CurrentFrame = frameData->FrameNumber;
@@ -1005,7 +1005,10 @@ namespace RTE {
10051005

10061006
if (static_cast<double>((currentTicks - m_LastInputSentTime)) / static_cast<double>(g_TimerMan.GetTicksPerSecond()) > 1.0 / inputSend) {
10071007
m_LastInputSentTime = g_TimerMan.GetRealTickCount();
1008-
if (IsConnectedAndRegistered()) { SendInputMsg(); }
1008+
if (IsConnectedAndRegistered()) {
1009+
if (g_SettingsMan.UseExperimentalMultiplayerSpeedboosts()) { DrawFrame(); }
1010+
SendInputMsg();
1011+
}
10091012
}
10101013
}
10111014

Managers/NetworkServer.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1154,15 +1154,19 @@ namespace RTE {
11541154
int NetworkServer::SendFrame(short player) {
11551155
long long currentTicks = g_TimerMan.GetRealTickCount();
11561156
double fps = static_cast<double>(m_EncodingFps);
1157-
double secsPerFrame = 1.0 / fps;
1158-
double secsSinceLastFrame = static_cast<double>(currentTicks - m_LastFrameSentTime[player]) / static_cast<double>(g_TimerMan.GetTicksPerSecond());
1157+
if (g_SettingsMan.UseExperimentalMultiplayerSpeedboosts()) {
1158+
RakSleep(1000 / fps);
1159+
} else {
1160+
double secsPerFrame = 1.0 / fps;
1161+
double secsSinceLastFrame = static_cast<double>(currentTicks - m_LastFrameSentTime[player]) / static_cast<double>(g_TimerMan.GetTicksPerSecond());
11591162

1160-
// Fix for an overflow which may happen if server lags for a few seconds when loading activities
1161-
if (secsSinceLastFrame < 0) { secsSinceLastFrame = secsPerFrame; }
1163+
// Fix for an overflow which may happen if server lags for a few seconds when loading activities
1164+
if (secsSinceLastFrame < 0) { secsSinceLastFrame = secsPerFrame; }
11621165

1163-
m_MsecPerFrame[player] = static_cast<int>(secsSinceLastFrame * 1000.0);
1166+
m_MsecPerFrame[player] = static_cast<int>(secsSinceLastFrame * 1000.0);
11641167

1165-
m_LastFrameSentTime[player] = g_TimerMan.GetRealTickCount();
1168+
m_LastFrameSentTime[player] = g_TimerMan.GetRealTickCount();
1169+
}
11661170

11671171
// Wait till FrameMan releases bitmap
11681172
SetThreadExitReason(player, NetworkServer::LOCKED);
@@ -1448,8 +1452,10 @@ namespace RTE {
14481452
}
14491453
ProcessTerrainChanges(player);
14501454

1451-
double secsSinceSendStart = static_cast<double>(g_TimerMan.GetRealTickCount() - currentTicks) / static_cast<double>(g_TimerMan.GetTicksPerSecond());
1452-
m_MsecPerSendCall[player] = static_cast<int>(secsSinceSendStart * 1000.0);
1455+
if (!g_SettingsMan.UseExperimentalMultiplayerSpeedboosts()) {
1456+
double secsSinceSendStart = static_cast<double>(g_TimerMan.GetRealTickCount() - currentTicks) / static_cast<double>(g_TimerMan.GetTicksPerSecond());
1457+
m_MsecPerSendCall[player] = static_cast<int>(secsSinceSendStart * 1000.0);
1458+
}
14531459

14541460
SetThreadExitReason(player, NetworkServer::NORMAL);
14551461
return 0;

Managers/SettingsMan.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ namespace RTE {
3434
m_NATServiceAddress = "127.0.0.1:61111";
3535
m_NATServerName = "DefaultServerName";
3636
m_NATServerPassword = "DefaultServerPassword";
37+
m_UseExperimentalMultiplayerSpeedboosts = true;
3738

3839
m_AllowSavingToBase = false;
3940
m_ShowForeignItems = true;
@@ -226,6 +227,8 @@ namespace RTE {
226227
reader >> m_NATServerName;
227228
} else if (propName == "NATServerPassword") {
228229
reader >> m_NATServerPassword;
230+
} else if (propName == "UseExperimentalMultiplayerSpeedboosts") {
231+
reader >> m_UseExperimentalMultiplayerSpeedboosts;
229232
} else if (propName == "ClientInputFps") {
230233
reader >> g_NetworkClient.m_ClientInputFps;
231234
} else if (propName == "ServerTransmitAsBoxes") {
@@ -390,6 +393,7 @@ namespace RTE {
390393
writer.NewPropertyWithValue("NATServiceAddress", m_NATServiceAddress);
391394
writer.NewPropertyWithValue("NATServerName", m_NATServerName);
392395
writer.NewPropertyWithValue("NATServerPassword", m_NATServerPassword);
396+
writer.NewPropertyWithValue("UseExperimentalMultiplayerSpeedboosts", m_UseExperimentalMultiplayerSpeedboosts);
393397

394398
writer.NewLine(false, 2);
395399
writer.NewDivider(false);

Managers/SettingsMan.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,18 @@ namespace RTE {
252252
/// </summary>
253253
/// <param name="newValue">New password to use when connecting via NAT punch-through service.</param>
254254
void SetNATServerPassword(const std::string &newValue) { m_NATServerPassword = newValue.empty() ? "DefaultServerPassword" : newValue; }
255+
256+
/// <summary>
257+
/// Gets whether or not experimental multiplayer speedboosts should be used.
258+
/// </summary>
259+
/// <returns>Whether or not experimental multiplayer speedboosts should be used.</returns>
260+
bool UseExperimentalMultiplayerSpeedboosts() const { return m_UseExperimentalMultiplayerSpeedboosts; }
261+
262+
/// <summary>
263+
/// Sets whether or not experimental multiplayer speedboosts should be used.
264+
/// </summary>
265+
/// <param name="newValue">Whether or not experimental multiplayer speedboosts should be used.</param>
266+
void SetUseExperimentalMultiplayerSpeedboosts(bool newValue) { m_UseExperimentalMultiplayerSpeedboosts = newValue; }
255267
#pragma endregion
256268

257269
#pragma region Editor Settings
@@ -438,6 +450,7 @@ namespace RTE {
438450
std::string m_NATServiceAddress; //!< NAT punch-through server address.
439451
std::string m_NATServerName; //!< Server name to use when connecting via NAT punch-through service.
440452
std::string m_NATServerPassword; //!< Server password to use when connecting via NAT punch-through service.
453+
bool m_UseExperimentalMultiplayerSpeedboosts; //!< Turns on/off code changes from topkek that may speed up multiplayer.
441454

442455
bool m_AllowSavingToBase; //!< Whether editors will allow to select Base.rte as a module to save in.
443456
bool m_ShowMetaScenes; //!< Show MetaScenes in editors and activities.

0 commit comments

Comments
 (0)