Associates hearing invisible opponent

Can anyone remind me why a PC can hear and attack an invisible opponent (even with no Listen skill), but associates can’t (unless the opponent takes some offensive action)?

Lots of ways to work around it, of course - just wondering if there’s any rationale.

The rationale I can think for is that DetermineCombatRound() uses only GetNearestSeenEnemy() for target selection. It can accept a target parameter, but BW does not pass it in most situations.

Assocs (and other creatures) also react by default only to visual stimuli in their OnPerception, probably to save some CPU cycles for DetermineCombatRound versus unreachable targets (behind walls, etc).

nw_ch_ac2 (associates):

//Check if the last percieved creature was actually seen
if(GetLastPerceptionSeen())
{
	if(GetIsEnemy(GetLastPerceived()))
	{
		SetFacingPoint(GetPosition(GetLastPerceived()));
		HenchmenCombatRound(OBJECT_INVALID);
	}

nw_c2_default2 (everybody):

    // * BK FEB 2003 Only fight if you can see them. DO NOT RELY ON HEARING FOR ENEMY DETECTION
    else if (GetIsEnemy(oPercep) && bSeen)

When an opponent takes an offensive action it loses its invisibility and as such becomes a feasible target to fight against.

Interesting.

I’m trying out Balkoth’s Minion Control as a means of focussing on one opponent, which uses the target parameter and so works around the problem. Seems very good so far.