I've done this on the C++ version to great effect.
In the buckets Module, you see this code:
Public Sub CompareRobots(n1 As Integer, N2 As Integer, field As Integer)
Dim ab As vector, ac As vector, ad As vector 'vector from n1 to n2
Dim invdist As Single, discheck As Single
Dim eyecellC As Integer, eyecellD As Integer
Dim a As Integer
ab = VectorSub(rob(N2).pos, rob(n1).pos)
invdist = VectorMagnitudeSquare(ab)
discheck = field * RobSize + rob(N2).radius
discheck = discheck * discheck
'check distance
If discheck < invdist Then Exit Sub
invdist = VectorInvMagnitude(ab)
'ac and ad are to either end of the bots, while ab is to the center
ac = VectorScalar(ab, invdist)
'ac is now unit vector
ad = VectorSet(ac.y, -ac.x)
ad = VectorScalar(ad, rob(N2).radius)
ad = VectorAdd(ab, ad)
ac = VectorSet(-ac.y, ac.x)
ac = VectorScalar(ac, rob(N2).radius)
ac = VectorAdd(ab, ac)
eyecellD = EyeCells(n1, ad)
eyecellC = EyeCells(n1, ac)
If eyecellC = 0 And eyecellD = 0 Then Exit Sub
If eyecellC = 0 Then eyecellC = EyeStart + 9
If eyecellD = 0 Then eyecellD = EyeStart + 1
For a = eyecellD To eyecellC
If rob(n1).mem(a) < (RobSize * 100 * invdist) Then
Dim eyevalue As Long
If a = EyeStart + 5 Then
rob(n1).lastopp = N2
End If
eyevalue = (RobSize * 100 * invdist)
If eyevalue > 32000 Then eyevalue = 32000
rob(n1).mem(a) = eyevalue
End If
Next a
End Sub
Here's the changes I made:
Public Sub CompareRobots(n1 As Integer, N2 As Integer, field As Integer)
Dim ab As vector, ac As vector, ad As vector 'vector from n1 to n2
Dim invdist As Single, discheck As Single
Dim eyecellC As Integer, eyecellD As Integer
Dim a As Integer
ab = VectorSub(rob(N2).pos, rob(n1).pos)
invdist = VectorMagnitudeSquare(ab)
discheck = field * RobSize + rob(N2).radius
discheck = discheck * discheck
'check distance
If discheck < invdist Then Exit Sub
invdist = VectorInvMagnitude(ab)
'ac and ad are to either end of the bots, while ab is to the center
ac = VectorScalar(ab, invdist)
'ac is now unit vector
ad = VectorSet(ac.y, -ac.x)
ad = VectorScalar(ad, rob(N2).radius)
ad = VectorAdd(ab, ad)
ac = VectorSet(-ac.y, ac.x)
ac = VectorScalar(ac, rob(N2).radius)
ac = VectorAdd(ab, ac)
eyecellD = EyeCells(n1, ad)
eyecellC = EyeCells(n1, ac)
If eyecellC = 0 And eyecellD = 0 Then Exit Sub
If eyecellC = 0 Then eyecellC = EyeStart + 9
If eyecellD = 0 Then eyecellD = EyeStart + 1
eyevalue = RobSize * 100 / (RobSize - rob(n1).radius - rob(N2).radius + 1 / invdist)
If eyevalue > 32000 Then eyevalue = 32000
For a = eyecellD To eyecellC
If rob(n1).mem(a) < eyevalue Then
Dim eyevalue As Long
If a = EyeStart + 5 Then
rob(n1).lastopp = N2
End If
rob(n1).mem(a) = eyevalue
End If
Next a
End Sub
It should help bots that don't react well at size greater than or less than 1000 body. It's obviously not optimized, since you're finding the inverse distance at the top of the function and then finding the inverse of that later on, but I think you get the idea.