anchor.diff:        MakeSavePoint;
         fGamePlayInterface.AddReplayMark(fParams.Tick);
       end;
  +  end;
  +
  +begin
  +  Result := False;
  +
  +  fLastUpdateState := TimeGet;
  +  {$IFDEF PERFLOG}
  +  gPerfLogs.TickBegin(fParams.Tick + 1);
  +  {$ENDIF}
  +
  +  try
  +    // Make savepoints and saves BEFORE tick increment
  +    // Same way we do in the PlayGameTick
  +    ManageSaves;
  +
  +    IncTick;
  +
  +    fScripting.UpdateState;
  +    gTerrain.UpdateState;
  +    gAIFields.UpdateState(fParams.Tick);
  +    gHands.UpdateState(fParams.Tick); //Quite slow
  +    if gGame = nil then Exit; //Quit the update if game was stopped for some reason
  +    gMySpectator.UpdateState(fParams.Tick);
  +    fPathfinding.UpdateState;
  +    gProjectiles.UpdateState; //If game has stopped it's NIL
  +
  +    //Issue stored commands
  +    fGameInputProcess.ReplayTimer(fParams.Tick);
  +    //Used when need to run Runner replays sometimes (we could make replay at tick 1 and then need to 'simulate' gicTempDoNothing GIP cmd
  +//    if AGGRESSIVE_REPLAYS and (fParams.Tick > 1) then
  +//      KaMRandom(MaxInt, 'TKMGameInputProcess.StoreCommand');
  +
  +    CheckIfPieceTimeJustEnded; //Send warning messages about peacetime if required (peacetime sound should still be played in replays)
  +
  +    if gGame = nil then Exit; //Quit if the game was stopped by a replay mismatch
   
       if not fSkipReplayEndCheck and IsReplayEnded then
         RequestHold(grReplayEnd);
  
positive.code:       IssueAutosaveCommand(True);
      end
      else
      if (fParams.Tick mod gGameSettings.AutosaveFrequency) = 0 then
        IssueAutosaveCommand(False);
  
      Result := True;
  
  
negative.code: 
  
  function TKMGame.PlayReplayTick: Boolean;
  
    procedure ManageSaves;
    begin
      //Only increase LastTick, since we could load replay earlier at earlier state
      fSavePoints.LastTick := Max(fSavePoints.LastTick, fParams.Tick);
  
  