anchor.diff:      function DoRenderGame: Boolean;
   
       procedure MultiplayerRig(aNewGame: Boolean);
  +
  +    procedure PrepareSaveFolder(const aPathName: String; aSaveByPlayer: Boolean; aSaveWorkerThread: TKMWorkerThread);
       procedure SaveGameToStream(aTimestamp: TDateTime; aSaveStream: TKMemoryStream); overload;
       procedure SaveGameToStream(aTimestamp: TDateTime; aHeaderStream, aBodyStream: TKMemoryStream); overload;
       procedure SaveGameToFile(const aPathName: String; aSaveByPlayer: Boolean; aSaveWorkerThread: TKMWorkerThread; aTimestamp: TDateTime; const aMPLocalDataPathName: String = '');
  
positive.code:         ForceDirectories(path);
      end, 'Prepare save dir');
    end;
  
    //In MP each player has his own perspective, hence we dont save minimaps in the main save file to avoid cheating,
    //but save minimap in separate file with local game data
  
negative.code:   gPerfLogs.SectionEnter(psGameSaveWait);
    {$ENDIF}
    try
      // Wait for previous save async tasks to complete before proceeding
      // We don't really need to wait here, since worker will wait automatically anyway in his queue
      // But if saves are made too often (f.e. on a very high game speed)
      // then waiting here will force worker to finish all of his previous jobs in his queue,
      // which is better than waiting a lot of time at the 'final save'
      aSaveWorkerThread.WaitForAllWorkToComplete;
    finally
      {$IFDEF PERFLOG}
  