Capture current mission, AI, map and administration development

Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
This commit is contained in:
2026-10-13 22:52:53 +02:00
parent a951a96edc
commit 6a667d8deb
8104 changed files with 2124945 additions and 2061 deletions
@@ -0,0 +1,460 @@
--- a/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminMenu.c
+++ b/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminMenu.c
@@ -8,12 +8,12 @@
{
static array<string> Keys()
{
- return {"roadblockCount", "civilianTrafficCount", "startMode", "radioDefenceSeconds", "aiIntelChancePercent", "intelRevealChancePercent", "startTimeMinutes", "timeMultiplier", "startDateCode", "weatherProfile", "viewDistanceMetres", "reportIntervalSeconds", "supportSquadLimit", "responseRadiusMetres", "convoyCount", "antiAirChancePercent", "antiPersonnelMineChancePercent", "heliTimerMinutes"};
+ return {"hunterSpawnDistanceMetres", "roadblockCount", "civilianTrafficCount", "startMode", "radioDefenceSeconds", "aiIntelChancePercent", "intelRevealChancePercent", "startTimeMinutes", "timeMultiplier", "startDateCode", "weatherProfile", "viewDistanceMetres", "reportIntervalSeconds", "supportSquadLimit", "responseRadiusMetres", "convoyCount", "antiAirChancePercent", "antiPersonnelMineChancePercent", "heliTimerMinutes"};
}
static bool Available(string key, bool hq, bool intel)
{
if (key == "aiIntelChancePercent") return intel;
- if (key == "heliTimerMinutes" || key == "antiAirChancePercent" || key == "antiPersonnelMineChancePercent" || key == "convoyCount" || key == "reportIntervalSeconds" || key == "supportSquadLimit" || key == "responseRadiusMetres") return hq;
+ if (key == "hunterSpawnDistanceMetres" || key == "heliTimerMinutes" || key == "antiAirChancePercent" || key == "antiPersonnelMineChancePercent" || key == "convoyCount" || key == "reportIntervalSeconds" || key == "supportSquadLimit" || key == "responseRadiusMetres") return hq;
return Keys().Contains(key);
}
// A short journal has no older off-screen lines, even if its slider is zero.
@@ -44,7 +44,8 @@
static string Command(string key, string value)
{
string prefix;
- if (key == "roadblockCount") prefix = "mission roadblocks";
+ if (key == "hunterSpawnDistanceMetres") prefix = "mission hunterdistance";
+ else if (key == "roadblockCount") prefix = "mission roadblocks";
else if (key == "civilianTrafficCount") prefix = "mission traffic";
else if (key == "startMode") prefix = "mission start";
else if (key == "radioDefenceSeconds") prefix = "mission radio";
--- a/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminService.c
+++ b/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminService.c
@@ -4,6 +4,7 @@
{
static string CoreSetting(string section, string option)
{
+ if (section == "mission" && option == "hunterdistance") return "hunterSpawnDistanceMetres";
if (section == "mission" && option == "roadblocks") return "roadblockCount";
if (section == "mission" && option == "traffic") return "civilianTrafficCount";
if (section == "mission" && option == "start") return "startMode";
@@ -144,6 +145,7 @@
}
protected string SettingHelp(string key)
{
+ if (key == "hunterSpawnDistanceMetres") return "Set 800..3000 metres (default 1000). Applies next round to the opening UAZs and troop truck, on separate sides. Roads allow 250m variation; unsuitable terrain uses safe objective-road fallback.";
if (key == "roadblockCount") return "Set 0..12 roadblocks (default 4; 0 disables). Applies next round. Each has four guards; unsuitable sites are skipped.";
if (key == "civilianTrafficCount") return "Set 0..6 civilian cars (default 3). Zero disables new traffic. Unclaimed cars retire only far from all players and out of sight; player-entered cars are preserved.";
if (key == "keepWeaponOnUnconscious") return "Set 1 to retain the held firearm during unconsciousness and equip it after recovery; 0 keeps normal dropping. Applies to the next knockout.";
@@ -155,7 +157,7 @@
}
protected string RoadblockTiming(string key)
{
- if (key == "roadblockCount") return " for next round";
+ if (key == "hunterSpawnDistanceMetres" || key == "roadblockCount") return " for next round";
return "";
}
protected void SettingCommand(ERR_Settings settings, string key, array<string> parts, array<string> replies)
--- a/addons/core/Scripts/Game/ERR/00_Core/ERR_Settings.c
+++ b/addons/core/Scripts/Game/ERR/00_Core/ERR_Settings.c
@@ -9,11 +9,12 @@
static array<string> Keys()
{
- return {"roadblockCount", "civilianTrafficCount", "startMode", "keepWeaponOnUnconscious", "reportIntervalSeconds", "supportSquadLimit", "responseRadiusMetres", "aiIntelChancePercent", "intelRevealChancePercent", "radioDefenceSeconds", "startTimeMinutes", "timeMultiplier", "startDateCode", "weatherProfile", "viewDistanceMetres", "antiAirChancePercent", "antiPersonnelMineChancePercent", "automaticEquipmentChancePercent", "automaticConvoyEnabled", "convoyCount", "heliTimerMinutes"};
+ return {"hunterSpawnDistanceMetres", "roadblockCount", "civilianTrafficCount", "startMode", "keepWeaponOnUnconscious", "reportIntervalSeconds", "supportSquadLimit", "responseRadiusMetres", "aiIntelChancePercent", "intelRevealChancePercent", "radioDefenceSeconds", "startTimeMinutes", "timeMultiplier", "startDateCode", "weatherProfile", "viewDistanceMetres", "antiAirChancePercent", "antiPersonnelMineChancePercent", "automaticEquipmentChancePercent", "automaticConvoyEnabled", "convoyCount", "heliTimerMinutes"};
}
static bool Valid(string key, int value)
{
+ if (key == "hunterSpawnDistanceMetres") return value >= 800 && value <= 3000;
if (key == "roadblockCount") return value >= 0 && value <= 12;
if (key == "civilianTrafficCount") return value >= 0 && value <= 6;
if (key == "startMode") return value == 0 || value == 1;
@@ -101,6 +102,7 @@
static int AddedDefault(string key)
{
+ if (key == "hunterSpawnDistanceMetres") return 1000;
if (key == "roadblockCount") return 4;
if (key == "civilianTrafficCount") return 3;
if (key == "startMode") return 0;
@@ -120,6 +122,7 @@
void ERR_Settings(string path = PATH)
{
m_Path = path;
+ m_Values.Set("hunterSpawnDistanceMetres", AddedDefault("hunterSpawnDistanceMetres"));
m_Values.Set("roadblockCount", AddedDefault("roadblockCount"));
m_Values.Set("civilianTrafficCount", AddedDefault("civilianTrafficCount"));
m_Values.Set("startMode", AddedDefault("startMode"));
--- a/addons/core/Scripts/Game/ERR/10_AI/ERR_HQ.c
+++ b/addons/core/Scripts/Game/ERR/10_AI/ERR_HQ.c
@@ -156,6 +156,7 @@
m_Mode = mode;
m_Equipment = new ERR_EnemyEquipment(mode);
m_Hunters = new ERR_HunterService(mode, null);
+ m_Hunters.ConfigureOpening(mode.Settings().Get("hunterSpawnDistanceMetres"));
m_ObjectiveDefence = new ERR_ObjectiveDefence(mode, this);
m_Towns = new ERR_TownGarrisons(mode);
m_Roadblocks = new ERR_Roadblocks(mode);
--- a/addons/core/Scripts/Game/ERR/10_AI/ERR_HunterOpeningPlan.c
+++ b/addons/core/Scripts/Game/ERR/10_AI/ERR_HunterOpeningPlan.c
@@ -1,6 +1,18 @@
// Deployment geometry only. Pursuit destinations always come from delivered HQ reports.
class ERR_HunterOpeningRules
{
+ static bool InBand(vector center, vector point, float radius)
+ {
+ if (!ERR_ForceRules.FiniteVector(center) || !ERR_ForceRules.FiniteVector(point) || !ERR_ForceRules.Finite(radius) || radius < 800 || radius > 3000) return false;
+ float distance = vector.DistanceXZ(center, point);
+ return distance >= Math.Max(600, radius - 250) && distance <= radius + 250;
+ }
+ static float ScanRadius(float radius, int ring)
+ {
+ if (ring == 1) return radius - 150;
+ if (ring == 2) return radius + 150;
+ return radius;
+ }
static bool Spread(vector center, vector first, vector second)
{
vector a = first - center; a[1] = 0;
@@ -30,6 +42,7 @@
class ERR_HunterOpeningPlan
{
vector Center;
+ float Radius;
ref array<vector> Positions = {};
ref array<vector> Angles = {};
protected ref array<vector> m_Candidates = {};
@@ -37,7 +50,7 @@
protected int m_Scanned;
protected bool m_Done;
protected float m_Heading;
- void ERR_HunterOpeningPlan(vector center) { Center = center; m_Heading = Math.RandomFloat(0, 360); }
+ void ERR_HunterOpeningPlan(vector center, float radius = 1000) { Center = center; Radius = radius; m_Heading = Math.RandomFloat(0, 360); }
bool Ready() { return Positions.Count() == 3; }
bool Done() { return m_Done; }
static bool AwayFromPlayers(vector position, array<IEntity> players)
@@ -55,12 +68,12 @@
int candidate = m_Scanned++;
int ring = candidate / 16;
int sector = candidate % 16;
- float radius = 800 + ring * 450;
- float bearing = (m_Heading + sector * 22.5) * Math.DEG2RAD;
+ float radius = ERR_HunterOpeningRules.ScanRadius(Radius, ring);
+ float bearing = (m_Heading + sector * 22.5 + ring * 5.625) * Math.DEG2RAD;
vector seed = Center + Vector(Math.Sin(bearing) * radius, 0, Math.Cos(bearing) * radius);
vector position, angles;
if (!ERR_SupplyConvoySystem.ApproachDirected(seed, position, angles, 300)) continue;
- if (vector.DistanceXZ(Center, position) < 600 || !AwayFromPlayers(position, players)) continue;
+ if (!ERR_HunterOpeningRules.InBand(Center, position, Radius) || !AwayFromPlayers(position, players)) continue;
if (!ERR_SupplyConvoyRules.Separated(position, m_Candidates, 100) || !placement.Clear(position, angles[0])) continue;
m_Candidates.Insert(position); m_Angles.Insert(angles);
}
@@ -69,12 +82,12 @@
{
foreach (int index : selected) { Positions.Insert(m_Candidates[index]); Angles.Insert(m_Angles[index]); }
m_Done = true;
- ERR_HQ.Event("HUNTER OPENING", "three clear road starts reserved at least 90 degrees apart; center=" + Center.ToString());
+ ERR_HQ.Event("HUNTER OPENING", string.Format("two UAZs and one troop truck: target radius=%1m (+/-250m), three clear road starts at least 90 degrees apart; center=%2", Radius, Center));
}
else if (m_Scanned == 64)
{
m_Done = true;
- ERR_HQ.Event("HUNTER OPENING FALLBACK", "no three safe, widely separated road starts in 64 candidates; deployment will use checked roads near friendly objectives");
+ ERR_HQ.Event("HUNTER OPENING FALLBACK", string.Format("no three safe, widely separated road starts near %1m in 64 candidates; deployment will use checked roads near friendly objectives, possibly farther away", Radius));
}
}
}
--- a/addons/core/Scripts/Game/ERR/10_AI/ERR_HunterService.c
+++ b/addons/core/Scripts/Game/ERR/10_AI/ERR_HunterService.c
@@ -19,6 +19,8 @@
class ERR_HunterVehicle : ERR_ConvoyVehicle
{
bool TroopTransport;
+ bool OpeningPatrol;
+ vector PatrolHome;
bool RadioRequested;
ref ERR_EnemyEquipmentCallback RadioOperation;
string Source;
@@ -80,6 +82,12 @@
protected float m_NextSpawn;
protected float m_NextSummary;
protected int m_Target = 3;
+ protected int m_OpeningDistance = 1000;
+ // Called once when the round's HQ is created; menu edits affect the next HQ.
+ void ConfigureOpening(int distance)
+ {
+ if (!m_Opening && m_Hunters.IsEmpty() && ERR_Settings.Valid("hunterSpawnDistanceMetres", distance)) m_OpeningDistance = distance;
+ }
protected ref ERR_HunterOpeningPlan m_Opening;
protected ref ERR_HunterCoordination m_Coordination;
bool Contains(SCR_AIGroup group)
@@ -238,6 +246,7 @@
}
ERR_HunterVehicle unit = new ERR_HunterVehicle();
unit.TroopTransport = ERR_HunterFleetRules.Transport(m_Hunters.Count());
+ unit.OpeningPatrol = m_Hunters.Count() < 3; unit.PatrolHome = position;
unit.Source = "aggression-uaz-" + (m_Hunters.Count() + 1).ToString();
if (unit.TroopTransport) unit.Source = "aggression-truck-" + (m_Hunters.Count() + 1).ToString();
ResourceName vehiclePrefab = ERR_HunterFleetRules.VehiclePrefab(m_Hunters.Count());
@@ -282,6 +291,19 @@
return true;
}
protected bool Coordinated(vector position) { return m_Coordination && m_Coordination.Covered(position); }
+ // Before a delivered sighting, opening crews patrol their own deployment
+ // sector. This uses their fixed starting position, never a live player position.
+ protected bool OpeningPatrolPoint(ERR_HunterVehicle unit, out vector destination, out vector angles)
+ {
+ for (int attempt = 0; attempt < 8; attempt++)
+ {
+ vector seed = unit.PatrolHome + Vector(Math.RandomFloat(-300, 300), 0, Math.RandomFloat(-300, 300));
+ if (!ERR_SupplyConvoySystem.ApproachDirected(seed, destination, angles, 150)) continue;
+ if (vector.DistanceXZ(destination, unit.PatrolHome) > 500 || vector.DistanceXZ(destination, unit.Entity.GetOrigin()) < 100) continue;
+ return true;
+ }
+ return false; // Hold/retry rather than sending an opening crew across the island.
+ }
protected void QueueDestination(ERR_HunterVehicle unit, ERR_HQ hq, float now)
{
array<ref ERR_HQReport> reports = {}; hq.HunterContacts(reports, now);
@@ -320,11 +342,19 @@
unit.SourceMessage = 0;
if (unit.Waypoint && !unit.Waypoint.IsWithinCompletionRadius(unit.Group)) return;
bool found;
+ if (unit.OpeningPatrol && !unit.DeliveredContact)
+ {
+ found = OpeningPatrolPoint(unit, destination, angles);
+ reason = "local patrol around opening sector";
+ }
+ else
+ {
for (int i = 0; i < m_Mode.Sites().Count(); i++)
{
ERR_SiteRuntime site = m_Mode.Sites().At(Math.RandomInt(0, m_Mode.Sites().Count()));
if (!site || !site.Definition || !ERR_ObjectiveDefence.Objective(site.Definition.Kind) || (site.Group && site.Group.GetFaction() != m_Mode.EnemyFaction())) continue;
if (ERR_SupplyConvoySystem.ApproachDirected(site.Definition.Position, destination, angles) && vector.DistanceXZ(destination, unit.Entity.GetOrigin()) > 200) { found = true; break; }
+ }
}
if (!found) return;
}
@@ -371,7 +401,7 @@
vector center = m_Mode.PrisonPosition(); vector sum; int count;
foreach (IEntity player : openingPlayers) if (player) { sum += player.GetOrigin(); count++; }
if (count > 0) center = sum / count;
- m_Opening = new ERR_HunterOpeningPlan(center);
+ m_Opening = new ERR_HunterOpeningPlan(center, m_OpeningDistance);
}
if (!m_Opening.Done())
{
--- a/addons/core/UI/layouts/ERR/AdminMenu.layout
+++ b/addons/core/UI/layouts/ERR/AdminMenu.layout
@@ -385,47 +385,52 @@
}
}
TextWidgetClass {
- Name "Label_antiPersonnelMineChancePercent" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 384 OffsetTop 384 SizeX 368 OffsetRight -396 SizeY 28 OffsetBottom -412 }
+ Name "Label_antiPersonnelMineChancePercent" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 384 OffsetTop 384 SizeX 444 OffsetRight -472 SizeY 24 OffsetBottom -408 }
Color 0.9 0.92 0.94 1 Text "Anti-personnel mine carriers (0-100%)" "Font Size" 20 "Min Font Size" 20 Wrap 1 FontProperties FontProperties {
Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt"
}
}
TextWidgetClass {
- Name "Saved_antiPersonnelMineChancePercent" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 416 OffsetTop 416 SizeX 936 OffsetRight -964 SizeY 24 OffsetBottom -440 }
- Color 0.9 0.92 0.94 1 Text "Waiting for saved value" "Font Size" 16 "Min Font Size" 16 Wrap 1 FontProperties FontProperties {
- Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt"
- }
- }
-TextWidgetClass {
- Name "Help_antiPersonnelMineChancePercent" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 440 OffsetTop 440 SizeX 936 OffsetRight -964 SizeY 20 OffsetBottom -460 }
- Color 0.72 0.81 0.87 1 Text "New soldiers only: up to two carried AP mines. Mines are not automatically planted." "Font Size" 16 "Min Font Size" 16 Wrap 1
- FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" }
-}
-
-ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" {
- Name "antiPersonnelMineChancePercent" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 408 OffsetLeft 408 PositionY 384 OffsetTop 384 SizeX 240 OffsetRight -648 SizeY 42 OffsetBottom -426 }
- components {
- SCR_EditBoxComponent "{547290FFBD5B33E9}" {
- m_sLabel ""
- }
- }
- }
-ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" {
- Name "Apply_antiPersonnelMineChancePercent" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 660 OffsetLeft 660 PositionY 384 OffsetTop 384 SizeX 112 OffsetRight -772 SizeY 42 OffsetBottom -426 }
- components {
- SCR_ButtonTextComponent "{5548F0143AE99095}" {
- m_sText "Apply"
- }
- }
- }
-ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" {
- Name "Random_antiPersonnelMineChancePercent" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 784 OffsetLeft 784 PositionY 384 OffsetTop 384 SizeX 180 OffsetRight -964 SizeY 42 OffsetBottom -426 }
- components {
- SCR_ButtonTextComponent "{5548F0143AE99095}" {
- m_sText "Random"
- }
- }
- }
+ Name "Saved_antiPersonnelMineChancePercent" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 452 OffsetTop 452 SizeX 444 OffsetRight -472 SizeY 20 OffsetBottom -472 }
+ Color 0.9 0.92 0.94 1 Text "Waiting for saved value" "Font Size" 16 "Min Font Size" 16 Wrap 1 FontProperties FontProperties {
+ Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt"
+ }
+ }
+TextWidgetClass {
+ Name "Help_antiPersonnelMineChancePercent" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 472 OffsetTop 472 SizeX 444 OffsetRight -472 SizeY 14 OffsetBottom -486 }
+ Color 0.72 0.81 0.87 1 Text "New soldiers only; carried mines are not planted automatically." "Font Size" 12 "Min Font Size" 12 Wrap 1
+ FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" }
+}
+
+ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" {
+ Name "antiPersonnelMineChancePercent" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 412 OffsetTop 412 SizeX 130 OffsetRight -158 SizeY 38 OffsetBottom -450 }
+ components {
+ SCR_EditBoxComponent "{547290FFBD5B33E9}" {
+ m_sLabel ""
+ }
+ }
+ }
+ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" {
+ Name "Apply_antiPersonnelMineChancePercent" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 170 OffsetLeft 170 PositionY 412 OffsetTop 412 SizeX 110 OffsetRight -280 SizeY 38 OffsetBottom -450 }
+ components {
+ SCR_ButtonTextComponent "{5548F0143AE99095}" {
+ m_sText "Apply"
+ }
+ }
+ }
+ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" {
+ Name "Random_antiPersonnelMineChancePercent" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 292 OffsetLeft 292 PositionY 412 OffsetTop 412 SizeX 180 OffsetRight -472 SizeY 38 OffsetBottom -450 }
+ components {
+ SCR_ButtonTextComponent "{5548F0143AE99095}" {
+ m_sText "Random"
+ }
+ }
+ }
+TextWidgetClass { Name "Label_hunterSpawnDistanceMetres" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 384 OffsetTop 384 SizeX 456 OffsetRight -964 SizeY 24 OffsetBottom -408 } Color 0.9 0.92 0.94 1 Text "Opening patrol distance (800-3000 m)" "Font Size" 20 "Min Font Size" 20 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } }
+ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name "hunterSpawnDistanceMetres" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 412 OffsetTop 412 SizeX 130 OffsetRight -638 SizeY 38 OffsetBottom -450 } components { SCR_EditBoxComponent "{547290FFBD5B33E9}" { m_sLabel "" } } }
+ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_hunterSpawnDistanceMetres" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 650 OffsetLeft 650 PositionY 412 OffsetTop 412 SizeX 110 OffsetRight -760 SizeY 38 OffsetBottom -450 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply" } } }
+TextWidgetClass { Name "Saved_hunterSpawnDistanceMetres" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 452 OffsetTop 452 SizeX 456 OffsetRight -964 SizeY 20 OffsetBottom -472 } Color 0.9 0.92 0.94 1 Text "Waiting for saved value" "Font Size" 16 "Min Font Size" 16 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } }
+TextWidgetClass { Name "Help_hunterSpawnDistanceMetres" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 472 OffsetTop 472 SizeX 456 OffsetRight -964 SizeY 14 OffsetBottom -486 } Color 0.9 0.92 0.94 1 Text "UAZs + truck; next round. Safe terrain fallback may be farther." "Font Size" 12 "Min Font Size" 12 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } }
} }
FrameWidgetClass { Name "WorldPage" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 0 OffsetLeft 0 PositionY 160 OffsetTop 160 SizeX 1000 OffsetRight -1000 SizeY 486 OffsetBottom -646 } {
TextWidgetClass {
--- a/tests/test_admin_menu.py
+++ b/tests/test_admin_menu.py
@@ -10,7 +10,7 @@
layout = BASE / 'addons/core/UI/layouts/ERR/AdminMenu.layout'
keys = re.findall(r'"([A-Za-z]+)"', body(source, 'static array<string> Keys('))
settings = re.findall(r'"([A-Za-z]+)"', body(BASE / 'addons/core/Scripts/Game/ERR/00_Core/ERR_Settings.c', 'static array<string> Keys('))
-assert len(keys) == 18 and set(settings) - set(keys) == {"automaticConvoyEnabled", "keepWeaponOnUnconscious", "automaticEquipmentChancePercent"}
+assert len(keys) == 19 and set(settings) - set(keys) == {"automaticConvoyEnabled", "keepWeaponOnUnconscious", "automaticEquipmentChancePercent"}
assert set(keys) <= set(settings) # Every menu field must have a server setting.
# Native layouts place child widget declarations inside an anonymous Children
# block. A missing brace can preserve most widget names yet prevent menu load.
@@ -48,7 +48,7 @@
assert len(names) == len(set(names)), 'Menu widget names must be unique'
for key in keys:
assert all(name in names for name in (key, 'Apply_' + key, 'Saved_' + key, 'Help_' + key))
- if key not in ('startMode','civilianTrafficCount','roadblockCount'): assert ('Default_' if key == 'viewDistanceMetres' else 'Random_') + key in names
+ if key not in ('startMode','civilianTrafficCount','roadblockCount','hunterSpawnDistanceMetres'): assert ('Default_' if key == 'viewDistanceMetres' else 'Random_') + key in names
else: assert 'Random_startMode' not in names
for name in ('Close', 'SettingsPage', 'HQPage', 'JournalPage', 'JournalText', 'JournalContent', 'JournalScroll', 'PauseJournal', 'LatestJournal', 'Status'):
assert name in names
@@ -99,7 +99,7 @@
{"intelRevealChancePercent","intel reveal"},{"startTimeMinutes","mission time"},
{"timeMultiplier","mission speed"},{"startDateCode","mission date"},
{"weatherProfile","mission weather"},{"viewDistanceMetres","mission viewdistance"},{"reportIntervalSeconds","hq interval"},
- {"roadblockCount","mission roadblocks"},{"civilianTrafficCount","mission traffic"},{"heliTimerMinutes","hq heli timer"},{"supportSquadLimit","hq squads"},{"responseRadiusMetres","hq radius"},{"convoyCount","hq convoy count"},{"antiAirChancePercent","hq aa"},{"antiPersonnelMineChancePercent","hq mines"}};
+ {"hunterSpawnDistanceMetres","mission hunterdistance"},{"roadblockCount","mission roadblocks"},{"civilianTrafficCount","mission traffic"},{"heliTimerMinutes","hq heli timer"},{"supportSquadLimit","hq squads"},{"responseRadiusMetres","hq radius"},{"convoyCount","hq convoy count"},{"antiAirChancePercent","hq aa"},{"antiPersonnelMineChancePercent","hq mines"}};
for(auto pair:cases){
assert(Fields::Command(pair.first," 42 ")==pair.second+" set 42");
assert(Fields::Command(pair.first,"Random")==pair.second+" set Random");
@@ -122,7 +122,7 @@
for(string key:{"intelRevealChancePercent","radioDefenceSeconds","startTimeMinutes","timeMultiplier","startDateCode","weatherProfile"}) assert(Fields::Available(key,false,false));
}
''')
-print('PASS: actual menu command routing covers all eighteen settings, rejects unsupported keys, gates companions, and matches unique authored widgets')
+print('PASS: actual menu command routing covers all nineteen settings, rejects unsupported keys, gates companions, and matches unique authored widgets')
assert all(name in names for name in ('KeepWeaponOn', 'KeepWeaponOff', 'Saved_keepWeaponOnUnconscious'))
click=body(source,'protected void OnButton(')
--- a/tests/test_hunter_opening.py
+++ b/tests/test_hunter_opening.py
@@ -2,7 +2,8 @@
import re
from policy_harness import ROOT, body, run
rules_path=ROOT/'addons/core/Scripts/Game/ERR/10_AI/ERR_HunterOpeningPlan.c'
-rules='\n'.join(body(rules_path,x) for x in ('static bool Spread(', 'static bool FreshOrder(', 'static bool Select('))
+rules='\n'.join(body(rules_path,x) for x in ('static bool InBand(', 'static float ScanRadius(', 'static bool Spread(', 'static bool FreshOrder(', 'static bool Select('))
+rules=rules.replace('ERR_ForceRules.FiniteVector', 'FiniteVector').replace('ERR_ForceRules.Finite', 'std::isfinite').replace('Math.Max', 'std::max<float>')
rules=re.sub(r'\bvector (?=\w)', 'Vec ', rules).replace('vector.', 'Geometry::').replace('array<vector> candidates','Array<Vec> candidates').replace('array<int> selected','Array<int>& selected')
p=ROOT/'addons/core/Scripts/Game/ERR/10_AI/ERR_HunterService.c'
queue=body(p,'protected void QueueDestination(').replace('protected ','').replace('foreach (','for (')
@@ -28,6 +29,7 @@
using string=std::string;
template<class... T>string Format(string,T...){return "investigate";}void Event(string,string,int){}
struct Vec{float x=0,y=0,z=0;float& operator[](int i){return i==0?x:i==1?y:z;}Vec operator-(Vec b){return {x-b.x,y-b.y,z-b.z};}string ToString(){return "position";}};
+bool FiniteVector(Vec v){return std::isfinite(v.x)&&std::isfinite(v.y)&&std::isfinite(v.z);}
namespace Geometry{float DistanceXZ(Vec a,Vec b){return std::hypot(a.x-b.x,a.z-b.z);}float Dot(Vec a,Vec b){return a.x*b.x+a.y*b.y+a.z*b.z;}}
template<class T>struct Array:std::vector<T>{using std::vector<T>::vector;int Count(){return this->size();}void Insert(T v){this->push_back(v);}void Clear(){this->clear();}};
struct ERR_HunterOpeningRules{
@@ -37,7 +39,7 @@
struct Entity{Vec GetOrigin(){return {};}};
struct Waypoint{bool complete=false;bool IsWithinCompletionRadius(Group*){return complete;}};
struct Route{};
-struct ERR_HunterVehicle{float NextOrder=99999,LastContact=-1,NextContactOrder=0;Route* Downlink=nullptr;int SourceMessage=0;Vec Destination,ContactPosition,DeliveredContactPosition;bool DeliveredContact=false;string Source="hunter";struct Group* Group=nullptr;struct Entity* Entity=nullptr;struct Waypoint* Waypoint=nullptr;};
+struct ERR_HunterVehicle{bool OpeningPatrol=false,TroopTransport=false;Vec PatrolHome;float NextOrder=99999,LastContact=-1,NextContactOrder=0;Route* Downlink=nullptr;int SourceMessage=0;Vec Destination,ContactPosition,DeliveredContactPosition;bool DeliveredContact=false;string Source="hunter";struct Group* Group=nullptr;struct Entity* Entity=nullptr;struct Waypoint* Waypoint=nullptr;};
struct ERR_HQReport{int Target=1;};
struct ERR_HQBelief{bool actionable=true;float ObservedAt=10,Confidence=1,Radius=50;int MessageId=7;Vec PredictedPosition={1000,0,2000};bool Actionable(){return actionable;}};
struct Memory{ERR_HQBelief belief;ERR_HQBelief* Get(int){return &belief;}};
@@ -48,12 +50,23 @@
namespace Math{int RandomInt(int,int){return 0;}}
namespace ERR_ObjectiveDefence{bool Objective(int){return true;}}
namespace ERR_SupplyConvoySystem{bool available=true;int calls=0;bool ApproachDirected(Vec p,Vec& dst,Vec& angles,float radius=500){calls++;dst=p;return available;}}
-struct Service{bool coordinated=false;bool Coordinated(Vec){return coordinated;}Mode mode;Mode* m_Mode=&mode;
+struct Service{int localCalls=0;bool localRoad=true;bool OpeningPatrolPoint(ERR_HunterVehicle*,Vec& point,Vec&){localCalls++;point={800,0,0};return localRoad;}bool coordinated=false;bool Coordinated(Vec){return coordinated;}Mode mode;Mode* m_Mode=&mode;
'''+queue+r'''
};
Vec polar(float degrees,float radius=1000){return {std::sin(degrees*3.14159265f/180)*radius,0,std::cos(degrees*3.14159265f/180)*radius};}
int main(){
Array<int> chosen;Vec center;
+ assert(ERR_HunterOpeningRules::InBand(center,polar(0,750),1000));
+ assert(ERR_HunterOpeningRules::InBand(center,polar(0,1250),1000));
+ assert(!ERR_HunterOpeningRules::InBand(center,polar(0,749),1000));
+ assert(!ERR_HunterOpeningRules::InBand(center,polar(0,1251),1000));
+ assert(!ERR_HunterOpeningRules::InBand(center,polar(0,599),800));
+ assert(ERR_HunterOpeningRules::InBand(center,polar(0,600),800));
+ assert(!ERR_HunterOpeningRules::InBand(center,polar(0,1000),0));
+ assert(ERR_HunterOpeningRules::ScanRadius(1000,0)==1000);
+ assert(ERR_HunterOpeningRules::ScanRadius(1000,1)==850);
+ assert(ERR_HunterOpeningRules::ScanRadius(1000,2)==1150);
+ assert(ERR_HunterOpeningRules::ScanRadius(1000,3)==1000);
assert(ERR_HunterOpeningRules::Select(center,{polar(0),polar(120),polar(240)},chosen)&&chosen.Count()==3);
assert(!ERR_HunterOpeningRules::Select(center,{polar(0),polar(5),polar(10)},chosen)&&chosen.empty());
assert(!ERR_HunterOpeningRules::Spread(center,polar(359),polar(1)));
@@ -63,6 +76,15 @@
assert(!ERR_HunterOpeningRules::FreshOrder(10,10,100,0,false));
assert(!ERR_HunterOpeningRules::FreshOrder(11,10,100,101,false));
assert(!ERR_HunterOpeningRules::FreshOrder(11,10,100,0,true));
+ // Both opening vehicle types use a local patrol until a delivered contact.
+ for(bool transport:{false,true}){
+ Service opening;ERR_HQ command;ERR_HunterVehicle crew;crew.OpeningPatrol=true;crew.TroopTransport=transport;crew.NextOrder=0;
+ opening.QueueDestination(&crew,&command,100);assert(opening.localCalls==1&&command.requests==1&&crew.SourceMessage==0&&crew.Destination.x==800);
+ crew.Downlink=nullptr;crew.NextOrder=0;opening.localRoad=false;
+ opening.QueueDestination(&crew,&command,200);assert(command.requests==1); // unsafe/absent local road holds, no distant fallback
+ crew.NextOrder=0;command.contact=true;
+ opening.QueueDestination(&crew,&command,300);assert(command.requests==2&&crew.SourceMessage==7&&crew.Destination.x==1000);
+ }
Service service;ERR_HQ hq;ERR_HunterVehicle unit;Route patrol;unit.Downlink=&patrol;
service.QueueDestination(&unit,&hq,100);assert(unit.Downlink==&patrol&&hq.requests==0); // no magical position
hq.contact=true;service.QueueDestination(&unit,&hq,100);
--- a/tests/test_start_settings.py
+++ b/tests/test_start_settings.py
@@ -56,6 +56,12 @@
disk["old"]={{"reportIntervalSeconds",10},{"supportSquadLimit",4},{"responseRadiusMetres",2000},{"aiIntelChancePercent",60},{"intelRevealChancePercent",15},{"radioDefenceSeconds",180}};
ERR_Settings settings;assert(settings.Read("old",settings.m_Values)&&settings.Get("startMode")==0);
for(float bad:{-1.f,-2.f,2.f,.5f}){disk["bad"]=disk["old"];disk["bad"]["startMode"]=bad;Values ignored;assert(!settings.Read("bad",ignored));}
+ assert(settings.Get("hunterSpawnDistanceMetres")==1000);
+ assert(!ERR_Settings::Randomizable("hunterSpawnDistanceMetres"));
+ assert(!settings.Set("hunterSpawnDistanceMetres",799)&&!settings.Set("hunterSpawnDistanceMetres",3001));
+ assert(settings.Set("hunterSpawnDistanceMetres",1800));
+ ERR_Settings savedRadius;assert(savedRadius.Read("settings",savedRadius.m_Values)&&savedRadius.Get("hunterSpawnDistanceMetres")==1800);
+ failSave=true;assert(!settings.Set("hunterSpawnDistanceMetres",1000)&&settings.Get("hunterSpawnDistanceMetres")==1800);failSave=false;
Mode mode{&settings,0};Admin admin;Array<string> replies;
assert(!admin.StartCommand(&mode,{"mission","radio","show"},replies));
assert(admin.StartCommand(&mode,{"mission","start","set","crash"},replies));
@@ -0,0 +1,789 @@
PASS: traffic distance/grace, all-observer veto, player claims, foreign custody, bounded spawn cadence, failure/stall retention and shutdown preserve nearby/claimed entities
PASS: actual observer collection includes spectator targets and controlled bodies; missing views/controllers and open editor cameras veto spawn/cleanup
PASS: civilian traffic defaults to three; menu command resolves to persisted 0..6 setting with zero disabling new cars
PASS: bounded exit-road selection can turn along a coastline when the opposite road is unavailable; no-route case is withheld
PASS: managed traffic pins both native garbage entries; release/retirement removes only those pins, including partial creation
PASS: exhausted/blocked terrain opening falls back to checked objective roads; bounds, player clearance, separation, force cap and retry delay retained
PASS: separated rear vehicle approaches, opposite infantry sectors, radio-gated ownership, failed-order preservation, visual cover or bounded supported reconnaissance, bounded dismount/search/regroup and loss cleanup
PASS: production dismount/boarding allocation, all crew allowances, waypoint ownership, one-time vehicle detach/restore and capture/teardown guards
PASS: covering support requires the original conscious turret gunner, valid mounted driver, live crew and delivered assignment
PASS: only original fit loaded healthy uncaptured gunners stay mounted; driver can leave; infantry readiness excludes the retained gunner but regroup requires all survivors
PASS: actual HQ allocator selects reachable reports, distinct cover/flanks, simultaneous fronts, bounded reservations and failed-radio/placement rollback
PASS: shared own-force attack spacing, own-group refresh, exact release, expiry/deletion, finite capacity and fresh confirmed sighting-only flank permission
PASS: actual convoy foot transport detachment is idempotent; regroup restores only its live friendly uncaptured original truck
PASS: opposing native flank orders are transactional; arrived teams sweep twice, travelling/boarding teams retain orders, failed redirects retry and replayed contacts are ignored
PASS: expired-report approach, arrival-only search, completion, newer/older/replayed reports, visual priority, interrupted search and bounded travel
PASS: nearest reported idle team, blocked teams, guards, active/pending orders, combat, radio routes, stale status and distance limit
PASS: six editor listeners transferred idempotently, unrelated handlers retained, authority guard and lifecycle ordering
PASS: takeover reconnect creates only missing managers, restores native roles, never grants non-admin access, skips stale/disconnected/client states
PASS: Game Master button becomes enabled on native permission arrival and disabled on revocation; no permission bypass
PASS: shared config transaction rejects client writes, preserves first-save/prior/fallback state across open, write, backup, partial-copy, readback and mismatch failures
PASS: actual Save/Commit preserves semantically valid backup across unrelated menu edits and repairs; unknown fields/default sections retained; actual terrain parser; other parsers, catalog and disk doubled
.....TTS request rejected: authentication failed (403)
TTS request completed (200)
...TTS request completed (200)
TTS request completed (200)
..
----------------------------------------------------------------------
Ran 10 tests in 0.514s
OK
PASS: actual welcome tick waits for URL/readiness/server permit, preserves local once-only state across worlds and refuses stopped callbacks
PASS: account greeting survives client/controller/round changes; owner validation, delayed readiness, idempotent retry, stale replies and bounded ledger
PASS: original body/equipment retained past old timeout; expiry, death, canonical account/body, occupied controller, failed handoff and no replacement life
PASS: actual view buffer validates samples, follows position/roll/FOV, rejects stale/foreign/reordered data, interpolates without drift and expires gaps
PASS: actual relay rejects noncanonical sources, live/foreign/stale viewers, invalid/replayed/fast packets; bounds leases and owner-only target delivery
PASS: native head/helmet fade is local, target-scoped, restored on exit/switch and does not overwrite a later camera owner
PASS: production TTS settings/test/enable/failure/disable/timeout flows preserve fallback, secrets, authorization, saved state and late-callback cancellation
PASS: TTS admin authorization, limits, case preservation and menu control contract
PASS: 37 prefabs have unique saved root entity IDs
PASS: actual objective overlay lifecycle preserves separate ownership, late readiness/reopen, data refresh, pan/zoom/culling, supported sibling/shared-frame parents, coordinate offsets, native task-clear isolation and terminal cleanup; native rendering remains unverified
PASS: actual map element initializes each widget, retries missing widgets, updates position and changes only stale text/icon data; no native image-load claim
PASS: actual native fixture root/config ownership and idempotent cleanup preserve foreign map, selector excludes ordinary route, fixed budgets/screenshots/UGC boundaries retained; native operations not executed
PASS: actual full Inspect rejects canvas parenting, wrong active container/canvas, omitted origin offset, wrong rendered box and stale coordinates; differing origins and DPI accepted
PASS: actual long-warning phases retain visible label through1500ms checkpoint then restore radio before close; synthetic marker separated from unmoved player
PASS: actual Center places marker100screenpx left of pan center at both fixture zooms without altering disclosed coordinates
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 protected/capped damage plus exact-actor terminal fixture bypass through delayed native damage, fail-closed ownership and untouched ordinary actor; no native claim
PASS: actual full planner selection/commit body, 360 equivalence scenarios, orders/reservations/cooldowns identical; one128-unit scan vs >10000 repeated unit visits; no FPS claim
PASS: actual observer monitor/recovery/cleanup rejects retained old controller, preserves new camera/editor/hints/timer, restarts once and retains normal recovery; native effects modeled from SDK, no runtime claim
PASS: former chat controller releases only its own callbacks and preserves replacement menu; current-owner stop/scope and repeated teardown remain intact
PASS: wrong observer fixture selector rejected before runtime/profile setup; no engine launched
PASS: actual depot mixed-roster worker/item selection, ownership/refusal and radio/planning/two-leg state transitions, fixed deadline, late proof quarantine, finite import and no adoption after Stop
PASS: actual depot HQ lifecycle, existing planner priority, server/mode/owner gates, idempotent polling and owner replacement
PASS: actual HQ mine/magazine claim separation, real demand methods, exact token cleanup and original authority gates; native availability doubled
PASS: actual full magazine/inert-PMN4 depot leaf, exact custody, isolated callbacks, finite reservation, false/unknown and Stop quarantine, once-only delivery and caps; native movement unqualified
PASS: actual mine/magazine provenance and separated finite mine imports; actual authored identity capture, READY-only detached provenance, same shared stock admission, completed exact two-leg proof, lifetime caps and Stop no late adoption
PASS: 299 original script entries tracked across 18 unfinished responsibilities
PASS: 1 isolated addons, acyclic dependencies, 59 unique resources, exact vanilla/authorized external references
PASS: road width/bridge/length checks, prison and post spacing, setting bounds/default, finite startup and owned HQ admission
PASS: actual crash geometry, detached definition setup, frozen server choice and guarded phase policy; integration/source ordering checked
PASS: actual GameMode readiness admission and common full-footprint survey require crash authorization and both surveyed areas
PASS: actual start defaults/parse/save, failure retention and authorized command wiring; current/next feedback, aliases and no random choice; native UI and core mode freezing are separate
PASS: actual immutable measured footprint/root/attachment matching, bounds/transforms, moving geometry, seated-body and cargo reciprocity, finite hierarchy caps; native geometry doubled
PASS: actual BMP singleton geometry and typed current order; one survey, full straight segment, width, known history, reservations, settlement/clearance and work caps; placement/footprint tested separately
PASS: actual five random-radius diagnostic wrappers, disabled transparency, cached opt-in, exact zero and exclusion branch, native arguments/returns/outarg preservation, single superclass call and shared16-log cap
PASS: zero-radius trace disabled by default, scoped before setup, exact opt-in emission; no native launch
PASS: complete actual supply-travel probe, immutable 6+2 formations and 25 actors, admission/travel deadlines, six observed native-boundary moves, stop/ownership/partial-substitution refusals
PASS: actual distinct supply-travel hook, fixed420s selector, original observer protection/restoration, failure/terminal cleanup and no legacy convoy setup
PASS: actual supply-travel selector requires Chat, one round and480s; existing outcomes unaffected; no native launch
usage: test_native_mounted_intercept.py [-h] [--steam STEAM]
[--external-addons EXTERNAL_ADDONS]
--compat COMPAT --profile PROFILE
[--smoke {crash-start,crash-geometry,normal-escape-route,escape-route,optional-site-skip,infantry-combat,medical-combat,hunter-faction,unconscious-camera,objective-map,town-garrisons,site-garrisons,radio-interaction,enemy-loadout,aggression,air-logistics,air-assault,air-recon,airfield-markers,opening-tools,mortar-station,generated-sites,hq-local-handoff,infantry-transfer,hq-body,convoy,supply-convoys,supply-travel,mounted-ammo,alarm-hearing,hq-memory,hq-awareness,aircraft-field,aircraft-route,native-end-active,native-end-preparing,aircraft-control,aircraft-cancel,aircraft-translate,map-ownership,mortar-refresh,mortar-salvo,mortar-courier,station-teardown,inventory-hitzone,prison-breach,powered-flight,powered-translate,local-admission,mortar-expiry,mortar-transfer,mortar-fire,patrol-hq,victory,lost-helicopter,player-death,radio-network,hq-response,mortar-inventory,startup-failure,site-survey,cache-loss,extraction-capacity,early-helicopter-loss,extraction-startup-failure,extraction-boundary-failure,transport-loss,transport-survey,lifecycle,objective-ui,recovery,prisoner-kit,medical,casualty-load,casualty-direct,casualty-bench,casualty-remove,environment,environment-restart,patrols,radio-document-loss,radio-document-loss-partial,guard-cancel,casualty-service}]
[--trace-random-radius]
[--maintenance-refuel]
[--mounted-swap-eligibility]
[--mounted-bmp] [--mine-stock]
[--mounted-courier]
[--mounted-intercept] [--convoy-cover]
[--field-terrain-audit]
[--field-service-cancel]
[--route-service-cancel]
[--station-teardown-diagnostics]
[--flight-autohover]
[--flight-action-inputs]
[--flight-input-diagnostics]
[--recon-takeover-only]
[--body-recovery-only]
[--rounds ROUNDS] [--timeout TIMEOUT]
[--project {core,chat}]
test_native_mounted_intercept.py: error: --mounted-intercept requires Chat --smoke convoy, one round and timeout at least900 seconds
usage: test_native_mounted_intercept.py [-h] [--steam STEAM]
[--external-addons EXTERNAL_ADDONS]
--compat COMPAT --profile PROFILE
[--smoke {crash-start,crash-geometry,normal-escape-route,escape-route,optional-site-skip,infantry-combat,medical-combat,hunter-faction,unconscious-camera,objective-map,town-garrisons,site-garrisons,radio-interaction,enemy-loadout,aggression,air-logistics,air-assault,air-recon,airfield-markers,opening-tools,mortar-station,generated-sites,hq-local-handoff,infantry-transfer,hq-body,convoy,supply-convoys,supply-travel,mounted-ammo,alarm-hearing,hq-memory,hq-awareness,aircraft-field,aircraft-route,native-end-active,native-end-preparing,aircraft-control,aircraft-cancel,aircraft-translate,map-ownership,mortar-refresh,mortar-salvo,mortar-courier,station-teardown,inventory-hitzone,prison-breach,powered-flight,powered-translate,local-admission,mortar-expiry,mortar-transfer,mortar-fire,patrol-hq,victory,lost-helicopter,player-death,radio-network,hq-response,mortar-inventory,startup-failure,site-survey,cache-loss,extraction-capacity,early-helicopter-loss,extraction-startup-failure,extraction-boundary-failure,transport-loss,transport-survey,lifecycle,objective-ui,recovery,prisoner-kit,medical,casualty-load,casualty-direct,casualty-bench,casualty-remove,environment,environment-restart,patrols,radio-document-loss,radio-document-loss-partial,guard-cancel,casualty-service}]
[--trace-random-radius]
[--maintenance-refuel]
[--mounted-swap-eligibility]
[--mounted-bmp] [--mine-stock]
[--mounted-courier]
[--mounted-intercept] [--convoy-cover]
[--field-terrain-audit]
[--field-service-cancel]
[--route-service-cancel]
[--station-teardown-diagnostics]
[--flight-autohover]
[--flight-action-inputs]
[--flight-input-diagnostics]
[--recon-takeover-only]
[--body-recovery-only]
[--rounds ROUNDS] [--timeout TIMEOUT]
[--project {core,chat}]
test_native_mounted_intercept.py: error: --mounted-intercept requires Chat --smoke convoy, one round and timeout at least900 seconds
usage: test_native_mounted_intercept.py [-h] [--steam STEAM]
[--external-addons EXTERNAL_ADDONS]
--compat COMPAT --profile PROFILE
[--smoke {crash-start,crash-geometry,normal-escape-route,escape-route,optional-site-skip,infantry-combat,medical-combat,hunter-faction,unconscious-camera,objective-map,town-garrisons,site-garrisons,radio-interaction,enemy-loadout,aggression,air-logistics,air-assault,air-recon,airfield-markers,opening-tools,mortar-station,generated-sites,hq-local-handoff,infantry-transfer,hq-body,convoy,supply-convoys,supply-travel,mounted-ammo,alarm-hearing,hq-memory,hq-awareness,aircraft-field,aircraft-route,native-end-active,native-end-preparing,aircraft-control,aircraft-cancel,aircraft-translate,map-ownership,mortar-refresh,mortar-salvo,mortar-courier,station-teardown,inventory-hitzone,prison-breach,powered-flight,powered-translate,local-admission,mortar-expiry,mortar-transfer,mortar-fire,patrol-hq,victory,lost-helicopter,player-death,radio-network,hq-response,mortar-inventory,startup-failure,site-survey,cache-loss,extraction-capacity,early-helicopter-loss,extraction-startup-failure,extraction-boundary-failure,transport-loss,transport-survey,lifecycle,objective-ui,recovery,prisoner-kit,medical,casualty-load,casualty-direct,casualty-bench,casualty-remove,environment,environment-restart,patrols,radio-document-loss,radio-document-loss-partial,guard-cancel,casualty-service}]
[--trace-random-radius]
[--maintenance-refuel]
[--mounted-swap-eligibility]
[--mounted-bmp] [--mine-stock]
[--mounted-courier]
[--mounted-intercept] [--convoy-cover]
[--field-terrain-audit]
[--field-service-cancel]
[--route-service-cancel]
[--station-teardown-diagnostics]
[--flight-autohover]
[--flight-action-inputs]
[--flight-input-diagnostics]
[--recon-takeover-only]
[--body-recovery-only]
[--rounds ROUNDS] [--timeout TIMEOUT]
[--project {core,chat}]
test_native_mounted_intercept.py: error: --mounted-intercept requires Chat --smoke convoy, one round and timeout at least900 seconds
usage: test_native_mounted_intercept.py [-h] [--steam STEAM]
[--external-addons EXTERNAL_ADDONS]
--compat COMPAT --profile PROFILE
[--smoke {crash-start,crash-geometry,normal-escape-route,escape-route,optional-site-skip,infantry-combat,medical-combat,hunter-faction,unconscious-camera,objective-map,town-garrisons,site-garrisons,radio-interaction,enemy-loadout,aggression,air-logistics,air-assault,air-recon,airfield-markers,opening-tools,mortar-station,generated-sites,hq-local-handoff,infantry-transfer,hq-body,convoy,supply-convoys,supply-travel,mounted-ammo,alarm-hearing,hq-memory,hq-awareness,aircraft-field,aircraft-route,native-end-active,native-end-preparing,aircraft-control,aircraft-cancel,aircraft-translate,map-ownership,mortar-refresh,mortar-salvo,mortar-courier,station-teardown,inventory-hitzone,prison-breach,powered-flight,powered-translate,local-admission,mortar-expiry,mortar-transfer,mortar-fire,patrol-hq,victory,lost-helicopter,player-death,radio-network,hq-response,mortar-inventory,startup-failure,site-survey,cache-loss,extraction-capacity,early-helicopter-loss,extraction-startup-failure,extraction-boundary-failure,transport-loss,transport-survey,lifecycle,objective-ui,recovery,prisoner-kit,medical,casualty-load,casualty-direct,casualty-bench,casualty-remove,environment,environment-restart,patrols,radio-document-loss,radio-document-loss-partial,guard-cancel,casualty-service}]
[--trace-random-radius]
[--maintenance-refuel]
[--mounted-swap-eligibility]
[--mounted-bmp] [--mine-stock]
[--mounted-courier]
[--mounted-intercept] [--convoy-cover]
[--field-terrain-audit]
[--field-service-cancel]
[--route-service-cancel]
[--station-teardown-diagnostics]
[--flight-autohover]
[--flight-action-inputs]
[--flight-input-diagnostics]
[--recon-takeover-only]
[--body-recovery-only]
[--rounds ROUNDS] [--timeout TIMEOUT]
[--project {core,chat}]
test_native_mounted_intercept.py: error: --mounted-intercept requires Chat --smoke convoy, one round and timeout at least900 seconds
usage: test_native_mounted_intercept.py [-h] [--steam STEAM]
[--external-addons EXTERNAL_ADDONS]
--compat COMPAT --profile PROFILE
[--smoke {crash-start,crash-geometry,normal-escape-route,escape-route,optional-site-skip,infantry-combat,medical-combat,hunter-faction,unconscious-camera,objective-map,town-garrisons,site-garrisons,radio-interaction,enemy-loadout,aggression,air-logistics,air-assault,air-recon,airfield-markers,opening-tools,mortar-station,generated-sites,hq-local-handoff,infantry-transfer,hq-body,convoy,supply-convoys,supply-travel,mounted-ammo,alarm-hearing,hq-memory,hq-awareness,aircraft-field,aircraft-route,native-end-active,native-end-preparing,aircraft-control,aircraft-cancel,aircraft-translate,map-ownership,mortar-refresh,mortar-salvo,mortar-courier,station-teardown,inventory-hitzone,prison-breach,powered-flight,powered-translate,local-admission,mortar-expiry,mortar-transfer,mortar-fire,patrol-hq,victory,lost-helicopter,player-death,radio-network,hq-response,mortar-inventory,startup-failure,site-survey,cache-loss,extraction-capacity,early-helicopter-loss,extraction-startup-failure,extraction-boundary-failure,transport-loss,transport-survey,lifecycle,objective-ui,recovery,prisoner-kit,medical,casualty-load,casualty-direct,casualty-bench,casualty-remove,environment,environment-restart,patrols,radio-document-loss,radio-document-loss-partial,guard-cancel,casualty-service}]
[--trace-random-radius]
[--maintenance-refuel]
[--mounted-swap-eligibility]
[--mounted-bmp] [--mine-stock]
[--mounted-courier]
[--mounted-intercept] [--convoy-cover]
[--field-terrain-audit]
[--field-service-cancel]
[--route-service-cancel]
[--station-teardown-diagnostics]
[--flight-autohover]
[--flight-action-inputs]
[--flight-input-diagnostics]
[--recon-takeover-only]
[--body-recovery-only]
[--rounds ROUNDS] [--timeout TIMEOUT]
[--project {core,chat}]
test_native_mounted_intercept.py: error: --mounted-intercept and --convoy-cover are mutually exclusive
PASS: actual native interception witness requires real radio cursor/lineage, original actor identities, fixed movement/hold/expiry/resume and immutable deadline; no movement/delivery injection
PASS: actual CLI rejects wrong mode/project/rounds/899s/conflict before runtime; valid flag and terminal branch identify synthetic-observation qualification
PASS: visible base hook and actual fixture override delegate once; delivery proof uses retained pre-super route only on successful production transition
actual mounted HQ dispatch planning, radio, ownership and lifecycle checks passed
PASS: actual mounted intercept eligibility/order chronology, fixed destinations, native road selection bounds, width, segment heading, clearance and settlement delegation; no native driving claim
PASS: actual paired arc geometry,40m/80m spacing, separate original polylines, both-position validation and128road/4096segment budget; no native driving proof
PASS: actual typed original BMP singleton, loss/footprint/custody guards and native cancellation, UAZ-only pair admission, rollback, native allocation/revocation boundaries, per-member ownership, hold and expiry
PASS: actual Tick clock initialization admits fractional first ticks and expires without extending the original start
PASS: actual finite conservation/deadline/callback policies; read-only selection, bounded once-only inventory submission and no can refill; native transfer not executed
PASS: actual exact-context membership, bounded identity/reach gates, native start/cache/eligibility ordering and no duplicate/foreign action start; fuel manager identity and empty-can headroom guards checked
PASS: actual detached node/value snapshot and conservation refuse mismatched lengths before indexed reads, retain original identities under native out-array aliasing and log bounded counts once; native cause remains unknown
PASS: actual mine evidence sealing/recovery, historical coarse publication, caps, canonical ownership, marker join retry/owner-change/stop; native arming and replicated vector-array transport untested
PASS: actual full document recovery retains authored/sealed targets, one shared spent ledger, retry/exhaustion semantics and canonical multi-player ownership alongside supplemental mine intel
PASS: actual infantry search suspension, quiet grace, finite resume, expiry/replacement and defensive/ownership boundaries
PASS: infantry combat gate precedes radio delivery and preserves non-task transports
PASS: actual HQ contact transition wakes only fit squad members, cancels only task orders and logs changes once
PASS: actual finite medicine grants, authored stock deduction, full-backpack refusal/pouch fallback, no loot replenishment, unresolved-operation quarantine and ownership/stop guards
PASS: only recent native detected/identified threats suspend hunter travel; stale/disarmed/destroyed contacts cannot strand patrols
PASS: actual hunter combat transition cancels only its travel once, holds through renewed contact and resumes after quiet; unregistered startup preserved
PASS: captured sighting retention, immutable details, expiry, replay rejection, bounded sound uncertainty/cooldown, radio loss, priority and overdue-status fairness
PASS: arrow press/release, held keys, opposing keys, disabled/menu input and firearm-only retention
PASS: town trigger and hard 700m exclusion for all observers, empty/invalid positions and final-check crossings
PASS: exact finite site squads, invalid roster/count rejection, committed-site spacing and safe fallback boundary
PASS: mortar couriers use the mobile site team and refuse permanent-only garrisons
PASS: omitted preferred mortar depot selects a surviving owned camp/mobile team; no camp, foreign cache and permanent-only sites are unavailable; historical priority retained
PASS: real-session mortar deadline, failed-support convoy admission and hunter survivor/recovery gates
PASS: native-route retry preserves delivered target, limits attempts and suspends during combat
PASS: stale/deleted AI utility cannot receive Complete; mortar HQ preflight withholds unsafe orders; mounted convoy cover never creates infantry Defend
PASS: flight crew affiliation and group precede native boarding; preparation remains bounded even while passengers wait
PASS: factionless/deleted map targets do not abort perception; faction lookup tolerates teardown; deleting helicopter releases without capture/engine access
PASS: shoot adapter waits for a physical round; bounded same-shell retries, interrupted/never-started loads, committed no-retry, order/owner changes and normal native delegation
PASS: missing/invalid faction crew defers before any native spawn or allowance insertion; all registered RHS factions have explicit soldier and medic profiles
PASS: vehicle radio issued once; pending, refusal and looting cannot duplicate or fabricate a physical radio link
PASS: actual vehicle-radio link requires the original seated crew, physical manpack and live uncaptured mission vehicle; looting, dismount, release and teardown remove it
PASS: actual hunter release preserves survivors/HQ, releases driving ownership once, delegates capture/teardown, and excludes prison/patrol/mortar from generic objective defence
PASS: actual player-entry hook latches original hunter capture before native callbacks; both release layers cancel ownership without new entities/refund; bounded current-owner guards and prior-release policy
PASS: real opening road geometry enforces wide azimuths; fresh delivered contact preempts patrol cooldown, respects radio failures and does not starve in-flight interception
PASS: delivered ground search survives the 60-second mortar cutoff, with five-minute/500m uncertainty bounds and no live target reads; mortar policy unchanged
PASS: actual scoped 10% tighter REGULAR aim error and alert perception; preserves equipment multiplier and restores vanilla behavior when unbound
PASS: physical inspection and parent-wreck retention; server-only searched/report delivery unlocks native cleanup once with a 300-second delay
PASS: bounded same-group empty-spawn retries, no casualty refill, queue retirement, delivery-gated intel, prepared-team reuse, throttled diagnostics and LOD release
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: actual ammunition cargo selector handles empty rifle/machinegun/sniper magazines, preserves loaded variants, excludes auxiliary launchers and tolerates missing native metadata
PASS: original 15-minute launch/loss cadence, active/captured timer disarm, saved delay reset, stop, 300m orbit and bounded close-contact standoff at 30/60/120 Hz
PASS: actual aircraft-removal notification guards owner/server/active/stop and schedules one full delay without replay extension
PASS: actual helicopter delay applies resolved Random values, preserves countdown on save failure, and leaves active flights running
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, skips only dispensable sites, preserves required objectives/intel, and resets the next search budget
PASS: terrain placement samples world bounds, retains streaming candidates, bounds waits/work, rejects foreign fallbacks, preserves objectives/intel and validates completion
PASS: actual navigation readiness supports static meshes, yields only for loadable streaming tiles and refuses unreachable positions
PASS: real sampling handles absent airports and extraction clearance preserves geometry/navigation/flatness while selecting the correct aircraft survey
PASS: universal connector, embedded/standalone exports, multiple terrains, stable IDs, native nav configs, missing-nav visibility, path validation and overwrite protection
PASS: airfield detection accepts physical runways/towers and bounded authored markers, rejects unrelated props, water and out-of-world markers, and samples terrain height
PASS: configured airport parsing, bounded readiness, stale admission rejection and cleanup wiring
PASS: automatic default, explicit header/CLI opt-out, editor/authored-mode guards, optional airport override precedence and fresh-round saving guard
PASS: singleton identity guards, paired faction deserialization and client world-cleanup wiring
PASS: task/map/respawn getters survive delayed old destruction and preserve ordinary-mode behavior
PASS: replication hierarchy refuses absent/aliased nodes and establishes delivery dependencies idempotently
PASS: standalone old faction delegates collected once, with null/deleted owners ignored
PASS: actual terrain takeover startup skips mode-less/menu worlds, always forwards super, retains eligible/unsupported/authored/client/editor semantics
PASS: native name callback preserves authored modes, opt-outs and failures; terrain suffix follows world changes, cached resolution and confirmed takeover metadata restores on cleanup without changing scenario resource or overwriting later titles
PASS: actual terrain parent traversal, Armenhof/Nogova names, Everon alias, missing-resource fallback, empty names and bounded cycles/depth
PASS: actual loading title hooks follow late takeover/terrain changes, keep native initialization/progress updates, bound refreshes and tolerate missing headers/widgets/game
PASS: saved terrain GUIDs, defaults, restart persistence, clearing, backup recovery, corrupt-file preservation, write failures, and client write denial
PASS: startup terrain capture protects client/editor/menu worlds, default behavior, same-map loads and reload-loop recovery
PASS: actual transition waits for native startup, disconnects without bans, requires an empty session, retains every loaded mod, bounds waiting and consumes requests once
PASS: actual faction resolution reserves explicit roles, samples without replacement, substitutes disabled selections, and rejects duplicate/unknown/missing choices and insufficient pools
PASS: Random all submits persistent random roles immediately; manual mixed choices, stale/unauthorized UI guards and debounce preserved
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 fixture phased-cargo readiness, bounded callbacks, captured-stock mixed-caliber selection/continuation, reservation cleanup and component magazine counts
PASS: actual inventory-fixture setup uses ordinary prison unlock before constructing its convoy-waiting probe; failed unlock cannot run fixture
PASS: actual authored storage anchors, native trace flags, own-hierarchy exclusion, external wall/vehicle obstruction, range, unknown geometry and bounded context refusal
PASS: actual Compatible and bounded stock preflight before report/claim consumption, later compatible truck, launcher controls, convoy binding, finite identities, disjoint tokens, shared report replay/cooldown, original recipients and HQ cleanup
PASS: actual finite convoy supply pool; immutable slots, shared demand state, sparse/capped discovery and permanent shutdown
PASS: actual HQ rotates finite donors, skips unavailable/contacted trucks, uses delivered reports and dispatches at most one trip per planning cadence
PASS: actual original turret identity, native/canonical guards, scoped maximum-skill profile, reset, dismount/reboard, requested-skill preservation and restoration
PASS: bounded HQ startup/memory windows and outcome-specific full-route deadlines
PASS: explicit escape-route skips only administrator stress, preserving original full-fixture wait/failure paths
PASS: normal escape route keeps ordinary catalog and generated placement; historical selectors remain unchanged
PASS: actual patrol fixture leaves prison before responder HQ proof, followed by separate permanent-patrol observation
PASS: exact patrol-hq finite responder preparation and native search-radius receipt verification
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 designated zero/one original carrier selection, settled startup, shared finite claims, no refund after submission
PASS: actual HQ startup grant readiness forwarding is authoritative and fail-closed
PASS: actual finite PMN4 designated-zero/one entitlement, pinned original ownership, shared commit, physical custody, callback quarantine/deletion and no retry
PASS: actual bounded empty-return and finite delivery; phase-isolated callbacks, exact ownership proof, stop quarantine and original actor/vehicle boundaries
PASS: actual shared finite identity reservation; competing consumers, submission permanence, stale cleanup and96-item bound
PASS: actual carried-mounted swap, shared committed claim, physical slot reach, exact two-way proof, uncertainty and terminal cleanup
PASS: actual mounted pickup, exact finite ownership, pre-submission commit, physical custody, bounded callback and quarantine lifecycle; no native coverage claim
PASS: actual mounted courier admission, radio, individual orders, two-stage transfer, reboarding, token cleanup and quarantine lifecycle
PASS: actual scoped crew permit and native board completion/failure preserves foreign seats without teleport fallback
PASS: actual shared mounted stock/history ownership, atomic exact HQ pair claim, and bounded stopped-owner proof polling
PASS: actual carried/mounted early ammunition policy and status-first shared uplink; complete threshold, phases, cooldown, failures requested check-ins and non-urgent detached carried-mine status
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.301s
OK
PASS: actual radio node rejects current incapacitation, death, ownership and faction changes despite cached inventory; one-second capability refresh remains explicit
PASS: Southern finite maintenance stock preserves weapons/clues and optional transport, historical Western fixture stays separate; native capacity/consumption untested
PASS: optional transport deferred behind required readiness, bounded once-only spawn/omission, isolated cleanup, occupied-candidate retention and required-default preservation
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: production vehicle alarm single trigger/replica completion/no replay, fixed deadline/readiness wait, failed audio, dedicated server, moving exact handle, destruction/native end/deletion/clock and mission teardown. Native sound and multiplayer delivery require engine qualification.
PASS: production alarm emitter/receiver original time/location, explicit native queue only, 32-entry cap, 50m local witness eligibility, bound perception, native-super preservation; actual engine broadcast/hearing remains unverified.
PASS: actual optional candidate barrier, exact callback/custody proof and unchanged mine/primary snapshots; no native transfer claim
Native finite mine-stock runner: parser, scope, exclusions and command pass
PASS: actual bounded native mounted proof/detached payload/deadline/cleanup methods, production-only setup and isolated runner selector
PASS: actual one-existing-convoy candidate readiness, sender-root identity, incomplete cargo refusal and fixed three-candidate bound
PASS: actual BMP capture requires complete armed exact original resource; pinned delivery/slot checks and isolated CLI flag
PASS: actual opt-in pre-unlock isolation refuses wrong mode/phase/flag and existing hunters; no baseline service changes
PASS: actual once-only native dry query, exact before/after slots, native refusal, shutdown; shared bounded discovery and distinct opt-in verdict
PASS: actual completion selector and pre-cleanup variant capture preserve separate radio and eligibility verdicts
PASS: actual cargo diagnostic stages separate absent/foreign magazines, used/empty/invalid rounds, well mismatch and exact truck storage/attachment without mutation
PASS: actual native courier witness rejects missing radio/custody/swap/reboard evidence; CLI opt-in bounded; native success remains unqualified
PASS: actual courier constructor/Tick waits for preparation, returns before physical checks, preserves fixed deadline and sticky stop/failure; Enfusion startup awaits native verification
PASS: actual arranged native alarm fixture deadline, single emit, natural-route observation, original timestamp/area/detail assertions, natural observer proximity/activation wait, failure cleanup and independent canonical-body restoration; native delivery itself remains unqualified.
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: actual carried PMN4 inventory, original-owner guards, bounded deduplication, independent unknown state and detached counts
PASS: actual mounted hierarchy sampling, ownership exclusion, deduplication, completeness/caps, quarter threshold and detached validation; no runtime policy or ammunition mutation
PASS: WORKBENCH opt-in diagnostics distinguish cycles/cap/storage/manager/mount failures without repeated native traversal
PASS: actual HQ original convoy-root admission rejects wrong force/server/group and never supplies replacement lookup
PASS: production mounted structural seat scan ignores >128 carried/cargo descendants, shares exact native mount/magazine ownership, preserves attachment seats and exact occupants, rejects unknown/cyclic/oversize structures; native binding still requires qualification.
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.074s
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 4.436s
OK
PASS: actual convoy motion thresholds, native-only proof boundaries, physical cargo/crew ownership and pre-launch runner restrictions
PASS: actual new measured ClearFootprint 25/441 sample grids, measured extents/height, water/invalid world/terrain/trace refusal plus legacy 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 all10 partial-failure paths, accepts the selected non-USSR enemy, and allocates exact10 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/team Release retains original active survivors and HQ identity, rejects takeover/terminal/unknown roster, preserves exact logistics quarantine and normal eligibility
PASS: actual convoy receipt identity/one-use, shared60-body and128-formation caps, outstanding/native-ledger accounting, exact10-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 supply startup reasons expose unchanged body budget/requirement, journal only failure changes, preserve retry cadence/caps and report the true final refusal
PASS: actual combat start releases only exact intercept claims before owning route/orders; foreign claim defers combat takeover
PASS: actual StartOne plus actual pool preserve unconsumed receipt retry, reject consumed replay, skip impossible new-budget surveys, retain equality, retry caps and journal dedup; no FPS claim
PASS: actual admission seeds use exact installed loaded prefab, reject replacement/foreign/projectile paths and preserve bounded immutable identity
PASS: actual primary-before-mounted one-shot batch, shared96/128 caps, physical snapshot headroom, original ownership, callback refusal and admission pinning
PASS: actual bounded HQ query validates only existing original binding without admission or replacement lookup
PASS: exact optional PMN4 startup, primary callback independence, original owner,128 capacity/callback limits, terminal no-retry and callback-proven freeze
PASS: production convoy spacing, physical arrival, stable follower targets, supply ownership, leader promotion and bounded stuck recovery
PASS: convoy combat keeps native manoeuvres for unchanged contacts and refreshes when contact moves
PASS: native convoy proof excludes pre-departure movement and ends via explicit fixture reset, not prohibited player death
PASS: boarding retries only after approach/seat progress stops, capped at three, with delayed native reissue and completed-team preservation
PASS: slow only owned vehicles near fit dismounted infantry; ignore passengers, casualties and released teams/vehicles
PASS: restore missing native driving registration only for healthy owned seated crews; preserve existing association and refuse invalid/released vehicles
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, surviving radio sender, immutable convoy root/ledger, mounted capture release and lost-root unknown
PASS: delivered-only status snapshots, two missed check-ins/reply deadline, last reported coordinates, episode/replay guards, confirmed-loss idempotence, detached/validated mounted payload replacement 256-record cap and detached carried-mine radio delivery/chronology
PASS: actual failed-retask deadline rollback plus 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 equipment coordinator registration dedupe, startup delay, five member scans, finite component retries, unregister/stop terminal behavior and 256-group bound
PASS: actual percentage selection, native/preferred launcher preservation, failure/removal fallback, pending-operation quarantine, capture, finite two-mine grants and no replenishment
PASS: automatic inventory one-shot roll, exact item ownership, finite compatible ammo, rejection, capture/stop, deletion, loot and late callback quarantine
PASS: enabled/valid catalog eligibility, category restrictions, content filtering, GUID deduplication across factions and bounded catalogs
PASS: actual engineer native group-envelope admission and phase cancellation, preparation/deadline, original custody/identity, once-only callback removal, cancellation quarantine, withdrawal/clearance, native refusal and owned-action cleanup; native execution untested
PASS: actual mine selector respects road and settlement flank safety; native boundaries doubled
PASS: actual HQ and post ledger: second delivered post, one query/tick,2 active/32 jobs,4 consumed lifetime attempts, no-stock/query refusal consumption, pending old job and original identity constraints
PASS: actual mine post ledger immutable history, strict chronology/evidence, aliases, >160m separation, detached sites and finite4/32 consumed attempts
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 HQ active/pending reservations, interruption, committed replacement, bounded coverage and unchanged force counts
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 finite45..110 radius and both ordinary search queue snapshot expressions
PASS: actual HQ memory rules/service preserve delivered snapshots, chronology, replay bounds, decay, motion limits, identity and negative-search revisions
..........
----------------------------------------------------------------------
Ran 10 tests in 0.227s
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.511s
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 nineteen settings, rejects unsupported keys, gates companions, and matches unique authored widgets
PASS: explicit weapon retention buttons use the same ready/authorized server command path
PASS: item editor, preset controls and dynamic item-row layout are structurally valid
PASS: catalog requests use authenticated sessions, independent admin page selections, loaded-mod allowlisting, bounded pages and allowlisted item mutations
PASS: actual item rules, shared-source conflicts, missing/returning mods, bulk reset, independent named presets, bounds, malformed data and failed-save state preservation
PASS: actual summaries preserve queued/delivered meaning, clear counts and IDs; raw records, legacy display, cursor gaps and RPC limits remain intact
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.272s
OK
......................
----------------------------------------------------------------------
Ran 22 tests in 27.950s
OK
..................
----------------------------------------------------------------------
Ran 18 tests in 3.164s
OK
.........
----------------------------------------------------------------------
Ran 9 tests in 2.521s
OK
...............
----------------------------------------------------------------------
Ran 15 tests in 1.236s
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.691s
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.715s
OK
......................
----------------------------------------------------------------------
Ran 22 tests in 0.193s
OK
................
----------------------------------------------------------------------
Ran 16 tests in 11.181s
OK
......
----------------------------------------------------------------------
Ran 6 tests in 0.019s
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.058s
OK
.............
----------------------------------------------------------------------
Ran 13 tests in 5.343s
OK
PASS: actual route gain/caps/braking, callback selection, old landing/cancellation control and matching read-only telemetry
..............................
----------------------------------------------------------------------
Ran 30 tests in 0.454s
OK
..............
----------------------------------------------------------------------
Ran 14 tests in 0.260s
OK
.........
----------------------------------------------------------------------
Ran 9 tests in 0.126s
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.075s
OK
.......................
----------------------------------------------------------------------
Ran 23 tests in 0.036s
OK
PASS: actual initial WAITING task/guide copy, configured duration, unchanged interruption and rounded progress; native task assertion pending
........
----------------------------------------------------------------------
Ran 8 tests in 0.014s
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.566s
OK
......
----------------------------------------------------------------------
Ran 6 tests in 0.079s
OK
.................
----------------------------------------------------------------------
Ran 17 tests in 0.004s
OK
...........
----------------------------------------------------------------------
Ran 11 tests in 0.088s
OK
.........
----------------------------------------------------------------------
Ran 9 tests in 0.370s
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.109s
OK
...............
----------------------------------------------------------------------
Ran 15 tests in 0.037s
OK
PASS: actual preparation status scope, persistent updates, spinner restoration, placeholder replacement/deletion/destruction, native observation persistence/timeout; rendering remains native-pending
PASS: replaced respawn system receives frame updates, disabled updater wakes, stale/non-Escape binding refused; terminal and stale preload leases release black overlay
PASS: actual guide ownership and scoped timer cancellation, current-controller preservation/reacquisition, hint retry/dedup and observer 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.521s
OK
PASS: actual three-state result wording and UI refresh; stale winner IDs never manufacture escape
...........
----------------------------------------------------------------------
Ran 11 tests in 0.118s
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: delayed admission retry retains controller ownership across same-account recycled connection IDs
PASS: actual scene deadline overrides delayed native preload only for rejection; late completion cannot assign, ordinary verified admission preserved
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.263s
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 bodies; canonical live selection and roster-corpse 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.116s
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.219s
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.038s
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
PASS: actual client camera policy closes immediately on healing or mission end; late unconscious metadata cannot keep the view active
PASS: actual input dispatch, one press per edge, menu-held suppression; actual revival camera handoff with editor close/retry, missing camera, replacement body and stopped round
................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 15.522s
OK
.......
----------------------------------------------------------------------
Ran 7 tests in 0.294s
OK
...............
----------------------------------------------------------------------
Ran 15 tests in 3.307s
OK
....
----------------------------------------------------------------------
Ran 4 tests in 0.346s
OK
....
----------------------------------------------------------------------
Ran 4 tests in 0.070s
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.531s
OK
.....
----------------------------------------------------------------------
Ran 5 tests in 1.353s
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.015s
OK
....
----------------------------------------------------------------------
Ran 4 tests in 0.197s
OK
PASS: actual aim renewal requires fresh same-report solve and original-command equivalence; native firing untested
.........
----------------------------------------------------------------------
Ran 9 tests in 0.043s
OK
PASS: actual startup/generation/ownership/timeout/callback policies and native-counter wait; integration preserves one-shot allocation and pending-crew cancellation
PASS: rapid mortar cycle counts eight physical rounds once and waits for native completion without a ninth aim or shell
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 38 tests in 0.021s
OK
..........
----------------------------------------------------------------------
Ran 10 tests in 0.003s
OK
.....
----------------------------------------------------------------------
Ran 5 tests in 1.075s
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: actual native-probe lifecycle/counters with doubled boundaries; fixed deadline, exact seven sources, true forwarding, async close, no late updates and selector wiring
PASS: actual one-argument adapter, explicit refresh, native initialization flag, duplicate/blood ownership, rebind/detach/destruction and foreign-mode transparency
PASS: authority-scoped slow recovery, bleeding pauses resilience, medicine unaffected, player-only lethal damage cap without healing
PASS: bleeding severity survives low health, retains armour, causes no knockout and restores the actual damage/blood-loss cap
PASS: viable passive recovery survives native delay; bleeding, disabled/full effects and low-blood resilience do not block defeat
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
PASS: view-distance bounds, default, save failures, command parsing, temporary ownership, server/platform limits and lifecycle wiring
.....
----------------------------------------------------------------------
Ran 5 tests in 0.649s
OK
.
----------------------------------------------------------------------
Ran 1 test in 0.439s
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.361s
OK
..............................................
----------------------------------------------------------------------
Ran 46 tests in 0.973s
OK
PASS: legacy values preserved, unsupported fields reported, invalid data rejected, existing files protected, runtime bounds aligned
PASS: failed initial settings promotion leaves defaults writable after restart; prior/fallback saves survive copy, readback and mismatch faults
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)
All repository checks passed. Native compilation and multiplayer tests are separate requirements.
@@ -0,0 +1,538 @@
---------------------------------------------
Log /home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/profile/logs/logs_2026-10-05_18-57-09/console.log started at 2026-10-05 18:57:09 (2026-10-05 16:57:09 UTC)
18:57:09.205 ENGINE : FileSystem: Adding relative directory '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/profile/logs/logs_2026-10-05_18-57-09' to filesystem under name logs
18:57:09.205 ENGINE : FileSystem: Adding relative directory '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/profile/profile' to filesystem under name profile
18:57:09.205 ENGINE : FileSystem: Current working directory: '/tmp/runtime/'
18:57:09.207 ENGINE : Initializing engine, version 192142
18:57:09.207 ENGINE : CLI Params: -server {C1E20667DCE324ED}Missions/ERR_Everon.conf -addonsDir /home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons -addons 2528466DE220D91C,70C981A53E02B64F -profile /home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/profile -noBackend -noSound -bindIP 127.0.0.1 -bindPort 2001 -maxFPS 30 -logconsole -noSplash -noThrow -disableCrashReporter
18:57:09.214 ENGINE : Addon dirs:
18:57:09.214 ENGINE : dir: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons'
18:57:09.214 ENGINE : dir: './addons'
18:57:09.214 ENGINE : dir: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/profile/addons'
18:57:09.214 ENGINE : Available addons:
18:57:09.214 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_1337C0DE5DABBEEF/addon.gproj' guid: '1337C0DE5DABBEEF' (packed)
18:57:09.214 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_595F2BF2F44836FB/addon.gproj' guid: '595F2BF2F44836FB' (packed)
18:57:09.214 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_5E389BB9F58B79A6/addon.gproj' guid: '5E389BB9F58B79A6' (packed)
18:57:09.214 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_5E524E4FEECCA92B/addon.gproj' guid: '5E524E4FEECCA92B' (packed)
18:57:09.214 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_629B2BA37EFFD577/addon.gproj' guid: '629B2BA37EFFD577' (packed)
18:57:09.214 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_65930CB4CD0237B2/addon.gproj' guid: '65930CB4CD0237B2' (packed)
18:57:09.214 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_BADC0DEDABBEDA5E/addon.gproj' guid: 'BADC0DEDABBEDA5E' (packed)
18:57:09.214 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERR_Core/addon.gproj' guid: '2528466DE220D91C'
18:57:09.214 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/Nogova/addon.gproj' guid: '70C981A53E02B64F'
18:57:09.214 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed)
18:57:09.214 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed)
18:57:09.214 ENGINE : FileSystem: Adding relative directory '/home/jakub/devel/gabreta/addons/NogovaReforger' to filesystem under name NogovaReforger
18:57:09.214 ENGINE : FileSystem: Adding relative directory '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/source' to filesystem under name ERR_Core
18:57:09.214 ENGINE : FileSystem: Adding package '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_65930CB4CD0237B2/' (pak count: 1) to filesystem under name Parachutes
18:57:09.214 ENGINE : FileSystem: Adding package '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_5E524E4FEECCA92B/' (pak count: 1) to filesystem under name WCS_BMP-1
18:57:09.215 ENGINE : FileSystem: Adding package '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_5E389BB9F58B79A6/' (pak count: 1) to filesystem under name WCS_SpaceCore
18:57:09.216 ENGINE : FileSystem: Adding package '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_629B2BA37EFFD577/' (pak count: 1) to filesystem under name WCS_Armaments
18:57:09.224 ENGINE : FileSystem: Adding package '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_595F2BF2F44836FB/' (pak count: 1) to filesystem under name RHS_Core
18:57:09.225 ENGINE : FileSystem: Adding package '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_BADC0DEDABBEDA5E/' (pak count: 2) to filesystem under name RHS_Content_02
18:57:09.229 ENGINE : FileSystem: Adding package '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_1337C0DE5DABBEEF/' (pak count: 4) to filesystem under name RHS_Content_01
18:57:09.357 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger
18:57:09.361 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core
18:57:09.361 ENGINE : CPU vendor : AuthenticAMD
18:57:09.361 ENGINE : CPU type : 2
18:57:09.361 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor
18:57:09.361 ENGINE : CPU cache info : Unknown cache
18:57:09.361 ENGINE : CPU count logical : 16
18:57:09.361 ENGINE : CPU count physical : 8
18:57:09.361 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2
18:57:09.361 RESOURCES : ResourceDB: loading cache (id=0 name=NogovaReforger path=/home/jakub/devel/gabreta/addons/NogovaReforger/resourceDatabase.rdb)
18:57:09.373 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Core path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/source/resourceDatabase.rdb)
18:57:09.373 RESOURCES : ResourceDB: loading cache (id=2 name=Parachutes path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_65930CB4CD0237B2/resourceDatabase.rdb)
18:57:09.374 RESOURCES : ResourceDB: loading cache (id=3 name=WCS_BMP-1 path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_5E524E4FEECCA92B/resourceDatabase.rdb)
18:57:09.374 RESOURCES : ResourceDB: loading cache (id=4 name=WCS_SpaceCore path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_5E389BB9F58B79A6/resourceDatabase.rdb)
18:57:09.374 RESOURCES : ResourceDB: loading cache (id=5 name=WCS_Armaments path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_629B2BA37EFFD577/resourceDatabase.rdb)
18:57:09.377 RESOURCES : ResourceDB: loading cache (id=6 name=RHS_Core path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_595F2BF2F44836FB/resourceDatabase.rdb)
18:57:09.389 RESOURCES : ResourceDB: loading cache (id=7 name=RHS_Content_02 path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_BADC0DEDABBEDA5E/resourceDatabase.rdb)
18:57:09.390 RESOURCES : ResourceDB: loading cache (id=8 name=RHS_Content_01 path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_1337C0DE5DABBEEF/resourceDatabase.rdb)
18:57:09.397 RESOURCES : ResourceDB: loading cache (id=9 name=ArmaReforger path=./addons/data/resourceDatabase.rdb)
18:57:09.548 RESOURCES : ResourceDB: loading cache (id=10 name=core path=./addons/core/resourceDatabase.rdb)
18:57:09.550 RESOURCES : ResourceDB: loading cache (id=11 name=profile path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/profile/profile/resourceDatabase.rdb)
18:57:09.550 RESOURCES : ResourceDB: loading cache (id=12 name=logs path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/profile/logs/logs_2026-10-05_18-57-09/resourceDatabase.rdb)
18:57:09.762 ENGINE : GameProject load
18:57:09.762 ENGINE : Loaded addons:
18:57:09.762 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C'
18:57:09.762 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859'
18:57:09.762 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_1337C0DE5DABBEEF/addon.gproj' guid: '1337C0DE5DABBEEF'
18:57:09.762 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_BADC0DEDABBEDA5E/addon.gproj' guid: 'BADC0DEDABBEDA5E'
18:57:09.762 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_595F2BF2F44836FB/addon.gproj' guid: '595F2BF2F44836FB'
18:57:09.762 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_629B2BA37EFFD577/addon.gproj' guid: '629B2BA37EFFD577'
18:57:09.762 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_5E389BB9F58B79A6/addon.gproj' guid: '5E389BB9F58B79A6'
18:57:09.762 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_5E524E4FEECCA92B/addon.gproj' guid: '5E524E4FEECCA92B'
18:57:09.762 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_65930CB4CD0237B2/addon.gproj' guid: '65930CB4CD0237B2'
18:57:09.762 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERR_Core/addon.gproj' guid: '2528466DE220D91C'
18:57:09.762 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/Nogova/addon.gproj' guid: '70C981A53E02B64F'
18:57:09.763 ENGINE : GameProject load
18:57:09.763 INIT : GameProject load project data @"/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_595F2BF2F44836FB/addon.gproj"
18:57:09.763 RESOURCES (E): Wrong GUID/name for resource @"{0AFDD005CD669892}Language/rhs_localization.st" in property "StringTableSource"
18:57:09.764 INIT : GameProject load project data @"/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_629B2BA37EFFD577/addon.gproj"
18:57:09.764 RESOURCES (E): Wrong GUID/name for resource @"{41FA2A08B6971D4C}Language/wcs_armament_localization.st" in property "StringTableSource"
18:57:09.764 INIT : GameProject load project data @"/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_5E389BB9F58B79A6/addon.gproj"
18:57:09.764 RESOURCES (E): Wrong GUID/name for resource @"{84270E09F7A4A7A0}Language/wcs_spacecore_localization.st" in property "StringTableSource"
18:57:09.764 INIT : GameProject load project data @"/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/hunter-radius-20261005/addons/ERRI_5E524E4FEECCA92B/addon.gproj"
18:57:09.764 RESOURCES (E): Wrong GUID/name for resource @"{E50E557B468C7073}Language/wcs_bmp1_localization.st" in property "StringTableSource"
18:57:09.764 ENGINE : Loading custom engine user config '$profile:.save/settings/ReforgerEngineSettings.conf'
18:57:09.764 ENGINE : No Enfusion settings file loaded. Continuing with defaults
18:57:09.764 RENDER : Basic screen setup:
18:57:09.764 RENDER : Back buffer width x height: 0x0
18:57:09.764 RENDER : Back buffer format : TEXFMT_UNKNOWN (0)
18:57:09.764 RENDER : MSAA : none
18:57:09.764 RENDER : GPU_DUMMY (0xFFFF) (Enfusion dummy render) with 1 GPU detected, VRAM 128MB (fast 128MB), shared 128MB, driver version Unknown version
18:57:09.764 RENDER : Detected output devices:
18:57:09.764 RENDER : * 1 device/s connected to Dummy:
18:57:09.764 RENDER : Dummy output (Dummy device for our dummy render.), 1920x1080 (offset 0x0), 60Hz
18:57:09.764 RENDER : Concurrent frames limit 2
18:57:09.764 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7
18:57:09.779 PROFILING : Settings changed took: 0.024000 ms
18:57:09.781 ENGINE : Initializing inputs.
18:57:09.787 NETWORK : Initializing networking.
18:57:09.787 NETWORK : Using new GameRplScheduler.
18:57:09.788 SCRIPT : SCRIPT : Initializing scripts
18:57:09.788 SCRIPT : SCRIPT : ScriptProjectManager init
18:57:09.788 PROFILING : ScriptProjectManager init took: 0.009000 ms
18:57:09.806 PROFILING : Initializing scripts took: 18.014000 ms
18:57:09.806 BACKEND : Backend Services are disabled.
18:57:09.806 ENGINE : Enfusion engine successfully created.
18:57:09.808 GUI : Using default language (en_us)
18:57:09.808 GUI : Loading 'en_us' localization file.
18:57:09.808 INIT : INIT : Loading StringTable
18:57:09.834 PROFILING : Loading StringTable took: 25.967000 ms
18:57:09.834 SCRIPT : SCRIPT : Compiling GameLib scripts
18:57:09.865 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 654K of static memory; defines: "PLATFORM_LINUX,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb
18:57:09.866 PROFILING : Compiling GameLib scripts took: 31.734000 ms
18:57:09.866 SCRIPT : SCRIPT : Compiling Game scripts
18:57:10.589 SCRIPT : Compiling Game scripts
18:57:10.589 SCRIPT (W): @"Scripts/Game/Parachutes/ParachuteDeployed.c,7": Pointer type 'Physics' can only be used with local variables
18:57:11.026 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete
18:57:11.026 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete
18:57:11.366 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_SiteService.c,359": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly.
18:57:11.382 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed
18:57:11.428 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete
18:57:11.609 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete
18:57:11.609 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete
18:57:11.609 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete
18:57:11.609 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete
18:57:11.647 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead
18:57:11.708 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete
18:57:11.721 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete
18:57:11.721 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete
18:57:11.722 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete
18:57:11.786 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly.
18:57:11.786 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly.
18:57:11.788 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api.
18:57:11.788 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api.
18:57:11.853 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete
18:57:12.065 SCRIPT : Module: Game; loaded 6730x files; 13500x classes; used 33405K of static memory; defines: "PLATFORM_LINUX,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG,WCS_DEFINES_ARMAMENTS,WCS_DEFINES_SPACECORE"; CRC32: 9845064c
18:57:12.092 PROFILING : Compiling Game scripts took: 2225.987000 ms
18:57:12.092 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC.
18:57:12.123 ENGINE : Game successfully created.
18:57:12.189 PLATFORM : Save data from container 'settings' have been loaded
18:57:12.289 PLATFORM : Save data from container 'sessions' have been loaded
18:57:12.289 PLATFORM : System language differs from the saved one - using new language {new: 'en_us'; old: ''}
18:57:12.289 PLATFORM : Save data transaction to 'settings' started.
18:57:12.289 NETWORK : Starting local multiplayer server using command line args.
18:57:12.388 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{C1E20667DCE324ED}Missions/ERR_Everon.conf'.
18:57:12.389 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent'
18:57:13.338 PROFILING : Entities load took: 949.130000 ms
18:57:13.340 WORLD : WORLD : Game::LoadEntities
18:57:13.340 WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf"
18:57:13.341 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits.
18:57:13.341 WORLD : WORLD : CreateEntities
18:57:13.341 WORLD : WORLD : CreateEntities
18:57:13.341 WORLD : WORLD : NotifyBeforeEntitiesCreated
18:57:13.343 RESOURCES : Loaded mission headers from 11 addon(s)!
18:57:13.343 PROFILING : NotifyBeforeEntitiesCreated took: 1.614000 ms
18:57:13.343 WORLD : WORLD : Wait for preloading data
18:57:14.870 PROFILING : Wait for preloading data took: 1526.707000 ms
18:57:14.946 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et"
18:57:14.946 PROFILING : PROFILING : Terrain load
18:57:16.558 PROFILING : Terrain load took: 1611.801000 ms
18:57:19.605 WORLD : Game::LoadEntities
18:57:19.605 WORLD : CreateEntities
18:57:19.605 WORLD : CreateEntities
18:57:19.605 ENTITY : Create entity @"ENTITY:610406" ('StaticModelEntity','Assets/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_small.xob') at <1931.796021 81.777000 5138.725098> @"{6A004A8F0571D456}Prefabs/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_small.et"
18:57:19.605 ENTITY : CreateComponent 'ScriptedRadioComponent'
18:57:19.605 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent.
18:57:25.098 ENTITY : Create entity @"ENTITY:2305843009213693956" ('Factions', SCR_FactionManager) at <0.000000 0.000000 0.000000> @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et"
18:57:25.098 RESOURCES : GetResourceObject @"{442939C9617DF228}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_FIA.et"
18:57:25.098 WORLD : Entity prefab load @"{442939C9617DF228}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_FIA.et"
18:57:25.098 RESOURCES : GetResourceObject @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
18:57:25.098 WORLD : Entity prefab load @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
18:57:25.098 RESOURCES : GetResourceObject @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
18:57:25.098 WORLD : Entity prefab load @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
18:57:25.098 WORLD (E): Unknown keyword/data 'Parent' at offset 35955(0x8c73)
18:57:25.098 WORLD (E): Unknown keyword/data 'Parent' at offset 36915(0x9033)
18:57:25.100 RESOURCES : GetResourceObject @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et"
18:57:25.100 WORLD : Entity prefab load @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et"
18:57:25.100 RESOURCES : GetResourceObject @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et"
18:57:25.100 WORLD : Entity prefab load @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et"
18:57:25.100 RESOURCES : GetResourceObject @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
18:57:25.100 WORLD : Entity prefab load @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
18:57:25.100 RESOURCES : GetResourceObject @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
18:57:25.100 WORLD : Entity prefab load @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
18:57:25.100 WORLD (E): Unknown keyword/data 'Parent' at offset 42646(0xa696)
18:57:25.100 WORLD (E): Unknown keyword/data 'Parent' at offset 43645(0xaa7d)
18:57:25.100 WORLD (E): Unknown keyword/data 'Parent' at offset 44617(0xae49)
18:57:25.100 WORLD (E): Unknown keyword/data 'Parent' at offset 45590(0xb216)
18:57:25.203 RESOURCES : GetResourceObject @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et"
18:57:25.203 WORLD : Entity prefab load @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et"
18:57:25.203 RESOURCES : GetResourceObject @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
18:57:25.203 WORLD : Entity prefab load @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
18:57:25.203 RESOURCES : GetResourceObject @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
18:57:25.203 WORLD : Entity prefab load @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
18:57:25.203 RESOURCES : GetResourceObject @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
18:57:25.203 WORLD : Entity prefab load @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
18:57:25.203 WORLD (E): Unknown keyword/data 'SlidingTrackMaterial' at offset 19441(0x4bf1)
18:57:25.646 WORLD : WORLD : NotifyBeforeEntitiesInitialized
18:57:25.646 PROFILING : NotifyBeforeEntitiesInitialized took: 0.038000 ms
18:57:25.646 WORLD : InitEntities 'world'
18:57:25.646 ENTITY : Init entity @"ENTITY:3" ('SCR_MapEntity1', SCR_MapEntity) at <6400.000000 0.000000 6400.000000> @"{E1B88C66BF6CA1F9}Prefabs/World/Game/Eden/MapEntity_Everon.et"
18:57:25.646 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default.
18:57:26.235 WORLD : InitEntities 'world'
18:57:26.235 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Reintroduced', ERR_GameMode) at <60.452000 1.000000 213.136002> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et"
18:57:26.235 SCRIPT : Reintroduced [config]: using $profile:Escapists.json; legacy files retained but no longer used.
18:57:26.241 WORLD : WORLD : NotifyEntitiesInitialized
18:57:26.241 TERRAIN : TERRAIN : Initializing road networks...
18:57:26.244 PROFILING : Initializing road networks... took: 2.559000 ms
18:57:26.306 SCRIPT : Reintroduced [terrain selection]: discovered 46 playable scenario headers; truncated=0
18:57:26.306 DEFAULT : DEFAULT : WorldVolumesCollection
18:57:26.368 PROFILING : WorldVolumesCollection took: 61.810000 ms
18:57:26.368 INIT : INIT : SoundWorldInit
18:57:26.386 PROFILING : SoundWorldInit took: 17.386000 ms
18:57:26.386 PROFILING : NotifyEntitiesInitialized took: 144.763000 ms
18:57:26.386 PROFILING : CreateEntities took: 13044.645000 ms
18:57:26.386 PROFILING : CreateEntities took: 13044.660000 ms
18:57:26.386 WORLD : WORLD : EOnActivate
18:57:26.421 PROFILING : EOnActivate took: 34.852000 ms
18:57:26.421 PROFILING : Game::LoadEntities took: 13081.184000 ms
18:57:26.484 NETWORK : Starting RPL server, listening on address 0.0.0.0:2001, fastValidation=false
18:57:26.972 DEFAULT : Entered online game state.
18:57:26.973 PROFILING : Settings changed took: 0.427000 ms
18:57:30.011 SCRIPT : Map load time: 1803ms
18:57:30.094 WORLD : Frame start
18:57:30.094 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated.
18:57:30.102 WORLD : UpdateEntities
18:57:30.102 WORLD : Frame
18:57:30.102 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME
18:57:31.517 SCRIPT : Co10 Escape Reintroduced factions: players=US enemy=USSR independent=FIA
18:57:33.004 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-prison-1 position=<7288.09,122.994,5188.44> heading=238.411 attempts=136 fallback=0
18:57:34.720 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-radio-1 position=<5758.26,85.748,5291.57> heading=345.311 attempts=1981 fallback=0
18:57:36.319 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-mortar-1 position=<5669.14,27.9815,10162> heading=11.0306 attempts=1666 fallback=0
18:57:36.590 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-mortar-2 position=<5537.81,85.4931,5660.33> heading=130.544 attempts=473 fallback=0
18:57:37.116 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-mortar-3 position=<4777.19,27.8638,11135.9> heading=358.704 attempts=284 fallback=0
18:57:37.919 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-mortar-4 position=<3284.1,1.21308,1574.27> heading=167.261 attempts=1039 fallback=0
18:57:39.517 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-medical-1 position=<4683.39,16.5985,10358.1> heading=119.03 attempts=1380 fallback=0
18:57:40.853 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-outpost-1 position=<2573.51,106.864,5677.91> heading=233.752 attempts=1551 fallback=0
18:57:41.383 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-medical-2 position=<6286.31,87.29,5665.41> heading=285.203 attempts=552 fallback=0
18:57:42.456 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-medical-3 position=<1608.08,61.9378,5861.9> heading=271.557 attempts=1470 fallback=0
18:57:44.589 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-camp-2 position=<4604.43,23.5992,9675.69> heading=293.816 attempts=2508 fallback=0
18:57:45.920 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-camp-3 position=<3825.05,59.4637,7043.58> heading=263.229 attempts=1342 fallback=0
18:57:47.522 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-camp-4 position=<4610.69,84.9887,8583.47> heading=59.0094 attempts=1743 fallback=0
18:57:49.651 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-camp-5 position=<4939.79,2.2075,3879.81> heading=238.059 attempts=2041 fallback=0
18:57:49.660 SCRIPT : Reintroduced [sites]: authored everon-prison-1 at <7288.09,123.287,5188.44>
18:57:49.660 SCRIPT : Reintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1
18:57:49.666 SCRIPT : Reintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050>
18:57:49.668 ENTITY : SpawnEntityPrefab @"{B3949F6D215A9F78}Prefabs/Props/Military/Antennas/Antenna_FIA_02/Antenna_FIA_02_base.et"
18:57:49.668 ENTITY : Create entity @"ENTITY:4611686018427388511" ('GenericEntity','Assets/Props/Military/Antennas/Antenna_FIA_02/Antenna_FIA_02.xob') at <5750.978516 85.928459 5291.729004> @"{B3949F6D215A9F78}Prefabs/Props/Military/Antennas/Antenna_FIA_02/Antenna_FIA_02_base.et"
18:57:49.668 ENTITY : CreateComponent 'ScriptedRadioComponent'
18:57:49.668 DEFAULT (W): BaseRadioComponent does not have any transceiver. (Entity: @"ENTITY:4611686018427388511" ('GenericEntity','Assets/Props/Military/Antennas/Antenna_FIA_02/Antenna_FIA_02.xob') at <5750.978516 85.928459 5291.729004> @"{B3949F6D215A9F78}Prefabs/Props/Military/Antennas/Antenna_FIA_02/Antenna_FIA_02_base.et"). Only printing this message once. There're possibly more nodes with this requirement.
18:57:49.672 SCRIPT : Reintroduced [sites]: authored everon-radio-1 at <5758.26,85.8812,5291.57>
18:57:49.705 SCRIPT : Reintroduced [sites]: authored everon-extraction-1 at <4800.95,27.8202,11487.4>
18:57:49.715 SCRIPT : Reintroduced [sites]: authored everon-medical-1 at <4683.39,16.8304,10358.1>
18:57:49.719 SCRIPT : Reintroduced [sites]: authored everon-outpost-1 at <2573.51,107.067,5677.91>
18:57:49.719 SCRIPT : Reintroduced [sites]: authored everon-mortar-1 at <5669.14,28.3192,10162>
18:57:49.719 SCRIPT : Reintroduced [sites]: authored everon-mortar-2 at <5537.81,85.7875,5660.33>
18:57:49.719 SCRIPT : Reintroduced [sites]: authored everon-mortar-3 at <4777.19,27.9438,11135.9>
18:57:49.719 SCRIPT : Reintroduced [sites]: authored everon-mortar-4 at <3284.1,1.5417,1574.27>
18:57:49.723 SCRIPT : Reintroduced [sites]: authored everon-medical-2 at <6286.31,87.5467,5665.41>
18:57:49.726 SCRIPT : Reintroduced [sites]: authored everon-medical-3 at <1608.08,62.2237,5861.9>
18:57:49.729 SCRIPT : Reintroduced [sites]: authored everon-camp-2 at <4604.43,24.013,9675.69>
18:57:49.733 SCRIPT : Reintroduced [sites]: authored everon-camp-3 at <3825.05,59.8614,7043.58>
18:57:49.736 SCRIPT : Reintroduced [sites]: authored everon-camp-4 at <4610.69,85.1625,8583.47>
18:57:49.739 SCRIPT : Reintroduced [sites]: authored everon-camp-5 at <4939.79,2.2875,3879.81>
18:57:49.740 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<4800.95,27.8202,11487.4> up=1
18:57:49.740 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0
18:57:49.740 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=12450.3
18:57:49.740 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4800.95,28.1168,11489.7>
18:57:49.740 SCRIPT : ERR GEAR TERRAIN: bottom=<4800.95,27.8168,11489.7> terrainY=27.7202 tireTerrainGap=0.0965805
18:57:49.740 SCRIPT : ERR GEAR SUPPORT: center=<4800.95,28.1168,11489.7> radius=0.3 bottom=<4800.95,27.8168,11489.7> fraction=0.893554 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.0965824
18:57:49.740 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.68,28.585,11485.4>
18:57:49.740 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.68,28.135,11485.4> terrainY=27.8121 tireTerrainGap=0.322891
18:57:49.740 SCRIPT : ERR GEAR SUPPORT: center=<4798.68,28.585,11485.4> radius=0.45 bottom=<4798.68,28.135,11485.4> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.120001
18:57:49.740 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.23,28.585,11485.4>
18:57:49.740 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.23,28.135,11485.4> terrainY=27.649 tireTerrainGap=0.485987
18:57:49.740 SCRIPT : ERR GEAR SUPPORT: center=<4803.23,28.585,11485.4> radius=0.45 bottom=<4803.23,28.135,11485.4> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.120001
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-prison-1 requested=5 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-supply-1 requested=5 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=4 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=2 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=4 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=2 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=4 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=2 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=4 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=2 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=4 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=2 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=4 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=2 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=4 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=2 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=4 physical=0 conscious=0 nativeComplete=0
18:57:49.740 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=2 physical=0 conscious=0 nativeComplete=0
18:57:50.716 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<4801.01,27.599,11487.4> up=0.997118
18:57:50.716 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.703446 angularSpeed=0.166169
18:57:50.716 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.3
18:57:50.716 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.07,27.9685,11489.6>
18:57:50.716 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.07,27.6685,11489.6> terrainY=27.7165 tireTerrainGap=-0.0479908
18:57:50.716 SCRIPT : ERR GEAR SUPPORT: center=<4801.07,27.9685,11489.6> radius=0.3 bottom=<4801.07,27.6685,11489.6> fraction=0.236417 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.0479889
18:57:50.716 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.71,28.2298,11485.4>
18:57:50.716 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.71,27.7798,11485.4> terrainY=27.8104 tireTerrainGap=-0.0306225
18:57:50.716 SCRIPT : ERR GEAR SUPPORT: center=<4798.71,28.2298,11485.4> radius=0.45 bottom=<4798.71,27.7798,11485.4> fraction=0.315282 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.0306377
18:57:50.716 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.25,28.0823,11485.3>
18:57:50.716 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.25,27.6323,11485.3> terrainY=27.6483 tireTerrainGap=-0.0160923
18:57:50.716 SCRIPT : ERR GEAR SUPPORT: center=<4803.25,28.0823,11485.3> radius=0.45 bottom=<4803.25,27.6323,11485.3> fraction=0.381375 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.016098
18:57:50.716 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
18:57:50.716 SCRIPT : Reintroduced [guards]: initial site=everon-prison-1 requested=5 physical=1 conscious=1 nativeComplete=0
18:57:50.716 SCRIPT : Reintroduced [guards]: initial site=everon-supply-1 requested=5 physical=1 conscious=1 nativeComplete=0
18:57:50.716 SCRIPT : Reintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0
18:57:50.716 SCRIPT : Reintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0
18:57:51.249 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=4 physical=1 conscious=1 nativeComplete=0
18:57:51.249 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=2 physical=1 conscious=1 nativeComplete=0
18:57:51.249 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=4 physical=1 conscious=1 nativeComplete=0
18:57:51.249 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=2 physical=1 conscious=1 nativeComplete=0
18:57:51.782 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.03,27.5922,11487.4> up=0.996387
18:57:51.782 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.200441 angularSpeed=0.0437107
18:57:51.782 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.3
18:57:51.782 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.09,28.0272,11489.6>
18:57:51.782 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.09,27.7272,11489.6> terrainY=27.7161 tireTerrainGap=0.011095
18:57:51.782 SCRIPT : ERR GEAR SUPPORT: center=<4801.09,28.0272,11489.6> radius=0.3 bottom=<4801.09,27.7272,11489.6> fraction=0.504961 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.0110912
18:57:51.782 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.73,28.2658,11485.4>
18:57:51.782 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.73,27.8158,11485.4> terrainY=27.8094 tireTerrainGap=0.00644875
18:57:51.782 SCRIPT : ERR GEAR SUPPORT: center=<4798.73,28.2658,11485.4> radius=0.45 bottom=<4798.73,27.8158,11485.4> fraction=0.483788 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=0.00643349
18:57:51.782 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.28,28.1062,11485.3>
18:57:51.782 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.28,27.6562,11485.3> terrainY=27.6474 tireTerrainGap=0.0087719
18:57:51.782 SCRIPT : ERR GEAR SUPPORT: center=<4803.28,28.1062,11485.3> radius=0.45 bottom=<4803.28,27.6562,11485.3> fraction=0.494414 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.0087719
18:57:51.782 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
18:57:51.782 SCRIPT : Reintroduced [guards]: initial site=everon-supply-1 requested=5 physical=2 conscious=2 nativeComplete=0
18:57:51.782 SCRIPT : Reintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0
18:57:51.782 SCRIPT : Reintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0
18:57:51.782 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=4 physical=2 conscious=2 nativeComplete=0
18:57:52.315 SCRIPT : Reintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake
18:57:52.315 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=2 physical=2 conscious=2 nativeComplete=1
18:57:52.315 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=4 physical=1 conscious=1 nativeComplete=0
18:57:52.315 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=2 physical=1 conscious=1 nativeComplete=0
18:57:52.315 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=4 physical=1 conscious=1 nativeComplete=0
18:57:52.849 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.08,27.5872,11487.4> up=0.996173
18:57:52.849 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.068103 angularSpeed=0.0418337
18:57:52.849 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.4
18:57:52.849 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.15,28.0128,11489.6>
18:57:52.849 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.15,27.7128,11489.6> terrainY=27.714 tireTerrainGap=-0.00118637
18:57:52.849 SCRIPT : ERR GEAR SUPPORT: center=<4801.15,28.0128,11489.6> radius=0.3 bottom=<4801.15,27.7128,11489.6> fraction=0.449171 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00118256
18:57:52.849 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.77,28.2524,11485.4>
18:57:52.849 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.77,27.8024,11485.4> terrainY=27.8078 tireTerrainGap=-0.00541496
18:57:52.849 SCRIPT : ERR GEAR SUPPORT: center=<4798.77,28.2524,11485.4> radius=0.45 bottom=<4798.77,27.8024,11485.4> fraction=0.429871 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.00542831
18:57:52.849 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.32,28.0914,11485.3>
18:57:52.849 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.32,27.6414,11485.3> terrainY=27.6464 tireTerrainGap=-0.00501442
18:57:52.849 SCRIPT : ERR GEAR SUPPORT: center=<4803.32,28.0914,11485.3> radius=0.45 bottom=<4803.32,27.6414,11485.3> fraction=0.431754 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00501442
18:57:52.849 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
18:57:52.849 SCRIPT : Reintroduced [guards]: initial site=everon-prison-1 requested=5 physical=2 conscious=2 nativeComplete=0
18:57:52.850 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=2 physical=1 conscious=1 nativeComplete=0
18:57:52.850 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=4 physical=2 conscious=2 nativeComplete=0
18:57:52.850 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=2 physical=2 conscious=2 nativeComplete=1
18:57:53.382 SCRIPT : Reintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0
18:57:53.382 SCRIPT : Reintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0
18:57:53.382 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=4 physical=3 conscious=3 nativeComplete=0
18:57:53.382 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=4 physical=2 conscious=2 nativeComplete=0
18:57:53.915 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.1,27.5902,11487.4> up=0.996038
18:57:53.915 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0
18:57:53.915 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.4
18:57:53.915 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.19,28.0145,11489.6>
18:57:53.915 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.19,27.7145,11489.6> terrainY=27.7127 tireTerrainGap=0.00171661
18:57:53.915 SCRIPT : ERR GEAR SUPPORT: center=<4801.19,28.0145,11489.6> radius=0.3 bottom=<4801.19,27.7145,11489.6> fraction=0.462355 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.00171852
18:57:53.915 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.79,28.2546,11485.4>
18:57:53.915 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.79,27.8046,11485.4> terrainY=27.8069 tireTerrainGap=-0.00235748
18:57:53.915 SCRIPT : ERR GEAR SUPPORT: center=<4798.79,28.2546,11485.4> radius=0.45 bottom=<4798.79,27.8046,11485.4> fraction=0.443688 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.002388
18:57:53.915 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.33,28.0932,11485.3>
18:57:53.916 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.33,27.6432,11485.3> terrainY=27.6458 tireTerrainGap=-0.0026207
18:57:53.916 SCRIPT : ERR GEAR SUPPORT: center=<4803.33,28.0932,11485.3> radius=0.45 bottom=<4803.33,27.6432,11485.3> fraction=0.442648 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00261688
18:57:53.916 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
18:57:53.916 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=2 physical=2 conscious=2 nativeComplete=1
18:57:53.916 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=4 physical=1 conscious=1 nativeComplete=0
18:57:53.916 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=2 physical=1 conscious=1 nativeComplete=0
18:57:53.916 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=2 physical=1 conscious=1 nativeComplete=0
18:57:54.203 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=4 physical=1 conscious=1 nativeComplete=0
18:57:54.203 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=2 physical=1 conscious=1 nativeComplete=0
18:57:54.203 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=4 physical=1 conscious=1 nativeComplete=0
18:57:54.203 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=2 physical=1 conscious=1 nativeComplete=0
18:57:54.736 SCRIPT : Reintroduced [guards]: initial site=everon-prison-1 requested=5 physical=3 conscious=3 nativeComplete=0
18:57:54.736 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=4 physical=2 conscious=2 nativeComplete=0
18:57:54.736 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=2 physical=2 conscious=2 nativeComplete=1
18:57:54.736 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=4 physical=3 conscious=3 nativeComplete=0
18:57:55.015 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.1,27.5902,11487.4> up=0.996038
18:57:55.015 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0
18:57:55.015 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.4
18:57:55.015 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.19,28.0145,11489.6>
18:57:55.015 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.19,27.7145,11489.6> terrainY=27.7127 tireTerrainGap=0.00171661
18:57:55.015 SCRIPT : ERR GEAR SUPPORT: center=<4801.19,28.0145,11489.6> radius=0.3 bottom=<4801.19,27.7145,11489.6> fraction=0.462355 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.00171852
18:57:55.015 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.79,28.2546,11485.4>
18:57:55.015 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.79,27.8046,11485.4> terrainY=27.8069 tireTerrainGap=-0.00235748
18:57:55.015 SCRIPT : ERR GEAR SUPPORT: center=<4798.79,28.2546,11485.4> radius=0.45 bottom=<4798.79,27.8046,11485.4> fraction=0.443688 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.002388
18:57:55.015 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.33,28.0932,11485.3>
18:57:55.015 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.33,27.6432,11485.3> terrainY=27.6458 tireTerrainGap=-0.0026207
18:57:55.015 SCRIPT : ERR GEAR SUPPORT: center=<4803.33,28.0932,11485.3> radius=0.45 bottom=<4803.33,27.6432,11485.3> fraction=0.442648 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00261688
18:57:55.015 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
18:57:55.249 SCRIPT : Reintroduced [guards]: initial site=everon-supply-1 requested=5 physical=3 conscious=3 nativeComplete=0
18:57:55.249 SCRIPT : Reintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0
18:57:55.249 SCRIPT : Reintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0
18:57:55.249 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=4 physical=3 conscious=3 nativeComplete=0
18:57:55.815 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=4 physical=2 conscious=2 nativeComplete=0
18:57:55.816 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=2 physical=2 conscious=2 nativeComplete=1
18:57:55.816 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=4 physical=1 conscious=1 nativeComplete=0
18:57:55.816 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=2 physical=2 conscious=2 nativeComplete=1
18:57:56.082 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.1,27.5902,11487.4> up=0.996038
18:57:56.082 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0
18:57:56.082 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.4
18:57:56.082 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.19,28.0145,11489.6>
18:57:56.082 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.19,27.7145,11489.6> terrainY=27.7127 tireTerrainGap=0.00171661
18:57:56.082 SCRIPT : ERR GEAR SUPPORT: center=<4801.19,28.0145,11489.6> radius=0.3 bottom=<4801.19,27.7145,11489.6> fraction=0.462355 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.00171852
18:57:56.082 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.79,28.2546,11485.4>
18:57:56.082 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.79,27.8046,11485.4> terrainY=27.8069 tireTerrainGap=-0.00235748
18:57:56.082 SCRIPT : ERR GEAR SUPPORT: center=<4798.79,28.2546,11485.4> radius=0.45 bottom=<4798.79,27.8046,11485.4> fraction=0.443688 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.002388
18:57:56.082 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.33,28.0932,11485.3>
18:57:56.082 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.33,27.6432,11485.3> terrainY=27.6458 tireTerrainGap=-0.0026207
18:57:56.082 SCRIPT : ERR GEAR SUPPORT: center=<4803.33,28.0932,11485.3> radius=0.45 bottom=<4803.33,27.6432,11485.3> fraction=0.442648 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00261688
18:57:56.082 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
18:57:56.349 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=4 physical=2 conscious=2 nativeComplete=0
18:57:56.349 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=2 physical=2 conscious=2 nativeComplete=1
18:57:56.349 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=4 physical=2 conscious=2 nativeComplete=0
18:57:56.350 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=2 physical=2 conscious=2 nativeComplete=1
18:57:56.882 SCRIPT : Reintroduced [guards]: initial site=everon-prison-1 requested=5 physical=4 conscious=4 nativeComplete=0
18:57:56.882 SCRIPT : Reintroduced [guards]: initial site=everon-supply-1 requested=5 physical=4 conscious=4 nativeComplete=0
18:57:56.883 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=4 physical=3 conscious=3 nativeComplete=0
18:57:56.883 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=4 physical=4 conscious=4 nativeComplete=1
18:57:57.149 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.1,27.5902,11487.4> up=0.996038
18:57:57.149 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0
18:57:57.149 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.4
18:57:57.149 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.19,28.0145,11489.6>
18:57:57.149 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.19,27.7145,11489.6> terrainY=27.7127 tireTerrainGap=0.00171661
18:57:57.149 SCRIPT : ERR GEAR SUPPORT: center=<4801.19,28.0145,11489.6> radius=0.3 bottom=<4801.19,27.7145,11489.6> fraction=0.462355 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.00171852
18:57:57.149 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.79,28.2546,11485.4>
18:57:57.149 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.79,27.8046,11485.4> terrainY=27.8069 tireTerrainGap=-0.00235748
18:57:57.149 SCRIPT : ERR GEAR SUPPORT: center=<4798.79,28.2546,11485.4> radius=0.45 bottom=<4798.79,27.8046,11485.4> fraction=0.443688 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.002388
18:57:57.149 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.33,28.0932,11485.3>
18:57:57.149 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.33,27.6432,11485.3> terrainY=27.6458 tireTerrainGap=-0.0026207
18:57:57.149 SCRIPT : ERR GEAR SUPPORT: center=<4803.33,28.0932,11485.3> radius=0.45 bottom=<4803.33,27.6432,11485.3> fraction=0.442648 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00261688
18:57:57.149 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
18:57:57.415 SCRIPT : Reintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0
18:57:57.417 SCRIPT : Reintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0
18:57:57.417 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=4 physical=4 conscious=4 nativeComplete=1
18:57:57.417 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=4 physical=4 conscious=4 nativeComplete=1
18:57:57.949 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=4 physical=3 conscious=3 nativeComplete=0
18:57:57.949 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=4 physical=2 conscious=2 nativeComplete=0
18:57:57.950 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=4 physical=3 conscious=3 nativeComplete=0
18:57:57.950 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=4 physical=3 conscious=3 nativeComplete=0
18:57:58.218 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.1,27.5902,11487.4> up=0.996038
18:57:58.218 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0
18:57:58.218 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.4
18:57:58.218 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.19,28.0145,11489.6>
18:57:58.218 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.19,27.7145,11489.6> terrainY=27.7127 tireTerrainGap=0.00171661
18:57:58.218 SCRIPT : ERR GEAR SUPPORT: center=<4801.19,28.0145,11489.6> radius=0.3 bottom=<4801.19,27.7145,11489.6> fraction=0.462355 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.00171852
18:57:58.218 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.79,28.2546,11485.4>
18:57:58.218 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.79,27.8046,11485.4> terrainY=27.8069 tireTerrainGap=-0.00235748
18:57:58.218 SCRIPT : ERR GEAR SUPPORT: center=<4798.79,28.2546,11485.4> radius=0.45 bottom=<4798.79,27.8046,11485.4> fraction=0.443688 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.002388
18:57:58.218 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.33,28.0932,11485.3>
18:57:58.218 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.33,27.6432,11485.3> terrainY=27.6458 tireTerrainGap=-0.0026207
18:57:58.218 SCRIPT : ERR GEAR SUPPORT: center=<4803.33,28.0932,11485.3> radius=0.45 bottom=<4803.33,27.6432,11485.3> fraction=0.442648 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00261688
18:57:58.218 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
18:57:58.482 SCRIPT : Reintroduced [guards]: initial site=everon-prison-1 requested=5 physical=5 conscious=5 nativeComplete=1
18:57:58.482 SCRIPT : Reintroduced [guards]: initial site=everon-supply-1 requested=5 physical=5 conscious=5 nativeComplete=1
18:57:58.482 SCRIPT : Reintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1
18:57:58.482 SCRIPT : Reintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1
18:57:59.016 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=4 physical=4 conscious=4 nativeComplete=1
18:57:59.016 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=4 physical=3 conscious=3 nativeComplete=0
18:57:59.016 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=4 physical=4 conscious=4 nativeComplete=1
18:57:59.016 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=4 physical=4 conscious=4 nativeComplete=1
18:57:59.282 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.1,27.5902,11487.4> up=0.996038
18:57:59.282 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0
18:57:59.282 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.4
18:57:59.282 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.19,28.0145,11489.6>
18:57:59.282 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.19,27.7145,11489.6> terrainY=27.7127 tireTerrainGap=0.00171661
18:57:59.282 SCRIPT : ERR GEAR SUPPORT: center=<4801.19,28.0145,11489.6> radius=0.3 bottom=<4801.19,27.7145,11489.6> fraction=0.462355 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.00171852
18:57:59.282 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.79,28.2546,11485.4>
18:57:59.282 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.79,27.8046,11485.4> terrainY=27.8069 tireTerrainGap=-0.00235748
18:57:59.282 SCRIPT : ERR GEAR SUPPORT: center=<4798.79,28.2546,11485.4> radius=0.45 bottom=<4798.79,27.8046,11485.4> fraction=0.443688 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.002388
18:57:59.282 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.33,28.0932,11485.3>
18:57:59.282 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.33,27.6432,11485.3> terrainY=27.6458 tireTerrainGap=-0.0026207
18:57:59.282 SCRIPT : ERR GEAR SUPPORT: center=<4803.33,28.0932,11485.3> radius=0.45 bottom=<4803.33,27.6432,11485.3> fraction=0.442648 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00261688
18:57:59.282 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
18:57:59.549 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=4 physical=4 conscious=4 nativeComplete=1
18:57:59.549 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=4 physical=4 conscious=4 nativeComplete=1
18:57:59.550 SCRIPT : Reintroduced [sites]: transport parking=<6150,202.725,7038> radius=4 terrainRange=0.625 obstructed=0 clear=1
18:57:59.574 SCRIPT : Reintroduced [sites]: 16 sites and 240 physical stock items ready
18:58:00.354 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=1 position=<10565.5,229.665,2530.55> heading=180
18:58:00.617 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=2 position=<4426.98,67.6955,3981.37> heading=0
18:58:00.888 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=3 position=<9339.73,252.115,3232.13> heading=0
18:58:02.219 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=4 position=<1750.36,78.8301,5613.45> heading=135
18:58:02.488 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=5 position=<8342.25,206.554,1702.79> heading=270
18:58:02.754 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=6 position=<5851.67,145.852,6215.82> heading=0
18:58:03.021 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=7 position=<5044.93,145.591,7646.33> heading=90
18:58:03.283 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=8 position=<9969.8,133.775,651.975> heading=45
18:58:03.287 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=9 position=<3451.78,75.9813,4021.22> heading=90
18:58:03.554 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=10 position=<8833.56,266.286,4277.48> heading=45
18:58:15.015 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-1 faction=USSR group=<0x0000000058ABA700> SCR_AIGroup position=<10565.5,229.678,2530.55> living=1
18:58:15.015 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<10565.5,229.665,2530.55> backpack magazines=40
18:58:15.549 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-2 faction=USSR group=<0x0000000058AD2100> SCR_AIGroup position=<4426.98,67.8028,3981.37> living=1
18:58:15.549 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<4426.98,67.6955,3981.37> backpack magazines=40
18:58:15.549 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-3 faction=USSR group=<0x0000000058AE9250> SCR_AIGroup position=<9339.73,252.015,3232.13> living=1
18:58:15.549 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<9339.73,252.115,3232.13> backpack magazines=40
18:58:16.082 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-4 faction=USSR group=<0x0000000058AF17E0> SCR_AIGroup position=<1750.36,78.7301,5613.45> living=1
18:58:16.082 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<1750.36,78.8301,5613.45> backpack magazines=40
18:58:16.082 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-5 faction=USSR group=<0x0000000058C8AFE0> SCR_AIGroup position=<8342.25,206.644,1702.79> living=1
18:58:16.082 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<8342.25,206.554,1702.79> backpack magazines=40
18:58:16.616 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-6 faction=USSR group=<0x0000000058CA19F0> SCR_AIGroup position=<5851.67,145.778,6215.82> living=1
18:58:16.616 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<5851.67,145.852,6215.82> backpack magazines=40
18:58:16.616 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-7 faction=USSR group=<0x0000000058E78D90> SCR_AIGroup position=<5044.93,145.491,7646.33> living=1
18:58:16.616 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<5044.93,145.591,7646.33> backpack magazines=40
18:58:17.149 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-8 faction=USSR group=<0x0000000058F45770> SCR_AIGroup position=<9969.8,133.675,651.975> living=1
18:58:17.149 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<9969.8,133.775,651.975> backpack magazines=40
18:58:17.149 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-9 faction=USSR group=<0x0000000058F5E530> SCR_AIGroup position=<3451.78,75.8813,4021.22> living=1
18:58:17.149 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<3451.78,75.9813,4021.22> backpack magazines=40
18:58:17.683 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-10 faction=USSR group=<0x00000000592433E0> SCR_AIGroup position=<8833.56,266.186,4277.48> living=1
18:58:17.683 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<8833.56,266.286,4277.48> backpack magazines=40
18:58:25.183 SCRIPT : Reintroduced [SPAWN GROUP]: source=roadblock-0 faction=USSR group=<0x00000000599329E0> SCR_AIGroup position=<5060.24,22.165,12157.8> living=4
18:58:25.183 SCRIPT : Reintroduced [roadblocks]: roadblock-0 at <5067.81,21.8385,12158.7> guards=4 roadPassage=open HQ=registered
18:58:27.049 SCRIPT : Reintroduced [SPAWN GROUP]: source=roadblock-1 faction=USSR group=<0x000000005941AE40> SCR_AIGroup position=<7656.02,1.49606,9244.65> living=4
18:58:27.049 SCRIPT : Reintroduced [roadblocks]: roadblock-1 at <7649.91,1.60287,9240.1> guards=4 roadPassage=open HQ=registered
18:58:29.948 SCRIPT : Reintroduced [roadblocks]: placed=2 requested=4 attempts=117 roadCandidates=28 clearPlans=2; bounded search complete; unsuitable locations skipped
18:58:29.949 SCRIPT : Reintroduced [mortars]: preparing everon-mortar-1 location=<5669.14,28.3192,10162> authored=<5669.14,27.9815,10162>
18:58:29.955 SCRIPT : Reintroduced [mortars]: preparing everon-mortar-2 location=<5537.81,85.7875,5660.33> authored=<5537.81,85.4931,5660.33>
18:58:29.958 SCRIPT : Reintroduced [mortars]: preparing everon-mortar-3 location=<4777.19,27.9438,11135.9> authored=<4777.19,27.8638,11135.9>
18:58:29.960 SCRIPT : Reintroduced [mortars]: preparing everon-mortar-4 location=<3284.1,1.5417,1574.27> authored=<3284.1,1.21308,1574.27>
18:58:29.964 SCRIPT : Reintroduced [environment]: date=authored weather=authored
18:58:29.965 SCRIPT : Reintroduced [time]: started at 14:00 with 1x progression
18:58:29.965 SCRIPT : Reintroduced [mission]: phase 0 -> 1
18:58:29.965 SCRIPT : Reintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<7288.09,122.994,5188.44>
18:58:29.965 SCRIPT : Reintroduced [prison]: gate candidate raw= resolved={67F17696FF278AE0}Prefabs/Structures/BuildingParts/Doors/Door_Metal_A_RIGHT_EXT_COV_B.et lock=1 door=1 position=<7293.5,122.994,5190.99>
18:58:29.965 SCRIPT : Reintroduced [prison]: one intact successor lock in owned prison
18:58:29.986 SCRIPT : ERR RADIUS POSITION: target=1000 actual=990.522 band=1
18:58:29.986 SCRIPT : ERR RADIUS POSITION: target=1000 actual=801.659 band=1
18:58:29.986 SCRIPT : ERR RADIUS POSITION: target=1000 actual=974.278 band=1
18:58:30.000 SCRIPT : ERR RADIUS PATROL: truck=0 found=1 homeDistance=100.921 travel=100.921
18:58:30.000 SCRIPT : ERR RADIUS PATROL: truck=1 found=1 homeDistance=287.47 travel=287.47
18:58:30.001 SCRIPT : ERR RADIUS RESULT: radius=1000 valid=1 positions=3
18:58:30.015 SCRIPT (W): GM Budget got clamped at some point!
18:58:30.120 SCRIPT : ERR RADIUS POSITION: target=1800 actual=1878.04 band=1
18:58:30.120 SCRIPT : ERR RADIUS POSITION: target=1800 actual=1609.77 band=1
18:58:30.120 SCRIPT : ERR RADIUS POSITION: target=1800 actual=1650.75 band=1
18:58:30.128 SCRIPT : ERR RADIUS PATROL: truck=0 found=1 homeDistance=291.1 travel=291.1
18:58:30.128 SCRIPT : ERR RADIUS PATROL: truck=1 found=1 homeDistance=223.736 travel=223.736
18:58:30.129 SCRIPT : ERR RADIUS RESULT: radius=1800 valid=1 positions=3
18:58:30.129 SCRIPT : ERR RADIUS COMPLETE
18:58:30.148 SCRIPT (W): GM Budget got clamped at some point!
@@ -0,0 +1,50 @@
modded class ERR_HunterService
{
bool ProbePatrol(ERR_HunterVehicle unit)
{
vector destination, angles;
bool found = OpeningPatrolPoint(unit, destination, angles);
PrintFormat("ERR RADIUS PATROL: truck=%1 found=%2 homeDistance=%3 travel=%4", unit.TroopTransport, found, vector.DistanceXZ(destination, unit.PatrolHome), vector.DistanceXZ(destination, unit.Entity.GetOrigin()));
return found && vector.DistanceXZ(destination, unit.PatrolHome) <= 500 && vector.DistanceXZ(destination, unit.Entity.GetOrigin()) >= 100;
}
}
modded class ArmaReforgerScripted
{
protected ref ERR_HunterOpeningPlan m_RadiusPlan;
protected ref ERR_HunterService m_RadiusService;
protected int m_RadiusStage;
protected float m_RadiusNext;
override void OnUpdate(BaseWorld world, float timeslice)
{
super.OnUpdate(world, timeslice);
ERR_GameMode mode = ERR_GameMode.Get();
if (!mode || mode.Phase() < ERR_Phase.PRISON || m_RadiusStage >= 2) return;
float now = world.GetWorldTime(); if (now < m_RadiusNext) return; m_RadiusNext = now + 1000;
int radius = 1000; if (m_RadiusStage == 1) radius = 1800;
if (!m_RadiusPlan) m_RadiusPlan = new ERR_HunterOpeningPlan(mode.PrisonPosition(), radius);
array<IEntity> players = {}; m_RadiusPlan.Step(players);
if (!m_RadiusPlan.Done()) return;
bool valid = m_RadiusPlan.Ready();
foreach (vector point : m_RadiusPlan.Positions)
{
bool band = ERR_HunterOpeningRules.InBand(m_RadiusPlan.Center, point, radius); valid = valid && band;
PrintFormat("ERR RADIUS POSITION: target=%1 actual=%2 band=%3", radius, vector.DistanceXZ(point, m_RadiusPlan.Center), band);
}
if (valid)
{
m_RadiusService = new ERR_HunterService(mode, null);
ERR_HunterVehicle unit = new ERR_HunterVehicle(); unit.PatrolHome = m_RadiusPlan.Positions[0];
unit.Entity = Vehicle.Cast(ERR_Actors.Spawn(ERR_HunterFleetRules.VehiclePrefab(0), unit.PatrolHome, m_RadiusPlan.Angles[0]));
if (!unit.Entity) valid = false;
else
{
valid = m_RadiusService.ProbePatrol(unit) && valid;
unit.TroopTransport = true; valid = m_RadiusService.ProbePatrol(unit) && valid;
ERR_Actors.DeleteSpawned(unit.Entity);
}
}
PrintFormat("ERR RADIUS RESULT: radius=%1 valid=%2 positions=%3", radius, valid, m_RadiusPlan.Positions.Count());
m_RadiusStage++; m_RadiusPlan = null;
if (m_RadiusStage == 2) Print("ERR RADIUS COMPLETE");
}
}
@@ -0,0 +1 @@
{"reason": "complete", "exit": -15}
@@ -0,0 +1,24 @@
{
"date": "2026-10-05",
"repository_checks": "tools/check.py exited 0; all registered checks passed",
"native": "isolated silent dedicated Everon run compiled and completed both 1000 m and 1800 m three-position surveys; actual local patrol helper succeeded with UAZ and truck flags",
"limits": [
"No multiplayer or menu rendering check",
"Patrol fixture tests destination selection, not sustained vehicle driving",
"Sparse terrain safe objective fallback may exceed configured radius",
"Local changes not published or deployed to the live server"
],
"live_bvp_investigation": {
"journal_session": "1791215287-2",
"combat_started_event": 6638,
"bmp_hold_delivered_event": 6662,
"resume_rejected_events": [
6896,
6910,
6935,
6965,
7004
],
"finding": "Resume orders were rejected during active local combat. Current support placement is behind reported contact without a visibility check; exact BVP route cannot be established from existing logs. No BVP tactical change made in this checkpoint."
}
}