anchor.diff:  
     TKMPointListArray = array of TKMPointList;
   
  -  TKMPointCenteredList = class(TKMPointList)
  +  TKMWeightedPointList = class(TKMPointList)
  +    fWeight: array of Single;
  +  public
  +    procedure Add(const aLoc: TKMPoint; aWeight: Single); reintroduce;
  +    function GetWeightedRandom(out Point: TKMPoint): Boolean;
  +  end;
  +
  +  TKMPointCenteredList = class(TKMWeightedPointList)
     private
       fCenter: TKMPoint;
       fWeight: array of Single;
     public
       constructor Create(aCenter: TKMPoint);
  -    procedure Add(const aLoc: TKMPoint); override;
  -    function GetWeightedRandom(out Point: TKMPoint): Boolean;
  +    procedure Add(const aLoc: TKMPoint); reintroduce;
     end;
   
     TKMPointTagList = class(TKMPointList)
  
positive.code:     Rnd := Rnd - fWeight[I];
    end;
    Assert(False, 'Error getting weighted random');
  end;
  
  
  
negative.code: end;
  
  
  { TKMWeightedList }
  procedure TKMWeightedPointList.Add(const aLoc: TKMPoint; aWeight: Single);
  begin
    inherited Add(aLoc);
  
    if fCount >= Length(fWeight) then
      SetLength(fWeight, fCount + 32);
  
    fWeight[fCount - 1] := aWeight;
  end;
  
  
  function TKMWeightedPointList.GetWeightedRandom(out Point: TKMPoint): Boolean;
  var
    I: Integer;
    WeightsSum, Rnd: Extended;
  