diff --git a/src/init.cpp b/src/init.cpp index 73e2ff29555..a407a7c2d72 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1908,7 +1908,8 @@ bool stageThreeInitialise() if (bMultiPlayer) { - playerResponding(); // say howdy! + cameraToHome(selectedPlayer, false, fromSave); + playerResponding(); // say howdy! if (NetPlay.bComms && !NETisReplay()) { multiStartScreenInit(); diff --git a/src/multiopt.cpp b/src/multiopt.cpp index ef1fcd8ef7a..3b1f9c62e71 100644 --- a/src/multiopt.cpp +++ b/src/multiopt.cpp @@ -648,9 +648,6 @@ void playerResponding() ingame.JoiningInProgress[selectedPlayer] = false; } - // Home the camera to the player - cameraToHome(selectedPlayer, false); - // Tell the world we're here NETbeginEncode(NETbroadcastQueue(), NET_PLAYERRESPONDING); NETuint32_t(&selectedPlayer); diff --git a/src/multiplay.cpp b/src/multiplay.cpp index 54d277acd6b..633ec3e4f66 100644 --- a/src/multiplay.cpp +++ b/src/multiplay.cpp @@ -225,7 +225,7 @@ bool multiplayerWinSequence(bool firstCall) if (firstCall) { - pos = cameraToHome(selectedPlayer, true); // pan the camera to home if not already doing so + pos = cameraToHome(selectedPlayer, true, false); // pan the camera to home if not already doing so last = 0; // stop all research @@ -657,7 +657,7 @@ int scavengerPlayer() // //////////////////////////////////////////////////////////////////////////// // probably temporary. Places the camera on the players 1st droid or struct. -Vector3i cameraToHome(UDWORD player, bool scroll) +Vector3i cameraToHome(UDWORD player, bool scroll, bool fromSave) { UDWORD x, y; STRUCTURE *psBuilding = nullptr; @@ -693,7 +693,7 @@ Vector3i cameraToHome(UDWORD player, bool scroll) { requestRadarTrack(world_coord(x), world_coord(y)); } - else + else if (!fromSave) // This will override the saved camera position in skirmish games if not checked { setViewPos(x, y, true); } diff --git a/src/multiplay.h b/src/multiplay.h index ae88db481cd..339763d74bc 100644 --- a/src/multiplay.h +++ b/src/multiplay.h @@ -229,7 +229,7 @@ int whosResponsible(int player); bool canGiveOrdersFor(int player, int playerInQuestion); int scavengerSlot(); // Returns the player number that scavengers would have if they were enabled. int scavengerPlayer(); // Returns the player number that the scavengers have, or -1 if disabled. -Vector3i cameraToHome(UDWORD player, bool scroll); +Vector3i cameraToHome(UDWORD player, bool scroll, bool fromSave); bool multiPlayerLoop(); // for loop.c