diff --git a/src/multiplayer/game_multiplayer.cpp b/src/multiplayer/game_multiplayer.cpp index ccd8688e9..61f94456f 100644 --- a/src/multiplayer/game_multiplayer.cpp +++ b/src/multiplayer/game_multiplayer.cpp @@ -168,6 +168,9 @@ void Game_Multiplayer::InitConnection() { Connect(room_id); // wrong room, reconnect return; } + // Game_Multiplayer::Connect runs before the pictures from + // the previous map are erased so we can't call it there + SendShownPictures(); // set this to true to enable players entering switching_room = false; Web_API::OnRoomSwitch(); @@ -705,6 +708,24 @@ void Game_Multiplayer::PictureErased(int pic_id) { } } +void Game_Multiplayer::SendShownPictures() { + auto scene_map = Scene::Find(Scene::SceneType::Map); + if (!scene_map || !scene_map->IsInitialized()) return; + + for (auto& sp : sync_picture_cache) { + int id = sp.first; + auto* pic = Main_Data::game_pictures->GetPicturePtr(id); + if (pic == nullptr || !pic->Exists()) continue; + auto params = pic->GetShowParams(); + if (!IsPictureSynced(id, params.name)) continue; + + auto& p = Main_Data::game_player; + connection.SendPacketAsync(id, params, + Game_Map::GetPositionX(), Game_Map::GetPositionY(), + p->GetPanX(), p->GetPanY()); + } +} + bool Game_Multiplayer::IsBattleAnimSynced(int anim_id) { bool anim_synced = false; diff --git a/src/multiplayer/game_multiplayer.h b/src/multiplayer/game_multiplayer.h index c3435c3a3..d539fe437 100644 --- a/src/multiplayer/game_multiplayer.h +++ b/src/multiplayer/game_multiplayer.h @@ -125,6 +125,7 @@ class Game_Multiplayer { void SpawnOtherPlayer(int id); void ResetRepeatingFlash(); void InitConnection(); + void SendShownPictures(); }; inline Game_Multiplayer& GMI() { return Game_Multiplayer::Instance(); }