From f4483e4f516916c7d3ce44c034525c2849e70583 Mon Sep 17 00:00:00 2001 From: flan Date: Mon, 14 Jul 2025 08:32:56 +0200 Subject: [PATCH] Treat multiple flashes sent in the same frame as repeating Prevents connection issues caused by large amounts of fl packets (sometimes thousands per frame) being sent in several maps, including: - Yume 2kki: Whispery Sewers remake (as of 0.127i patch 5) - Yume 2kki: older versions of Lush Cells - Deep Dreams: Alien Ocean --- src/multiplayer/game_multiplayer.cpp | 6 ++++-- src/multiplayer/game_multiplayer.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/multiplayer/game_multiplayer.cpp b/src/multiplayer/game_multiplayer.cpp index 767454353..5e4dca07a 100644 --- a/src/multiplayer/game_multiplayer.cpp +++ b/src/multiplayer/game_multiplayer.cpp @@ -112,7 +112,7 @@ static bool MovePlayerToPos(Game_PlayerOther& player, int x, int y) { } void Game_Multiplayer::ResetRepeatingFlash() { - frame_index = -1; + frame_index = 0; last_flash_frame_index = -1; last_frame_flash.reset(); repeating_flashes.clear(); @@ -591,7 +591,9 @@ void Game_Multiplayer::MainPlayerJumped(int x, int y) { void Game_Multiplayer::MainPlayerFlashed(int r, int g, int b, int p, int f) { std::array flash_array = std::array{ r, g, b, p, f }; - if (last_flash_frame_index == frame_index - 1 && (last_frame_flash.get() == nullptr || *last_frame_flash == flash_array)) { + if (last_flash_frame_index > -1 + && frame_index - last_flash_frame_index <= 1 + && (last_frame_flash.get() == nullptr || *last_frame_flash == flash_array)) { if (last_frame_flash.get() == nullptr) { last_frame_flash = std::make_unique>(flash_array); connection.SendPacketAsync(r, g, b, p, f); diff --git a/src/multiplayer/game_multiplayer.h b/src/multiplayer/game_multiplayer.h index 37c4c1a58..dc52d7ed3 100644 --- a/src/multiplayer/game_multiplayer.h +++ b/src/multiplayer/game_multiplayer.h @@ -68,7 +68,7 @@ class Game_Multiplayer { int host_id{-1}; std::string session_token; // non-null if the user has an ynoproject account logged in int room_id{-1}; - int frame_index{-1}; + int frame_index{0}; std::map map_server_variables; enum class NametagMode {