Files
EscapistsReintroduced/docs/ai-local-awareness.md
T

74 lines
4.4 KiB
Markdown

# Local observations and HQ response
Mission-owned primary-enemy squads now capture visual evidence in the native
`SCR_AIGroupPerception.AddOrUpdateTarget` callback, before the next one-second HQ
update. Capture still requires an enemy target seen within 0.5 seconds, a clear
native trace and positive exposure. The source, last-seen position, observation
time and visible equipment are copied immediately. Subsequent movement or gear
changes do not alter that report.
Each squad keeps at most 16 visual snapshots and one sound report, for at most
30 seconds. Repeated visual capture is limited to once per second per retained
target. Sending uses the existing observation watermark, so polling cannot resend
the same observation. This is local squad knowledge; only successful physical
radio delivery creates HQ memory. A missing radio route leaves the snapshot
pending until it expires. An accepted transmission is not duplicated if it fails.
Captured contacts can use the next free uplink, with at most one attempt per five
seconds. They can precede routine status, but status overdue by 15 seconds gets
the next free slot. Existing transmissions are allowed to finish. The saved
report interval still controls the ordinary polling path; the new event path
works even on an existing server profile with a ten-second report interval.
A delivered report brings forward the next HQ planning pass.
## Heard fighting
The native `AddOrUpdateGunshot` callback supplies hostile-fire evidence. Native
weapon danger reactions invoke it for audible shots or incoming fire; grenade
danger can also notify this native group path. The mission does not scan player
positions or invent a hearing radius. Capture is scoped to bound, server-owned,
primary-enemy AI groups during the active post-prison mission. Unregistration
and round teardown detach the hook and discard pending observations.
A sound report carries a 150-metre grid area's centre, its observation time and
the reporting squad. Shooter identity, player count, equipment and movement are
not sent. Sound updates are coalesced to one per second and radio reports to one
per 30 seconds per squad. Visual evidence takes precedence in the local inbox.
Delivered sound has its own memory kind, keyed by reporting squad rather than an
unseen shooter. Initial confidence is 0.4, halves every 60 seconds, and positional
uncertainty starts at 150 metres and grows by 2 metres per second. Repeated sounds
never infer target velocity. A visual sighting creates a separate stronger track.
HQ can allocate one existing mobile search squad per sound task, within the
current response radius, total assignment limit and hunt cooldown. This uses the
ordinary radio downlink, search waypoint and negative-search report. Sound alone
cannot authorize mortar/aircraft targeting, paratrooper targeting or a hunter
UAZ precision interception. Permanent objective defenders, mortar crews and
other reserved specialists remain excluded from mobile assignments. Native
local combat and the existing defensive waypoints remain responsible for their
immediate defensive movement.
Maximum AI skill, alerted recognition and Regular aim error are unchanged. No
additional soldiers or vehicles are spawned by this change.
## Validation
`test_hq_local_awareness.py` executes the production cache and contact scheduler
with engine/radio adapters: frozen evidence, expiry, coalescing, capacity, duplicate
rejection, route loss/retry, captured-contact priority and bounded status delay.
The existing memory, radio fairness and local handoff tests cover the new sound
kind and retained observation age. The dedicated `hq-awareness` native fixture exercises the
cache, isolated native gunfire callback, sound confidence/targeting restrictions,
and production cached-contact intake followed by physical radio delivery. Its
injected observations do not prove natural hearing/visibility or combat tactics
in a live multiplayer session.
Validation on 2026-09-25: repository checks passed; the dedicated Workbench
fixture compiled and completed its awareness, physical radio, memory and teardown
assertions. The launcher encountered a terminating-process classification race
while verifying cleanup; a subsequent private-prefix idle check passed. Logs and
source manifests, including earlier failed fixture attempts, are retained under
`.local/analysis/ai-awareness-2026-09-25/`. The fixture arranges an isolated local
inbox so concurrent natural contacts cannot replace its injected payload.