Add mission customization, HQ support and aggression-driven AI

Integrate faction and random settings menus, generated objectives, scouts, convoys, air support, mortar stations and body-intel recovery. Add identified-body aggression, finite hunter UAZ deployment, dedicated objective defence and maximum AI skill with separate reduced aim accuracy. Include policy tests, native probes, evidence and documentation.
This commit is contained in:
2026-09-23 15:07:14 +02:00
parent 04bd19327b
commit 1b1a8b5173
242 changed files with 12153 additions and 875 deletions
+59
View File
@@ -0,0 +1,59 @@
# Identified-body escalation and objective defence
Implemented 2026-09-23 in the combined Core addon. These are server-owned mission services; clients do not request spawns or supply casualty counts.
## Aggression and hunter UAZs
Only a fresh BODY report delivered to HQ identifies a body for aggression. The identity is the immutable formation SourceId plus original roster slot. A status-known death can subsequently be identified once; multiple observers, repeat deliveries and status reports cannot inflate this counter. Missing or silent units do not count.
`ERR_HQWatchRules.Aggression(bodies)` is `clamp(floor(bodies / 3), 0, 30)`. `Hunters(level)` is `ceil(level / 2)`, capped at 15:
| Identified bodies | Aggression | Cumulative UAZ allowance |
|---:|---:|---:|
| 0–2 | 0 | 0 |
| 3–8 | 1–2 | 1 |
| 9–14 | 3–4 | 2 |
| 45 | 15 | 8 |
| 87–89 | 29 | 15 |
| 90+ | 30 | 15 |
The existing confirmed-loss infantry response budget remains independent. The new allowance creates **additional hunter UAZ-PKM vehicles**, separate from supply convoys, each with the selected primary enemy faction's driver and gunner. There are at most 15 deployments per round, not an endless replacement pool. Destroyed, captured or failed vehicles consume their deployment; surviving entities and loot remain physical. Surviving AI crew retain their HQ registration and skill profile when a driving task ends; capture releases the mission binding. The status string distinguishes active vehicles from the cumulative allowance.
Deployment waits until the prison is unlocked and checks friendly-site road access, terrain, collision, the force-ledger cap and a 400 m player exclusion radius. A blocked candidate is retried after 30 seconds; native crew readiness has a 30-second deadline. Vehicles are registered only with their actual original native agents and seat occupants. Faction selection, inventory, radio fitting and body/intel ownership use existing mission services.
Without delivered sightings, hunters patrol roads between friendly objectives. With fresh actionable HQ memory, they intercept a road near the last reported/predicted position. Destination selection does not query live player positions. Orders must traverse the existing physical radio network. Loss of communications prevents new orders; it does not magically reveal a player or cancel the last received order.
## Objective crews
Radio, supply/medical, extraction and outpost locations have permanent local defence roles. HQ still receives their real reports, but cannot borrow them for searches, couriers, resupply or reinforcement assignments elsewhere. Prison patrols retain their existing release behaviour, and mortar/scout/air-support reservations remain specialized.
Within 600 m of an objective, existing living guards are reused. If no guards remain, the site can receive one finite 3–5-member relief crew per round, preserving the site's original faction. Spawning is deferred within 200 m of players and requires standable terrain. Complete native expansion is required before admission. Its native Defend waypoint uses the actual terrain-height objective position and a 40 m radius. No recurring refill loop is introduced.
The mission currently has a **medical supply stash**, not a spawned hospital building. This stash participates in objective defence. New objective sites can use the same service by registering their site kind in `ERR_ObjectiveDefence.Objective`.
## Skill, accuracy and perception
Mission-owned hostile military AI use `EAISkill.CYLON` for maximum skill while the native aim-error node uses the `REGULAR` random-error distribution. This avoids CYLON's zero-error shooting. Recognition uses the native alerted factor (2.5) even in safe/suppressed states, preserving equipment factors and the engine's visibility/occlusion checks. This does not create through-wall vision or knowledge of unseen players.
The authorized original AI code supplied the scoped skill/equipment and detection-hook approach. The separate aim-error reduction is new: no corresponding independent accuracy hook was found in the inspected original. Native `SCR_AIGetAimErrorOffset` and `SCR_AICombatComponent` implementations were used to separate these behaviours.
Actual enemy-detection events activate local native combat and bring forward the next HQ report; report delivery still obeys radio routing. Primary-enemy units share HQ. Other hostile factions receive the same scoped skill/aim policy but do not leak intelligence to a mutually hostile faction. Specialist scouts and flight crews retain their authored equipment. Captured/ineligible actors are excluded from the profile, and normal teardown restores prior skill and native perception.
## Audit trail and adjustment
The complete HQ journal is `$logs:rereintroduced-hq.log` (existing filename retained). Relevant events:
- `AGGRESSION`: delivered body source/slot, distinct-body count, level and allowance.
- `HUNTER SPAWN`, `READY`, `WAIT`, `ORDER`, `FAILED`, `RELEASE`: why/where each UAZ deployed, base, crew size, radio order and lifecycle.
- `REGISTER`, `SPAWN MEMBER`: group and force identity, faction, prefab, position, members, home and dedicated role.
- `ROLE RESERVED`, `OBJECTIVE DEFENCE`: site assignment, reuse or relief deployment and reassignment restriction.
- `CONTACT LOCAL`: observed position, source group and local role; at most one diagnostic per group per ten seconds.
- `SPAWN PURPOSE`: links body-inspection teams to their reported-body destination.
`SPAWN GROUP` also appears in the normal script/console log for mission groups, including non-primary factions. Coordinates are world metres. Changes are event-driven or throttled, not a per-frame unit dump. Existing radio, order, status, search and support journal records remain available.
## Verification
Production-method policy tests cover body/status deduplication, three-body thresholds, 30/15 caps, reset, authority/capture boundaries, maximum skill binding/restoration, regular aim-error selection and native perception fallback. The native `aggression` fixture exercises actual body intake, a physical UAZ with seated crew, radio delivery and movement, objective reservations, medical-stash reinforcement admission and teardown. This is local native Workbench validation, not a dedicated-server multiplayer or full 15-UAZ performance benchmark.
Final local run: `/tmp/erri-aggression-native7/logs/logs_2026-09-23_15-01-06`. All 14 native assertions and the completion marker passed: full medical defence at terrain height, seated driver/gunner, real radio delivery, driving over 30 m, bounded deployment and surviving-crew profile after release. Source stayed unchanged during the run. The runner reported a transient empty-argv Wine `enfMain` during cleanup; a subsequent explicit private-prefix idle check passed. Existing external localization/resource messages remain in the native log; this is not a clean-log claim. `python tools/check.py` passed, and the final hunter lifecycle and affected skill/body/registration policy tests passed separately.
+2
View File
@@ -1,5 +1,7 @@
# Enemy skill and finite startup equipment migration
Current policy (2026-09-23): [aggression and AI profile](aggression-ai.md) supersedes the historical Expert infantry floor below. All mission hostile military AI now use maximum decision skill with separate regular aim error.
Adapted from independently authored, user-authorized AI code. Original files remain read-only; no original Escapists helpers, protected-derived `EAI_GroupLookup`, patched prefabs or asset bytes are imported.
| Owned source | SHA-256 | Reused behavior |
+48 -28
View File
@@ -8,8 +8,8 @@
"counts": {
"features": 39,
"statuses": {
"partial": 17,
"missing": 18,
"partial": 21,
"missing": 14,
"implemented": 4
},
"scripts": 54,
@@ -181,19 +181,23 @@
{
"id": "body_discovery",
"title": "Visible bodies and confirmed losses",
"status": "missing",
"status": "partial",
"original_files": [
"Scripts/Game/EscapistsAI/EAI_HQBodySearch.c",
"Scripts/Game/EscapistsAI/EAI_HQWatch.c",
"Scripts/Game/EscapistsAI/EAI_HQ.c"
],
"replacement_files": [],
"replacement_files": [
"addons/core/Scripts/Game/ERR/10_AI/ERR_HQBodyObserver.c",
"addons/core/Scripts/Game/ERR/10_AI/ERR_BodyRecovery.c",
"addons/core/Scripts/Game/ERR/20_Intel/ERR_IntelEvidence.c"
],
"behavior": [
"Death callback registers local evidence;60m view limit/12m close range;15s per-unit scans;12-trace shared budget;16 local discoveries",
"radio-only deduplicated confirmations"
],
"remaining": "Independent death hook and bounded physical LOS intake; share evidence identity across status/body/missing-patrol reports. A casualty is not a known hostile position.",
"evidence": "code only",
"remaining": "Dedicated multiplayer, inaccessible bodies, interrupted recovery teams and hostile-faction permutations remain runtime acceptance cases. Missing documents indicate potentially compromised sites, not an enemy sighting.",
"evidence": "Native retained corpse, delivered body report, separately spawned recovery team, physical inspection and missing-document radio uplink passed on 22 September. See docs/hq-air-support.md.",
"asset_scope": "vanilla"
},
{
@@ -293,7 +297,12 @@
"replacement_files": [
"addons/core/Scripts/Game/ERR/10_AI/ERR_AircraftService.c",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AircraftFlight.c",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AircraftRouteFlight.c"
"addons/core/Scripts/Game/ERR/10_AI/ERR_AircraftRouteFlight.c",
"addons/core/Scripts/Game/ERR/10_AI/ERR_ReconAirports.c",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AirReconSystem.c",
"addons/core/Scripts/Game/ERR/10_AI/ERR_ReconFlightComponent.c",
"addons/core/Scripts/Game/ERR/10_AI/ERR_ReconCrewLocks.c",
"addons/core/Scripts/Game/ERR/10_AI/ERR_NativeAirReconProbe.c"
],
"behavior": [
"Incremental airport discovery",
@@ -303,19 +312,24 @@
"runway return/landing retry",
"player takeover release"
],
"remaining": "Flight mechanisms have isolated short-route evidence; airport search, useful routes, HQ-selected recon launch/orbit/endurance/service operational loop are missing.",
"evidence": "isolated20m flight only; no operational recon",
"asset_scope": "vanilla Mi8 candidate; original recon wrapper must be rebuilt"
"remaining": "Dedicated multiplayer acceptance and player boarding/takeover; faction-specific aircraft catalogs and full endurance/service/rearm cycle. Air assault remains separate.",
"evidence": "Native airfield launch, real player sighting/shadow orbit, physical crew radio delivery to HQ, flight, same-aircraft landing, full loss delay and retained wreck replacement passed in erri-recon-native4. Forced player boarding remained unverified. Final ownership/deletion results and exact limits: docs/search-helicopter.md.",
"asset_scope": "Current vanilla armed Mi8 wrapped with successor flight component and four original native pilot/gunner occupants; no obsolete custom left-gun resource."
},
{
"id": "air_assault",
"title": "HQ-selected air reinforcement cycle",
"status": "missing",
"status": "partial",
"original_files": [
"Scripts/Game/EscapistsAI/EAI_AirAssault.c",
"Scripts/Game/EscapistsAI/EAI_AirSupportPolicy.c"
],
"replacement_files": [],
"replacement_files": [
"addons/core/Scripts/Game/ERR/10_AI/ERR_AirAssaultSystem.c",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AirSupportPolicy.c",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AirAssaultLoad.c",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AirfieldSupport.c"
],
"behavior": [
"Up to8 carried troops/two teams",
"wait60s for mortar response",
@@ -324,38 +338,44 @@
"abort stale/moved/conflicting reports;2min cover",
"return/reload/reboard"
],
"remaining": "Build one shared HQ insertion capability with actual passenger reservations and mortar deconfliction; no new independent timer/spawn system.",
"evidence": "missing",
"asset_scope": "optional parachute framework; vanilla landing-and-dismount alternative changes behavior"
"remaining": "Dedicated multiplayer and adversarial remote ownership/packet-loss acceptance remain; current implementation uses four finite attempted loads and HQ memory/ground-strength decisions.",
"evidence": "Production memory/strength policy and cover-target/deadline regressions pass. Controlled native eight-person drop, same-airframe return, service and second eight-person departure passed. See docs/hq-air-support.md for scope.",
"asset_scope": "External Parachute Framework 65930CB4CD0237B2 is required; vanilla Mi-8 and original physical troops."
},
{
"id": "parachutes",
"title": "Physical staggered AI parachute drop",
"status": "missing",
"status": "partial",
"original_files": [
"Scripts/Game/EscapistsAI/EAI_AssaultParachute.c",
"Scripts/Game/EscapistsAI/EAI_AirAssault.c"
],
"replacement_files": [],
"replacement_files": [
"addons/core/Scripts/Game/ERR/10_AI/ERR_AssaultParachute.c",
"addons/core/Prefabs/ERR/AssaultParachute.et"
],
"behavior": [
"Moving25m/s flyby at90\u2013180m AGL;>=2s/50m stagger",
"native compartment exits;5m/s descent/2m/s flare",
"no duplicate soldiers",
"released canopies finish after carrier loss"
],
"remaining": "Framework-dependent mechanics cannot enter vanilla-only closure; choose optional asset integration or landing insertion; do not silently claim equivalence.",
"evidence": "missing",
"remaining": "Dedicated-client replication, canopy destruction and late native transfer acceptance remain.",
"evidence": "Eight original actors boarded physical canopies and landed in the 22 September native airborne fixture.",
"asset_scope": "Parachute Framework65930CB4CD0237B2"
},
{
"id": "aircraft_ammo",
"title": "Aircraft weapon ammunition and airfield reload",
"status": "missing",
"status": "partial",
"original_files": [
"Scripts/Game/EscapistsAI/EAI_AircraftAmmo.c",
"Scripts/Game/EscapistsAI/EAI_AirRecon.c"
],
"replacement_files": [],
"replacement_files": [
"addons/core/Scripts/Game/ERR/10_AI/ERR_AircraftAmmo.c",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AirfieldSupport.c"
],
"behavior": [
"Native mounted-magazine/rocket-barrel accounting",
"return at<=25% usable ammunition",
@@ -363,8 +383,8 @@
"verified physical passenger boarding/retries",
"fixed finite payload per departure"
],
"remaining": "Replace original free service refill/new troops with shared depot cargo/personnel allocation and physically confirmed consumption.",
"evidence": "code only",
"remaining": "Airport service has finite gun-round, rocket-attempt and fuel budgets associated with physical depot entities. Spent rocket-pod runtime and dedicated multiplayer acceptance remain.",
"evidence": "Native same-airframe service consumed mounted-gun rounds and fuel before a second departure. Finite rocket-pod service compiles; spent-pod refill is not separately qualified. See docs/hq-air-support.md.",
"asset_scope": "vanilla"
},
{
@@ -2410,12 +2430,12 @@
"post_audit_updates": [
{
"id": "convoys",
"updated_on": "2026-09-20",
"updated_on": "2026-09-21",
"status": "partial",
"implementation": "Finite six-vehicle/19-body shared-budget service with one opt-in canonical HQ dispatch, actual native road driving, exact initial seat membership and finite eight-rifle/48-magazine truck cargo. Delivered-report HQ HOLD/RESUME preserves each original crew, route index and owned waypoint; native mounted-combat registration is enabled. Automatic initial startup now defaults enabled, snapshots its saved setting per round, waits for existing admission and makes one bounded canonical attempt. Manual and automatic share the same receipt; no replacement after losses.",
"evidence": "native-2026-09-20-025035-convoy-driving: 181 assertions, all six original vehicles at least20m and lead over100m, duplicate dispatch rejected; zero script/runtime failures. Four external localization errors keep strict qualification failed. Current-source native-2026-09-20-041150-convoy-cover-driving repeats181 assertions after the cover integration; radio command transitions have executable-method tests, not native combat proof. native-2026-09-20-081658-automatic-convoy:93 assertions/one round, automatic six vehicles/19 original seated crew, duplicate dispatch rejected, zero script/runtime failures; four external localization errors remain.",
"remaining": "Direct native HOLD/RESUME and mounted firing; dismount/flank/reboard tactics, delivery/unloading, full-route reliability, multiplayer and FPS qualification. Capacity stays one initial convoy, not predecessor3/20.",
"detail": "docs/convoy-migration.md"
"implementation": "Original default-three, configurable0\u201320 finite six-vehicle convoys. Each has25 bodies/eight ledger groups: eleven mounted crew and two seven-person infantry teams. Bounded separated road startup, friendly-base circuits,45\u201390s rests,250m arrival/10min travel deadline. Native perception and delivered HQ contacts drive dismount/flank/escort cover/truck withdrawal and60s quiet reboarding with120s timeout. Random faction arsenal weapons and compatible finite ammunition, no replacements/refills. Saved count/random choice applies next round. Shared ledger and associated group bookkeeping expanded to256 formations.",
"evidence": "native-2026-09-20-025035-convoy-driving: 181 assertions, all six original vehicles at least20m and lead over100m, duplicate dispatch rejected; zero script/runtime failures. Four external localization errors keep strict qualification failed. Current-source native-2026-09-20-041150-convoy-cover-driving repeats181 assertions after the cover integration; radio command transitions have executable-method tests, not native combat proof. native-2026-09-20-081658-automatic-convoy:93 assertions/one round, automatic six vehicles/19 original seated crew, duplicate dispatch rejected, zero script/runtime failures; four external localization errors remain. Current full supply-convoy implementation: local 2026-09-21 16:50:45 smoke completed,36 common assertions, no script/runtime failures;18 vehicles/75 original soldiers,174 physical cargo inserts,all18 drove20m,both seven-person teams dismounted/reboarded and original truck drove next base leg after native pause. Source fingerprint380aec8a078825b165593fc4445b603f80b5d1ec51360c018d34973d65302b62 unchanged; cleanup confirmed. Controlled contact/travel-deadline inputs explicitly labelled. Nine pre-existing dependency errors prevent strict engine qualification. Details in docs/supply-convoys.md.",
"remaining": "Dedicated multiplayer, maximum-fleet performance and full-island route reliability qualification. Separate infantry ammunition rendezvous still uses the first convoy. Historical 2026-09-20 evidence predates the new circuit and infantry controller; see current validation in docs/supply-convoys.md.",
"detail": "docs/supply-convoys.md"
},
{
"id": "body_discovery",
+3
View File
@@ -1,5 +1,8 @@
# AI migration progress — 20 September 2026
Current convoy implementation: [Supply convoys](supply-convoys.md) supersedes the single-convoy stages recorded below.
The successor now has a persistent HQ belief model, bounded infantry pursuit,
radio check-ins, missing-patrol investigations, local body discovery and a Core
force ledger. These extend the existing playable mission and finite mortar/courier
+48
View File
@@ -0,0 +1,48 @@
# Airfield extraction and map icons
The live Everon scenario no longer creates `everon-supply-2`, its guards, UAZ or
crate. The remaining supply cache and medical stash provide the two reachable
radio-intel sources. Mortar reserve/courier preparation uses the existing eastern
outpost, preserving its finite logistics without creating a replacement site.
Extraction is authored at 4800.953 / 11487.412 on Everon's airfield. Before
spawning the helicopter, `ERR_AirfieldPlacement` checks nearby physical airfield
anchors, dry terrain, slope and the aircraft/overhead clearance volume. A failed
check fails preparation; there is no fallback into the woods. New islands need
their own authored pad and recognizable airfield anchors. Aircraft damage and
physics remain normal after spawning.
Exact discoveries use native wrapper images and matching glow images:
helicopter for extraction, radio for radio camps, artillery for mortar sites,
building for outposts, medical for medical supplies, and supplies for other caches.
The prison is now always hidden. Partial clues use a question mark. Icons are
applied after native marker initialization and reapplied when the map opens.
Partial markers use stable 500 m grid centres; all objective markers remain uneditable.
## Verification — 22 September 2026
The full repository check passed during implementation; the mortar-logistics
regression also passed after changing its preparation source. The final Core
Workbench `airfield-markers` fixture passed 12 assertions and completed without
script errors or VM exceptions. It checked the removed site, a settled usable
aircraft on the real pad, rejection of the old forest point and occupied pad,
two reachable intel sources, all six site icon selections, and native map opening.
Final local session: `/tmp/erri-airfield-markers6/logs/logs_2026-09-22_15-44-19`.
A direct capture of the private Workbench viewport visually confirmed the prison
lock replacing its circle. The other sites were outside that captured viewport;
the fixture checks their icon selections, not visual quality at every map zoom.
Existing RHS/WCS localization, stock resource-keyword and native map-UI resource
errors remain visible in the strict report. The runner recorded smoke completion
but returned failure because its immediate cleanup check encountered an exiting
`enfMain` process with an empty command line. A subsequent host-visible
`assert_prefix_idle` check confirmed the private prefix was idle. This is local
Workbench validation, not dedicated multiplayer acceptance or a clean strict
engine report. No server deployment or Workshop publication was performed.
Historical geometry-dependent smoke tests explicitly load `Tests/LegacySites.conf`;
production, `generated-sites`, `opening-tools` and `airfield-markers` use the live
scenario definitions.
The lock-icon screenshot below is historical; the subsequent [mortar and prison changes](mortar-intel-and-prison-map.md) removed that marker and restored question marks.
+102 -2
View File
@@ -17,6 +17,7 @@ Open the normal game chat and enter a command. Core provides:
| Command | Access | Effect |
| --- | --- | --- |
| `/esc status` | Server administrator | Current objective or startup failure cause; adds HQ status when Chat is loaded |
| `/esc killais` | Server administrator | Kill AI characters within 1,000 m of your living character; preserve players and vehicles |
| `/esc settings` | Server administrator | Current shared settings and values |
| `/esc mission radio show` | Server administrator | Radio defence duration in seconds |
| `/esc mission radio set N` | Server administrator | Save a whole-number duration from 30 to 1800 seconds |
@@ -41,9 +42,11 @@ Additional AI commands:
| `/esc hq stinger show` | Show the saved one-in-N initial equipment chance |
| `/esc hq stinger set N` | Set 0 to disable, 1 for every eligible actor, or 2–10000 for one in N; affects actors that have not rolled yet |
| `/esc hq convoy show` | Show the finite deployment task, retained vehicles, native cargo insertion results and stop reason |
| `/esc hq convoy start` | Opt into one initial six-vehicle deployment near the authored southern supply site; requires a suitable actual road, physical readiness and room for all 19 crew within the 60-body convoy admission cap |
| `/esc hq convoy start` | Deploy the next unused slot in this round’s configured convoy allowance after physical force admission |
| `/esc convoys show` | Show the saved count and active fleet |
| `/esc convoys set 0..20` / `/esc convoys set random` | Save the next round’s convoy count; default 3; also available on the Mission page |
Convoy deployment is under native verification. It is not automatically enabled at round startup. The same per-round receipt is retained after retries, partial startup and losses; this command never replaces a consumed convoy. Cargo is issued once and insertion failures are reported. Combat dismount/reboarding, complete supply routing and HQ response retasking remain separate migration work. The admission cap is not yet a global presence/materialization service. See [AI progress](ai-migration-progress.md) and [external dependencies](external-addons.md).
Convoys automatically deploy after prison escape by default, travel between friendly military bases, and use the original infantry dismount/flank/reboard behavior. Each has six vehicles, 25 soldiers and finite random faction-arsenal cargo. Startup and losses consume slots permanently. The existing `automaticConvoyEnabled=0` preference remains respected. See [Supply convoys](supply-convoys.md) for configuration, timing and validation limits.
The command parser and setting mutations have native service tests. Actual remote RPC ownership, chat usability and pre-spawn presentation still need multiplayer/UI acceptance.
@@ -54,3 +57,100 @@ If the faction/catalog setup or authored site preparation fails, the mode retain
Waiting for normal site preparation does not consume a player's spawn retry budget. Once ready, actual failed spawn requests are bounded. This does not remove the one-life or identity requirements.
Core also provides `/esc mission abandon`: an administrator-only explicit defeat and normal restart for an active round. See [recovery policy](recovery.md).
## Mission menu
**Esc → Escapists Reintroduced** opens one administrator menu. Its top navigation
stays visible on every page:
| Page | Controls |
| --- | --- |
| Mission | Radio defence duration and next-round convoy count |
| World | Start time, Random day, time speed, date and weather |
| Factions | Escapists, enemy and independent faction choices; Random all |
| Mods | Content pack and individual faction switches |
| HQ | Report interval, support squad limit and response radius |
| Intel | Document frequency, exact-reveal chance, summary and reroll |
| Status | Scrollable live mission and service status |
| Journal | Scrollable HQ activity, pause/resume and jump to latest |
Changing pages preserves drafts and never applies them. Escape returns to Mission;
a second Escape closes the menu (an active text edit consumes Escape first).
Server authorization and capability checks still control every mutation.
## Optional content
Use **Esc → Escapists Reintroduced → Mods** for server-admin RHS and individual faction switches.
Selections apply after mission restart, while Workshop dependencies remain loaded.
See [content packs and the modder registry](content-packs.md).
## Random settings
Every editable setting on **Mission**, **World**, **HQ** and **Intel** has a
**Random** button. It selects the draft; press **Apply** to save it. You can still
enter a fixed value. The start-time row also offers **Random day**.
- Random start time: any whole minute from 00:00 through 23:59.
- Random day: a whole minute strictly between the island's sunrise and sunset,
calculated after the selected date is applied. If no daylight interval is
available, preparation fails rather than silently starting at night.
- Random date: any valid date in the world's authored year (1900–2050), including
leap days where applicable.
- Random weather: clear, overcast or rain, with equal probability.
- Other fields: a uniformly selected integer within the range displayed beside
the field, including zero where allowed. Random speed uses 1–24×.
The server retains the **Random** choice in its profile and selects a fresh value
for each mission instance. Reads and menu polling reuse that value. Applying the
same Random choice again does not reroll it; changing to a fixed value and then
back to Random does. Live settings retain their existing apply timing; clock,
calendar, weather and speed still apply only on the next round. Saved Random
values for live settings also show the resolved number in the menu.
Text commands accept `random` in place of any of these ten values, for example
`/esc hq squads set random` or `/esc mission weather set random`. Time additionally
accepts `/esc mission time set random day` (or `random-day`). Existing numeric,
clock, date and named-weather values remain supported. Storage uses `-1` for
Random and `-2` exclusively for Random day; these are saved modes, never concrete
values passed to gameplay or the world clock. Existing settings files keep their
fixed choices without migration or an automatic rewrite.
## Generated camps and map discovery
Everon generates a fresh clear-terrain prison, radio camp and four mortar sites
each round. Partial intel shows question marks; exact discoveries use site icons.
The prison is never marked. See
[generated sites and debug commands](generated-sites.md) for placement limits,
authoring fields, failure behavior and validation.
`/esc cheat intel` is an administrator-only command that places six fresh intel folders on clear ground within about 4.3 metres of the current living prisoner. It requires being on foot on terrain with enough nearby space. All six positions are checked first; a spawn failure removes the partial batch. Picking up the folders uses normal intel discovery and the configured reveal chance.
The initial prison patrol contains 3–5 soldiers, chosen once during preparation from the selected enemy faction roster. An existing RTO is retained. If that roster has no large radio, one soldier is equipped with a physical manpack (US/USAF: AN/PRC-77; otherwise R-107M). Preparation waits for that radio to be present. The guards start at separate random clear positions 12–24 m around the prison and remain frozen until it is unlocked; other site squads keep their configured size.
## Airfield extraction and site icons
Everon extraction uses the airfield pad at 4800.953 / 11487.412. Site authors set
`RequireAirfield 1` and `AircraftOffset 0 0 0` on that extraction definition.
Preparation checks airfield anchors, terrain and clearance before creating the
aircraft, and refuses an invalid pad without relocating it elsewhere.
Identified sites use helicopter, radio, artillery, building, medical and supplies
icons. Partial intel shows a question mark at an approximate position; the prison
remains hidden regardless of discovery.
The western guarded UAZ/crate site is removed; the medical stash provides the
second radio-intel source. See [implementation and validation](airfield-extraction-and-map-icons.md).
See [mortar intel, original messages and perimeter guards](mortar-intel-and-prison-map.md) for the four-site configuration and validation.
## Permanent radio security
Radio sites require a guard squad. HQ permanently reserves that squad for the
radio's 20 m defend area; it cannot be dispatched on searches, reinforcements or
courier work. The generated Everon radio and table sit inside a full-size tent,
with standing room for interaction. See [radio camp security](radio-camp-security.md).
Everon also sets `ScoutCount 10` in its scenario definition. This creates ten finite hilltop sniper/scout posts with radio-equipped ammunition packs; see [hill scouts](hill-scouts.md) for terrain criteria, loadouts and reporting. Other authored scenarios default to zero.
Search helicopter: `heliTimerMinutes` defaults to 15 minutes after prison escape
and after aircraft loss. Use `/esc hq heli show`, `/esc hq heli timer set 15`,
or `/esc hq heli return`. See [search-helicopter.md](search-helicopter.md).
+133
View File
@@ -0,0 +1,133 @@
# Mission content packs and factions
Administrators open **Esc → Escapists Reintroduced → Mods** (also available in `/esc menu`). RHS
and its US Marines, Russian Armed Forces and ION factions default to enabled.
Each faction can be disabled independently. Disabling the parent pack excludes
all its factions and the mission's optional RHS optics, while retaining child
preferences. Enable/disable controls are authenticated on the server; saved
preferences and current effective selections are shown separately.
Changes apply on mission restart. Preferences live in
`$profile:EscapistsContent.json` on the server; use numeric `0`/`1` values for
`rhs`, `rhs_usmc`, `rhs_afrf`, and `rhs_ion`. Invalid existing files are preserved;
validated backup recovery and verified writes follow the mission settings
pattern. New registry entries use their authored default when absent from an
older file. Workshop dependencies stay installed and loaded. This controls what
the mission selects, not third-party scripts or a player's downloaded mods.
Open **Mission settings → Factions** to select the **Escapists**, **Enemy**, and
**Independent / FIA** roles. Each dropdown offers Random plus enabled registered
factions (US Army, Soviet Army, FIA, and enabled RHS factions). **Random all**
sets all three drafts to Random; **Apply factions** saves them together.
Explicit choices must differ. Random reserves explicit choices first and fills
the remaining roles without duplicates. A previously selected faction that is
now disabled falls back to another eligible faction at round start.
Role preferences are separate from pack enablement and live in
`$profile:EscapistsFactions.json`, for example:
```json
{"escapists":"us","enemy":"ussr","independent":"fia"}
```
Each value can instead be `"random"`; RHS IDs are `rhs_usmc`, `rhs_afrf`, and
`rhs_ion`. The equivalent authenticated command is
`/esc factions set us ussr fia`. Saved choices and the current resolved factions
are displayed separately. Changes require mission restart and never reassign
live players or AI mid-round.
The three selected sides are mutually hostile and friendly within their own
faction. Prisoners join the selected Escapists faction. Ordinary enemy guards
use the selected enemy group's native infantry. Sites with `AllowFactionPool`
alternate independent and main-enemy groups. The strategic HQ, radio network,
convoys and mortar logistics follow the main enemy; independent groups execute
native guard/patrol orders. Convoy infantry use the selected enemy profile.
Existing convoy vehicles, specialist mortar kits and the unarmed prisoner outfit
are retained; faction selection does not replace every vehicle or item asset.
All mission hostiles stay frozen until the prison is unlocked.
The prison starter container is the original Kolobok backpack, stocked once with
five PM pistols, eight spare magazines and one map. Existing readiness checks
wait for actual inventory insertion and client storage ownership.
## Adding a pack or faction
No menu code, command code or fixed settings schema edits are needed.
1. Add the Workshop dependency to `addons/core/addon.gproj` and install it in
Workbench. Update the test tooling allowlist in `tools/external_addons.py` and
extend `docs/external-addons.json` with the reviewed dependency
closure and exact resource GUID/path records used by this repository's tools.
2. Add a pack `ERR_ContentOption` to
`addons/core/Configs/ERR/Content/Registry.conf`: unique lowercase `Id`, readable
`Label`, `DefaultEnabled` (0 or 1), and optional `EquipmentGuids`.
3. Add one child option per combat faction with `Parent` set to the pack ID,
the exact `NativeFactionKey`, and `GuardGroup` resource. The group must spawn
its physical members immediately, with every member in that native faction.
Use distinct native keys for factions that should fight each other.
4. Add its `SCR_Faction` config to `Prefabs/ERR/FactionManager.et`, with
`m_bIsPlayable 0` and an empty `m_aFriendlyFactionsIds` list. The startup
validator checks the enabled factions and establishes mutual hostility.
5. Set `AllowFactionPool 1` on scenario sites eligible for faction variation.
These sites alternate the selected independent and main-enemy groups.
Other guarded sites use the main enemy profile. Specialist units retain
their mission equipment while following the selected enemy faction.
6. For new optional equipment selection code, call
`mode.Content().Allows(prefab)` before granting it, and register its GUID in
the owning option. Existing inherited equipment on faction characters stays
part of their prefab. Arbitrary native resource spawns are not intercepted.
Example child entry (substitute real faction key/resource):
```text
ERR_ContentOption {
Id "my_pack_infantry"
Label "My pack / Infantry"
Parent "my_pack"
DefaultEnabled 1
NativeFactionKey "MY_INFANTRY"
GuardGroup "{REAL_RESOURCE_GUID}Prefabs/Groups/MyInfantry.et"
}
```
IDs are persistent preference keys: keep them stable across releases. The
registry rejects duplicate IDs, faction keys, resource ownership, missing
parents and nested parent chains. It supports up to 64 entries and the UI
scrolls automatically. Registered factions also populate the role dropdowns;
no separate menu registration is needed. Use keys distinct from US, USSR and FIA.
The server must load the faction and its group resource. This registry does not
automatically discover arbitrary unregistered Workshop factions.
Commands: `/esc mods show`, `/esc mods rhs disable`,
`/esc mods rhs_usmc enable`, `/esc mods help`.
## Verification — 21 September 2026
Production-policy tests cover role resolution, explicit-choice reservation,
unique Random-all selection, disabled-choice fallback, invalid choices, pack
and child gating, guard eligibility, and selected non-USSR convoy dispatch.
The isolated native `core / prisoner-kit` run at
`/tmp/erri-factions-native3/logs/logs_2026-09-21_17-49-09` completed **341 assertions**
with USSR prisoners, RHS AFRF enemies and US independent guards. It compiled the
scripts and exercised actual player affiliation, physical guard groups,
hostility, authenticated role-menu save/restore, Random-all drafts, unchanged
active roles after save, unauthorized-command rejection, persistence reload,
backpack storage/readiness and the existing prisoner-kit checks. Sources and
dependencies stayed unchanged during the run; private runtime cleanup completed.
The faction page was rendered and inspected at `/tmp/erri-factions-menu.png`.
A second run (`/tmp/erri-factions-native4`) also completed 341 assertions
with RHS ION prisoners, US enemies and FIA independent guards, confirming
RHS player eligibility and FIA physical squads. Repository checks passed with
`python3 tools/check.py`.
Native validation still reports four external RHS/WCS localization errors and
five unknown-keyword errors while preloading inherited RHS vehicle catalogs
(`SlidingTrackMaterial` and BTR70 `Parent` entries). There were no mission script
or smoke failures in the completed run. These are local scripted Workbench
checks, not dedicated-server, ordinary mouse/gamepad-input, or multiplayer
replication acceptance. No Workshop publishing was performed.
Faction hostility follows the native
[SCR_FactionManager API](https://community.bistudio.com/wikidata/external-data/arma-reforger/ArmaReforgerScriptAPIPublic/interfaceSCR__FactionManager.html),
with both directions validated before preparation can finish.
+3
View File
@@ -1,5 +1,8 @@
# Finite physical convoy controller
> Superseded production behavior: see [Supply convoys](supply-convoys.md) for the original default-three fleet, full troop truck, base circuit and dismount/reboarding implementation. The evidence and implementation notes below describe the earlier single-convoy stages.
Independent adaptation of owned `escapists-ai/Scripts/Game/EscapistsAI/EAI_SupplyConvoys.c`, SHA-256 `a896fdacfd9c0f2db52e588642623545a3a5d6e8041fb72000a68e720fc2b7a5`. Reused responsibilities are the six-vehicle catalog/order, native seat creation, independent native crew groups, finite cargo and owned-waypoint release. Original Escapists/ScrtCore helpers, original game mode hooks and `EAI_GroupLookup` are excluded. Native `BaseCompartmentSlot.SpawnCharacterInCompartment`, group vehicle manager and waypoint APIs replace those dependencies.
The round owns one `ERR_ConvoyPool(mode,maxConvoys)` and one `ERR_ConvoyService(mode,pool)`. Reserve a unique authored source ID; dispatch its canonical one-use receipt with six authored positions/angles and a sealed, nonlooping Core `ERR_ForceRoute`. Resource, terrain/water/obstacle, faction and shared budget validation precede consumption. Consumption precedes native entity creation. Partial native startup consumes the slot and preserves every successfully created group, vehicle and actor; there is no refund or automatic retry/replacement.
+3
View File
@@ -1,5 +1,8 @@
# Automatic finite convoy startup
> Superseded production behavior: see [Supply convoys](supply-convoys.md) for the original default-three fleet, full troop truck, base circuit and dismount/reboarding implementation. The evidence and implementation notes below describe the earlier single-convoy stages.
The full AI scenario now enables one automatic initial convoy by default. Core-only scenarios remain unchanged. HQ freezes `automaticConvoyEnabled` when the round creates its command service; saving a different value affects the next round only.
Commands use the existing authenticated mission administration:
+7
View File
@@ -23,3 +23,10 @@ The actual coordinate policy passes positive, negative, boundary and exhaustive
Vanilla local-marker deletion removes only active membership. A culled objective can remain in the disabled list and later reappear. The successor now removes only its own local discovery-marker type from both lists and detaches that marker's native map-close/layer listeners on deletion; duplicate cleanup is safe and never reactivates or creates a widget. The native fixture now moves its owned marker into the actual disabled list before testing both-membership removal. Native verification of this extension is pending.
The [100619 integrated Core regression](evidence/native-2026-09-19-100619/report.json) now passes the revised native coordinate and disabled-list cleanup fixture in each of two complete rounds (612 total assertions, zero captured errors). Earlier pending statements describe the pre-run changes; manual map interaction remains separate.
## Current intel presentation
Partial clues use the native question-mark icon at the stable 500 m grid centre.
Identification replaces it with the site-specific icon; mortar sites use artillery.
The prison stays hidden. Messages match the owner’s original Intel addon. See
[mortar intel and prison visibility](mortar-intel-and-prison-map.md).
@@ -0,0 +1,25 @@
# Mission pages and corpse retention — 22 September 2026
- `python tools/check.py`: passed; complete output in repository-checks.txt.
- `tests/test_intel_body_inspection.py`: executes the production Inspect,
RetainedWithin, Delivered and Release methods against engine boundary doubles.
Premature, client-side, stopped, unknown and duplicate reports cannot release or
renew corpse cleanup. A searched body with a delivered report releases once,
with a 300-second native cleanup lifetime.
- Native Core `prisoner-kit` fixture compiled and completed. The menu checks cover
all eight pages through the shared top navigation, only one visible page,
navigation geometry, all Random controls and Random day, preserved drafts,
authenticated Apply, mod/faction save and restoration, journal rendering,
close/reopen and authorization denial. This is local Workbench validation;
dedicated multiplayer was not run for this change.
- `page-0.png` through `page-7.png` are direct, unedited captures of the isolated
Workbench World Editor window. Page order: Mission, HQ, Journal, Mods, Factions,
World, Intel, Status. All pages were visually inspected. Workbench's built-in
engine screenshots omit UI, so they are not used as visual evidence here.
- `sources.json` records the tested source hashes. No source edits were made
during the native run. No Workshop publishing or server deployment was done.
Native profile: `/tmp/erri-menu-pages-native5`. The runner reported a transient
exit-time idle-verification warning for an exiting process with an empty command
line. A subsequent explicit prefix-idle verification passed; no test process
remains. The fixture completed 345 assertions without script/runtime failures.
@@ -0,0 +1,47 @@
21:00:08.675 SCRIPT : ERR SMOKE PASS: admin integration native Esc menu entry opens mission administration
21:00:09.123 SCRIPT : ERR SMOKE PASS: admin integration real owner RPC opens menu and returns current settings/capabilities
21:00:09.125 SCRIPT : ERR MOD MENU: page=3 rows=4 saved=4 active=4
21:00:09.125 SCRIPT : ERR MOD ROW: id=rhs state=Current round: Enabled | Saved preference: Enabled
21:00:09.125 SCRIPT : ERR MOD BOUNDS: id=rhs width=192.917 height=27.5
21:00:09.126 SCRIPT : ERR MOD ROW: id=rhs_ion state=Current round: Enabled | Saved preference: Enabled
21:00:09.126 SCRIPT : ERR MOD BOUNDS: id=rhs_ion width=192.917 height=27.5
21:00:09.126 SCRIPT : ERR MOD ROW: id=rhs_afrf state=Current round: Enabled | Saved preference: Enabled
21:00:09.126 SCRIPT : ERR MOD BOUNDS: id=rhs_afrf width=192.917 height=27.5
21:00:09.126 SCRIPT : ERR MOD ROW: id=rhs_usmc state=Current round: Enabled | Saved preference: Enabled
21:00:09.126 SCRIPT : ERR MOD BOUNDS: id=rhs_usmc width=192.917 height=27.5
21:00:09.127 SCRIPT : ERR MOD CAPTURE READY
21:00:09.127 SCRIPT : ERR ADMIN CAPTURE PAGE: 0
21:00:12.188 SCRIPT : ERR ADMIN CAPTURE PAGE: 1
21:00:15.267 SCRIPT : ERR ADMIN CAPTURE PAGE: 2
21:00:18.376 SCRIPT : ERR ADMIN CAPTURE PAGE: 3
21:00:21.450 SCRIPT : ERR ADMIN CAPTURE PAGE: 4
21:00:24.494 SCRIPT : ERR ADMIN CAPTURE PAGE: 5
21:00:27.601 SCRIPT : ERR ADMIN CAPTURE PAGE: 6
21:00:30.682 SCRIPT : ERR ADMIN CAPTURE PAGE: 7
21:00:33.765 SCRIPT : ERR SMOKE PASS: admin integration all eight pages reached through shared top navigation with one visible page
21:00:36.875 SCRIPT : ERR SMOKE PASS: admin integration all Random buttons and Random day select editable drafts
21:00:39.947 SCRIPT : ERR SMOKE PASS: admin integration background polling preserves editable draft
21:00:41.490 SCRIPT : ERR SMOKE PASS: admin integration native Apply control routes and saves only requested setting
21:00:44.020 SCRIPT : ERR SMOKE PASS: admin integration test setting restored without resetting menu drafts
21:00:46.080 SCRIPT : ERR MOD MENU: page=3 rows=4 saved=4 active=4
21:00:46.080 SCRIPT : ERR MOD ROW: id=rhs state=Current round: Enabled | Saved preference: Disabled
21:00:46.081 SCRIPT : ERR MOD BOUNDS: id=rhs width=192.917 height=27.5
21:00:46.081 SCRIPT : ERR MOD ROW: id=rhs_ion state=Current round: Enabled | Saved preference: Enabled
21:00:46.081 SCRIPT : ERR MOD BOUNDS: id=rhs_ion width=192.917 height=27.5
21:00:46.081 SCRIPT : ERR MOD ROW: id=rhs_afrf state=Current round: Enabled | Saved preference: Enabled
21:00:46.081 SCRIPT : ERR MOD BOUNDS: id=rhs_afrf width=192.917 height=27.5
21:00:46.081 SCRIPT : ERR MOD ROW: id=rhs_usmc state=Current round: Enabled | Saved preference: Enabled
21:00:46.081 SCRIPT : ERR MOD BOUNDS: id=rhs_usmc width=192.917 height=27.5
21:00:46.081 SCRIPT : ERR SMOKE PASS: admin integration native mod toggle persists through authenticated owner RPC without changing active content
21:00:48.131 SCRIPT : ERR SMOKE PASS: admin integration native mod toggle restores saved preference
21:00:48.132 SCRIPT : ERR SMOKE PASS: admin integration three faction selectors and Random all create distinct-role drafts
21:00:52.710 SCRIPT : ERR SMOKE PASS: admin integration faction Apply persists all three through authenticated owner RPC without changing active round
21:00:54.249 SCRIPT : ERR SMOKE PASS: admin integration saved faction choices restored
21:00:57.348 SCRIPT : ERR ADMIN JOURNAL TEXT: lines=7 chars=528 bounds=153.833,79.5833,188.333,31.5938
21:00:57.348 SCRIPT : ERR ADMIN JOURNAL VIEWPORT: bounds=152.167,78.75,195,66.6667
21:00:57.348 SCRIPT : ERR ADMIN JOURNAL FOLLOW: slider=0,1 overflow=-35.0729
21:00:57.349 SCRIPT : ERR SMOKE PASS: admin integration HQ capability and journal page remain within current mission services
21:00:58.866 SCRIPT : ERR SMOKE PASS: admin integration dialog closes and authenticated god command affects current body
21:01:00.415 SCRIPT : ERR SMOKE PASS: admin integration god off restores exact prior damage state
21:01:02.474 SCRIPT : ERR SMOKE PASS: admin integration repeated open works and denied snapshot closes dialog
21:01:20.888 SCRIPT : ERR SMOKE COMPLETE: native prisoner-kit; reset requested by fixture
Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

@@ -0,0 +1,476 @@
PASS: missing, child-only, malformed, zero and duplicate prefab root IDs rejected
PASS: delayed scene/inventory arrival, deferred preload, identity checks, stale replies, timeout and observer cleanup
PASS: actual inventory manifest, delayed/missing/wrong-owner item links, finite cap, consumed-stock refresh and preload ordering
PASS: spawn scene remains held through final acknowledgement and nearby use; leaving, reassignment, disconnect and teardown release it
PASS: production prison AI hold/release, repeat activation, authority/faction/player exclusion, dead actor and stop cleanup
PASS: actual inspection requires dead registered body, server authority, conscious on-foot nonplayer, 3m reach, clear LOS and inventory; only missing issued site IDs reported once
PASS: production airborne memory confidence, persistence, ground coverage, confirmed losses, artillery veto, cooldown and invalid-input rules
PASS: production cover retains the carried HQ target until its deadline; airport reload waits until the drop pass and cover have finished
PASS: air logistics reservation preserves delivered search until radio handoff, excludes guards/combat/in-flight orders, and quarantines unresolved native loads/moves
PASS: original 15-minute launch/loss cadence, active/captured timer disarm, saved delay reset, stop, 300m orbit and close-contact standoff
PASS: actual aircraft-removal notification guards owner/server/active/stop and schedules one full delay without replay extension
PASS: hill prominence/elevation, actual road edges/heights/bends and server-only finite scout admission, pending stock, timeout and no replacements/refills
PASS: mortar duty scope excludes players, other crews, stopped/client/inactive states; only destruction releases an active assignment, while the gunner may approach the gun
PASS: random mode restrictions, full numeric ranges, independent calendar dates and strict daylight boundaries
PASS: actual killais eligibility includes the 1000m boundary, excludes players/retained bodies/dead/non-character entities and checks full 3D distance
PASS: actual generation scheduler bounds each tick, enforces deadline/candidate ceiling, validates fallback, commits only accepted positions, and terminates without repeated searches
PASS: actual faction resolution reserves explicit roles, samples without replacement, substitutes disabled selections, and rejects duplicate/unknown/missing choices and insufficient pools
PASS: actual content policy gates parent packs, individual factions, faction identity and finite group rotation with vanilla fallback
PASS: actual delivered road eligibility, ahead projection without chords, reservations, stock road query bounds, terrain/water/obstruction refusal and clean outputs
PASS: actual delivered-task lineage, expiry, old-order retention, native commit, release, road precision expiry and duplicate delivery
PASS: actual original-roster local handoff,100m3D bound,busy carrier/budget exclusion,origin interruption including deletedsource,normal radio delivery and per-source replay history
PASS: actual visual intake retains source/time/position/id, rejects replay, prefers usable own route, excludes simultaneous callers and conservatively resets negative-sweep dwell
PASS: actual fixture local/radio gating, immutable source/time/position, interrupted-report exclusion and exact-owner cleanup
PASS: local-handoff runner refuses wrong project/round count/insufficient deadline before runtime work
PASS: actual fixture allocator terminal/unsubmitted guard, original-group lookup and both candidate gates
PASS: actual report-derived waypoint insertion/order and tighter positive radii; no formation navigation claim
PASS: actual Place/Stop waits native pose update, bounds four attempts, preserves original position, restores pending/settled placement and respects ownership/accepted-move quarantine
PASS: actual fixture current/original recipient ownership, unresolved transfer cleanup, exact-token release and idempotent Stop
PASS: actual authored storage anchors, native trace flags, own-hierarchy exclusion, external wall/vehicle obstruction, range, unknown geometry and bounded context refusal
PASS: actual stock capture, unique finite identities, original recipients, HQ reservations, delivered report replay/cooldown and failed-downlink cleanup
PASS: actual original turret identity, native/canonical guards, scoped >=80/>=100 profile, reset, dismount/reboard, requested-skill preservation and restoration
PASS: bounded150s startup followed by exactly one120s memory window; only HQ-memory outer deadline extended
PASS: actual read migrates old valid settings, preserves explicit disabled state, rejects invalid data; next-round feedback and fixed menu remain honest
PASS: actual automatic convoy timing/authority/admission/one-attempt/manual-task/stop policy; native deployment unproved
PASS: late authoritative failure reason refreshes open result; detach, mode change and success subscriptions preserved
infantry resupply actual rules, radio transitions, owned cleanup and unresolved-operation tests passed
PASS: actual resupply Roster preserves permanent release, original slot mapping and bounded ownership
PASS: actual single-item transfer, physical ownership/native callback proof, stop quarantine, compatibility and strict original actor/vehicle boundaries
PASS: actual early ammunition policy and status-first shared uplink; complete threshold, phases, cooldown, failures and requested check-ins
PASS: actual group radio startup preservation, finite native grants, callback quarantine, frozen selection/actor ownership and bounded observation
PASS: actual maintenance native-stock check rejects missing/duplicate/wrong-identity/unowned/depleted/malformed stock and is read-only; native runtime not executed
..................
----------------------------------------------------------------------
Ran 18 tests in 0.269s
OK
PASS: actual radio node rejects current incapacitation, death, ownership and faction changes despite cached inventory; one-second capability refresh remains explicit
PASS: removed guarded vehicle cache and maintenance stock, airfield-only extraction config, and two remaining finite radio-clue sources
PASS: actual diagnostic fallback runs only on failed missing-context call, derives unique native pilot door, preserves stock eligibility and restores prior index on success/failure; diagnostics mutate no game state.
PASS: actual native-prelude cleanup restores only original changed damage, refuses stale/incapacitated/aboard teleport; bounded five-seat/four-door fixture wiring checked. Native execution remains pending.
PASS: actual CreateTransport requires successful scoped Configure after handbrake, preserves ordinary vehicles, tracks spawned entity before failures and never treats failed lock registration as ready.
PASS: actual preparation Configure guards/idempotence/breach preservation, security eligibility/final current-body server mutation and all scoped action guards; all five seat/four door resource overrides. Native hold, prefab merge, replication and boarding remain unverified.
PASS: actual convoy cover observation/snapshot/uplink/HOLD/RESUME/cleanup transitions; native boundaries mocked, non-convoy runner opt-in refused
Enemy optics actual-service ownership, preservation, callback, deadline and bounded-inspection policies passed
PASS: actual delivered cover freshness/lineage/replay and canonical executor; owned waypoint-only hold, one resume at preserved route index, invalid ownership/crew/ledger refusal and fail-closed native recreation
PASS: actual Stinger show/set/help state precise actor-roll effects; read-only help, bounded values, malformed syntax and failed-save preservation; no rerolls/gameplay edits and no native persistence claim
PASS: new/retasked search and radio delivery ammo gates; active tasks and delivered release preserved
HQ convoy delivered-report planning and downlink regressions passed
PASS: actual own-inventory ammo inspection deduplicates loaded/carried/shared wells, separates chambers/launchers, freezes scalar snapshots and treats unsupported/capped/foreign inventory as unknown
PASS: native body fixture uses existing immutable actors, real production LOS/queued uplink, pre-delivery isolation, actual status overlap, bounded cleanup and no fabricated reports/spawns
PASS: actual native fixture lookup selects exact BODY kind/identity/message from bounded evaluations, never sighting-only Get
PASS: actual ammo snapshot comparison checks every scalar/category flag; native probe requires real roster rescan, loaded-round lower bound and separate immutable pending/Watch objects
PASS: actual delivered slot-union bodies preserve overlap/disjoint evidence, replay idempotence, status subset integrity, full-wipe closure and formation-local bounds
test_review_added_allowed_media_invalidates_snapshot (__main__.ReviewTests.test_review_added_allowed_media_invalidates_snapshot) ... ok
test_review_added_source_directory_rejected (__main__.ReviewTests.test_review_added_source_directory_rejected) ... ok
test_review_loose_root_resource_and_symlink_rejected (__main__.ReviewTests.test_review_loose_root_resource_and_symlink_rejected) ... ok
test_review_metadata_media_and_sidecars_remain_allowed_and_bound (__main__.ReviewTests.test_review_metadata_media_and_sidecars_remain_allowed_and_bound) ... ok
test_review_missing_link_rejected (__main__.ReviewTests.test_review_missing_link_rejected) ... ok
test_review_package_guard_sees_new_scripts (__main__.ReviewTests.test_review_package_guard_sees_new_scripts) ... ok
test_review_retargeted_private_link_rejected (__main__.ReviewTests.test_review_retargeted_private_link_rejected) ... ok
----------------------------------------------------------------------
Ran 7 tests in 0.075s
OK
PASS: actual report methods reproduce old starvation; status-first scheduler delivers check-ins and requires 30s without combat or actual visible contacts before negative reports
PASS: actual actor group lookup retains controlled character membership when seated/inherited vehicle agents differ; missing control or parent refuses
.................
----------------------------------------------------------------------
Ran 17 tests in 3.105s
OK
PASS: actual convoy motion thresholds, native-only proof boundaries, physical cargo/crew ownership and pre-launch runner restrictions
PASS: actual filled rotated-footprint TraceBox and nine terrain/water samples; broad tree/cable bounds alone accepted, actual collision/nonfinite trace refused, nonzero sweep and ENTS/OCEAN flags, bounded diagnostic query and reset
PASS: actual road interpolation/projection/orientation, six35m starts,200m forward tail, preserved bends, short/far/degenerate/nonfinite/overdense/hairpin refusal and deterministic candidate ties
PASS: actual authenticated convoy dispatch, active/ready admission gates, canonical receipt, safe unconsumed preflight retry, pool refusal, retained partial failure and consumed no-retry
PASS: actual native readiness exact membership, one-time per-vehicle ledger admission/reservation, partial readiness retry without duplicate records and one-pass56-item cargo allocation without replenishment
PASS: actual per-vehicle readiness reasons, native agent/activity counts, intended-seat diagnostics, five-second throttle and read-only observation
PASS: actual convoy dispatch validates before receipt consumption, consumes once before native mutation, retains all12 partial-failure paths, accepts the selected non-USSR enemy, and allocates exact19 bodies without capacity shrinking
PASS: own memberless prefab disables automatic spawn before initialization; actual admission rejects populated, immediate or authored-slot templates before finite crew creation
PASS: actual native seated-group arrival outside35m, native waypoint removal, idempotent advance, and convoy waypoint idempotence/arrival/deadline, missing/dead/captured/reparented crew refusal, failed native waypoint release, original vehicle/member preservation and no replacement
PASS: actual convoy receipt identity/one-use, shared60-body and128-formation caps, outstanding/native-ledger accounting, exact19-body composition, source reuse, mode/client guards and no consumed receipt refunds
PASS: actual supply route cycling/arrival/stops, finite startup bounds, contact freshness, dismount hold, quiet interval, interrupted boarding, timeout and lost-truck release
PASS: moving-convoy perception boundaries and scoped individual/group abandonment priorities
PASS: actual body observer enforces owned physical roster, local death-only candidates, native trace gating, budget/cadence/caps, immutable body-only snapshots, radio retries and confirmed suppression
PASS: own initial roster, explicit retained corpse evidence, unconscious/missing/ref transfer guards, fixed strength, no replacement adoption, detached samples and surviving radio sender requirement
PASS: delivered-only status snapshots, two missed check-ins/reply deadline, last reported coordinates, episode/replay guards, confirmed-loss idempotence and 256-record cap
PASS: actual assignment cancellation/release preserves radio ownership, native waypoint lifecycle and failed-order retry boundaries
PASS: actual force ledger, finite casualties/identity/cap, routes/arrival/elevation/overshoot, server and physical guards, staggered 256-record simulated hour without world queries
PASS: actual enemy eligibility, scoped native skill floor/reset/restoration, one-roll inventory issuance, completion/failure, timeout quarantine, actor capture and terminal stop; native inventory runtime unproven
PASS: actual equipment coordinator registration dedupe, startup delay, five member scans, finite component retries, unregister/stop terminal behavior and 256-group bound
PASS: actual objective heading/threat/approach rules, persistent doctrine weight, fresh-contact coverage invalidation, stale-sweep rejection and atomic radio retask ownership
PASS: actual bounded delivered-negative coverage, replay/freshness/expiry/invalid guards, oldest eviction, small-circle and nearest-unswept selection, reserved-cell exclusion and cleanup
PASS: actual bounded pursuit roles/objectives/scores, stale search degradation, physical/busy/home guards, finite lifetime and two-bearing escape gap; no hidden player reads or spawning
PASS: actual HQ memory rules/service preserve delivered snapshots, chronology, replay bounds, decay, motion limits, identity and negative-search revisions
.......
----------------------------------------------------------------------
Ran 7 tests in 0.025s
OK
PASS: actual session Tick + journal router delivers each grant completion and new HQ line once, without repeats on empty/unavailable feeds or unauthorized ticks
.....
----------------------------------------------------------------------
Ran 5 tests in 0.278s
OK
PASS: actual current-controller/admin/mode authorization, per-round anti-replay, token-rotation refusal, command/snapshot throttles and client scope; owner-only replies and player-tool cleanup wiring
PASS: mission provider registration is idempotent, optional dispatch is ordered, status aggregates, journals preserve cursors, aliases stay with their addons and topic help is bounded
PASS: actual menu command routing covers all eleven settings, rejects unsupported keys, gates companions, and matches unique authored widgets
PASS: actual admin body authorization, god restoration, vanilla item deposit, callback completion/failure, timeout quarantine and stop/revocation paths
PASS: same-body revoke/regrant preserves pending insertions and timeout quarantine; new-body binding isolates late callbacks and never inherits god mode
PASS: actual Intel commands distinguish status/start/failure, preserve authorization gate and reject malformed requests; spent ledger is idempotent, server-only and bounded
PASS: actual reroll snapshot, authority, cancellation, ownership, accepted operations, quarantine, bounded work and stop methods; no native runtime claim
PASS: production Intel feedback coalescing, rough secrecy, rate limit, bounded dedupe, local/remote delivery and round cleanup; native UI/RPC not exercised
PASS: actual per-squad bounded report selector rotates visible targets, survives ordering/turnover, records only queued attempts, and preserves radio intake ordering
PASS: actual action denial/clearing, server request failure, single submitted-result feedback, current rescuer identity and terminal/stop suppression; native UI/RPC pending
PASS: actual physical denial precedence and transport-seat occupancy/reservation/access/lock checks
PASS: actual initial admission exhaustion and ServerTick grace; new/pending/empty/controller/life guards, normal death preserved
......................
----------------------------------------------------------------------
Ran 22 tests in 0.276s
OK
......................
----------------------------------------------------------------------
Ran 22 tests in 27.219s
OK
..................
----------------------------------------------------------------------
Ran 18 tests in 3.077s
OK
.........
----------------------------------------------------------------------
Ran 9 tests in 2.379s
OK
...............
----------------------------------------------------------------------
Ran 15 tests in 1.269s
OK
PASS: actual field result/braking observer and Chat dispatch rules; one finite fixed candidate, deferred callback failure and guarded cleanup; no native measurement
PASS: actual opt-in terrain audit records one fixed1681-point grid, preserves original survey refusal/success and exact no-allocation scope; malformed heights stop without retry; no native data acquired
....
----------------------------------------------------------------------
Ran 4 tests in 0.729s
OK
PASS: actual field PI/ramp/vector caps, antiwindup, braking hypothesis, immutable admission limits and segment bounds; no native physics tested
PASS: actual100m whole-field survey sampling/4096cap, rotated coverage, all-node terrain and native trace refusal; original certificate lineage retained; no native qualification
PASS: actual QualifyField preserves original identity/footprint/time, orders complete surveys before issuance, and refuses failed stages/moved body/expired or changed world; native boundaries faked
PASS: WORKBENCH first-refusal diagnostics preserve ordinary predicates, query order/count/budget and opt-in scope; no native logging run
PASS: actual field startup delegation, immutable lease/target, braking/settling/cancel transitions, early abort, callback scope, physical terminal policy and shared landing demand; native boundaries faked
PASS: actual inherited airborne pre-CLIMB cancellation enables verified native autohover once, refuses failed enable and never writes after capture
PASS: actual Core maintenance/default/tick/stop methods; empty/populated authority, terminal reentry, no tactical resume or new scheduler; native boundaries substituted
PASS: actual finite registration, unique claims/tokens, retention/cancel/stop, readiness gating, capture/expiry retirement and bounded cross-kind order history and typed field/route construction; native boundaries faked
PASS: actual WORKBENCH route observer returns exact retained route subtype and refuses absent/field controllers
.....
----------------------------------------------------------------------
Ran 5 tests in 0.695s
OK
......................
----------------------------------------------------------------------
Ran 22 tests in 0.195s
OK
................
----------------------------------------------------------------------
Ran 16 tests in 11.109s
OK
......
----------------------------------------------------------------------
Ran 6 tests in 0.021s
OK
PASS: actual production bridge lookup, lease/world/mode/seat/capture guards, no allocation, native super ordering and read-only fixture hooks
...............
----------------------------------------------------------------------
Ran 15 tests in 0.059s
OK
.............
----------------------------------------------------------------------
Ran 13 tests in 5.440s
OK
PASS: actual route gain/caps/braking, callback selection, old landing/cancellation control and matching read-only telemetry
..............................
----------------------------------------------------------------------
Ran 30 tests in 0.453s
OK
..............
----------------------------------------------------------------------
Ran 14 tests in 0.213s
OK
.........
----------------------------------------------------------------------
Ran 9 tests in 0.127s
OK
PASS: actual gate observer binds native registered action/context and current life, reads accumulated progress, refuses stale bindings and never revives outside original bounds
PASS: actual read-only look observer methods enforce explicit scope, pinned native camera/body/identity, normalized pose, terminal cancellation and original sample/time bounds
...........
----------------------------------------------------------------------
Ran 11 tests in 0.069s
OK
.......................
----------------------------------------------------------------------
Ran 23 tests in 0.042s
OK
PASS: actual initial WAITING task/guide copy, configured duration, unchanged interruption and rounded progress; native task assertion pending
........
----------------------------------------------------------------------
Ran 8 tests in 0.012s
OK
PASS: actual inventory adapter scope, grid placement, sole compatible host, refresh reuse, rollback, foreign hierarchy refusal and exactly-once native delegation; native compatibility pending
.................................................................................
----------------------------------------------------------------------
Ran 81 tests in 0.559s
OK
......
----------------------------------------------------------------------
Ran 6 tests in 0.078s
OK
..............
----------------------------------------------------------------------
Ran 14 tests in 0.002s
OK
...........
----------------------------------------------------------------------
Ran 11 tests in 0.092s
OK
.........
----------------------------------------------------------------------
Ran 9 tests in 0.362s
OK
PASS: actual observer nonce, admission pins, baseline/menu sequencing, snapshots, bounded clocks/samples, cleanup and one-attempt latch; native untested
PASS: actual corridor caps/height/hold and whole-rectangle survey bounds, terrain refusal, native trace refusal and exact certificate lineage; native route unqualified
PASS: actual route entry, fixed corridor/target, hover hold, cancellation landing freeze, shared lease/capture/deadline gate and unchanged native startup/tick sequence
PASS: finite opt-in route fixture, original native input order, meaningful physical-arrival evidence and guarded cleanup; no native launch
PASS: actual Chat route step result dispatch and scoped completion/cleanup wiring; six real early-parser refusal paths leave no prefix/profile output
PASS: actual retained-service fixture entry, immutable controller/token/deadline/count bindings, observer getter and cleanup ownership ordering; native route validation pending
PASS: actual measured cancellation gate, one-shot retained service Stop, no premature drain, immutable lease, fresh real controller readback and separate physical cancellation result policy
PASS: actual rough-intel objective selection, exact precedence, source grid dimensions and unchanged other-phase dispatch; native UI pending
.................................
----------------------------------------------------------------------
Ran 33 tests in 0.105s
OK
...............
----------------------------------------------------------------------
Ran 15 tests in 0.036s
OK
PASS: actual preparation status scope, persistent updates, spinner restoration, placeholder replacement/deletion/destruction, native observation persistence/timeout; rendering remains native-pending
PASS: actual guide/observer monitors retry native refusal, cache successful delivery, deduplicate and preserve living/preparing/spectator boundaries; native UI not exercised
PASS: actual native-end shutdown, existing terminal snapshots, reentrancy, unchanged native end data and stale preparation guards
....
----------------------------------------------------------------------
Ran 4 tests in 1.603s
OK
PASS: actual three-state result wording and UI refresh; stale winner IDs never manufacture escape
...........
----------------------------------------------------------------------
Ran 11 tests in 0.127s
OK
PASS: actual immutable target, bounded autohover demand, drift refusal, five-second hold and unchanged qualification/deadline
PASS: actual admission attempt budget bounds blocked/missing prerequisites; preparation, spent life and async pending remain protected
PASS: actual action permission matrix unchanged; useful phase/intel/consciousness denials, stale reason cleared, native door denial preserved; no native UI claim
.....
----------------------------------------------------------------------
Ran 5 tests in 0.250s
OK
PASS: actual aircraft cancellation/stage rules, ground-only completion, expiry/capture faults, input ownership and no physical shortcuts
PASS: actual exact-instance single-use qualification, native-clock staleness/movement refusal, footprint bounds and ownership-safe ground/fault cleanup
PASS: actual optional screenshot helper flag/identity/world/life revalidation, one queued attempt, delayed capture and mission/world cleanup; no native image/presentation claim
PASS: actual yard diagnostic exact registered prison ownership, eight native-bound corner projections, no root-sibling escape, bounded duplicate/deep/wide hierarchy traversal; native projection/mask still unmeasured
PASS: actual CurrentActor, SpawnPosition and observer-selection methods reject pending/unregistered/replaced/recycled/foreign/dead bodies; canonical selection/cycling, unconscious following and prison/geometry fallback preserved; native boundaries adapted
PASS: actual native-map fixture ownership, cleanup and callback evidence fail closed; native execution remains separate
PASS: actual shared-map callbacks bind exact map/config/root, preserve replacement UI/camera, defer focus, and remove only owned delayed work
PASS: actual Intel/HQ methods and one-shot qualified readiness handoff deliver late actors once; duplicate readiness, accepted spawn, pickup/drop, death and original negative rolls do not mint assignments
PASS: Workbench-only read accessor rejects unknown/nonserver identities; Chat observes all distinct ready crew before existing shell-depletion mutation
PASS: actual native-event latch survives deselection, requires exact activity/order, detaches before cleanup, preserves failure/timeout and never infers completion from physical shot count
.........
----------------------------------------------------------------------
Ran 9 tests in 0.115s
OK
PASS: actual refresh-fixture gates pin immutable observations/actual downlinks/original activity, reject unaccepted or relabelled commits, stop queueing early and require all queued contacts claimed before replay
..........................
----------------------------------------------------------------------
Ran 26 tests in 0.221s
OK
PASS: actual refresh scheduler/delivery/cancellation/projectile methods reject interrupted or replayed reports, retain committed ownership, preserve immutable snapshots/aim geometry and isolate stopped or replaced orders; native radio/crew behavior remains separate
.....................
----------------------------------------------------------------------
Ran 21 tests in 0.037s
OK
...........
----------------------------------------------------------------------
Ran 11 tests in 0.037s
OK
PASS: actual full-salvo gates require eight fresh committed physical launches, natural closure and exact finite inventory; reject partial/extra/replayed events
PASS: actual reason/availability guidance and refresh matrix; no-target copy omits cycling, hint retry retained, existing command/admin paths unchanged; native UI pending
................usage: test_native_package.py [-h] [--project {core}] --session SESSION
--compat COMPAT [--steam STEAM]
[--timeout TIMEOUT]
[--external-addons EXTERNAL_ADDONS]
[--silent-workbench | --exit-after-init]
[--continue-on-failure]
test_native_package.py: error: argument --exit-after-init: not allowed with argument --silent-workbench
................................
----------------------------------------------------------------------
Ran 48 tests in 11.221s
OK
.......
----------------------------------------------------------------------
Ran 7 tests in 0.314s
OK
..............
----------------------------------------------------------------------
Ran 14 tests in 2.085s
OK
....
----------------------------------------------------------------------
Ran 4 tests in 0.426s
OK
....
----------------------------------------------------------------------
Ran 4 tests in 0.082s
OK
PASS: actual finite-courier age, token, exact ownership/callback and delivered-status admission reject stale, replayed, captured, canceled and ambiguous work
PASS: actual native-gun ownership gate rejects player/foreign/replaced/dead occupant, faction change, missing seat and missing registry
PASS: four-battery courier selection preserves pending trip/report/transfer identity, skips unavailable crews, and selects the next depleted battery without new stock
PASS: 64 bounded distinct storage candidates; native gates, five-store barrier and finite-stock ownership retained; native placement pending
PASS: 128 coarse+80 local refinement+169 airport grid candidates retain all native clearance gates; real terrain untested
PASS: actual prison registration/crossing policies reject missing/duplicate/destroyed initial gate, incomplete ownership/scan, outside-only body, jumps and stale samples; physical exit independent of later gate damage
PASS: actual prison door execution blocks direct AI/UI bypass while locked and delegates unchanged native action once after unlock and permission approval
..................
----------------------------------------------------------------------
Ran 18 tests in 2.557s
OK
.....
----------------------------------------------------------------------
Ran 5 tests in 1.430s
OK
PASS: native local-admission snapshot rejects changed life/key/body/participant/pending state; authentication is not simulated
PASS: actual mortar report ledger prevents duplicate response after cancellation, expiry and interleaved reports; native scheduler separate
.........
----------------------------------------------------------------------
Ran 9 tests in 0.016s
OK
....
----------------------------------------------------------------------
Ran 4 tests in 0.233s
OK
PASS: actual aim renewal requires fresh same-report solve and original-command equivalence; native firing untested
........
----------------------------------------------------------------------
Ran 8 tests in 0.014s
OK
PASS: actual startup/generation/ownership/timeout/callback policies and native-counter wait; integration preserves one-shot allocation and pending-crew cancellation
PASS: actual probe binds native events to fresh immutable commits, permits delayed emission, rejects unrelated expiry closure and premature stop
PASS: actual noSplash Load body requires both explicit diagnostic and noSplash, preserves vanilla otherwise, and handles repeated Load/reload
PASS: actual fixture method permits one native resilience operation and restores either prior protection state, including failure paths
PASS: actual safe-exit boundary policy, native action/door selection, stop/cache cleanup, separate old mechanism and opt-in runner contracts
PASS: actual one-shot deadline/stability policies and preparation ownership, fuel, cleanup integration contracts
PASS: pending-only cancellation retires copied instance intent, preserves physical/control actors, and stops once
PASS: actual short-cast hit, upward support normal, no self support and no dynamic support
PASS: actual committed-ticket structure preserves reservation after death, rejects missing bodies/seats and ends at observation expiry
PASS: actual pending callback expires an empty-server reservation once, preserves its full lease, and cancels on completion/Stop
PASS: rescue lease expiry/reordering, fresh five-second settling, independent rescue ranges and grounded upright aircraft motion boundaries
PASS: requested guard population requires complete physical conscious membership before deadline
....................................
----------------------------------------------------------------------
Ran 36 tests in 0.020s
OK
..........
----------------------------------------------------------------------
Ran 10 tests in 0.003s
OK
.....
----------------------------------------------------------------------
Ran 5 tests in 1.057s
OK
PASS: authored radio/optional-site bounds and physical horizontal/vertical boundaries
...
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
PASS: all phase transitions, terminal states, defence boundaries, stale/future observations, intel discovery
PASS: Core document-discovery alias, companion-only alias exclusion, strict integer parsing and setting boundaries
PASS: player admission phase/life/identity/controller matrix, preload displacement limits, pending reservation overlap and owner exclusion
PASS: actual gate and pre-inventory document guards reject noncanonical/faction/life/disconnect/server mismatches; canonical reconnect and unconscious carried intel preserved
PASS: WB-only native fault injection restores both body mutations before checks/returns and requires eligible held-document negative/positive proof; runtime pending
PASS: actual discovery coordinates disclose stable 500m cell center until identified, then exact point, including negative/boundary coordinates
PASS: actual local admission context/selection/latch, same-round late identity, replacement/mode failure, fresh round and untouched network path
PASS: prison search packs 16 unique 3m-spaced inside-wall centers, prioritizes inner/edge positions and never bypasses clearance
PASS: physical body occupancy rejects overlap, permits diagonal neighboring slots, and excludes own body and unrelated broad-phase bounds
PASS: recovery state excludes dead bodies, preserves reservations, requires controlled rescuers and distinguishes empty/all-dead teams
PASS: every minute round-trips, malformed clocks rejected, defaults limited to added keys, progression bounds and day duration aligned
PASS: native settings policy matches calendar boundaries 1900-2050, date/profile parsing is strict, authored defaults preserve old worlds
.....
----------------------------------------------------------------------
Ran 5 tests in 0.645s
OK
.
----------------------------------------------------------------------
Ran 1 test in 0.425s
OK
PASS: radio authorization/discovery/phase matrix, exact distance limits, defender handover, interruption, empty samples, clock regression and duration boundary
PASS: actual radio feedback policy, initial wait, interruption persistence, resumption and terminal/new-round reset
...............
----------------------------------------------------------------------
Ran 15 tests in 2.249s
OK
..............................................
----------------------------------------------------------------------
Ran 46 tests in 0.972s
OK
PASS: legacy values preserved, unsupported fields reported, invalid data rejected, existing files protected, runtime bounds aligned
PASS: real-carrier shortest-hop paths, 500m boundary, three-hop cap, no-manpack failure, three-second originating-call interruption, unchanged downlink hop timing, completed-hop survival, interrupted final uplink, radio loss, capture, motion, timeout, reset and network bounds
PASS: migrated aircraft availability policy (controller migration still pending)
PASS: migrated salvo offsets are deterministic, spread and bounded (native firing and complete salvo qualification are separate)
PASS: 32 prefabs have unique saved root entity IDs
PASS: 299 original script entries tracked across 18 unfinished responsibilities
PASS: 1 isolated addons, acyclic dependencies, 51 unique resources, exact vanilla/authorized external references
All repository checks passed. Native compilation and multiplayer tests are separate requirements.
@@ -0,0 +1,10 @@
{
"addons/core/Scripts/Game/ERR/00_Core/ERR_AdminMenu.c": "b9cf9b7e6f3135bff2fe2ad58d90bcb696936e984fb0c285172be627fccfeda5",
"addons/core/Scripts/Game/ERR/00_Core/ERR_ContentMenu.c": "c82b173496e7524b4570b2afc5493cb970252a19aed740a53011988db7700a01",
"addons/core/Scripts/Game/ERR/00_Core/ERR_FactionMenu.c": "b7dd477548322e674d9492fd8d037f787dc880ec7bf0e73dc89a2bf7f93cfdb5",
"addons/core/Scripts/Game/ERR/20_Intel/ERR_IntelEvidence.c": "6bbf8d3b83e2c09fd9a23a9a5e5e11d7c29af2e618116bee613562fc45af2b33",
"addons/core/Scripts/Game/ERR/10_AI/ERR_BodyRecovery.c": "3aa41a8694e6409577fb07ef23a8d71ea104696e9e468a00c19a2a2b7e70172e",
"addons/core/UI/layouts/ERR/AdminMenu.layout": "e43f70720d4a33d37ae7f41c8d59aec753b8bbfb8c491b311850f6f87fff314b",
"addons/core/UI/layouts/ERR/PauseModsButton.layout": "393de5099e8aa5c849b95ed6955c09348f740d318f39f08c46768d1468cd4a0c",
"addons/core/Scripts/Game/ERR/00_Core/ERR_NativeAdminMenuProbe.c": "4bdbaf54a9e325f631eb6f60003b3fceb7b1986148ca51100f5b1f4d765a794b"
}
@@ -0,0 +1,21 @@
# HQ support native evidence — 22 September 2026
These excerpts retain successful gameplay assertions from isolated Workbench runs.
The accompanying hashes identify relevant addon sources at each launch; earlier
runs are not represented as a full acceptance test of later code changes.
- `airborne-native5`: eight original actors dropped and landed, both original teams
released, same-airframe airport return/service and second eight-person departure.
The fixture supplies a controlled drop order and shortens the post-drop cover wait.
- `recovery-native3`: physical corpse retention, ordinary delivered body sighting,
special recovery team, local inspection, radio report and compromised-site response.
- `cargo-native7`: ordinary low-ammo report and downlinks, physical loading/flight/
landing, squad approach and three exact native magazine transfers. No body sighting
occurred in this run, so the combined cargo-plus-recovery completion condition was
not reached. The run was stopped after the handover evidence was captured.
Repository checks and the production policy regressions passed. Native compilation
passed for the final cargo run. Strict runner shutdown can encounter a transient
exiting Wine process with empty argv; prefix idleness was verified separately before
any subsequent source edits. This evidence does not certify dedicated multiplayer,
all factions, packet loss, spent rocket-pod reload or a complete cargo repeat trip.
@@ -0,0 +1,14 @@
script.log
18:43:07.639 SCRIPT : ERR SMOKE PASS: air assault eight original passengers physically seated before takeoff
18:43:40.032 SCRIPT : ERR SMOKE PASS: air assault controlled order finds real clear landing corridor
18:44:52.363 SCRIPT : ERR SMOKE PASS: air assault same eight actors landed and two original groups released; original aircrew retained
18:44:52.364 SCRIPT : ERR SMOKE PASS: air assault post-drop cover active
18:48:28.438 SCRIPT : ERR SMOKE PASS: air assault same helicopter returned, serviced and departed with another native squad
18:48:28.438 SCRIPT : ERR SMOKE PASS: air assault separate cargo helicopter waiting at airport
18:48:28.438 SCRIPT : ERR SMOKE COMPLETE: native airborne cycle completed
rereintroduced-hq.log
#260 t=201.2s M0 AIR TEAM LANDED original team searching carried HQ order at <4884.44, 31.8356, 11360.4> [session=1790095280-1]
#262 t=204.2s M0 AIR TEAM LANDED original team searching carried HQ order at <4884.44, 31.8356, 11360.4> [session=1790095280-1]
#263 t=205.2s M136 ORDER QUEUED AIRCRAFT RELOAD from report M0; cover complete; return to airport for another squad and ammunition [session=1790095280-1]
#482 t=418.4s M0 AIRFIELD SERVICE Airport: 1 services; gun rounds=23998 fuel=11354; ammo trips=0; original airframe and crew retained [session=1790095280-1]
@@ -0,0 +1,14 @@
{
"addons/core/Prefabs/ERR/AssaultParachute.et": "b556997989605e2a05982418b7e9f26d12d427eb3ea6e3bc50e85c67ea7aa4b8",
"addons/core/Prefabs/ERR/AssaultParachute.et.meta": "e9dea2d533ad1ce6ce689e0e2815c97a6382e1b90c35ce1efa88a885527e8e18",
"addons/core/Scripts/Game/ERR/00_Core/ERR_AirfieldPlacement.c": "79d9baf40ed4890e129ec50f6852a6b86e3920390afda51cefe30daa045856a2",
"addons/core/Scripts/Game/ERR/00_Core/ERR_NativeAirfieldMarkersProbe.c": "593e59664dbd7330b52674e5d4cc7b70db588cb75a1259ed808b74602501d541",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AirAssaultLoad.c": "6bc62ac73f4a682b2a3dfe0aee5a5f1f706d28bb1bd7739e601ddd02a9338696",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AirAssaultSystem.c": "b9d62818e3a7ab712fa2327e2f3341c0324d6c1d0703d563c7f58764d5c5f32a",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AirSupportPolicy.c": "ed3e9a362583b092d840770eb8a4d2c68f22d376c21733803324765ae49d8eea",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AirfieldSupport.c": "dbe9cbc9b326a27778841e941b745b7d96a420b47306f95d2aaa8c6f97c4f9dc",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AssaultParachute.c": "a93c996059e7166988e9d1b0b498cbfd36f19a1cf8520cb4e9215a8884752e18",
"addons/core/Scripts/Game/ERR/10_AI/ERR_NativeAirAssaultProbe.c": "edf1e1e5393e10b6df40ed13fa2e33ad2a9c3cc77c1fb24852ee10c621fe9a41",
"addons/core/Scripts/Game/ERR/10_AI/ERR_ReconFlightComponent.c": "42cda3ea67f17c29dcd0c10f93475448e66284fb484b5125fb7dff55ef3629ef",
"addons/core/addon.gproj": "adee1fe3689108da7e2c0f4e7288a2f414d74208477ed5f9e4efad1c01030aa5"
}
@@ -0,0 +1,33 @@
script.log
19:33:17.224 SCRIPT : ERR SMOKE PASS: air logistics native corpse retention; actual issued document now absent
19:34:21.239 SCRIPT : ERR AIR CARGO ACCESS: enabled=1 contexts=85
19:34:21.239 SCRIPT : ERR AIR CARGO ACCESS: storage context=door_l01_door rootOwner=1 transformed=1 point=<4787.85,29.8604,11416.8>
19:34:24.279 SCRIPT : ERR SMOKE PASS: air logistics native infantry low-ammunition request setup; waiting for real radio/HQ dispatch
19:38:31.807 SCRIPT : ERR SMOKE PASS: air logistics aircraft transported airport-loaded magazine and native inventory transfer confirmed
rereintroduced-hq.log
#171 t=109.3s M64 ORDER QUEUED AIR AMMUNITION from report M47; load twelve magazines and fly to reported unit position <4951.63, 29.7016, 11342.8> [session=1790098354-1]
#187 t=124.5s M0 AIR AMMUNITION DEPARTURE native cargo aboard; destination from delivered unit request [session=1790098354-1]
#188 t=125.5s M0 HELICOPTER STATUS TAKEOFF: ammunition helicopter awaiting HQ order; position=<4789.08, 28.2043, 11414.7> [session=1790098354-1]
#189 t=140.7s M0 HELICOPTER STATUS TAKEOFF: ammunition helicopter awaiting HQ order; position=<4789.08, 59.858, 11414.7> [session=1790098354-1]
#190 t=155.8s M0 HELICOPTER STATUS TAKEOFF: ammunition helicopter awaiting HQ order; position=<4789.08, 133.749, 11414.7> [session=1790098354-1]
#196 t=171s M0 HELICOPTER STATUS LANDING: landing at airfield; position=<4808.99, 149.218, 11377.2> [session=1790098354-1]
#197 t=186.1s M0 HELICOPTER STATUS LANDING: landing at airfield; position=<4831.26, 147.225, 11335.3> [session=1790098354-1]
#198 t=201.3s M0 HELICOPTER STATUS LANDING: landing at airfield; position=<4834.18, 129.562, 11329.9> [session=1790098354-1]
#199 t=216.5s M0 HELICOPTER STATUS LANDING: landing at airfield; position=<4834.25, 112.119, 11329.7> [session=1790098354-1]
#272 t=231.7s M0 HELICOPTER STATUS LANDING: landing at airfield; position=<4834.25, 94.6399, 11329.7> [session=1790098354-1]
#291 t=246.9s M0 HELICOPTER STATUS LANDING: landing at airfield; position=<4834.25, 76.326, 11329.7> [session=1790098354-1]
#292 t=262s M0 HELICOPTER STATUS LANDING: landing at airfield; position=<4834.25, 58.6636, 11329.7> [session=1790098354-1]
#293 t=277.1s M0 HELICOPTER STATUS LANDING: landing at airfield; position=<4834.25, 40.9712, 11329.7> [session=1790098354-1]
#299 t=292.2s M0 HELICOPTER STATUS LANDING: landing at airfield; position=<4834.25, 32.9493, 11329.7> [session=1790098354-1]
#305 t=304.3s M0 AIR AMMUNITION RENDEZVOUS nearest original recipient=110.559m; confirmed magazines=0 [session=1790098354-1]
#306 t=319.5s M0 AIR AMMUNITION RENDEZVOUS nearest original recipient=96.7928m; confirmed magazines=0 [session=1790098354-1]
#307 t=334.6s M0 AIR AMMUNITION RENDEZVOUS nearest original recipient=46.0027m; confirmed magazines=0 [session=1790098354-1]
#310 t=349.8s M0 AIR AMMUNITION RENDEZVOUS nearest original recipient=3.20373m; confirmed magazines=0 [session=1790098354-1]
#314 t=364.9s M0 AIR AMMUNITION RENDEZVOUS nearest original recipient=3.20379m; confirmed magazines=3 [session=1790098354-1]
#315 t=380.1s M0 AIR AMMUNITION RENDEZVOUS nearest original recipient=2.45618m; confirmed magazines=3 [session=1790098354-1]
#316 t=395.2s M0 AIR AMMUNITION RENDEZVOUS nearest original recipient=2.4561m; confirmed magazines=3 [session=1790098354-1]
#368 t=410.3s M0 AIR AMMUNITION RENDEZVOUS nearest original recipient=2.45622m; confirmed magazines=3 [session=1790098354-1]
#408 t=425.5s M0 AIR AMMUNITION RENDEZVOUS nearest original recipient=2.45609m; confirmed magazines=3 [session=1790098354-1]
#409 t=440.6s M0 AIR AMMUNITION RENDEZVOUS nearest original recipient=2.4562m; confirmed magazines=3 [session=1790098354-1]
#410 t=455.7s M0 AIR AMMUNITION RENDEZVOUS nearest original recipient=2.45659m; confirmed magazines=3 [session=1790098354-1]
@@ -0,0 +1,13 @@
{
"addons/core/Scripts/Game/ERR/00_Core/ERR_AirfieldPlacement.c": "79d9baf40ed4890e129ec50f6852a6b86e3920390afda51cefe30daa045856a2",
"addons/core/Scripts/Game/ERR/00_Core/ERR_NativeAirfieldMarkersProbe.c": "593e59664dbd7330b52674e5d4cc7b70db588cb75a1259ed808b74602501d541",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AirAmmoMission.c": "293a2c9f59e533768a37ef8c3b1609da1800a8bf9b4a8828aa8015bbd6be27a6",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AirfieldSupport.c": "c6d88ede0b1b6bac5a7075b6e2e783ccfa8850210aabd28bfa4bcdb698cc5f87",
"addons/core/Scripts/Game/ERR/10_AI/ERR_BodyRecovery.c": "73b00ff42f188503245d4b67a50d17a028a2071c3cbff5f2b6750441be647797",
"addons/core/Scripts/Game/ERR/10_AI/ERR_InfantryAmmoAccess.c": "ab4262f78d54782c5ecbf5fff4ebe3da16d72329658d7e18c0c35387dc8b3c7d",
"addons/core/Scripts/Game/ERR/10_AI/ERR_InfantryAmmoTransfer.c": "b398cbf166fe55dd2ff518a1ac028d87dc27edc225e25c1ca3703704a978d994",
"addons/core/Scripts/Game/ERR/10_AI/ERR_NativeAirLogisticsProbe.c": "befee1bd4838dd84847d09490c9dd82e2719db5cc0e6dd6aac8d0197b8e766fd",
"addons/core/Scripts/Game/ERR/10_AI/ERR_ReconFlightComponent.c": "d959749235758bb394543aef1c978ec1b3384850884df87e47ae4acc4affa537",
"addons/core/Scripts/Game/ERR/20_Intel/ERR_IntelEvidence.c": "c0a24e36f718b81dc631ee5bee03f3ef710ae6e0fc091bc2ca7ed05d0abbda6e",
"addons/core/addon.gproj": "adee1fe3689108da7e2c0f4e7288a2f414d74208477ed5f9e4efad1c01030aa5"
}
@@ -0,0 +1,16 @@
script.log
19:05:15.637 SCRIPT : ERR SMOKE PASS: air logistics native corpse retention; actual issued document now absent
19:06:22.931 SCRIPT : ERR SMOKE PASS: air logistics native infantry low-ammunition request setup; waiting for real radio/HQ dispatch
19:06:31.970 SCRIPT : ERR SMOKE PASS: air logistics special native recovery team searched body and delivered missing-intel report
rereintroduced-hq.log
#42 t=38.8s M0 BODY RECOVERY REQUEST delivered body sighting; search ordered at reported position <4895.11, 29.0835, 11869.3> [session=1790096676-1]
#49 t=38.8s M0 BODY RECOVERY TEAM special search team departing friendly site; bodies remain retained [session=1790096676-1]
#174 t=73.9s M49 ORDER QUEUED BODY SEARCH from report M0; inspect reported military body <4895.11, 29.0835, 11869.3> [session=1790096676-1]
#177 t=75.9s M0 BODY SEARCH PROGRESS nearest searcher=31.9729m; physical inspection required [session=1790096676-1]
#198 t=102.9s M0 BODY SEARCH COMPLETE local inspection complete; missing document report awaits radio [session=1790096676-1]
#199 t=102.9s M70 SUPPORT REPORT QUEUED searched body; missing documents=1 [session=1790096676-1]
#209 t=107.9s M0 INTEL COMPROMISE missing issued document concerns everon-mortar-1; defensive reinforcement requested [session=1790096676-1]
#217 t=138.1s M0 INTEL COMPROMISE missing issued document concerns everon-mortar-1; defensive reinforcement requested [session=1790096676-1]
#223 t=168.2s M0 INTEL COMPROMISE missing issued document concerns everon-mortar-1; defensive reinforcement requested [session=1790096676-1]
#224 t=198.4s M0 INTEL COMPROMISE missing issued document concerns everon-mortar-1; defensive reinforcement requested [session=1790096676-1]
@@ -0,0 +1,13 @@
{
"addons/core/Scripts/Game/ERR/00_Core/ERR_AirfieldPlacement.c": "79d9baf40ed4890e129ec50f6852a6b86e3920390afda51cefe30daa045856a2",
"addons/core/Scripts/Game/ERR/00_Core/ERR_NativeAirfieldMarkersProbe.c": "593e59664dbd7330b52674e5d4cc7b70db588cb75a1259ed808b74602501d541",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AirAmmoMission.c": "4b39eafbea7e53f4105635552c44823b56bae1e8c48c327df0a5995c766f60ef",
"addons/core/Scripts/Game/ERR/10_AI/ERR_AirfieldSupport.c": "347e642638f67fb6547e8e88bb47310663f404121526e69020422036af36c194",
"addons/core/Scripts/Game/ERR/10_AI/ERR_BodyRecovery.c": "b91d767d14627867f1d5e08e3d6cc8e5d53352ca75b56cc242aeefee911a1b4a",
"addons/core/Scripts/Game/ERR/10_AI/ERR_InfantryAmmoAccess.c": "917f9df36b93258a30b7af24b0ee52b65c5205405d8056bb721a9868010d64d1",
"addons/core/Scripts/Game/ERR/10_AI/ERR_InfantryAmmoTransfer.c": "b398cbf166fe55dd2ff518a1ac028d87dc27edc225e25c1ca3703704a978d994",
"addons/core/Scripts/Game/ERR/10_AI/ERR_NativeAirLogisticsProbe.c": "72065de413a64b20d23f31b74f2d0cfd467e87ee463310db80c4da02ed0b31df",
"addons/core/Scripts/Game/ERR/10_AI/ERR_ReconFlightComponent.c": "629abd79dec91982741621b24d2bad79d8f950a9a87bbe7a998d4a0451aa2bf1",
"addons/core/Scripts/Game/ERR/20_Intel/ERR_IntelEvidence.c": "dc5d4957d9b3bce9874a7b06073b03548bfd8e59b4ab04313a83aa7789768695",
"addons/core/addon.gproj": "adee1fe3689108da7e2c0f4e7288a2f414d74208477ed5f9e4efad1c01030aa5"
}
+46 -2
View File
@@ -1,10 +1,11 @@
{
"schema_version": 1,
"authorization": "User authorized RHS, WCS and BMP dependencies on2026-09-20; external assets remain in installed addons.",
"authorization": "User authorized RHS, WCS and BMP dependencies on2026-09-20; external assets remain in installed addons. Parachute Framework is required by the requested original paratrooper port and HQ-controlled drops (2026-09-22).",
"direct_ai_dependencies": [
"595F2BF2F44836FB",
"629B2BA37EFFD577",
"5E524E4FEECCA92B"
"5E524E4FEECCA92B",
"65930CB4CD0237B2"
],
"addons": {
"595F2BF2F44836FB": {
@@ -59,6 +60,14 @@
"629B2BA37EFFD577"
],
"project_sha256": "ad44151140adf62e99eaa639984c2b9c400be17481e934186d61c307b5221259"
},
"65930CB4CD0237B2": {
"title": "Parachute Framework",
"version": "1.2.0",
"dependencies": [
"58D0FB3206B6F859"
],
"project_sha256": "183fbb521382a95ad33af9efc547147a80241bd536a29d124c93064b5ae5e8bc"
}
},
"resources": {
@@ -91,6 +100,41 @@
"guid": "8D4BAA235F7EDBEA",
"addon": "595F2BF2F44836FB",
"verification": "Exact path/type/GUID record in installed owning resourceDatabase.rdb; read-only audit 2026-09-20"
},
"Configs/Factions/RHS_ION.conf": {
"guid": "CB76A36EACFBDF35",
"addon": "595F2BF2F44836FB",
"verification": "Exact path/type/GUID in installed owning resourceDatabase.rdb; read-only audit 2026-09-21. Faction keys and physical group slots checked in owning PAK."
},
"Configs/Factions/RHS_RF_MSV.conf": {
"guid": "627A8CDE681D223D",
"addon": "595F2BF2F44836FB",
"verification": "Exact path/type/GUID in installed owning resourceDatabase.rdb; read-only audit 2026-09-21. Faction keys and physical group slots checked in owning PAK."
},
"Configs/Factions/RHS_US_USMC.conf": {
"guid": "F33C7BF22CBF3A8A",
"addon": "595F2BF2F44836FB",
"verification": "Exact path/type/GUID in installed owning resourceDatabase.rdb; read-only audit 2026-09-21. Faction keys and physical group slots checked in owning PAK."
},
"Prefabs/Groups/BLUFOR/RHS_USAF/RHS_USAF_USMC_MEF/Group_USAF_USMC_MEF_FireTeam.et": {
"guid": "19843E954790DF28",
"addon": "595F2BF2F44836FB",
"verification": "Exact path/type/GUID in installed owning resourceDatabase.rdb; read-only audit 2026-09-21. Faction keys and physical group slots checked in owning PAK."
},
"Prefabs/Groups/INDFOR/RHS_ION/RHS_ION_COY/Group_RHS_ION_COY_StaticSecurityTeam.et": {
"guid": "516C8C7400DF2C4D",
"addon": "595F2BF2F44836FB",
"verification": "Exact path/type/GUID in installed owning resourceDatabase.rdb; read-only audit 2026-09-21. Faction keys and physical group slots checked in owning PAK."
},
"Prefabs/Groups/OPFOR/RHS_AFRF/MSV/Flora/Group_RHS_RF_MSV_Flora_FireGroup.et": {
"guid": "AB905EF799E0A0AE",
"addon": "595F2BF2F44836FB",
"verification": "Exact path/type/GUID in installed owning resourceDatabase.rdb; read-only audit 2026-09-21. Faction keys and physical group slots checked in owning PAK."
},
"Prefabs/DeployedParachutes/Core/DeployedParachuteMK4.et": {
"guid": "9ADD554959C09197",
"addon": "65930CB4CD0237B2",
"verification": "Exact installed owning resourceDatabase.rdb path/type/GUID and inspected native prefab/scripts, 2026-09-22."
}
}
}
+85
View File
@@ -0,0 +1,85 @@
# Generated starts and radio camps
Everon now chooses a new prison, radio camp and four mortar sites at preparation time. Other caches,
outposts retain their authored positions. The extraction helicopter uses the validated
Everon airfield pad (4800.953 / 11487.412), with no off-airfield fallback. The server
resolves the prison first, then the radio, before creating any site entities.
Joining clients receive the real replicated locations; intel keeps the same
stable destination IDs.
Site authors can use `RandomClear 1` on a prison, radio or mortar definition. `Heading`
sets the authored fallback heading; `RootHeight` offsets a composition above its
surveyed ground (the radio/table composition uses 0.8 m). Runtime placement never
rewrites the configuration file. Existing definitions default to authored sites.
Placement samples the island bounds and rejects water, obstructed footprints,
terrain varying by more than 0.6 m, nearby roads (12 m), and unsafe guard footing.
Prisons avoid physical runway/control-tower anchors by 1,500 m. The radio stays
at least 1 km from the prison and 300 m from other sites. The extraction pickup
must remain inside the prison-relative escape boundary with 100 m clearance.
Sampling yields after an 8 ms work budget, with a 30-second overall deadline and
12,000 candidate limit per site. The budget is checked between native terrain
queries, so a single engine query can exceed it. Authored fallback positions
must pass the same checks; otherwise preparation reports failure instead of
spawning an incomplete camp or waiting forever.
The existing prison composition, gate, backpack and guards move together.
Player slots and escape-boundary tests use the same rotation. Admission still
waits for physical guards, inventory and the client's nearby replicated scene.
Spawn clearance uses a filled standing-volume trace for scenery and actual
character positions for body spacing, avoiding false overlaps from rotated
entity bounding boxes. Pending reservations remain part of the clearance check.
The radio camp has a radio and table inside a full-size tent, with an antenna
and sandbag cover outside. Its complete guard squad permanently defends a 20 m
area around the radio and cannot be reassigned by virtual HQ. See
[radio camp security](radio-camp-security.md).
It retains the existing contact-extraction-HQ action and defence progression.
Partial intel displays a question mark at the centre of the containing 500 m
square. Exact identification changes it to a site icon at the real location.
The prison is always hidden. Notifications use the original Intel wording.
`/esc killais` is an administrator-only debugging command centred on the
administrator's current living prisoner. It applies lethal damage to AI
characters within 1,000 m in three dimensions, including friendly AI and seated
crews. Player-controlled and retained player-roster bodies are excluded, as are
vehicles and structures. Death callbacks run normally; the command does not
refill AI forces or manufacture HQ reports. `/esc help killais` explains it.
Four mortar sites each have a physical gun, four crew, finite shells and
targeting through the HQ radio-report chain. Sites are at least 1 km apart and
500 m from the prison. See [mortar intel and perimeter guards](mortar-intel-and-prison-map.md).
## Validation
`test_generated_sites.py` executes the actual bounded-search scheduler;
`test_debug_ai.py` executes kill eligibility. Existing player-tool, admission,
prison-slot and intel-feedback tests cover the changed boundaries.
`--project core --smoke generated-sites` opts into real randomized placement and
tests admission, hidden/identified markers, authenticated killais (including a
seated AI), and the radio objective. The `opening-tools` and `airfield-markers` outcomes also use the live site
definitions. Other Workbench smoke outcomes explicitly load
`Configs/ERR/Tests/LegacySites.conf` to retain their historical deterministic
fixtures, including the retired western cache and old extraction position.
Ordinary Workbench play and dedicated servers use the live definitions.
On 2026-09-22, the full `python3 tools/check.py` suite passed. The final native
`generated-sites` fixture passed 39 assertions at a randomized Everon start:
prison at approximately (5100, 9137), heading 89 degrees; radio at (5991, 5659).
It placed twelve physical prisoners inside the rotated prison, verified that
occupied body/wall positions still reject spawning, and checked admission with
stocked backpack, hidden partial-intel markers, exact
discovered coordinates, authenticated AI killing (including a seated passenger),
and the existing radio transmission objective. The runner confirmed unchanged
source inputs and complete process cleanup. Native diagnostics still include
external RHS/WCS localization and stock resource-keyword errors; the fixture had
no script/runtime failure. A captured camp view was inspected for radio/table,
antenna and shelter placement.
Local scripted fixtures do not establish ordinary input, remote-client
replication, or complete multiplayer acceptance. Dedicated-server validation is
still outstanding; this change has not been published or deployed.
The western guarded vehicle/cache site has been removed. The medical stash now
provides the second reachable source of radio intel; mortar logistics uses the
existing eastern outpost. See [airfield and map changes](airfield-extraction-and-map-icons.md).
+80
View File
@@ -0,0 +1,80 @@
# Hill scouts
Everon's `ScoutCount 10` creates ten independent, finite observation posts before
player admission. `ScoutCount` is a scenario-definition field (0–32; default zero
for existing authored/test scenarios). It does not depend on convoy settings.
The server samples island elevation, then surveys random dry standing points on
local crests. Posts must be at least 900 m apart, 600 m from the prison and 150 m
from other mission sites. Minimum elevation is 35 m or 18% of sampled island
maximum, whichever is higher. Eight terrain samples 150 m away must show a mean
drop of at least 6 m, with four at least 5 m lower. At least two of eight physical
350 m sight traces must be clear for 95% of their length. The character faces the
best surveyed view. Survey work is limited to 6 ms per preparation tick, 100,000
candidates and a 45-second real-time deadline. Unsupported terrain fails with a
specific preparation error instead of silently placing scouts in water/forest
obstructions or admitting fewer than requested.
Each post contains one native AI soldier, an indefinite defend waypoint with an
8 m radius, binoculars, a scoped sniper rifle, and a custom radio backpack with
real BaseRadioComponent/SCR_RadioComponent manpack capability. The pack uses the
Kolobok model, weighs 10 kg empty, and reserves 6 litres for ammunition. Compatible
full magazines are inserted into this exact pack until native capacity refuses
another. One operation per post can be outstanding. The deadline, callback
success, physical radio, binoculars and sniper rifle are checked before admission.
The tested SVD loadout fits 40 full spare magazines in the pack, in addition to
its native loadout ammunition. No ammunition is periodically granted afterward.
US and RHS_USAF use the native M21 sniper base; other enemy selections use the
native SVD sharpshooter base. Both the group and character receive the selected
enemy faction. The separate ScoutEast, ScoutWest and ScoutRadioPack prefabs are
intended extension points for additional faction-specific scout equipment. The
radio pack is a field-radio loadout, not a deployable player respawn point.
Scouts inherit the prison's initial AI freeze. On release they use native
RETURN_FIRE: hold fire while observing, engage when native group perception
considers them threatened, and return to holding fire when that threat ends.
They remain registered HQ observers but permanently reserved against tactical
reassignment, courier/resupply work, and assault/search orders. Generic startup
launcher, optic and radio fitting does not overwrite their specialist equipment.
The finite force ledger records one original soldier per post. Killed scouts are
never replaced; the mission owns and cleans up their groups and waypoints.
Reporting uses the existing clear-visual-contact capture and physical radio
uplink. Reports include observed coordinates, visible travel mode, weapon
categories (drawn weapons only, within the existing identification limits), and
nearby visible escapist count. Road status comes from the captured coordinate
against actual road width, segments and height, not the target's later position.
A scout retains at most 64 recent identity/observation snapshots. Two credible
same-target/same-source sightings 2–30 seconds apart supply an average horizontal
velocity, km/h speed and compass/azimuth direction. Changed travel modes,
implausible speed and stale/replayed observations cannot produce a motion
estimate. All data is frozen before the existing originating call/transmission
delays; removing the physical radio or losing the carrier interrupts that route.
No target inventories, hidden occupants or live player physics are inspected.
Validation: `tests/test_scouts.py` executes production terrain/road geometry,
observed-motion estimation and the finite admission state machine, including
pending inventory, timeout, client/stop guards and no replacement/refill after
completion. The full repository suite passed. The production `airfield-markers`
Workbench fixture additionally validates all ten physical bodies, complete
magazine counts and full native capacity, faction identity, manpack capability,
return-fire mode, permanent HQ reservation and inter-post separation. Native
results are recorded below. Dedicated multiplayer observation
and combat acceptance remain separate from these local Workbench checks.
The final native run on 22 September 2026 used
`/tmp/erri-scout-final/logs/logs_2026-09-22_17-04-55`. It completed 52 gameplay
assertions and 11 scout-specific checks, with zero script errors. Ten independently
randomized posts had full 40-magazine SVD packs, matching the preceding successful
layout in `/tmp/erri-scout-native3`. The full regression suite completed in
`/tmp/erri-scout-check2.log`; the final movement addition and affected HQ/intel
regressions were checked again afterward.
The runner's strict result was `cleanup-failed`, with `smoke-completed` recorded
before cleanup: it could not classify an exiting `enfMain` with an empty command
line. A subsequent escalated host-visible `assert_prefix_idle` passed. Existing
vanilla GUI/resource and external RHS/WCS localization errors also remain in the
logs. This is not a clean strict runner result or dedicated multiplayer acceptance.
No server deployment, Workshop publication or Git push was performed.
+93
View File
@@ -0,0 +1,93 @@
# HQ airborne support and recovery
HQ uses delivered sightings and friendly check-ins to decide on reinforcement.
A drop needs at least two sightings, confidence of 70% or better, uncertainty no
larger than 160 m, and a credible on-foot speed no greater than 6 m/s. Reports
older than 90 seconds are unsuitable. Sufficient nearby or already committed
infantry prevents the drop. An unmet need must persist for 45 seconds, reduced
to 20 seconds after two confirmed local losses. Committed drops have an eight
minute cooldown. Radio delivery and a clear real landing corridor are required;
a missing radio, changed memory, occupied airspace, or unavailable troops cancels
the order. No hidden player position supplies an HQ target.
Eight physical passengers board the search helicopter at the airport in two
four-person teams. The same actors transfer into Parachute Framework canopies
and become ordinary HQ infantry after landing. Passengers are not recreated at
the destination. A drop pass must have a suitable heading, at least 15 m/s speed
and 90–180 m terrain clearance. Drops are staggered two seconds apart.
The helicopter covers the order's area for five minutes after finishing its drop
pass, then HQ can radio an order to return. It lands at its original airfield,
services for 60 seconds, rearms mounted magazines and rocket pods, refuels and loads another
squad. The original aircraft and aircrew remain. The round has four attempted
passenger loads, 24,000 service rounds, 512 rocket-loading attempts and 12,000 fuel units; failed spawns and
losses are not refunded. An incomplete passenger drop retains surviving aboard
soldiers. The airport has a tent, supply box and service vehicle. Losing the depot
vehicle prevents subsequent service.
A separate helicopter waits at the airport for ammunition missions. The depot and
cargo helicopter prepare independently of the search helicopter departure timer. A delivered
low-ammo check-in (at most 30 small-arms rounds per soldier) requests assistance.
HQ reserves the receiving infantry and sends separate physical radio orders to
the crew and recipient. A quiet search task is interrupted only after the replacement
radio order arrives. The aircraft loads up to twelve magazines matching the
unit's native weapons, flies to a clear nearby landing pad, and lands. Native
inventory transfer requires the original recipient to reach the stopped aircraft;
there is no remote ammunition refill. Remaining cargo stays with the original
helicopter. Unresolved native inventory operations block a subsequent trip, and an
already submitted magazine is never submitted again. There are at most twelve
delivery attempts per round. Permanent site
guards are not pulled away for these rendezvous.
Each mortar fire order requests eight HE shells spread over an 80 m radius
(160 m diameter). Individual shells still require a current valid order, physical
ammunition, a usable crew, a ballistic solution, and clear friendly/settlement
safety checks. Thus eight is the requested salvo, not a promise to keep firing
after the crew dies or a friendly enters the impact area. Pending drops, descending
paratroopers and active helicopter supply landing zones exclude mortar impacts.
Mission enemy bodies are retained until a search and its radio report complete.
Native cleanup of a parent wreck is also blocked while it contains retained evidence.
A delivered body sighting dispatches a separate recovery group from a friendly
site. Searchers must reach the actual body, stop fighting, spend ten seconds
nearby, and pass a line-of-sight check. They compare the remaining physical
folders against the body's issued-document record. Document contents are assigned
while their owner is alive; pickup uses those same site IDs. Missing documents
make those sites potentially compromised. The resulting radio report can order
available infantry to defend them. This is a defensive hypothesis, not a new
sighting and not authorization for mortar fire. If the team or its radio is lost,
HQ receives no stolen-intel knowledge and the body stays retained. Once HQ receives
the completed search report and records its compromised sites, the corpse is
unblacklisted and scheduled for native cleanup after 300 seconds. A search without
a delivered report cannot release it; repeated delivery cannot reset that timer.
This retention applies to registered mission enemy AI, not player corpses.
`/esc hq heli show` includes airborne decisions, airport stocks and recovery status.
The combined addon now depends on **Parachute Framework** (`65930CB4CD0237B2`;
installed/tested input version 1.2.0). Framework code and assets remain external.
Validation, 22 September 2026:
- `python tools/check.py` passed, as did the updated native-context access regression.
- Native airborne fixture: eight original passengers boarded, deployed their canopies,
landed alive, and formed two original teams. The same helicopter returned, consumed
gun ammunition/fuel stock and departed with another eight passengers. The fixture
supplies a controlled drop order and advances the cover deadline after landing;
actual HQ selection and cover timing/target are tested separately as production policies.
- Native recovery fixture: a real issued document was removed from a real guard's
inventory, the guard died, and native garbage insertion was rejected. A normal
delivered body sighting spawned a separate team; that team reached and inspected
the body, then delivered the missing-document report to HQ.
- Native cargo fixture: real low-ammunition check-in, both HQ downlinks, twelve
airport magazine-loading attempts, takeoff, flight, landing, infantry approach,
and three confirmed exact-item transfers. Native Mi-8 storage access has 85
contexts and 38 actions at the cargo door; both bounded scans now admit it.
This run did not sight its separate randomly placed forensic body, so combined
fixture completion is not claimed. Recovery is evidenced by the earlier run.
[Native excerpts and source hashes](evidence/hq-air-support-2026-09-22/) retain the
scope of each run. Dedicated multiplayer, adverse network conditions, all faction
loadouts, spent rocket-pod reload and a complete cargo return/service/second-trip
cycle still need live acceptance. Airport stocks are finite service budgets, not
individual fuel-can/round entities. The current compromised-site response dispatches
infantry defenders; it does not construct new physical roadblocks.
+61 -1
View File
@@ -123,7 +123,7 @@
"source": "escapists-intel/Scripts/Game/EscapistsIntel/EI_IntelService.c",
"sha256": "0009786c543c2758dcd55d3d6936feca5641dd4c4b2ff820564a38815e4cca57",
"destination": "addons/core/Scripts/Game/ERR/20_Intel/ERR_IntelDiscoveryFeedback.c",
"changes": "Adapt team discovery notification behavior using successor location events, bounded coalescing and rough-location secrecy."
"changes": "Restore original partial, identified and exhausted-intel wording; adapt site-type nouns and retain successor reliable delivery, bounded coalescing and rough-location secrecy."
},
{
"source": "escapists-intel/Scripts/Game/EscapistsIntel/EI_IntelLifecycle.c",
@@ -154,5 +154,65 @@
"sha256": "9fb9a76ccaaff2a3c85cb6112ef5f6d272b3570bd4216d81c723c0f0c62cef84",
"destination": "addons/core/UI/layouts/ERR/AdminMenu.layout",
"changes": "Author successor settings/HQ/journal pages with vanilla widget inheritance and new resource identity; use owned menu layout as design reference."
},
{
"source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_ImprovisedPrisons.c",
"sha256": "e1b7dd3b7b45bc803e61e2031030d873101947def8b6a41fe450555e90d000b9",
"destination": "addons/core/Scripts/Game/ERR/00_Core/ERR_GeneratedSites.c",
"changes": "Adapt owned clear-ground terrain sampling, rotated trace volumes, road/airfield exclusion to asynchronous bounded successor site generation. No original mission dependencies; successor prison and vanilla radio camp."
},
{
"source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_AirRecon.c",
"sha256": "7e72c9eac0fce21865f09a923cbfd638c25939c8492b3e1e5dfdda1f1394f51e",
"destination": "addons/core/Scripts/Game/ERR/00_Core/ERR_GeneratedSites.c",
"changes": "Use owned physical runway/control-tower prefab classification for prison exclusion; no original reconnaissance service or dependency."
},
{
"source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_AirRecon.c",
"sha256": "7e72c9eac0fce21865f09a923cbfd638c25939c8492b3e1e5dfdda1f1394f51e",
"destination": "addons/core/Scripts/Game/ERR/10_AI/ERR_ReconAirports.c",
"changes": "Adapt incremental airport clustering, runway classification and clear departure-pad survey into the successor HQ-owned service."
},
{
"source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_AirRecon.c",
"sha256": "7e72c9eac0fce21865f09a923cbfd638c25939c8492b3e1e5dfdda1f1394f51e",
"destination": "addons/core/Scripts/Game/ERR/10_AI/ERR_AirReconSystem.c",
"changes": "Adapt original initial/loss cadence, one active aircraft and retained wrecks to mission escape phase, settings, ownership and finite force ledger."
},
{
"source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_AirRecon.c",
"sha256": "7e72c9eac0fce21865f09a923cbfd638c25939c8492b3e1e5dfdda1f1394f51e",
"destination": "addons/core/Scripts/Game/ERR/10_AI/ERR_ReconFlightComponent.c",
"changes": "Adapt airport takeoff, terrain-following, search/orbit, lost-contact search, return and player release; successor native clear perception and physical HQ radio pipeline. Excludes assault/rearm/recovery."
},
{
"source": "escapists-base/Scripts/Game/Components/Heli/ESCT_HeliBehaviourBaseComponent.c",
"sha256": "d363edafe59162ebbde5d84d17c9786cb60ef83ebc3e5003bfc812ab48dd0812",
"destination": "addons/core/Scripts/Game/ERR/10_AI/ERR_ReconFlightComponent.c",
"changes": "Adapt physics velocity/attitude, engine and crew-seating setup to current native APIs and unique successor resources."
},
{
"source": "escapists-base/Scripts/Game/AI/Behavior/ESCT_AIVehicleBehavior.c",
"sha256": "32c83fefde82955670f237ed4c83a3606c3af2a97d5c6f882d15bc6477cd8bf9",
"destination": "addons/core/Scripts/Game/ERR/10_AI/ERR_ReconCrewLocks.c",
"changes": "Adapt native get-out behavior suppression to exact original flight crew and active flight phase; release on landing, loss, takeover or mission stop."
},
{
"source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_AirAssault.c",
"sha256": "a9c0c2bf59fb4f9b351913708cee54a302a9e447d30c2766faa91c7573af1b6d",
"destination": "addons/core/Scripts/Game/ERR/10_AI/ERR_AirAssaultLoad.c",
"changes": "Port original physical boarding, canopy transfer/descent or aircraft weapon service; integrate finite HQ-owned support and selected factions."
},
{
"source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_AssaultParachute.c",
"sha256": "b2d2be240d184c436a5b2fd1a03d446763a1c27b6b5c825a988b05feaec7a346",
"destination": "addons/core/Scripts/Game/ERR/10_AI/ERR_AssaultParachute.c",
"changes": "Port original physical boarding, canopy transfer/descent or aircraft weapon service; integrate finite HQ-owned support and selected factions."
},
{
"source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_AircraftAmmo.c",
"sha256": "52bed2b0008762f221bed4f139cfe0a34e69e0ee455ef3dc47276d3dc3373c45",
"destination": "addons/core/Scripts/Game/ERR/10_AI/ERR_AircraftAmmo.c",
"changes": "Port original physical boarding, canopy transfer/descent or aircraft weapon service; integrate finite HQ-owned support and selected factions."
}
]
+68
View File
@@ -0,0 +1,68 @@
# Mortar intel, prison visibility and perimeter guards
The live Everon configuration contains four mortar sites (`everon-mortar-1` through
`everon-mortar-4`). Each is placed on surveyed clear, dry terrain, at least 1 km
from another mortar and 500 m from the prison. They use the existing physical gun,
four-person crew, finite initial ammunition, HQ targeting and permanent station
assignment. The gun's destruction still releases its surviving crew.
Each site registers a normal replicated discovery location. Untargeted recovered
intel can select any undiscovered or partly discovered mortar site. A partial
clue displays the native `mark-question` icon at the centre of its 500 m map
square, with an unknown-location label. Identification changes that same marker
to `artilleryFireMission`, moves it to the actual position, and names the site.
The prison never displays a discovery marker, even when its knowledge is complete.
The 3–5 opening prison guards are placed once, at separate random positions
12–24 m from the prison centre. Placement samples angular sectors with jitter,
checks supported dry terrain and standing clearance, and reserves all positions
before moving any guard. They remain frozen until the gate is unlocked. The
existing physical manpack-radio requirement is unchanged.
The ammunition courier previously required exactly one battery. It now accepts
multiple batteries and selects a depleted recipient between trips. A pending
report, command or native inventory move retains its original target. The
existing outpost still has one finite reserve of 12 shells, shared by all four
batteries; adding batteries does not duplicate that stock or courier group.
## Original intel messages
Wording is taken from the owner's
`escapists-intel/Scripts/Game/EscapistsIntel/EI_IntelService.c`:
- `New location marked. Type unknown.`
- `Hey! A [type] was identified in the intel!`
- `Every known location has already been identified. This intel doesn't help us.`
Successor site types supply the appropriate noun, including `mortar site`.
Notifications retain reliable delivery and per-round duplicate protection.
Multiple discoveries in one scan may be combined into a multiline message;
rough clues never disclose the location type. A spent folder cannot give another
clue. Separate untargeted folders can concern separate locations, so two pickups
may produce two question marks rather than one fully identified site.
## Validation
The full repository checks passed after the mortar/courier changes. A further
production-method regression covers selection among four batteries, unavailable
recipients and target preservation during pending work. The Workbench run in
`/tmp/erri-mortar-map4/logs/logs_2026-09-22_16-11-24` passed 30 assertions, admitted
the player, checked frozen perimeter guards and their radio, unlocked the prison,
and recovered seven physical folders to identify all four mortar sites. It
completed with confirmed cleanup and unchanged source/dependency inputs.
That run preceded the final restoration of question marks and original messages;
its additional validation is recorded below. Native reports still include the
existing RHS/WCS localization and stock UI/resource errors. These are local
Workbench tests, not dedicated multiplayer acceptance. No server deployment or
Workshop publication was performed.
The final question-mark/message run,
`/tmp/erri-mortar-map5/logs/logs_2026-09-22_16-19-19`, completed 35 assertions with
no script errors or VM exceptions. It verified an approximate question marker
before recovering physical folders and checking the four final artillery icons.
The immediate runner cleanup check encountered an exiting process and reported
cleanup failure; a subsequent host-visible `assert_prefix_idle` confirmed the
private prefix idle. Source and external-addon inputs remained unchanged.
Production-method tests also check the original message strings, mixed discovery
batches, reliable-delivery deduplication, and exhausted-intel feedback.
+46
View File
@@ -0,0 +1,46 @@
# Permanent mortar crew assignments
Each of the four mortar sites has a four-person crew assigned to its physical gun until
that gun is destroyed or removed. This is separate from the lifetime of an HQ
fire order: target expiry, cancellation, completed salvos, and ammunition
depletion do not release the station.
A gunner walks to and boards the original mortar using native AI. While the gun
is intact, native AI dismount behaviors are ineligible for its own crew. The
other crew members hold their positions while retaining aiming, firing, radio,
inventory and damage behavior. If the gunner is lost, a surviving ammunition
bearer can approach and take the empty gunner position. No crew or ammunition is
created to replace losses, and occupied seats are never forcibly cleared.
Gun destruction releases movement restrictions and the HQ support reservation,
allowing surviving crew to leave and receive ordinary assignments. Mission stop
also cleans up the station controls. Player-controlled characters, unrelated
groups, other mortars and vehicles are unaffected. The depot courier remains a
separate group and can still deliver the existing finite ammunition stock.
`tests/test_mortar_station.py` covers authority, ownership, player exclusion and
restriction lifetime. `--project core --smoke mortar-station` exercises native
idle boarding, competing dismount/movement orders, and release after damage
destroys the original mortar. Local fixtures do not establish multiplayer
replication or ordinary player-input acceptance.
On 2026-09-22, the station fixture passed all seven native checks: idle boarding,
refusal of a high-priority dismount, retention after fire-order cancellation,
all three support members resisting movement orders, and actual movement after
gun destruction. The runner retained its launch source snapshot. Its initial
cleanup check raced an exiting process; an independent post-run check then
confirmed that the disposable prefix was idle.
The existing `mortar-fire` fixture also completed with the station rule enabled:
an actual radio uplink/downlink led to a native projectile, consumed exactly one
of the 27 original shells, and stopped without duplicate firing or replenishment.
Its setup now unlocks the prison before waiting for combat AI. The full repository
check suite and targeted station/activity tests passed. Native resource warnings
from external addons remain; neither fixture is a dedicated-server acceptance
test.
The firing run passed 51 assertions with no script errors. Its independent
post-cleanup check confirmed both an idle prefix and source hashes unchanged
from launch; the original runner's cleanup-race report is preserved.
The sites are now discoverable through intel; see [mortar intel and map behavior](mortar-intel-and-prison-map.md).
+45
View File
@@ -0,0 +1,45 @@
# Prison opening and intel debug command
The prison receives a finite 3–5-person squad drawn from the selected enemy
faction's group profile. Selection happens before the native member spawn request.
An RTO slot is preserved where available, and preparation confirms an actual
large radio in the squad's inventory. For profiles without one, a soldier equips
an AN/PRC-77 (US/USAF) or R-107M; the native loadout operation can replace an
existing backpack. No further radio grants occur after initial preparation.
The opening squad is placed once at separate random clear positions 12–24 m
around the prison, while still frozen. Other sites retain their authored squad sizes. Existing prison AI freeze/release
hooks still apply.
Administrators can use `/esc cheat intel` from their current living prisoner.
The server checks six separate nearby ground positions, then creates six normal
intel folders. If placement or creation fails, no partial batch is retained.
The command does not insert anything directly into inventory or reveal locations;
picking up a folder invokes the ordinary discovery rules. Seated characters and
positions without enough accessible ground are refused.
## Verification, 22 September 2026
`python tools/check.py` passed after the production changes. The admin command
regression includes authorized dispatch, unauthorized refusal, a placement-failure
reply, and no inventory-grant side effects.
The `opening-tools` Core Workbench fixture completed with 22 assertions and no
script/runtime failures in:
`/tmp/erri-opening-tools2/logs/logs_2026-09-22_15-15-11`.
It exercises roster sizes 3, 4 and 5; physical squad size; frozen living guards;
a physically equipped manpack; native fallback equipment on a non-RTO; unauthorized
command refusal; six fresh ground folders; actual pickup and normal discovery;
and normal prison unlock. Source was unchanged throughout the run, dependencies
were unchanged, and the runner confirmed cleanup. This is local Workbench
integration, not a dedicated multiplayer test.
The strict native reporter still returns failure for existing RHS/WCS localization
and world `Parent`/`SlidingTrackMaterial` resource errors. The same errors are in
`/tmp/erri-mortar-station-fire2` from before these changes. They were not suppressed.
The live RKS #2 startup log for 22 September at 13:00 UTC records its extraction
Mi-8 alive, grounded, stable and fueled around coordinates 7012/7500. The local
fixture also confirms that aircraft is initially usable. Those authored coordinates were off the airfield. The follow-up change moves
the extraction helicopter to a validated airfield pad and rejects obstructed or
off-airfield placement; see [airfield and map changes](airfield-extraction-and-map-icons.md).
The earlier log establishes initial aircraft condition, not the later crash sequence.
+40
View File
@@ -0,0 +1,40 @@
# Radio shelter and permanent guards
Everon's generated radio camp places the radio and its table inside a full-size
vanilla Soviet tent. The tent is offset 1.5 m sideways from the radio/table centre
to leave room around the interior supports. The antenna and sandbags sit outside
the shelter. Placement retains the existing dry, clear terrain survey.
Every radio definition must request a physical guard squad (`Guarded 1` or an
explicit guard prefab). Scenario preparation already waits for all requested
guards to be present, conscious and in the configured enemy faction. The radio
squad receives an indefinite native Defend waypoint centred on the radio, with a
20 m radius, instead of defending its offset spawn anchor.
When HQ registers a radio squad, it permanently reserves it for site security.
The existing eligibility gate then rejects investigation, pursuit, reinforcement,
resupply and courier assignments, including orders revalidated at delivery time.
The squad remains registered for physical status and contact reporting. The
mortars' release path cannot release a radio squad, because it requires ownership
of an actual destroyed mortar. Local combat and ordinary casualty behavior remain
native; this does not freeze the defenders after the prison opens or replace
casualties.
## Verification
The registration regression executes the actual HQ registration method and checks
that radio squads remain reserved through repeated registration, while ordinary
outposts retain their existing eligibility. The full repository suite passed.
The Workbench fixture additionally checks a physical tent roof over the radio,
standing room within interaction distance and line of sight, the complete living
squad, refusal of courier reservations, preservation against an unrelated mortar
release, and the centred indefinite defend waypoint.
On 22 September 2026 the native run in
`/tmp/erri-radio-tent3/logs/logs_2026-09-22_16-42-16` completed 46 gameplay
assertions without script errors or VM exceptions. Source and external addon
inputs were unchanged, and process cleanup was confirmed. The fixture also
repeated player admission, prison guards, four-mortar intel recovery and map
presentation checks. Existing vanilla/RHS/WCS resource errors remain in the
strict report; this is local Workbench integration, not dedicated multiplayer
acceptance. No server deployment or Workshop publication was performed.
+95
View File
@@ -0,0 +1,95 @@
# Search helicopter
The combined mission now owns an airport reconnaissance service adapted from the
original `EAI_AirRecon` and `ESCT_HeliBehaviourBaseComponent`. It runs on the server
through VirtualHQ's maintenance tick. The original projects are not runtime
dependencies.
Prison escape starts a 15-minute countdown. A single armed Mi-8 then departs from
a clear pad at a discovered airfield. Losing that aircraft or its usable original
pilot starts a fresh 15-minute replacement delay. Parking or player takeover does
not create a replacement. Wrecks and surviving original crew remain in the world;
there is no cleanup-driven instant replacement. Explicit native aircraft deletion
also starts the loss delay; mission teardown does not restart the service. The round retains at most 64
attempted aircraft and uses the shared finite force ledger.
Airfields are discovered incrementally from physical runway/control-tower prefab
clusters, with an optional validated `ERR_ReconAirport` marker. Pads are surveyed
35–220 m from an airfield centre, with a 14 m clear footprint, terrain tolerance,
water exclusion and a 150 m vertical clearance trace. Failed departure placement
gets three attempts 30 seconds apart; batches use the configured delay.
The aircraft uses the original server physics flight approach: vertical takeoff,
40 m/s cruise, terrain look-ahead and 120 m terrain clearance. Its four native
pilot/gunner seats are populated before departure. The original crew is locked
aboard during flight and reserved against ground HQ reassignment. The engine's
native gunners retain their weapons and combat behavior. The current stock armed
Mi-8 replaces the old custom left-gun mount that is absent from the installed game.
US/RHS_USAF select the US pilot loadout; other enemy choices select the Soviet
loadout. Aircraft, group and crew all receive the selected enemy faction.
Without a contact, it searches random dry island sectors or delivered HQ sighting
coordinates. Actual native clear visual sightings of players or their occupied
vehicles produce a 300 m shadow orbit, with an additional 180 m horizontal
standoff. Two observation snapshots estimate motion; no live hidden player
positions or velocities drive the search. After losing sight it searches around
the last observation for two minutes, then resumes sector searches. Crew reports
use the normal physical-radio call, transmission and delivery pipeline to HQ.
A missing or incapacitated radio carrier can interrupt that route.
Low fuel (less than 50 native fuel units) or an administrator return request sends
the same aircraft back to its departure pad. It lands and stops its engines, retaining the surviving crew for airport servicing.
HQ-controlled passenger drops, post-drop cover, reloading and a separate ammunition
helicopter are described in [HQ air support](hq-air-support.md). A player boarding, taking the crew group or
changing the aircraft's faction releases scripted flight control.
Administrator commands:
- `/esc hq heli show` — phase, launch delay and pending countdown.
- `/esc hq heli timer set 15` — save the launch/replacement delay in minutes
(1–1440). Resets a pending countdown; an existing aircraft remains active.
- `/esc hq heli return` — return the current searching helicopter to its airfield.
The persisted key is `heliTimerMinutes`, default 15. Older settings files acquire
that default; the original settings importer preserves the original key. Normal
configuration validation and save-failure handling apply.
`tests/test_air_recon.py` executes the production launch/loss schedule and flight
geometry. `tools/headless_workbench.py --project core --smoke air-recon` is an
opt-in native fixture: it shortens the test countdown, arranges a runway encounter,
requests return, destroys the first aircraft and transfers its replacement to the
escapists faction. These
fixture actions do not change production timing or give the helicopter artificial
perception. A focused `--recon-takeover-only` variant exercises native faction handover,
control release and explicit native entity deletion without
repeating the full flight.
The full repository suite passed in `/tmp/erri-recon-check5.log`. The final
removal-notification regression and affected native lifecycle/runner checks passed
afterward. The 22 September native run
`/tmp/erri-recon-native4/logs/logs_2026-09-22_17-39-45` passed actual airfield
launch, conscious original crew, native player detection, shadow orbit, radio
sighting delivery, more than 300 m of flight, same-aircraft landing, no replacement
while parked, destruction-triggered full delay and retained-wreck replacement.
An earlier run flew more than 650 m. Both full-flight runs ended at a failing
fixture boarding call; forced player boarding also failed in `/tmp/erri-recon-takeover1`. The accessible
seat was found and the owner-routed request accepted, but no actual occupancy
followed. Player entry and its control-release branch remain unverified; the
final focused fixture instead tests the separate native faction-handover branch.
These Workbench runs are not dedicated multiplayer acceptance. No Workshop
publication or server deployment is included in this change.
The final focused native run was
`/tmp/erri-recon-ownership-final/logs/logs_2026-09-22_17-54-34`.
All 13 recon assertions completed with zero script errors: native original crew,
airfield-only departure (including a refused pad and subsequent retry), actual
faction handover/control release, and explicit entity deletion starting one full
900-second replacement delay. The final addon files were separately compared to
the launch snapshot and matched.
The strict runner result remains `cleanup-failed`, with `smoke-completed` recorded
before cleanup: an exiting `enfMain` had an empty command line. A subsequent
host-visible `assert_prefix_idle` passed. The preserved runner record has not been
relabeled as a clean strict run. Existing external localization/resource warnings
remain separate from the zero script-error count.
+43
View File
@@ -0,0 +1,43 @@
# Supply convoys
The production HQ now uses `ERR_SupplyConvoySystem`, `ERR_SupplyConvoyService` and `ERR_SupplyConvoyTactics`, adapting the owned original `EAI_SupplyConvoys.c` to the combined mod's native AI and force ledger.
## Configuration
Esc → Mission settings → HQ → **Convoys next round** accepts **0–20** or **Random** (uniformly 0–20). The original default is **3**. The server resolves and freezes this count when the round is created. `/esc convoys show`, `/esc convoys set 3` and `/esc convoys set random` use the same authenticated command service. `/esc hq convoy count ...` is an alias. Changes do not create or delete an active convoy.
The existing `automaticConvoyEnabled` switch remains supported. A saved zero continues to disable automatic startup. `/esc hq convoy start` can consume the next unused slot in the current round's configured allowance; it cannot replace a consumed slot. The settings importer preserves the original exact `convoyCount`, including zero, rather than reducing it to one convoy.
## Vehicles, soldiers and cargo
Each USSR convoy uses the original order: PKM UAZ, ammunition Ural, troop Ural, PKM UAZ, BMP-1, PKM UAZ. There are **25 original soldiers**: eleven vehicle crew and all fourteen Ural passenger seats, alternating between two independent seven-person infantry teams. Drivers and gunners stay in separate vehicle groups. The groups use the successor's memberless prefab, not the original framework's group-spawn hooks.
One finite receipt reserves eight groups and 25 bodies before creation. Partial creation consumes that slot and preserves surviving entities. The production budget permits the existing 60-body allowance plus 25 bodies per configured convoy, within the shared 256-formation ledger. Losses never refund convoy slots. This is an admission ceiling, not a performance guarantee for twenty simultaneous convoys.
The ammo truck receives eight random weapons from the convoy faction's native arsenal and six matching magazines/projectiles per muzzle of each successfully inserted weapon. The batch has a 96-ammunition-request ceiling and is issued once. Storage failures reduce the actual load; there is no refill after looting. Vehicle contents, casualties and surviving soldiers remain physical after controller release. The earlier infantry rendezvous service still uses the first convoy's compatible AK magazine stock; this change does not distribute that separate service across all trucks.
## Travel and combat
After prison escape and existing force admission, automatic deployment begins after a 30-second grace period. Every five seconds it tests up to eight road formations, for at most 120 startup passes. It uses friendly military outpost, depot and radio-site road approaches within 500 metres, deduplicated at 300 metres. Starting formations are separated by up to one kilometre and retain all existing road, terrain and obstruction checks.
The initial road route feeds an ongoing circuit between different friendly bases. Arrival accepts surviving vehicles within 250 metres; a ten-minute travel deadline advances a stuck trip. Convoys pause 45–90 seconds before selecting their next destination. The original carried supplies between bases but did not unload or regenerate them; no artificial unloading is added here.
Combat starts from fresh identified native group perception within 400 metres of a surviving convoy vehicle or a delivered HQ sighting. Mounted group origins are not used for this distance, because native groups can retain their original spawn position. Infantry dismounts, approaches the left and right flanks, then searches those sectors. Armed escorts provide cover while the ammo truck withdraws; the troop truck waits until the passengers have dismounted. Orders refresh at a bounded thirty-second interval. Still-mounted infantry receives at most six dismount retries, ten seconds apart, to recover from busy doors or a braking truck. Native boarding waypoints require all surviving members and use a 100-metre approach radius; actual compartment membership determines readiness. Crew retention suppresses both group and individual abandonment priorities only for the original mounted vehicle crew and releases on critical damage or drivetrain failure, allowing native emergency abandonment.
After sixty seconds without a fresh contact, the teams reboard under escort cover. A new contact interrupts boarding. After a 120-second boarding deadline, stranded survivors are released and the remaining vehicles continue. A lost troop truck releases the infantry. Player capture stops convoy control permanently, preserving the actors and loot.
## Validation
`tests/test_supply_convoys.py` executes production startup, base selection, arrival, circuit timing, contact freshness and perception boundaries, scoped crew-abandonment priorities, combat quiet time, boarding interruption, timeout and truck-loss policies. The receipt tests cover all eight groups and configured fleets through twenty convoys, including no replacement after losses. Existing dispatch, native seat allocation, cargo, HQ radio and force-ledger regressions remain in the main check suite.
`tools/headless_workbench.py --project chat --smoke supply-convoys --rounds 1 --timeout 900` exercises production automatic startup and physical AI in an isolated Workbench profile. Its final controlled contact explicitly tests native dismount/reboarding rather than claiming that an injected report proves perception. Remote-client replication and twenty-convoy performance require dedicated-server testing. Earlier one-convoy evidence in `convoy-migration.md` and `convoy-startup.md` remains historical evidence for those earlier sources.
The legacy `convoy` and `hq-memory` Workbench smoke fixtures explicitly select their previous single-convoy controller under `WORKBENCH` and `errSmoke=1`, preserving those fixtures' existing assertions. Normal play, ordinary Workbench use, and the `supply-convoys` fixture use the full configured fleet.
### Local native result — 2026-09-21
`/tmp/erri-supply-native10/logs/logs_2026-09-21_16-50-45` completed one `supply-convoys` smoke round with 36 common smoke assertions, no script/runtime failures, unchanged launch sources, and confirmed runner cleanup. The supply fixture additionally verified three automatically started convoys (18 vehicles, 75 original soldiers), exact ledger admission, 174 successful cargo insertions matched to physical inventory, all 18 vehicles driving at least 20 metres, both seven-person teams dismounting and reboarding, and the original troop truck driving the next base leg after the normal pause. The contact and expiry of the preceding trip deadline were explicitly injected test inputs; startup, native AI, seating, cargo, the pause and subsequent driving remained production-owned. RHS content was disabled in this isolated fixture, while its installed dependencies remained loaded.
Launch source fingerprint: `380aec8a078825b165593fc4445b603f80b5d1ec51360c018d34973d65302b62`. Raw logs remain outside the repository. Strict engine qualification still fails on nine pre-existing dependency errors: four RHS/WCS localization GUID errors and five inherited vehicle-catalog keyword errors (`SlidingTrackMaterial`/`Parent`). This is a successful convoy smoke scenario, not a clean-engine or multiplayer qualification.
`python3 tools/check.py` passed for this production source; the additional bounded-retry regression also passed afterward. Earlier native iterations exposed partial dismounts, premature healthy-crew abandonment and a crowded boarding approach; the final source contains the bounded exit retries, scoped group/individual priority guards and widened native boarding approach validated above.
+125 -102
View File
@@ -1,126 +1,149 @@
{
"Prefabs/Structures/Walls/Concrete/ConcreteWall_01/ConcreteWall_01_3m.et": "60E5729BEA18F875",
"Prefabs/Structures/BuildingParts/Doors/Door_Metal_A_RIGHT_EXT_COV_B.et": "67F17696FF278AE0",
"Prefabs/Items/Equipment/Radios/Radio_R107M.et": "54C68E438DD34265",
"Prefabs/MP/Modes/GameMode_Base.et": "0F307326459A1395",
"worlds/Eden/Eden.ent": "853E92315D1D9EFE",
"Prefabs/AI/SCR_AIWorld.et": "E0A05C76552E7F58",
"Prefabs/World/Game/PerceptionManager.et": "028DAEAD63E056BE",
"Prefabs/MP/Managers/Factions/FactionManager_USxUSSR.et": "589540B35EBA8CDC",
"Prefabs/MP/Managers/Loadouts/LoadoutManager_USxUSSR.et": "97EF4C1A41F63DDB",
"Configs/Systems/MissionSystems.conf": "C50579A2EC48E8EF",
"Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Unarmed.et": "2F912ED6E399FF47",
"Prefabs/Groups/OPFOR/Group_USSR_RifleSquad.et": "E552DABF3636C2AD",
"Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et": "DF5CCB7C0FF049F4",
"Prefabs/AI/Waypoints/AIWaypoint_SearchAndDestroy.et": "B3E7B8DC2BAB8ACC",
"Prefabs/AI/Waypoints/AIWaypoint_Defend.et": "93291E72AC23930F",
"Prefabs/Items/Misc/IntelligenceFolder_E_01/IntelligenceFolder_E_01.et": "6D56FED1E55A8F84",
"Configs/Map/MapPlain.conf": "A786DD4868598F15",
"Prefabs/Items/Core/Item_Base.et": "C95E11C60810F432",
"Assets/Items/Equipment/Maps/Map_Paper_01/Map_Paper_01_folded.xob": "E443663E5241622A",
"Assets/Items/Equipment/Radios/Radio_R107M/Radio_R107M_01_item.xob": "77C9FCF3FB1246E9",
"Assets/Items/Equipment/workspaces/paper_map.agr": "83675D0B0AB1B2C3",
"Assets/Items/Equipment/workspaces/player_map.asi": "56794534F6B8C3D7",
"Assets/Items/Equipment/Maps/Map_Paper_01/Map_Paper_01_folded.xob": "E443663E5241622A",
"Sounds/Items/_SharedData/PickUp/Items_PickUp_Map.acp": "13F8D0DE67678118",
"Prefabs/Weapons/Handguns/PM/Handgun_PM.et": "C0F7DD85A86B2900",
"Prefabs/Weapons/Magazines/Magazine_9x18_PM_8rnd_Ball.et": "8B853CDD11BA916E",
"Prefabs/Items/Equipment/Maps/Map_Paper_01/PaperMap_01_folded.et": "13772C903CB5E4F7",
"system/textures/defWhite.edds": "A64A8C63E0FBAE87",
"Configs/Navmesh/Navmesh_GM_Eden_Soldier.conf": "8BBC73472092902E",
"Configs/Navmesh/Navmesh_GM_Eden_Vehicle.conf": "0228A79846FD8A97",
"worlds/MP/Navmeshes/LowResEden.nmn": "5E19E60F26327356",
"Assets/Items/Equipment/Radios/Radio_R107M/Radio_R107M_01_item.xob": "77C9FCF3FB1246E9",
"Prefabs/Systems/Radio/RadioManager.et": "B8E09FAB91C4ECCD",
"Prefabs/MP/ScriptedChatEntity.et": "F69BC912AC8236F9",
"Prefabs/Structures/BuildingParts/Doors/Door_MetalGate_01_Short_LEFT_EXT_ST_B.et": "34B08027DBDE322A",
"Prefabs/Props/Furniture/Table_01.et": "53506DCB398C7EBE",
"Assets/Structures/Walls/Concrete/ConcreteWall_01_3m.xob": "0B96D139FEBCA006",
"Configs/GameOverScreen/BaseGameOverScreensConfig.conf": "651583FFFB7FC765",
"UI/layouts/HUD/GameOver/EndScreen/EndScreenContent_NoImage.layout": "C4507D07F3C54831",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_SL.et": "5436629450D8387A",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_RTO.et": "612F43A4D5AE765F",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_AR.et": "23ADBBC31B6A3DC6",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_AT.et": "1C78331E156A3D65",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_SR.et": "333DA6244C7DA34C",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_LAT.et": "BF643BE4ADBDFDD3",
"Prefabs/Weapons/Mortars/2B14/Mortar_2B14.et": "D1FFE458E8AC4BDB",
"Prefabs/Weapons/Ammo/Ammo_Shell_82mm_HE_O832DU.et": "98EC9C526AFBA282",
"Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et": "86E565387A634103",
"Prefabs/Items/Equipment/Radios/Radio_R148.et": "E1A5D4B878AA8980",
"Prefabs/Groups/OPFOR/Group_USSR_Base.et": "8DE0C0830FE0C33D",
"Prefabs/Tasks/BaseTask.et": "1D0F815858EE24AD",
"Prefabs/Props/EmptyStorages/USSR_AmmoBox_empty.et": "EBBC859CCD94D96D",
"Prefabs/Weapons/Rifles/AK74/Rifle_AK74.et": "FA5C25BF66A53DCF",
"Prefabs/Weapons/Magazines/Magazine_545x39_AK_30rnd_Ball.et": "BBB50A815A2F916B",
"Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et": "C3F1FA1E2EC2B345",
"Assets/Props/Military/AmmoBox/EquipmentBoxWooden_01/EquipmentBoxWooden_Weapon_01.xob": "819ED3266EE5113B",
"Assets/Props/Fabric/Flags/Data/Flag_1_2_SovietArmy.emat": "B47B52D9DA68905D",
"Assets/Props/Fabric/Flags/Data/Flag_1_2_USA.emat": "610803CC3F3D6649",
"Assets/Props/Military/AmmoBox/EquipmentBoxWooden_01/Data/EquipmentBoxWooden_Weapon_01_USSR.emat": "7D2E831AFA5CF50D",
"Assets/Props/Military/AmmoBox/EquipmentBoxWooden_01/EquipmentBoxWooden_Weapon_01.xob": "819ED3266EE5113B",
"Assets/Props/Military/Sandbags/Data/Sandbags_01_Burlap_MLOD.emat": "2169E8EB73E1C127",
"Assets/Props/Military/Sandbags/Data/Sandbags_01_short_Burlap.emat": "31529E064AA7C917",
"Assets/Props/Military/Sandbags/Sandbag_01_short.xob": "268DBDABB3C94AD7",
"Prefabs/Items/Equipment/Binoculars/Binoculars_B8/Binoculars_B8.et": "243948B23D90BECB",
"Prefabs/Items/Medicine/MorphineInjection_01/MorphineInjection_01.et": "0D9A5DCF89AE7AA9",
"Prefabs/Items/Medicine/SalineBag_01/SalineBag_USSR_01.et": "527D7C5D2E476BDC",
"Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et": "259EE7B78C51B624",
"UI/layouts/Task/TaskListEntry.layout": "B71975032150BAFB",
"UI/layouts/Task/TaskListEntryDescription.layout": "552EB1921B5C548C",
"Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Base.et": "836E7E39AAC5888B",
"Prefabs/Items/Equipment/Watches/Watch_SandY184A.et": "78ED4FEF62BBA728",
"Prefabs/Characters/HeadGear/Hat_Patrol_US_01/Hat_Patrol_US_01.et": "F545C1BE7C99954A",
"Prefabs/Characters/Uniforms/Jacket_US_BDU_rolledup.et": "3CCA7A9BB4FD3197",
"Prefabs/Characters/Uniforms/Pants_US_BDU.et": "604BB72BE8E023C2",
"Prefabs/Characters/Footwear/CombatBoots_US_01.et": "DAAFD15478BDE1C3",
"Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_US_01.et": "A81F501D3EF6F38E",
"Prefabs/Items/Medicine/Tourniquet_01/Tourniquet_US_01.et": "D70216B1B2889129",
"Configs/Factions/BLUFOR.conf": "E7B7EA4823DD81F0",
"UI/Textures/Editor/EditableEntities/Factions/EditableEntity_Faction_USA.edds": "EB7F65DBC9392557",
"Configs/Identities/FactionIdentity_US.conf": "B600946E9ACC17C2",
"UI/Textures/Flags/US-flag-base-3it.edds": "46FB2FB2C2125A3C",
"Assets/Props/Fabric/Flags/Data/Flag_1_2_USA.emat": "610803CC3F3D6649",
"Assets/Structures/BuildingsParts/Doors/DoorFrame_door_metal_A_RIGHT_EXT_B.xob": "E3BC73BFBC7AA497",
"Assets/Structures/Walls/Concrete/ConcreteWall_01_3m.xob": "0B96D139FEBCA006",
"Configs/Callsigns/Callsigns_US.conf": "CB7824D572DD0D5C",
"Configs/Callsigns/Callsigns_USSR.conf": "958043CE1648EC43",
"Configs/EntityCatalog/US/Characters_EntityCatalog_US.conf": "B56E8B4D4B195559",
"Configs/EntityCatalog/US/Groups_EntityCatalog_US.conf": "4E70E7C4C2C17D4A",
"Configs/EntityCatalog/US/WeaponTripod_EntityCatalog_US.conf": "0E4B62F186F97C43",
"Configs/EntityCatalog/US/InventoryItems_EntityCatalog_US.conf": "5F7EC52FC40A03E2",
"Configs/EntityCatalog/US/SupplyContainerItems_EntityCatalog_US.conf": "0BF36EFF9FFAF92B",
"Configs/Identities/Territories/FactionHomeTerritory_US.conf": "B548A5B264939A98",
"Configs/Factions/OPFOR.conf": "B122E3B10BB3404B",
"UI/Textures/Editor/EditableEntities/Factions/EditableEntity_Faction_USSR.edds": "40B12B0DF911B856",
"Configs/Identities/FactionIdentity_USSR.conf": "FBBCD73926989580",
"UI/Textures/Flags/USSR-flag-base-3it.edds": "50824EB9F2C215AB",
"Assets/Props/Fabric/Flags/Data/Flag_1_2_SovietArmy.emat": "B47B52D9DA68905D",
"Configs/Callsigns/Callsigns_USSR.conf": "958043CE1648EC43",
"Configs/EntityCatalog/US/WeaponTripod_EntityCatalog_US.conf": "0E4B62F186F97C43",
"Configs/EntityCatalog/USSR/Characters_EntityCatalog_USSR.conf": "3B679F1799D55F6F",
"Configs/EntityCatalog/USSR/Groups_EntityCatalog_USSR.conf": "37D5B75AAC3E72EA",
"Configs/EntityCatalog/USSR/WeaponTripod_EntityCatalog_USSR.conf": "DDF17C8C140BD1F2",
"Configs/EntityCatalog/USSR/InventoryItems_EntityCatalog_USSR.conf": "C53421647C3D0D2E",
"Configs/EntityCatalog/USSR/SupplyContainerItems_EntityCatalog_USSR.conf": "B4CA6761AC935808",
"Configs/EntityCatalog/USSR/WeaponTripod_EntityCatalog_USSR.conf": "DDF17C8C140BD1F2",
"Configs/Factions/BLUFOR.conf": "E7B7EA4823DD81F0",
"Configs/Factions/FIA.conf": "8053DB656DD18B14",
"Configs/Factions/OPFOR.conf": "B122E3B10BB3404B",
"Configs/GameOverScreen/BaseGameOverScreensConfig.conf": "651583FFFB7FC765",
"Configs/Identities/FactionIdentity_US.conf": "B600946E9ACC17C2",
"Configs/Identities/FactionIdentity_USSR.conf": "FBBCD73926989580",
"Configs/Identities/Territories/FactionHomeTerritory_US.conf": "B548A5B264939A98",
"Configs/Identities/Territories/FactionHomeTerritory_USSR.conf": "31FC78AF00523A99",
"Prefabs/MP/Managers/Factions/FactionManager_Base.et": "A242612865F2A48E",
"UI/Textures/DeployMenu/Loadout-BG/Loadout_US_BG.imageset": "F8AC305446D5D480",
"UI/Textures/DeployMenu/Loadout-BG/Loadout_BG_USSR.imageset": "21533F2089005056",
"Prefabs/Items/Medicine/SalineBag_01/SalineBag_US_01.et": "00E36F41CA310E2A",
"Prefabs/Items/Equipment/Radios/Radio_ANPRC77.et": "9B6B61BB3FE3DFB0",
"Prefabs/AI/Waypoints/AIWaypoint_Move.et": "750A8D1695BD6998",
"Configs/Map/MapPlain.conf": "A786DD4868598F15",
"Configs/Navmesh/Navmesh_GM_Eden_Soldier.conf": "8BBC73472092902E",
"Configs/Navmesh/Navmesh_GM_Eden_Vehicle.conf": "0228A79846FD8A97",
"Configs/System/chimeraMenus.conf": "C747AFB6B750CE9A",
"Configs/Systems/MissionSystems.conf": "C50579A2EC48E8EF",
"Prefabs/AI/Groups/Group_Base.et": "000CD338713F2B5A",
"Prefabs/AI/SCR_AIWorld.et": "E0A05C76552E7F58",
"Prefabs/AI/Waypoints/AIWaypoint_Cycle.et": "35BD6541CBB8AC08",
"Prefabs/AI/Waypoints/AIWaypoint_Defend.et": "93291E72AC23930F",
"Prefabs/AI/Waypoints/AIWaypoint_GetIn.et": "712F4795CF8B91C7",
"Prefabs/AI/Waypoints/AIWaypoint_GetOut.et": "C40316EE26846CAB",
"Prefabs/AI/Waypoints/AIWaypoint_Move.et": "750A8D1695BD6998",
"Prefabs/AI/Waypoints/AIWaypoint_SearchAndDestroy.et": "B3E7B8DC2BAB8ACC",
"Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et": "86E565387A634103",
"Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Base.et": "836E7E39AAC5888B",
"Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_HeliPilot.et": "42A502E3BB727CEB",
"Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Sniper.et": "0F6689B491641155",
"Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Unarmed.et": "2F912ED6E399FF47",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_AR.et": "23ADBBC31B6A3DC6",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_AT.et": "1C78331E156A3D65",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_HeliPilot.et": "A62FA97C4EC64F14",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_LAT.et": "BF643BE4ADBDFDD3",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_RTO.et": "612F43A4D5AE765F",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Rifleman.et": "DCB41B3746FDD1BE",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_SL.et": "5436629450D8387A",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_SR.et": "333DA6244C7DA34C",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Sharpshooter.et": "976AC400219898FA",
"Prefabs/Characters/Footwear/CombatBoots_US_01.et": "DAAFD15478BDE1C3",
"Prefabs/Characters/HeadGear/Hat_Patrol_US_01/Hat_Patrol_US_01.et": "F545C1BE7C99954A",
"Prefabs/Characters/HeadGear/Helmet_PASGT_01/Helmet_PASGT_01_base.et": "8A2B2A544F3ED831",
"Prefabs/Characters/Uniforms/Jacket_US_BDU_rolledup.et": "3CCA7A9BB4FD3197",
"Prefabs/Characters/Uniforms/Pants_US_BDU.et": "604BB72BE8E023C2",
"Prefabs/Decals/Dirt/Decal_Dirt_Patch_03.et": "4AD6EB80A8B1FA3A",
"Prefabs/Groups/BLUFOR/Group_US_FireTeam.et": "84E5BBAB25EA23E5",
"Prefabs/Groups/INDFOR/Group_FIA_FireTeam.et": "5BEA04939D148B1D",
"Prefabs/Groups/OPFOR/Group_USSR_Base.et": "8DE0C0830FE0C33D",
"Prefabs/Groups/OPFOR/Group_USSR_RifleSquad.et": "E552DABF3636C2AD",
"Prefabs/Items/Core/Item_Base.et": "C95E11C60810F432",
"Prefabs/Items/Equipment/Backpacks/Backpack_Kolobok.et": "41A9C55B61F375F0",
"Prefabs/Items/Equipment/Binoculars/Binoculars_B8/Binoculars_B8.et": "243948B23D90BECB",
"Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et": "AE578EEA4244D41F",
"Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et": "21EF98BFC1EB3793",
"Prefabs/AI/Groups/Group_Base.et": "000CD338713F2B5A",
"Prefabs/Decals/Dirt/Decal_Dirt_Patch_03.et": "4AD6EB80A8B1FA3A",
"UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout": "75C912A1C89BE6C2",
"UI/layouts/WidgetLibrary/EditBox/WLib_EditBox.layout": "0022F0B45ADBC5AC",
"UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt": "3E7733BAC8C831F6",
"Prefabs/Characters/HeadGear/Helmet_PASGT_01/Helmet_PASGT_01_base.et": "8A2B2A544F3ED831",
"Configs/System/chimeraMenus.conf": "C747AFB6B750CE9A",
"Prefabs/Items/Equipment/Kits/RepairKit_01/RepairKit_01_wrench.et": "33B2DFDCD0EBA3DB",
"Prefabs/Items/Equipment/Maps/Map_Paper_01/PaperMap_01_folded.et": "13772C903CB5E4F7",
"Prefabs/Items/Equipment/Radios/Radio_ANPRC77.et": "9B6B61BB3FE3DFB0",
"Prefabs/Items/Equipment/Radios/Radio_R107M.et": "54C68E438DD34265",
"Prefabs/Items/Equipment/Radios/Radio_R148.et": "E1A5D4B878AA8980",
"Prefabs/Items/Equipment/Watches/Watch_SandY184A.et": "78ED4FEF62BBA728",
"Prefabs/Items/Fuel/Jerrycan_01/Jerrycan_01_item.et": "12D5AD21E383B768",
"Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et": "C3F1FA1E2EC2B345",
"Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_US_01.et": "A81F501D3EF6F38E",
"Prefabs/Items/Medicine/MorphineInjection_01/MorphineInjection_01.et": "0D9A5DCF89AE7AA9",
"Prefabs/Items/Medicine/SalineBag_01/SalineBag_USSR_01.et": "527D7C5D2E476BDC",
"Prefabs/Items/Medicine/SalineBag_01/SalineBag_US_01.et": "00E36F41CA310E2A",
"Prefabs/Items/Medicine/Tourniquet_01/Tourniquet_US_01.et": "D70216B1B2889129",
"Prefabs/Items/Misc/IntelligenceFolder_E_01/IntelligenceFolder_E_01.et": "6D56FED1E55A8F84",
"Prefabs/MP/Managers/Factions/FactionManager_Base.et": "A242612865F2A48E",
"Prefabs/MP/Managers/Factions/FactionManager_USxUSSR.et": "589540B35EBA8CDC",
"Prefabs/MP/Managers/Loadouts/LoadoutManager_USxUSSR.et": "97EF4C1A41F63DDB",
"Prefabs/MP/Modes/GameMode_Base.et": "0F307326459A1395",
"Prefabs/MP/ScriptedChatEntity.et": "F69BC912AC8236F9",
"Prefabs/Props/EmptyStorages/USSR_AmmoBox_empty.et": "EBBC859CCD94D96D",
"Prefabs/Props/Furniture/Table_01.et": "53506DCB398C7EBE",
"Prefabs/Props/Military/Antennas/Antenna_FIA_02/Antenna_FIA_02_base.et": "B3949F6D215A9F78",
"Prefabs/Props/Military/Sandbags/Sandbag_01_short_burlap.et": "CFFEB23FBEA00322",
"Prefabs/Structures/BuildingParts/Doors/DoorSet_Base.et": "87CADB5ADC989993",
"Prefabs/Structures/BuildingParts/Doors/Door_MetalGate_01_Short_LEFT_EXT_ST_B.et": "34B08027DBDE322A",
"Prefabs/Structures/BuildingParts/Doors/Door_Metal_A_RIGHT_EXT_COV_B.et": "67F17696FF278AE0",
"Prefabs/Structures/Military/Camps/TentSmallUS_01/TentSmallUS_01.et": "01AE5FD77A9A4C21",
"Prefabs/Structures/Military/Camps/TentUSSR_01/TentUSSR_01_base.et": "BE5D5CFA90224646",
"Prefabs/Structures/Walls/Concrete/ConcreteWall_01/ConcreteWall_01_3m.et": "60E5729BEA18F875",
"Prefabs/Systems/Radio/RadioManager.et": "B8E09FAB91C4ECCD",
"Prefabs/Tasks/BaseTask.et": "1D0F815858EE24AD",
"Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_armed.et": "7BD282AF716ED639",
"Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et": "DF5CCB7C0FF049F4",
"Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et": "259EE7B78C51B624",
"Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_PKM.et": "0B4DEA8078B78A9B",
"Prefabs/Vehicles/Wheeled/UAZ469/VehParts/Seats/UAZ469_seats_rear.et": "780AAF0A51AEE61A",
"Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_ammo.et": "3336BE330C4F355B",
"Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_transport.et": "16C1F16C9B053801",
"Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_PKM.et": "0B4DEA8078B78A9B",
"Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Rifleman.et": "DCB41B3746FDD1BE",
"Prefabs/Weapons/Attachments/Optics/Optic_PSO1/Optic_PSO1.et": "C850A33226B8F9C1",
"Prefabs/Weapons/Attachments/Optics/Optic_ARTII/Optic_ARTII.et": "D2018EDB1BBF4C88",
"Prefabs/Weapons/Ammo/Ammo_Shell_82mm_HE_O832DU.et": "98EC9C526AFBA282",
"Prefabs/Weapons/Attachments/Optics/Optic_4x20/Optic_4x20.et": "BD496EE1B40DC510",
"Prefabs/Vehicles/Wheeled/UAZ469/VehParts/Seats/UAZ469_seats_rear.et": "780AAF0A51AEE61A",
"Prefabs/Items/Equipment/Kits/RepairKit_01/RepairKit_01_wrench.et": "33B2DFDCD0EBA3DB",
"Prefabs/Items/Fuel/Jerrycan_01/Jerrycan_01_item.et": "12D5AD21E383B768",
"Prefabs/Structures/BuildingParts/Doors/DoorSet_Base.et": "87CADB5ADC989993",
"Assets/Structures/BuildingsParts/Doors/DoorFrame_door_metal_A_RIGHT_EXT_B.xob": "E3BC73BFBC7AA497"
"Prefabs/Weapons/Attachments/Optics/Optic_ARTII/Optic_ARTII.et": "D2018EDB1BBF4C88",
"Prefabs/Weapons/Attachments/Optics/Optic_PSO1/Optic_PSO1.et": "C850A33226B8F9C1",
"Prefabs/Weapons/Handguns/PM/Handgun_PM.et": "C0F7DD85A86B2900",
"Prefabs/Weapons/Magazines/Magazine_545x39_AK_30rnd_Ball.et": "BBB50A815A2F916B",
"Prefabs/Weapons/Magazines/Magazine_762x51_M14_20rnd_SpecialBall.et": "627255315038152A",
"Prefabs/Weapons/Magazines/Magazine_762x54_SVD_10rnd_Sniper.et": "9CCB46C6EE632C1A",
"Prefabs/Weapons/Magazines/Magazine_9x18_PM_8rnd_Ball.et": "8B853CDD11BA916E",
"Prefabs/Weapons/Mortars/2B14/Mortar_2B14.et": "D1FFE458E8AC4BDB",
"Prefabs/Weapons/Rifles/AK74/Rifle_AK74.et": "FA5C25BF66A53DCF",
"Prefabs/World/Game/PerceptionManager.et": "028DAEAD63E056BE",
"Sounds/Items/_SharedData/PickUp/Items_PickUp_Map.acp": "13F8D0DE67678118",
"UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt": "3E7733BAC8C831F6",
"UI/Textures/DeployMenu/Loadout-BG/Loadout_BG_USSR.imageset": "21533F2089005056",
"UI/Textures/DeployMenu/Loadout-BG/Loadout_US_BG.imageset": "F8AC305446D5D480",
"UI/Textures/Editor/EditableEntities/Factions/EditableEntity_Faction_USA.edds": "EB7F65DBC9392557",
"UI/Textures/Editor/EditableEntities/Factions/EditableEntity_Faction_USSR.edds": "40B12B0DF911B856",
"UI/Textures/Flags/US-flag-base-3it.edds": "46FB2FB2C2125A3C",
"UI/Textures/Flags/USSR-flag-base-3it.edds": "50824EB9F2C215AB",
"UI/Textures/Icons/icons_mapMarkersUI-glow.imageset": "67B3A6DC2D712B52",
"UI/Textures/Icons/icons_mapMarkersUI.imageset": "E23427CAC80DA8B7",
"UI/Textures/Icons/icons_wrapperUI-glow.imageset": "00FE3DBDFD15227B",
"UI/Textures/Icons/icons_wrapperUI.imageset": "3262679C50EF4F01",
"UI/layouts/HUD/GameOver/EndScreen/EndScreenContent_NoImage.layout": "C4507D07F3C54831",
"UI/layouts/Menus/PauseMenu/PauseMenuButton.layout": "9ECCD201BCF07E95",
"UI/layouts/Task/TaskListEntry.layout": "B71975032150BAFB",
"UI/layouts/Task/TaskListEntryDescription.layout": "552EB1921B5C548C",
"UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout": "75C912A1C89BE6C2",
"UI/layouts/WidgetLibrary/ComboBox/WLib_ComboBox.layout": "4B5AE6E64037FFB4",
"UI/layouts/WidgetLibrary/EditBox/WLib_EditBox.layout": "0022F0B45ADBC5AC",
"system/textures/defWhite.edds": "A64A8C63E0FBAE87",
"worlds/Eden/Eden.ent": "853E92315D1D9EFE",
"worlds/MP/Navmeshes/LowResEden.nmn": "5E19E60F26327356"
}
+8 -2
View File
@@ -1,6 +1,12 @@
# Finite player vehicle maintenance
# Finite player vehicle maintenance (historical fixture)
The Western supply cache now contains one emergency repair kit and two vanilla fuel cans, alongside the existing finite UAZ. Its discovered map label identifies the maintenance supplies. Take the item into your inventory, equip it, then use the vanilla action at a damaged vehicle part or fuel cap. Park the vehicle before using either action.
The western guarded vehicle/cache site was removed from the live Everon scenario
on 22 September 2026. Its UAZ, repair kit and fuel cans are no longer spawned.
The prefab and historical test fixture remain for regression coverage; the
following stock and native evidence describe that fixture, not current live stock.
See [current airfield and site changes](airfield-extraction-and-map-icons.md).
The historical Western supply cache contains one emergency repair kit and two vanilla fuel cans, alongside the existing finite UAZ. Its discovered map label identifies the maintenance supplies. Take the item into your inventory, equip it, then use the vanilla action at a damaged vehicle part or fuel cap. Park the vehicle before using either action.
The kit includes 20 native supply units and inherits the vanilla wrench's emergency repair ceiling and damage eligibility. It does not fully restore every damaged part, resurrect destroyed vehicles or create replacements. The held wrench uses the normal native resource consumer; eligible nearby finite supplies may also be consumed according to vanilla resource rights. The item has no resource generator or replenishment callback. Each can starts with 5 litres, with a 20-litre capacity; the pair supplies 10 litres initially. The native fuel station transfers fuel out of the held can into an eligible tank and stops when the can is empty or the target is full. Cans may be refilled only through ordinary existing native sources.