This is a bit complicated, so I'll explain it in two stages. This is all in 2.0.14.1, but I didn't see anything in the 2.0.15 fixes list related to this.
Have Beethro pick up an invisibility potion. Now pick up a decoy and place it in the line of sight of a sleeping eye, but far enough away that the eye is outside the decoy's range. The eye will not wake up immediately. If Beethro walks closer to the eye, so that it comes within the invisibility range, the eye wakes up and moves towards Beethro.
This is not the bug. The bug is this:
Set up the same situation as before. Now, instead of walking closer to the sleeping eye, walk closer to a brain so that it comes within invisibility range. The eye will not wake up. This seems to be the only exception to an otherwise general rule: If Beethro is invisible, but there's a brain within range, everything behaves as though Beethro is visible.
This could be fixed by allowing sleeping eyes to wake up when they see a decoy, irrespective of whether Beethro is invisible. Note that this won't change the behavior of the first situation: The eye would appear to wake up earlier, but since it won't move until Beethro comes within range, its behavior is effectively the same.
I haven't seen this situation used in any published hold. I came across the first situation in
Blue Rooms : 2 - Blue Rooms : 4 North, 3 West, and did a bit of testing on my own.
Looking through the source code, it appears that this is in fact the intended behavior. The code in
CEvilEye::Process() that checks whether an evil eye should wake up allows for decoys at any distance, regardless of invisibility. The problem is that this code has been put inside an
if clause reading
if (!this->isActive && CanFindSwordsman())
{
//...
}
and
CanFindSwordsman() returns
false when Beethro is invisible and outside range, and no decoys are within range. As far as I can tell, there's no reason to call this method, as invisibility is already handled in the check itself. So the
if clause could simply be changed to
if (!this->isActive)
{
//...
}
____________________________
Today the refrigerator, tomorrow the world!