diff --git a/Spawner.vcxproj b/Spawner.vcxproj
index 2d4cd41a..85a6b829 100644
--- a/Spawner.vcxproj
+++ b/Spawner.vcxproj
@@ -66,6 +66,7 @@
+
diff --git a/src/Main.Config.cpp b/src/Main.Config.cpp
index 39c12117..d59fa150 100644
--- a/src/Main.Config.cpp
+++ b/src/Main.Config.cpp
@@ -74,17 +74,6 @@ void MainConfig::ApplyStaticOptions()
Game::EnableMPDebug = true;
Game::EnableMPSyncDebug = true;
Game::DrawMPDebugStats = this->MPDebugShow;
-
- // Fixes text layout in the MPDebug panel
- Patch::Apply_TYPED(0x542A19, { 312 });
- Patch::Apply_TYPED(0x542AA6, { 322 });
- Patch::Apply_TYPED(0x542B08, { 332 });
- Patch::Apply_TYPED(0x542B72, { 342 });
- Patch::Apply_TYPED(0x542BD4, { 352 });
- Patch::Apply_TYPED(0x542C94, { 362 });
- Patch::Apply_TYPED(0x542CF7, { 372 });
- Patch::Apply_TYPED(0x542D5E, { 382 });
- Patch::Apply_TYPED(0x542DC2, { 392 });
}
if (this->SingleProcAffinity)
diff --git a/src/UI/MPDebugLayout.cpp b/src/UI/MPDebugLayout.cpp
new file mode 100644
index 00000000..423eaf22
--- /dev/null
+++ b/src/UI/MPDebugLayout.cpp
@@ -0,0 +1,46 @@
+/**
+* yrpp-spawner
+*
+* Copyright(C) 2026-present CnCNet
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program.If not, see .
+*/
+
+#include
+#include
+
+// Fixes text layout in the MPDebug panel
+DEFINE_PATCH_TYPED(DWORD, 0x542A19, 312 /* 311 */ ); // average response time
+DEFINE_PATCH_TYPED(DWORD, 0x542AA6, 322 /* 319 */ ); // maximum response time
+DEFINE_PATCH_TYPED(DWORD, 0x542B08, 332 /* 327 */ ); // packet resend count
+DEFINE_PATCH_TYPED(DWORD, 0x542B72, 342 /* 335 */ ); // lost packet count
+DEFINE_PATCH_TYPED(DWORD, 0x542BD4, 352 /* 343 */ ); // packet loss percentage
+DEFINE_PATCH_TYPED(DWORD, 0x542C94, 362 /* 351 */ ); // player processing time
+DEFINE_PATCH_TYPED(DWORD, 0x542CF7, 372 /* 359 */ ); // player frame number
+DEFINE_PATCH_TYPED(DWORD, 0x542D5E, 382 /* 367 */ ); // send/receive queue lengths
+DEFINE_PATCH_TYPED(DWORD, 0x542DC2, 392 /* 375 */ ); // missed overall/magic packets
+DEFINE_PATCH_TYPED(DWORD, 0x542E52, 402 /* 383 */ ); // routed response time (WOL)
+DEFINE_PATCH_TYPED(DWORD, 0x649699, 420 /* 400 */ ); // frame stall (yellow)
+DEFINE_PATCH_TYPED(DWORD, 0x64975D, 420 /* 400 */ ); // command count stall (red)
+DEFINE_PATCH_TYPED(DWORD, 0x649C60, 420 /* 400 */ ); // clear stall indicators
+
+// Hide the event queue delay together with the multiplayer debug statistics.
+DEFINE_HOOK(0x55F1F8, MPDebugPrint_CheckDrawFlag, 0x8)
+{
+ enum { SkipEventQueueDelay = 0x55F280 };
+
+ return Game::DrawMPDebugStats
+ ? 0
+ : SkipEventQueueDelay;
+}