anchor.diff:  
       ComputeNearbyPoints(I);
     end;
  +
  +  // Now add points
  +  SetLength(WordArr, gTerrain.MapY, gTerrain.MapX);
  +  for Y := Low(fPoint2PolygonArr) to High(fPoint2PolygonArr) do
  +    for X := Low(fPoint2PolygonArr[Y]) to High(fPoint2PolygonArr[Y]) do
  +      if (fPoint2PolygonArr[Y,X] = High(Word)) then
  +        WordArr[Y,X] := FindClosestPolygon(KMPoint(X,Y));
  +
  +  for Y := Low(fPoint2PolygonArr) to High(fPoint2PolygonArr) do
  +    for X := Low(fPoint2PolygonArr[Y]) to High(fPoint2PolygonArr[Y]) do
  +      if (fPoint2PolygonArr[Y,X] = High(Word)) then
  +        fPoint2PolygonArr[Y,X] := WordArr[Y,X];
   end;
   
   
  
positive.code:   if not gTerrain.TileInMapCoords(aP.X, aP.Y) then
      aP := KMPoint(  Min( Max(1,aP.X), gTerrain.MapX-1), Min( Max(1,aP.Y), gTerrain.MapY-1)  );
  
    Result := Point2PolygonArr[aP.Y,aP.X];
    if (Result <> High(Word)) then
      Exit;
  
  
negative.code:     PMin := KMPoint(Max(1,aP.X - I), Max(1,aP.Y - I));
      PMax := KMPoint(Min(gTerrain.MapX-1,aP.X + I), Min(gTerrain.MapY-1,aP.Y + I));
      for X := PMin.X to PMax.X do
        if (fPoint2PolygonArr[PMin.Y,X] <> High(Word)) then
        begin
          Output := fPoint2PolygonArr[PMin.Y,X];
          break;
        end
        else if (fPoint2PolygonArr[PMax.Y,X] <> High(Word)) then
        begin
          Output := fPoint2PolygonArr[PMax.Y,X];
          break;
        end;
      if (Output <> High(Word)) then
        break;
      for Y := PMin.Y to PMax.Y do
        if (fPoint2PolygonArr[Y,PMin.X] <> High(Word)) then
        begin
          Output := fPoint2PolygonArr[Y,PMin.X];
          break;
        end
        else if (fPoint2PolygonArr[Y,PMax.X] <> High(Word)) then
        begin
          Output := fPoint2PolygonArr[Y,PMax.X];
          break;
        end;
      if (Output <> High(Word)) then
  