anchor.diff:  
     //Allocate memory for all commands lists
     for i:=0 to MAX_SCHEDULE-1 do for k:=1 to MAX_PLAYERS do
  -    fSchedule[i,k].Commands := TGIPList.Create;
  +    fSchedule[i,k] := TGIPList.Create;
   end;
   
   
  
positive.code: 
    Conf := true; //See if all players confirm this tick commands list
    for i:=1 to MAX_PLAYERS do
      for k:=1 to MAX_PLAYERS do
        Conf := Conf and (fSchedule[id,i].Confirmed[k] or not fPlayersEnabled[k]);
  
    //Handle the issue
    if not Conf then
  
negative.code:       fNetwork: TKMNetwork;
        fDelay:word; //How many ticks ahead the commands are scheduled
        fPlayersEnabled:array[1..MAX_PLAYERS]of boolean; //See which players confirmations do we need
        //Each player can have any number of commands scheduled for execution in one tick
        fSchedule: array[0..MAX_SCHEDULE-1, 1..MAX_PLAYERS] of TGIPList; //Ring buffer
        //All players must confirm they have the have recieved our GIPList
        fConfirmed: array[0..MAX_SCHEDULE-1, 1..MAX_PLAYERS] of boolean; //Ring buffer
        procedure SendCommands;
      protected
        procedure TakeCommand(aCommand:TGameInputCommand); override;
      public
        constructor Create(aReplayState:TGIPReplayState);
        destructor Destroy; override;
        procedure RecieveCommands(aData:array of byte); //Called by TKMNetwork
        procedure Tick(aTick:cardinal); override;
    end;
  
  
  implementation
  uses KM_Game, KM_CommonTypes;
  
  
  procedure TGIPList.Clear;
  