Each moving vole emits a rustle "signal" S (0 while hidden, 0.45 while nibbling, 1.0 while running). Every physics tick the owl runs a Poisson-style detection check on every audible vole:
R = Rmin + hearing·(Rmax−Rmin) // effective hearing radius
p = hearing · S · (1 − wind) · max(0, 1 − d/R)²
lock-on if random() < p · dt
That inverse-square-shaped falloff means a loud, close vole is detected almost immediately while a faint, distant one may never trip the check — exactly the physical intuition of "sound gets fainter with distance, and wind masks it further."
Once locked on, the strike is not a coin flip: it is a kinematic interception race. The owl dives at a fixed speed toward the vole's current position; the vole keeps running toward its nearest burrow. The engine re-solves, every tick, whether the owl's remaining flight time to the vole's live position is still shorter than the vole's remaining flight time to the burrow mouth. Moonlight widens the owl's effective strike radius (better visual lock in bright conditions); a vole that reaches its burrow first survives.
- Hearing acuity — raises the detection radius and detection probability, so hunts start sooner.
- Moonlight — improves the owl's terminal strike radius (visual targeting) but also lets voles see the owl coming a fraction sooner (small evasive-speed bonus).
- Wind noise — multiplies rustle strength down, directly suppressing detection probability regardless of hearing.