anchor.diff:      function CanHandleKey(Key: Word; Shift: TShiftState): Boolean;
       function SpeedChangeAllowedInMP: Boolean;
   
  +    procedure HandleShowTeamKeyDown(Key: Word);
       procedure HandleMessageKeys(Key: Word);
   
       procedure HandleReplayPauseKey(Key: Word; Shift: TShiftState);
  
positive.code: end;
  
  
  // This event happens every ~33ms if the Key is Down and holded
  procedure TKMGamePlayInterface.KeyDown(Key: Word; Shift: TShiftState; aIsFirst: Boolean; var aHandled: Boolean);
  var
    rect: TKMRect;
    keyHandled: Boolean;
  begin
    aHandled := True; // assume we handle all keys here
  
    if gGame.IsPlayerWaiting and IsKeyBlockedOnPause(Key) then Exit;
  
    if fMyControls.KeyDown(Key, Shift) then
    begin
      fViewport.ReleaseScrollKeys; // Release the arrow keys when you open a window with an edit to stop them becoming stuck
      Exit;
    end;
  
    keyHandled := False;
    inherited KeyDown(Key, Shift, aIsFirst, keyHandled);
    if keyHandled then Exit;
  
      // As we don't have names for teams in SP we only allow showing team names in MP or MP replays
    if (Key = gResKeys[kfShowTeams]) then
      if SHOW_UIDs or (fUIMode in [umMP, umSpectate]) or (gGameParams.Mode = gmReplayMulti) then //Only MP replays
      begin
  
negative.code: function TKMGamePlayInterface.CanShowAllies: Boolean;
  begin
    Result := fUIMode in [umMP, umSpectate];
  end;
  
  
  