diff --git a/README.md b/README.md index bd29294..a31149f 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,9 @@ An independently authored replacement for the abandoned Escapists base mission, The current base supplies prison spawning, two independent scavenging/clue routes, finite medical and outpost stock, an optional ground vehicle, physical radio documents, named discovery markers, native objectives, a separate radio-defence service, capacity-checked helicopter extraction, identity-based partial results, early helicopter-loss defeat, saved mission time/speed, defeat/restart, identity-based lives and local spectator following. Authored site definitions and an injected vanilla faction/asset catalog own the initial physical population. Core provides administration and startup diagnostics; the optional AI, Intel, Chat and Map addons extend its interfaces. HQ coordinates enemy responses through physical radios and available forces. -See [current development status](docs/current-status.md) for checkpoints. Packed Core and all-five-addon Chat each pass ordinary startup with a real prisoner, no loose successor source and zero captured errors. The [refreshed mortar salvo](docs/evidence/native-2026-09-19-112900-mortar-refresh/report.json), [report expiry](docs/evidence/native-2026-09-19-114751-mortar-expiry/report.json) and [isolated vertical flight](docs/evidence/native-2026-09-19-114504-powered-flight/report.json) pass 55, 48 and 81 assertions respectively, all without captured errors. These establish mechanisms, not operational HQ aircraft support or a completed manual escape. Native packaging still produces [UI shutdown errors also reproduced by an empty-addon control](docs/native-packaging-control.md). Manual gameplay, real multiplayer, measured FPS improvement and release qualification remain unfinished. The [original responsibility inventory](docs/original-feature-coverage.md) records remaining scope. +See [current development status](docs/current-status.md) for source-bound checkpoints. The ordinary game loads all five addons and shows the [real prisoner view and starting objective](docs/evidence/game-2026-09-19-125906-integrated-prison/ordinary-prison-view.png). Native tests cover scripted escape/restart, finite mortar support, physical radio delivery, shared-map ownership, and the reusable aircraft controller's vertical flight, airborne cancellation and short fixed-target movement. The current five-addon packages pass ordinary Chat startup without loose successor source and compile/prepare the empty mission on an isolated Linux server. The latter retains four installed-asset errors reproduced by a vanilla control. + +The complete player-controlled escape, real multiplayer, operational HQ aircraft routes and measured FPS improvement remain unfinished. Native packaging still produces [UI shutdown errors also reproduced by an empty-addon control](docs/native-packaging-control.md); successful packed startup does not qualify that build process. All seventeen first-release acceptance cases remain pending. The [original responsibility inventory](docs/original-feature-coverage.md) tracks the unfinished scope. ## Projects and scenarios diff --git a/addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c b/addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c new file mode 100644 index 0000000..3c4953a --- /dev/null +++ b/addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c @@ -0,0 +1,436 @@ +// Prepared control mechanism only. No global hooks, force allocation or HQ selection. +enum ERR_AircraftFlightState +{ + IDLE, HOOKS, STARTING, POSITIVE, NEGATIVE, CLIMB, LANDING, SHUTDOWN, + COMPLETE, CANCELLED, FAILED, RELINQUISHED, TRANSLATING +} +class ERR_AircraftFlightRules +{ + static bool Terminal(int state) { return state >= ERR_AircraftFlightState.COMPLETE && state <= ERR_AircraftFlightState.RELINQUISHED; } + static bool Deadline(float now, float deadline) { return now >= 0 && deadline > now && deadline - now <= 240000; } + static bool Envelope(float height, float drift, float upright) + { + return height >= -3 && height <= 18 && drift >= 0 && drift < 8 && upright >= 0.85; + } + static bool Hover(float height, float speed, float vertical, float upright) + { + return height >= 7 && height <= 9 && speed >= 0 && speed < 1.5 && Math.AbsFloat(vertical) < 0.5 && upright > 0.98; + } + static bool Landed(bool contact, float height, float speed, float angular, float upright) + { + return contact && height > -1 && height < 1 && speed >= 0 && speed < 0.5 && angular >= 0 && angular < 0.1 && upright > 0.98; + } + static float Vertical(float height, bool landing) + { + float target = 8; if (landing) target = 0; + return Math.Clamp((target - height) * 0.6, -0.8, 1.5); + } + // Ground aborts may stop the engine; airborne cancellation retains the flight lease. + static int CancelAction(bool ownershipValid, bool landed, bool engineOn) + { + if (!ownershipValid) return 0; + if (!landed) return 1; + if (engineOn) return 2; + return 3; + } +} + +// Bounded migration of the separately proven native-autohover translation. +class ERR_AircraftTranslationRules +{ + static bool Target(vector home, vector target) + { + float distance = vector.DistanceXZ(home, target); + return distance >= 0 && distance <= 5; + } + static bool Reachable(float distance) { return distance >= 0 && distance <= 4.05; } + static vector Demand(vector target, vector position, vector velocity) + { + vector error = target - position; error[1] = 0; + vector desired = error * 0.25; + float speed = desired.Length(); + if (speed > 0.5) desired = desired * (0.5 / speed); + velocity[1] = 0; + vector demand = (desired - velocity) * 0.05; + float magnitude = demand.Length(); + if (magnitude > 0.03) demand = demand * (0.03 / magnitude); + return demand; + } + static bool Held(bool contact, float height, float speed, float vertical, float upright, float horizontalSpeed, float targetError, float displacement, float distance) + { + if (contact || !ERR_AircraftFlightRules.Hover(height, speed, vertical, upright)) return false; + if (!(horizontalSpeed >= 0 && horizontalSpeed < 0.25 && targetError >= 0 && targetError <= 0.75)) return false; + return Reachable(distance) && displacement >= Math.Max(0, distance - 0.75); + } +} + +class ERR_AircraftFlight +{ + protected static ref map s_Owners = new map(); + protected ERR_GameMode m_Mode; + protected Vehicle m_Aircraft; + protected SCR_AIGroup m_Group; + protected IEntity m_Pilot; + protected PilotCompartmentSlot m_Seat; + protected HelicopterControllerComponent m_Controller; + protected VehicleHelicopterSimulation m_Simulation; + protected CharacterControllerComponent m_Character; + protected CharacterInputContext m_Input; + protected AIAgent m_Agent; + protected ActionManager m_Actions; + protected FuelManagerComponent m_Fuel; + protected ref ERR_AircraftFlightEnvelope m_Qualification; + protected ERR_AircraftFlightState m_State; + protected int m_Token; + protected vector m_Home; + protected float m_Heading; + protected float m_Deadline; + protected float m_StageDeadline; + protected float m_Stable = -1; + protected float m_LastTick = -1; + protected float m_LastControl = -1; + protected float m_InitialFuel; + protected float m_Collective = -0.8; + protected int m_ActionUpdates; + protected int m_HelicopterUpdates; + protected int m_GateUpdates; + protected int m_OriginalLOD; + protected CollectiveMode m_OriginalMode; + protected bool m_OriginalAutohover; + protected bool m_SettingsOwned; + protected bool m_Readback = true; + protected bool m_Cancelled; + protected bool m_StartAttempted; + protected string m_Reason; + protected bool m_TranslationRequested; + protected bool m_TranslationStarted; + protected bool m_TranslationProven; + protected vector m_TranslationTarget; + protected vector m_TranslationOrigin; + protected float m_TranslationDistance; + protected int m_TranslationUpdates; + + ERR_AircraftFlightState State() { return m_State; } + string Reason() { return m_Reason; } + int OrderToken() { return m_Token; } + bool Finished() { return ERR_AircraftFlightRules.Terminal(m_State); } + Vehicle Aircraft() { return m_Aircraft; } + bool TranslationStarted() { return m_TranslationStarted; } + bool TranslationProven() { return m_TranslationProven; } + vector TranslationTarget() { return m_TranslationTarget; } + vector TranslationOrigin() { return m_TranslationOrigin; } + int TranslationUpdates() { return m_TranslationUpdates; } + // Absolute horizontal target fixed before takeoff. Its altitude is the existing + // eight-metre hover, not a caller-supplied route or a new qualification home. + bool StartTranslation(ERR_GameMode mode, Vehicle aircraft, SCR_AIGroup group, IEntity pilot, PilotCompartmentSlot seat, ERR_AircraftFlightEnvelope qualification, int token, float deadline, vector target) + { + if (m_StartAttempted || m_TranslationRequested || !qualification || !ERR_AircraftTranslationRules.Target(qualification.Home(), target)) return false; + m_TranslationRequested = true; m_TranslationTarget = target; + vector home = qualification.Home(); m_TranslationTarget[1] = home[1] + 8; + return Start(mode, aircraft, group, pilot, seat, qualification, token, deadline); + } + protected float Now() + { + if (!GetGame() || !GetGame().GetWorld()) return -1; + return GetGame().GetWorld().GetWorldTime(); + } + protected bool NoPlayers() + { + if (!GetGame() || !GetGame().GetPlayerManager()) return false; + if (!m_Group || m_Group.GetPlayerCount(true) > 0 || ERR_Actors.Player(m_Pilot)) return false; + array players = {}; GetGame().GetPlayerManager().GetPlayers(players); + foreach (int id : players) + { + IEntity actor = GetGame().GetPlayerManager().GetPlayerControlledEntity(id); + if (actor && (actor == m_Pilot || CompartmentAccessComponent.GetVehicleIn(actor) == m_Aircraft)) return false; + } + return true; + } + protected bool Owns() + { + if (!GetGame() || !GetGame().GetWorld() || !GetGame().GetPlayerManager()) return false; + if (!Replication.IsServer() || !m_Mode || m_Mode != ERR_GameMode.Get() || !m_Mode.Active() || !m_Aircraft || !m_Group || !m_Pilot) return false; + if (!m_Controller || m_Controller.GetOwner() != m_Aircraft || !m_Seat || m_Controller.GetPilotCompartmentSlot() != m_Seat || m_Seat.GetOccupant() != m_Pilot) return false; + if (CompartmentAccessComponent.GetVehicleIn(m_Pilot) != m_Aircraft || ERR_Actors.Group(m_Pilot) != m_Group || m_Group.GetFaction() != m_Mode.EnemyFaction()) return false; + if (SCR_FactionManager.SGetFaction(m_Aircraft) != m_Mode.EnemyFaction() || !NoPlayers()) return false; + return m_Agent && m_Agent.GetControlledEntity() == m_Pilot && m_Agent.GetActionManager() == m_Actions && m_Actions && m_Actions != GetGame().GetInputManager(); + } + protected bool Healthy() + { + if (!ERR_Actors.Alive(m_Aircraft) || !ERR_Actors.CanFight(m_Pilot) || !m_Simulation || !m_Simulation.IsValid() || !m_Fuel || !m_Fuel.HasFuel()) return false; + SCR_VehicleDamageManagerComponent damage = SCR_VehicleDamageManagerComponent.Cast(m_Aircraft.FindComponent(SCR_VehicleDamageManagerComponent)); + if (!damage || !damage.GetEngineFunctional() || damage.GetMovementDamage() >= 1 || damage.IsOnFire() || m_Simulation.RotorCount() != 2) return false; + for (int rotor = 0; rotor < 2; rotor++) if (m_Simulation.RotorGetState(rotor) == RotorState.DESTROYED) return false; + return true; + } + protected bool Grounded() + { + if (!GetGame() || !GetGame().GetWorld() || !m_Aircraft || !m_Simulation) return false; + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + return ERR_AircraftFlightRules.Landed(m_Simulation.HasAnyGroundContact(), transform[3][1] - m_Home[1], m_Simulation.GetVelocity().Length(), m_Simulation.GetAngularVelocity().Length(), transform[1][1]); + } + // Single use. A future HQ owner supplies its immutable unique order token and + // retains this instance, calling Tick and the two scoped callbacks until terminal. + bool Start(ERR_GameMode mode, Vehicle aircraft, SCR_AIGroup group, IEntity pilot, PilotCompartmentSlot seat, ERR_AircraftFlightEnvelope qualification, int token, float deadline) + { + if (m_StartAttempted || m_State != ERR_AircraftFlightState.IDLE || m_Token != 0 || !Replication.IsServer() || !GetGame() || !qualification || !aircraft || !pilot || !group || !seat) return false; + m_StartAttempted = true; + float now = Now(); + if (!ERR_AircraftFlightRules.Deadline(now, deadline) || token <= 0 || s_Owners.Get(aircraft)) return false; + m_Mode = mode; m_Aircraft = aircraft; m_Group = group; m_Pilot = pilot; m_Seat = seat; + m_Controller = HelicopterControllerComponent.Cast(aircraft.FindComponent(HelicopterControllerComponent)); + if (m_Controller) m_Simulation = m_Controller.GetSimulation(); + m_Character = CharacterControllerComponent.Cast(pilot.FindComponent(CharacterControllerComponent)); + if (m_Character) m_Input = m_Character.GetInputContext(); + AIControlComponent control = AIControlComponent.Cast(pilot.FindComponent(AIControlComponent)); + if (control) m_Agent = control.GetControlAIAgent(); + if (m_Agent) m_Actions = m_Agent.GetActionManager(); + m_Fuel = FuelManagerComponent.Cast(aircraft.FindComponent(FuelManagerComponent)); + if (!Owns() || !Healthy() || !m_Input || m_Controller.IsEngineOn() || !ERR_CasualtyLoadingRules.AircraftReady(aircraft)) return false; + Physics physics = aircraft.GetPhysics(); + if (!physics || !physics.IsDynamic() || !physics.IsActive() || !m_Simulation.HasAnyGroundContact()) return false; + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + if (!signals || signals.FindSignal("MainRotorCollective") < 0) return false; + if (!qualification.Claim(mode, aircraft, pilot, token)) return false; + m_Qualification = qualification; m_Home = qualification.Home(); m_Token = token; m_Deadline = deadline; + m_Heading = aircraft.GetYawPitchRoll()[0]; m_InitialFuel = m_Fuel.GetTotalFuel(); + m_OriginalMode = m_Controller.GetCollectiveMode(); m_OriginalAutohover = m_Controller.GetAutohoverEnabled(); m_OriginalLOD = m_Agent.GetPermanentLOD(); + m_SettingsOwned = true; s_Owners.Set(aircraft, this); + m_Agent.SetPermanentLOD(0); m_Agent.ActivateAI(); + m_Controller.SetAutohoverEnabled(false); + if (m_Controller.GetAutohoverEnabled()) { Fail("native autohover disable refused"); return false; } + m_State = ERR_AircraftFlightState.HOOKS; m_StageDeadline = Math.Min(deadline, now + 5000); + PrintFormat("ERR AIRCRAFT CONTROL: token=%1 bound qualified finite aircraft; no HQ dispatch installed", token); + return true; + } + protected bool Lease() + { + return m_Token > 0 && !Finished() && m_State != ERR_AircraftFlightState.IDLE && s_Owners.Get(m_Aircraft) == this && m_Qualification && m_Qualification.ClaimedBy(m_Aircraft, m_Pilot, m_Token); + } + // Every input entry checks the immutable deadlines even if owner Tick stalls. + protected bool ControlLease() + { + if (!Lease()) return false; + if (!Owns()) { Relinquish("ownership or world unavailable at control callback"); return false; } + float now = Now(); + if (now < 0 || now >= m_Deadline || now >= m_StageDeadline) { Fail("control callback reached bounded flight deadline"); return false; } + if (!Healthy() || !m_Readback) { Fail("flight capability or input readback lost"); return false; } + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + if (!ERR_AircraftFlightRules.Envelope(transform[3][1] - m_Home[1], vector.DistanceXZ(transform[3], m_Home), transform[1][1])) { Fail("control callback exceeded qualified flight envelope"); return false; } + return true; + } + // Must be called after the native helicopter's OnPrepareControls. + void PrepareHelicopter(HelicopterControllerComponent controller) + { + if (!Lease() || controller != m_Controller) return; + if (!ControlLease()) return; + controller.SetCollectiveMode(CollectiveMode.Direct); m_HelicopterUpdates++; + } + protected bool Pair(string positive, string negative, float demand) + { + float a = Math.Clamp(demand, 0, 1), b = Math.Clamp(-demand, 0, 1); + m_Actions.SetActionValue(positive, a); m_Actions.SetActionValue(negative, b); + return Math.AbsFloat(m_Actions.GetActionValue(positive) - a) < 0.001 && Math.AbsFloat(m_Actions.GetActionValue(negative) - b) < 0.001; + } + // Must be called on the exact AI actor manager before native OnPrepareControls. + void PrepareActions(CharacterControllerComponent controller, IEntity owner, ActionManager actions, float dt) + { + if (!Lease() || controller != m_Character || owner != m_Pilot || actions != m_Actions) return; + if (!ControlLease()) return; + if (!m_Readback || dt <= 0 || dt > 0.2) return; + if (!actions.IsContextActive("HelicopterContext")) actions.ActivateContext("HelicopterContext", 1); + if (!actions.IsContextActive("HelicopterContext")) { m_Readback = false; return; } + float collective, torque, forward, aside; + if (m_State == ERR_AircraftFlightState.POSITIVE) collective = 0.05; + else if (m_State == ERR_AircraftFlightState.NEGATIVE) collective = -0.05; + else if (m_State == ERR_AircraftFlightState.SHUTDOWN) collective = -1; + else if (m_State == ERR_AircraftFlightState.CLIMB || m_State == ERR_AircraftFlightState.LANDING || m_State == ERR_AircraftFlightState.TRANSLATING) + { + if (!m_Controller.GetAutohoverEnabled()) { Fail("native autohover lost while flying"); return; } + float height = m_Aircraft.GetOrigin()[1] - m_Home[1]; + float error = ERR_AircraftFlightRules.Vertical(height, m_State == ERR_AircraftFlightState.LANDING) - m_Simulation.GetVelocity()[1]; + m_Collective = Math.Clamp(m_Collective + error * dt * 0.12, -0.95, 0.8); + collective = Math.Clamp(m_Collective + error * 0.12, -1, 0.9); + float headingError = m_Heading - m_Aircraft.GetYawPitchRoll()[0]; + while (headingError > 180) headingError -= 360; + while (headingError < -180) headingError += 360; + torque = Math.Clamp(headingError * 0.01 - m_Simulation.GetAngularVelocityLocal()[1] * 0.3, -0.3, 0.3); + if (m_State == ERR_AircraftFlightState.TRANSLATING) + { + if (!m_TranslationStarted || !ERR_AircraftTranslationRules.Target(m_Home, m_TranslationTarget)) { Fail("immutable translation target unavailable"); return; } + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + vector demand = ERR_AircraftTranslationRules.Demand(m_TranslationTarget, transform[3], m_Simulation.GetVelocity()); + forward = Math.Clamp(vector.Dot(demand, transform[2]), -0.03, 0.03); + aside = Math.Clamp(vector.Dot(demand, transform[0]), -0.03, 0.03); + m_TranslationUpdates++; + } + if (m_State == ERR_AircraftFlightState.LANDING && Grounded()) collective = -1; + } + bool a = Pair("HelicopterCollectiveIncrease", "HelicopterCollectiveDecrease", collective); + bool b = Pair("HelicopterCyclicForward", "HelicopterCyclicBack", forward); + bool c = Pair("HelicopterCyclicRight", "HelicopterCyclicLeft", aside); + bool d = Pair("HelicopterAntiTorqueRight", "HelicopterAntiTorqueLeft", torque); + m_Readback = a && b && c && d; m_ActionUpdates++; m_LastControl = Now(); + } + protected void Release(bool restore) + { + // No writes after capture/group/seat change, including apparently harmless zeros. + if (m_SettingsOwned && Owns()) + { + Pair("HelicopterCollectiveIncrease", "HelicopterCollectiveDecrease", 0); + Pair("HelicopterCyclicForward", "HelicopterCyclicBack", 0); + Pair("HelicopterCyclicRight", "HelicopterCyclicLeft", 0); + Pair("HelicopterAntiTorqueRight", "HelicopterAntiTorqueLeft", 0); + // Restore native modes only after verified ground completion. Airborne + // failure leaves native autohover enabled rather than disabling it midair. + if (restore && Grounded()) + { + m_Controller.SetAutohoverEnabled(m_OriginalAutohover); + m_Controller.SetCollectiveMode(m_OriginalMode); + m_Agent.SetPermanentLOD(m_OriginalLOD); + } + } + if (m_Aircraft && s_Owners && s_Owners.Get(m_Aircraft) == this) s_Owners.Remove(m_Aircraft); + m_SettingsOwned = false; + } + protected void RecordState() + { + string detail = string.Format("token=%1 state=%2 reason=%3; physical availability remains with the allocating owner", m_Token, m_State, m_Reason); + Print("ERR AIRCRAFT CONTROL: " + detail); + if (m_Mode && m_Mode == ERR_GameMode.Get()) ERR_HQ.Event("AIRCRAFT CONTROL", detail); + } + protected void Relinquish(string reason) + { + if (Finished()) return; + m_Reason = reason; m_State = ERR_AircraftFlightState.RELINQUISHED; Release(false); RecordState(); + } + protected void Fail(string reason) + { + if (Finished()) return; + m_Reason = reason; m_State = ERR_AircraftFlightState.FAILED; Release(true); RecordState(); + } + protected bool Landing(float now) + { + m_Controller.SetAutohoverEnabled(true); + if (!m_Controller.GetAutohoverEnabled()) { Fail("native autohover enable refused"); return false; } + m_State = ERR_AircraftFlightState.LANDING; m_Stable = -1; + m_StageDeadline = Math.Min(m_Deadline, now + 65000); + return true; + } + protected void Shutdown(float now) + { + m_Controller.StopEngine(false); + m_State = ERR_AircraftFlightState.SHUTDOWN; m_StageDeadline = Math.Min(m_Deadline, now + 15000); m_Stable = -1; + } + void Cancel(string reason) + { + if (!Lease()) return; + if (m_Cancelled) return; // repeated invalid reports cannot extend a landing deadline + m_Cancelled = true; m_Reason = reason; RecordState(); + // After flight begins, even a current contact sample must pass the normal + // two-second landing observation; cancellation cannot shortcut touchdown. + bool preflightGround = m_State < ERR_AircraftFlightState.CLIMB && Grounded(); + int action = ERR_AircraftFlightRules.CancelAction(Owns(), preflightGround, m_Controller && m_Controller.IsEngineOn()); + if (action == 0) { Relinquish(reason); return; } + if (!Healthy()) { Fail(reason + "; flight capability lost"); return; } + if (action == 3) { m_State = ERR_AircraftFlightState.CANCELLED; Release(true); RecordState(); return; } + float now = Now(); + if (action == 2) { Shutdown(now); return; } + if (m_State != ERR_AircraftFlightState.LANDING && m_State != ERR_AircraftFlightState.SHUTDOWN) Landing(now); + } + protected bool BeginTranslation(float now, vector position) + { + if (!m_TranslationRequested || m_TranslationStarted || m_State != ERR_AircraftFlightState.CLIMB) { Cancel("translation stage ownership refused"); return false; } + float distance = vector.DistanceXZ(position, m_TranslationTarget); + if (!ERR_AircraftTranslationRules.Target(m_Home, m_TranslationTarget) || !ERR_AircraftTranslationRules.Reachable(distance)) { Cancel("fixed target beyond qualified four-metre translation after hover drift"); return false; } + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + if (!signals || signals.FindSignal("MainRotorCyclicForward") < 0 || signals.FindSignal("MainRotorCyclicAside") < 0 || !m_Controller.GetAutohoverEnabled()) { Cancel("native autohover cyclic signals unavailable"); return false; } + m_TranslationOrigin = position; m_TranslationDistance = distance; + m_TranslationStarted = true; m_State = ERR_AircraftFlightState.TRANSLATING; + m_Stable = -1; m_StageDeadline = Math.Min(m_Deadline, now + 45000); + PrintFormat("ERR AIRCRAFT TRANSLATION: token=%1 origin=%2 immutableTarget=%3 home=%4 distance=%5 deadline=%6", m_Token, position, m_TranslationTarget, m_Home, distance, m_StageDeadline); + return true; + } + protected void CheckTranslation(float now, vector position, float height, float speed, float upright) + { + if (!m_TranslationStarted || !m_Controller.GetAutohoverEnabled() || !ERR_AircraftTranslationRules.Target(m_Home, m_TranslationTarget)) { Cancel("translation ownership or autohover lost"); return; } + vector velocity = m_Simulation.GetVelocity(); vector horizontal = velocity; horizontal[1] = 0; + bool held = m_TranslationUpdates >= 3 && ERR_AircraftTranslationRules.Held(m_Simulation.HasAnyGroundContact(), height, speed, velocity[1], upright, horizontal.Length(), vector.DistanceXZ(position, m_TranslationTarget), vector.DistanceXZ(position, m_TranslationOrigin), m_TranslationDistance); + if (!held) { m_Stable = -1; return; } + if (m_Stable < 0) m_Stable = now; + if (now - m_Stable < 5000) return; + m_TranslationProven = true; + PrintFormat("ERR AIRCRAFT TRANSLATION HELD: token=%1 targetError=%2 displacement=%3 updates=%4", m_Token, vector.DistanceXZ(position, m_TranslationTarget), vector.DistanceXZ(position, m_TranslationOrigin), m_TranslationUpdates); + Landing(now); + } + // The owner continues ticking after Cancel until Finished, including landing. + void Tick() + { + if (!Lease()) return; + float now = Now(); + if (!Owns()) { Relinquish("ownership or mission changed"); return; } + if (!Healthy()) { Fail("flight capability lost"); return; } + if (!m_Readback) { Fail("native action readback failed"); return; } + if (now >= m_Deadline || now >= m_StageDeadline || now < 0) { Fail("bounded flight stage expired"); return; } + if (m_LastTick >= 0 && (now < m_LastTick || now - m_LastTick > 1500)) m_Stable = -1; + m_LastTick = now; + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + float height = transform[3][1] - m_Home[1], speed = m_Simulation.GetVelocity().Length(); + if (!ERR_AircraftFlightRules.Envelope(height, vector.DistanceXZ(transform[3], m_Home), transform[1][1])) { Fail("qualified flight envelope exceeded"); return; } + if (m_State == ERR_AircraftFlightState.HOOKS) + { + if (m_ActionUpdates < 3 || m_HelicopterUpdates < 3) return; + if (m_Controller.GetCollectiveMode() != CollectiveMode.Direct || m_Input.GetVehicleCollective() != 0 || m_Controller.IsEngineOn()) { Fail("native initial control state refused"); return; } + m_Controller.StartEngine(); m_State = ERR_AircraftFlightState.STARTING; m_StageDeadline = Math.Min(m_Deadline, now + 65000); return; + } + if (m_LastControl < 0 || now - m_LastControl > 1000) { Fail("pilot callback stopped"); return; } + if (m_State == ERR_AircraftFlightState.STARTING) + { + float rpm = m_Simulation.RotorGetRPMTarget(0); + if (!m_Controller.IsEngineOn() || rpm <= 0 || m_Simulation.RotorGetRPM(0) < rpm * 0.9 || m_Fuel.GetTotalFuel() >= m_InitialFuel) return; + m_State = ERR_AircraftFlightState.POSITIVE; m_StageDeadline = Math.Min(m_Deadline, now + 3000); m_GateUpdates = m_ActionUpdates; m_Stable = -1; return; + } + if (m_State != ERR_AircraftFlightState.SHUTDOWN && !m_Controller.IsEngineOn()) { Fail("running engine lost"); return; } + if (m_State == ERR_AircraftFlightState.POSITIVE || m_State == ERR_AircraftFlightState.NEGATIVE) + { + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + int index = -1; if (signals) index = signals.FindSignal("MainRotorCollective"); + if (index < 0 || m_Controller.GetCollectiveMode() != CollectiveMode.Direct || m_Controller.GetAutohoverEnabled()) { Fail("native collective proof unavailable"); return; } + float expected = 0.05; if (m_State == ERR_AircraftFlightState.NEGATIVE) expected = -0.05; + bool matched = m_ActionUpdates >= m_GateUpdates + 3 && Math.AbsFloat(signals.GetSignalValue(index) - expected) <= 0.01 && Math.AbsFloat(m_Input.GetVehicleCollective() - expected) <= 0.01; + if (!matched) { m_Stable = -1; return; } + if (m_Stable < 0) m_Stable = now; + if (now - m_Stable < 500) return; + m_Stable = -1; + if (m_State == ERR_AircraftFlightState.POSITIVE) { m_State = ERR_AircraftFlightState.NEGATIVE; m_StageDeadline = Math.Min(m_Deadline, now + 3000); m_GateUpdates = m_ActionUpdates; return; } + m_Controller.SetAutohoverEnabled(true); + if (!m_Controller.GetAutohoverEnabled()) { Fail("native autohover enable refused"); return; } + m_State = ERR_AircraftFlightState.CLIMB; m_StageDeadline = Math.Min(m_Deadline, now + 65000); return; + } + if (m_State == ERR_AircraftFlightState.TRANSLATING) { CheckTranslation(now, transform[3], height, speed, transform[1][1]); return; } + if (m_State == ERR_AircraftFlightState.CLIMB || m_State == ERR_AircraftFlightState.LANDING) + { + if (!m_Controller.GetAutohoverEnabled()) { Fail("native autohover lost"); return; } + bool stable = Grounded(); float duration = 2000; + if (m_State == ERR_AircraftFlightState.CLIMB) { stable = !m_Simulation.HasAnyGroundContact() && ERR_AircraftFlightRules.Hover(height, speed, m_Simulation.GetVelocity()[1], transform[1][1]); duration = 5000; } + if (!stable) m_Stable = -1; + if (stable && m_Stable < 0) m_Stable = now; + if (m_Stable < 0 || now - m_Stable < duration) return; + if (m_State == ERR_AircraftFlightState.CLIMB) + { + if (m_TranslationRequested) BeginTranslation(now, transform[3]); + else Landing(now); + return; + } + Shutdown(now); return; + } + if (m_State == ERR_AircraftFlightState.SHUTDOWN && !m_Controller.IsEngineOn()) + { + if (!Grounded()) { Fail("engine-off physical ground check failed"); return; } + if (m_Cancelled) m_State = ERR_AircraftFlightState.CANCELLED; + else m_State = ERR_AircraftFlightState.COMPLETE; + Release(true); RecordState(); + } + } + void ~ERR_AircraftFlight() { Release(true); } +} diff --git a/addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c b/addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c new file mode 100644 index 0000000..6345f61 --- /dev/null +++ b/addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c @@ -0,0 +1,236 @@ +// Successor-owned measured envelope, independent of aircraft yaw/pitch/roll. +// Adapted from the separately qualified native vertical fixture; no native hook. +// All distances are around the native physics origin, not the rotor centre. +class ERR_AircraftFlightFootprintRules +{ + static float CylinderSphere(float originDistance, float radius, float thickness) + { + // Triangle inequality deliberately overbounds the one-sided rotor cylinder. + return originDistance + radius + thickness; + } + static bool Fits(float radius, float initialDrift, float initialHeight) + { + if (!(radius > 0 && radius < 32 && initialDrift >= 0 && initialDrift < 32)) return false; + if (!(initialHeight >= -3 && initialHeight <= 5)) return false; + return radius + initialDrift + 8 + 1 <= 40 && radius + initialHeight + 18 + 1 <= 60; + } +} + +class ERR_AircraftFlightFootprint +{ + static const int MAX_ENTITIES = 256; + static const int MAX_DEPTH = 16; + static const int MAX_HITZONES = 512; + protected static bool Refuse(string reason) + { + Print("ERR AIRCRAFT FOOTPRINT: refused " + reason); + return false; + } + protected static bool PointRadius(vector point, vector origin, inout float radius) + { + float distance = vector.Distance(point, origin); + if (!(distance >= 0 && distance < 1000)) return false; + radius = Math.Max(radius, distance); + return true; + } + static bool Measure(Vehicle aircraft, VehicleHelicopterSimulation simulation, vector pad, out vector origin, out float radius) + { + radius = 0; + if (!aircraft || !simulation || !simulation.IsValid() || !aircraft.GetPrefabData()) return Refuse("missing initialized native airframe"); + if (aircraft.GetPrefabData().GetPrefabName() != "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et") return Refuse("different airframe resource"); + // Model bounds and damage pivots are world-space. The simulation getter + // exposes internal physics space (identity at the airport in 100422), so + // use this same physical aircraft's actual entity world transform. + vector worldTransform[4]; aircraft.GetWorldTransform(worldTransform); + origin = worldTransform[3]; + for (int axis = 0; axis < 3; axis++) + if (!(Math.AbsFloat(worldTransform[axis].Length() - 1) < 0.001)) return Refuse("non-unit native entity world basis"); + + array entities = {aircraft}; + array depths = {0}; + array seenZones = {}; + int meshes, mainSweeps, tailSweeps; + float modelRadius, damageRadius, simulationRadius; + for (int index = 0; index < entities.Count(); index++) + { + IEntity entity = entities[index]; + if (!entity) return Refuse("hierarchy changed during measurement"); + if (entity.GetVObject()) + { + vector mins, maxs; entity.GetWorldBounds(mins, maxs); + for (int dimension = 0; dimension < 3; dimension++) + if (!(mins[dimension] <= maxs[dimension])) return Refuse("invalid model bounds"); + // A sphere around every corner encloses the complete world AABB. Its radius + // remains conservative under any rigid orientation of the whole aircraft. + for (int x = 0; x < 2; x++) + for (int y = 0; y < 2; y++) + for (int z = 0; z < 2; z++) + { + vector corner = mins; + if (x == 1) corner[0] = maxs[0]; + if (y == 1) corner[1] = maxs[1]; + if (z == 1) corner[2] = maxs[2]; + if (!PointRadius(corner, origin, modelRadius)) return Refuse("non-finite or excessive model bounds"); + } + meshes++; + } + HitZoneContainerComponent container = HitZoneContainerComponent.Cast(entity.FindComponent(HitZoneContainerComponent)); + if (container) + { + int count = container.CountAllHitZones(); + if (count < 0 || count + seenZones.Count() > MAX_HITZONES) return Refuse("hitzone traversal bound"); + array zones = {}; + if (container.GetAllHitZones(zones) != count || zones.Count() != count) return Refuse("hitzones changed during measurement"); + foreach (HitZone zone : zones) + { + if (!zone || seenZones.Contains(zone)) continue; + seenZones.Insert(zone); + SCR_RotorHitZone rotorZone = SCR_RotorHitZone.Cast(zone); + if (!rotorZone || rotorZone.GetRotorRadius() <= 0) continue; // transmission zones have no sweep + int rotorIndex = rotorZone.GetRotorIndex(); + float expectedRadius, thickness; + if (rotorIndex == 0) { expectedRadius = 12; thickness = 1.5; mainSweeps++; } + else if (rotorIndex == 1) { expectedRadius = 2.3; thickness = 0.75; tailSweeps++; } + else return Refuse("unknown rotor sweep index"); + // Stock thickness is protected with no getter. Scope to the exact prefab + // and verify its public sweep radius against the audited stock constants. + if (!(Math.AbsFloat(rotorZone.GetRotorRadius() - expectedRadius) < 0.001)) return Refuse("stock damage sweep radius changed"); + PointInfo point = rotorZone.GetPointInfo(); + if (!point) return Refuse("missing actual rotor sweep pivot"); + vector rotorWorld[4]; point.GetWorldTransform(rotorWorld); + // Frobenius norm bounds the transform's maximum stretch even with scale + // or shear; do not assume the PointInfo basis is orthonormal. + float scaleSquared = 0; + for (int basis = 0; basis < 3; basis++) scaleSquared += vector.Dot(rotorWorld[basis], rotorWorld[basis]); + float scale = Math.Sqrt(scaleSquared); + if (!(scale > 0 && scale < 4)) return Refuse("invalid damage sweep basis"); + float distance = vector.Distance(origin, rotorWorld[3]); + float sweepBound = ERR_AircraftFlightFootprintRules.CylinderSphere(distance, expectedRadius * scale, thickness * scale); + if (!(sweepBound > 0 && sweepBound < 1000)) return Refuse("invalid damage sweep extent"); + damageRadius = Math.Max(damageRadius, sweepBound); + PrintFormat("ERR AIRCRAFT FOOTPRINT ROTOR: index=%1 pivot=%2 damageRadius=%3 thickness=%4 scale=%5 sphereBound=%6", rotorIndex, rotorWorld[3], expectedRadius, thickness, scale, sweepBound); + } + } + IEntity child = entity.GetChildren(); + while (child) + { + if (entities.Count() >= MAX_ENTITIES || depths[index] >= MAX_DEPTH || entities.Contains(child)) return Refuse("entity/depth/cycle traversal bound"); + entities.Insert(child); depths.Insert(depths[index] + 1); + child = child.GetSibling(); + } + } + if (meshes == 0 || mainSweeps != 1 || tailSweeps != 1) return Refuse("complete model and both actual damage sweeps required"); + if (simulation.RotorCount() != 2) return Refuse("stock simulation rotor count changed"); + for (int rotor = 0; rotor < 2; rotor++) + { + vector localRotor[4]; simulation.RotorGetTransform(rotor, localRotor); + float physicalRadius = simulation.RotorGetRadius(rotor); + float physicalBound = localRotor[3].Length() + physicalRadius; + if (!(physicalRadius > 0 && physicalBound > 0 && physicalBound < 1000)) return Refuse("invalid native simulation rotor extent"); + simulationRadius = Math.Max(simulationRadius, physicalBound); + PrintFormat("ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=%1 localPivot=%2 radius=%3 sphereBound=%4", rotor, localRotor[3], physicalRadius, physicalBound); + } + radius = Math.Max(modelRadius, Math.Max(damageRadius, simulationRadius)); + float initialDrift = vector.DistanceXZ(origin, pad); + float initialHeight = origin[1] - pad[1]; + PrintFormat("ERR AIRCRAFT FOOTPRINT: entities=%1 meshes=%2 zones=%3 modelSphere=%4 damageSphere=%5 simulationSphere=%6 completeSphere=%7 initialDrift=%8 initialHeight=%9", entities.Count(), meshes, seenZones.Count(), modelRadius, damageRadius, simulationRadius, radius, initialDrift, initialHeight); + if (!ERR_AircraftFlightFootprintRules.Fits(radius, initialDrift, initialHeight)) return Refuse("measured footprint plus initial placement,8m drift and1m margin exceeds40m corridor or60m ceiling"); + return true; + } +} + + +// Issued only by physical qualification; fields have no public mutators. +// One claim binds this short-lived record to one original aircraft/pilot/order. +class ERR_AircraftFlightEnvelope +{ + protected ERR_GameMode m_Mode; + protected Vehicle m_Aircraft; + protected IEntity m_Pilot; + protected vector m_Home; + protected float m_Radius; + protected float m_QualifiedAt; + protected int m_Claim; + vector Home() { return m_Home; } + float Radius() { return m_Radius; } + bool ClaimedBy(Vehicle aircraft, IEntity pilot, int token) + { + return m_Claim > 0 && m_Claim == token && m_Aircraft == aircraft && m_Pilot == pilot; + } + bool Claim(ERR_GameMode mode, Vehicle aircraft, IEntity pilot, int token) + { + if (!GetGame() || !GetGame().GetWorld()) return false; + float now = GetGame().GetWorld().GetWorldTime(); + if (!Replication.IsServer() || !mode || mode != m_Mode || mode != ERR_GameMode.Get() || !mode.Active() || m_Claim != 0 || token <= 0) return false; + if (aircraft != m_Aircraft || pilot != m_Pilot || !aircraft || !pilot || now < m_QualifiedAt || now - m_QualifiedAt > 2000) return false; + if (vector.Distance(aircraft.GetOrigin(), m_Home) > 0.1) return false; + m_Claim = token; + return true; + } + protected static bool Hierarchy(IEntity root, array excluded) + { + if (!root) return false; + array pending = {root}; + array depths = {0}; + for (int i = 0; i < pending.Count(); i++) + { + IEntity entity = pending[i]; + if (!entity || excluded.Count() >= 512) return false; + if (!excluded.Contains(entity)) excluded.Insert(entity); + IEntity child = entity.GetChildren(); + while (child) + { + if (pending.Count() >= 256 || depths[i] >= 16 || pending.Contains(child)) return false; + pending.Insert(child); depths.Insert(depths[i] + 1); child = child.GetSibling(); + } + } + return true; + } + protected static bool ClearColumn(Vehicle aircraft, IEntity pilot, vector pad) + { + array excluded = {}; + if (!Hierarchy(aircraft, excluded) || !Hierarchy(pilot, excluded)) return false; + for (int edge = 0; edge < 4; edge++) + { + float side = edge * Math.PI / 2; + vector point = pad + Vector(Math.Cos(side) * 14, 0, Math.Sin(side) * 14); + if (!(Math.AbsFloat(SCR_TerrainHelper.GetTerrainY(point) - pad[1]) <= 0.8)) return false; + } + // Same four finite diagonal cylinder traces as the native fixture, with + // exclusions restricted to this already-existing aircraft and seated pilot. + array diagonals = {"40 2 0", "-40 2 0", "0 2 40", "0 2 -40"}; + foreach (vector diagonal : diagonals) + { + TraceParam trace = new TraceParam(); + trace.Start = pad + "0 2.5 0" + diagonal; + trace.End = pad + "0 2.5 0" - diagonal; + trace.Flags = TraceFlags.ENTS; trace.ExcludeArray = excluded; + if (!(aircraft.GetWorld().TraceMove(trace, null) >= 1)) return false; + } + TraceBox clearance = new TraceBox(); + clearance.Start = pad + "0 3 0"; clearance.End = pad + "0 60 0"; + clearance.Mins = "-40 -1 -40"; clearance.Maxs = "40 1 40"; + clearance.Flags = TraceFlags.ENTS | TraceFlags.WORLD; clearance.ExcludeArray = excluded; + return aircraft.GetWorld().TraceMove(clearance, null) >= 1; + } + static ERR_AircraftFlightEnvelope Qualify(ERR_GameMode mode, Vehicle aircraft, IEntity pilot) + { + if (!GetGame() || !GetGame().GetWorld() || !GetGame().GetPlayerManager()) return null; + if (!Replication.IsServer() || !mode || mode != ERR_GameMode.Get() || !mode.Active() || !aircraft || !pilot || ERR_Actors.Player(pilot)) return null; + if (CompartmentAccessComponent.GetVehicleIn(pilot) != aircraft || !ERR_Actors.Alive(aircraft) || !ERR_Actors.CanFight(pilot)) return null; + HelicopterControllerComponent controller = HelicopterControllerComponent.Cast(aircraft.FindComponent(HelicopterControllerComponent)); + if (!controller || controller.IsEngineOn() || !controller.GetSimulation() || !controller.GetSimulation().IsValid()) return null; + PilotCompartmentSlot seat = controller.GetPilotCompartmentSlot(); + if (!seat || seat.GetOccupant() != pilot) return null; + if (!ERR_CasualtyLoadingRules.AircraftReady(aircraft)) return null; + vector pad = ERR_Actors.Ground(aircraft.GetOrigin()); + if (!(pad[1] >= 2) || !ClearColumn(aircraft, pilot, pad)) return null; + vector origin; float radius; + if (!ERR_AircraftFlightFootprint.Measure(aircraft, controller.GetSimulation(), pad, origin, radius)) return null; + ERR_AircraftFlightEnvelope record = new ERR_AircraftFlightEnvelope(); + record.m_Mode = mode; record.m_Aircraft = aircraft; record.m_Pilot = pilot; + record.m_Home = origin; record.m_Radius = radius; + record.m_QualifiedAt = GetGame().GetWorld().GetWorldTime(); + return record; + } +} diff --git a/addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c b/addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c new file mode 100644 index 0000000..d08a12a --- /dev/null +++ b/addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c @@ -0,0 +1,366 @@ +#ifdef WORKBENCH +// Separate Chat fixture for the ACTUAL dormant AI controller. Core's original +// powered-flight probe is disabled for this outcome and retains its own evidence. +modded class SCR_CharacterControllerComponent +{ + override void OnPrepareControls(IEntity owner, ActionManager am, float dt, bool player) + { + ERR_NativeAircraftControlProbe probe = ERR_NativeAircraftControlProbe.Current(); + if (probe && !player) probe.PrepareActions(this, owner, am, dt); + super.OnPrepareControls(owner, am, dt, player); + } +} +modded class SCR_HelicopterControllerComponent +{ + protected override event void OnPrepareControls() + { + super.OnPrepareControls(); + ERR_NativeAircraftControlProbe probe = ERR_NativeAircraftControlProbe.Current(); + if (probe) probe.PrepareHelicopter(this); + } +} +// Read-only native fixture observation; no production method or state override. +modded class ERR_AircraftFlight +{ + float ERR_NativeControlDeadline() { return m_Deadline; } +} +class ERR_NativeAircraftControlRules +{ + static bool Terminal(bool cancellation, int state, int cancellationCount) + { + if (cancellation) return state == ERR_AircraftFlightState.CANCELLED && cancellationCount == 1; + return state == ERR_AircraftFlightState.COMPLETE && cancellationCount == 0; + } + static bool CanCancel(int state, bool contact, float height) + { + return state == ERR_AircraftFlightState.CLIMB && !contact && height >= 5 && height <= 18; + } + static bool CancelProof(bool airborneHooks, bool landingHeld, bool sameDeadline, bool sameToken) + { + return airborneHooks && landingHeld && sameDeadline && sameToken; + } + static bool TranslateProof(bool proven, bool held, float requestedDistance, float displacement, float targetError) + { + return proven && held && requestedDistance >= 1.75 && requestedDistance <= 4.05 && displacement >= 1 && targetError >= 0 && targetError <= 0.75; + } + static bool PhysicalFinish(bool originalOccupancy, bool landed, bool engineOff, float fuelUsed, int wakes, int starts, int controllerStarts, int pilotHooks, int helicopterHooks) + { + if (!originalOccupancy || !landed || !engineOff) return false; + return fuelUsed > 0.05 && wakes == 1 && starts == 1 && controllerStarts == 1 && pilotHooks > 100 && helicopterHooks > 100; + } + static bool CanDispose(bool context, bool noPlayers, bool sameFaction, bool groupUnchanged, bool pilotUnchanged) + { + return context && noPlayers && sameFaction && groupUnchanged && pilotUnchanged; + } +} +class ERR_NativeAircraftControlProbe +{ + protected static ERR_NativeAircraftControlProbe s_Current; + protected ERR_GameMode m_Mode; + protected Vehicle m_Aircraft; + protected SCR_AIGroup m_Group; + protected IEntity m_Pilot; + protected PilotCompartmentSlot m_Seat; + protected HelicopterControllerComponent m_Controller; + protected VehicleHelicopterSimulation m_Simulation; + protected FuelManagerComponent m_Fuel; + protected ref ERR_AircraftFlightEnvelope m_Envelope; + protected ref ERR_AircraftFlight m_Flight; + protected float m_Deadline; + protected float m_StageDeadline; + protected float m_Stable = -1; + protected float m_LastTick = -1; + protected float m_NextLog; + protected float m_InitialFuel; + protected float m_ControlDeadline; + protected float m_CancelAt = -1; + protected float m_LandingStable = -1; + protected int m_CancelCount; + protected int m_CancelPilotHooks; + protected int m_CancelHelicopterHooks; + protected bool m_CancelFixture; + protected bool m_TranslationFixture; + protected bool m_TranslationObserved; + protected bool m_TranslationHeld; + protected vector m_TranslationOrigin; + protected vector m_TranslationTarget; + protected float m_TranslationStable = -1; + protected bool m_ContinuedAirborneControl; + protected bool m_LandingHeld; + protected vector m_Pad; + protected int m_Step; + protected int m_Wakes; + protected int m_ControllerStarts; + protected int m_EngineStarts; + protected int m_PilotHooks; + protected int m_HelicopterHooks; + protected bool m_LastEngine; + protected bool m_AllocationRequested; + protected bool m_PilotRequested; + protected bool m_Stopped; + protected bool m_Complete; + static const int ORDER_TOKEN = 771001; + static const ResourceName AIRCRAFT = "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et"; + static const ResourceName GROUP = "{000CD338713F2B5A}Prefabs/AI/Groups/Group_Base.et"; + static const ResourceName PILOT = "{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et"; + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && (outcome == "aircraft-control" || outcome == "aircraft-cancel" || outcome == "aircraft-translate"); + } + static ERR_NativeAircraftControlProbe Current() { return s_Current; } + void ERR_NativeAircraftControlProbe(ERR_GameMode mode) + { + m_Mode = mode; + if (!GetGame() || !GetGame().GetWorld() || !Enabled() || s_Current) { m_Stopped = true; return; } + string outcome; System.GetCLIParam("errSmokeOutcome", outcome); m_CancelFixture = outcome == "aircraft-cancel"; m_TranslationFixture = outcome == "aircraft-translate"; + m_Deadline = GetGame().GetWorld().GetWorldTime() + 300000; + s_Current = this; + } + protected bool Check(bool passed, string detail) + { + string outcome = "aircraft-control"; if (m_CancelFixture) outcome = "aircraft-cancel"; else if (m_TranslationFixture) outcome = "aircraft-translate"; + if (passed) { Print("ERR SMOKE PASS: " + outcome + " " + detail); return true; } + Print("ERR SMOKE FAIL: " + outcome + " " + detail, LogLevel.ERROR); Stop(); return false; + } + protected bool NoPlayers() + { + if (!GetGame() || !GetGame().GetPlayerManager()) return false; + if (m_Group && m_Group.GetPlayerCount(true) > 0) return false; + array players = {}; GetGame().GetPlayerManager().GetPlayers(players); + foreach (int id : players) + { + IEntity actor = GetGame().GetPlayerManager().GetPlayerControlledEntity(id); + if (actor && (actor == m_Pilot || actor == m_Aircraft || (m_Aircraft && CompartmentAccessComponent.GetVehicleIn(actor) == m_Aircraft))) return false; + } + return true; + } + protected bool OriginalOccupancy() + { + if (!m_Pilot || !m_Group || !m_Aircraft || !m_Controller || !m_Seat || !NoPlayers()) return false; + if (m_Group.GetAgentsCount() != 1 || ERR_Actors.Group(m_Pilot) != m_Group || !ERR_Actors.CanFight(m_Pilot)) return false; + return m_Seat.GetOccupant() == m_Pilot && m_Controller.GetPilotCompartmentSlot() == m_Seat && CompartmentAccessComponent.GetVehicleIn(m_Pilot) == m_Aircraft; + } + void PrepareActions(CharacterControllerComponent controller, IEntity owner, ActionManager am, float dt) + { + if (m_Stopped || !m_Flight || owner != m_Pilot) return; + m_Flight.PrepareActions(controller, owner, am, dt); m_PilotHooks++; + } + void PrepareHelicopter(HelicopterControllerComponent controller) + { + if (m_Stopped || !m_Flight || controller != m_Controller) return; + m_Flight.PrepareHelicopter(controller); m_HelicopterHooks++; + } + protected bool FindPad(out vector result) + { + vector anchor = m_Mode.ExtractionVehicle().GetOrigin(); + float bestSlope = float.MAX; vector bestCandidate, refinementAnchor; + int localCandidates = ERR_PoweredFlightRules.PAD_CANDIDATES + ERR_PoweredFlightRules.PAD_REFINEMENTS; + for (int index = 0; index < localCandidates + ERR_PoweredFlightRules.AIRPORT_CANDIDATES; index++) + { + if (index == ERR_PoweredFlightRules.PAD_CANDIDATES) + { + refinementAnchor = anchor; if (bestSlope != float.MAX) refinementAnchor = bestCandidate; + } + vector candidate; + if (index < ERR_PoweredFlightRules.PAD_CANDIDATES) candidate = ERR_Actors.Ground(anchor + ERR_PoweredFlightRules.PadOffset(index)); + else if (index < localCandidates) candidate = ERR_Actors.Ground(refinementAnchor + ERR_PoweredFlightRules.RefineOffset(index - ERR_PoweredFlightRules.PAD_CANDIDATES)); + else candidate = ERR_Actors.Ground("4900.953 0 11787.412" + ERR_PoweredFlightRules.AirportOffset(index - localCandidates)); + if (candidate[1] < 2) continue; + float delta; + for (int edge = 0; edge < 4; edge++) + { + float side = edge * Math.PI / 2; + vector point = candidate + Vector(Math.Cos(side) * 14, 0, Math.Sin(side) * 14); + delta = Math.Max(delta, Math.AbsFloat(SCR_TerrainHelper.GetTerrainY(point) - candidate[1])); + } + if (delta < bestSlope) { bestSlope = delta; bestCandidate = candidate; } + if (delta > 0.8) continue; + if (!SCR_WorldTools.TraceCilinderUtil(candidate + "0 2.5 0", 40, 4, TraceFlags.ENTS)) continue; + TraceBox clearance = new TraceBox(); clearance.Start = candidate + "0 3 0"; clearance.End = candidate + "0 60 0"; + clearance.Mins = "-40 -1 -40"; clearance.Maxs = "40 1 40"; clearance.Flags = TraceFlags.ENTS | TraceFlags.WORLD; + if (!(GetGame().GetWorld().TraceMove(clearance, null) >= 1)) continue; + PrintFormat("ERR AIRCRAFT FIXTURE PAD: candidate=%1 tested=%2 terrainDelta=%3; no fallback", candidate, index + 1, delta); + result = candidate; return true; + } + return false; + } + protected bool ReadyComponents() + { + m_Controller = HelicopterControllerComponent.Cast(m_Aircraft.FindComponent(HelicopterControllerComponent)); + if (!m_Controller) return false; + m_Simulation = m_Controller.GetSimulation(); + m_Fuel = FuelManagerComponent.Cast(m_Aircraft.FindComponent(FuelManagerComponent)); + if (!m_Simulation || !m_Simulation.IsValid() || !m_Fuel || !m_Fuel.HasFuel()) return false; + BaseCompartmentManagerComponent manager = BaseCompartmentManagerComponent.Cast(m_Aircraft.FindComponent(BaseCompartmentManagerComponent)); + if (!manager) return false; + array slots = {}; manager.GetCompartments(slots); + if (slots.Count() > 64) return false; + foreach (BaseCompartmentSlot slot : slots) + { + PilotCompartmentSlot pilotSlot = PilotCompartmentSlot.Cast(slot); + if (!pilotSlot || pilotSlot.GetOwner() != m_Aircraft || pilotSlot.GetVehicle() != m_Aircraft || pilotSlot.GetCompartmentName() != "PilotCompartment") continue; + if (pilotSlot.GetType() != ECompartmentType.PILOT) continue; + if (pilotSlot.GetOccupant() || pilotSlot.IsReserved() || pilotSlot.IsGetInLocked() || !pilotSlot.IsCompartmentAccessible()) continue; + m_Seat = pilotSlot; return true; + } + return false; + } + protected void Diagnostic(float now) + { + if (!m_Aircraft || !m_Controller || !m_Simulation || now < m_NextLog) return; + m_NextLog = now + 2000; + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + vector home = m_Pad; if (m_Envelope) home = m_Envelope.Home(); + int state = -1; string reason; if (m_Flight) { state = m_Flight.State(); reason = m_Flight.Reason(); } + PrintFormat("ERR AIRCRAFT FIXTURE: step=%1 state=%2 height=%3 drift=%4 speed=%5 contact=%6 engine=%7 fuelUsed=%8 reason=%9", m_Step, state, transform[3][1] - home[1], vector.DistanceXZ(transform[3], home), m_Simulation.GetVelocity().Length(), m_Simulation.HasAnyGroundContact(), m_Controller.IsEngineOn(), m_InitialFuel - m_Fuel.GetTotalFuel(), reason); + } + int Tick(float now) + { + if (m_Complete) return 1; + if (m_Stopped) return -1; + if (!Enabled() || !m_Mode || m_Mode != ERR_GameMode.Get() || !m_Mode.Active() || now >= m_Deadline) { Check(false, "active exact mission and bounded300-second fixture"); return -1; } + if (!NoPlayers()) { Check(false, "fixture remains unclaimed by any human"); return -1; } + if (m_LastTick >= 0 && (now < m_LastTick || now - m_LastTick > 1500)) { m_Stable = -1; m_LandingStable = -1; m_TranslationStable = -1; } + m_LastTick = now; + if (m_Step == 0) + { + if (!m_Mode.ExtractionVehicle()) return 0; + if (!Check(!m_AllocationRequested && FindPad(m_Pad), "independent qualified candidate found before one finite allocation")) return -1; + m_AllocationRequested = true; + m_Aircraft = Vehicle.Cast(ERR_Actors.Spawn(AIRCRAFT, m_Pad)); + m_Group = SCR_AIGroup.Cast(ERR_Actors.Spawn(GROUP, m_Pad + "20 0 0")); + if (!Check(m_Aircraft && m_Group && m_Group.InitFactionKey("USSR") && m_Group.GetFaction() == m_Mode.EnemyFaction(), "one finite native Mi8 and memberless enemy group created")) return -1; + m_Group.SetPermanentLOD(0); m_Group.ActivateAI(); + m_Step = 1; m_StageDeadline = now + 30000; return 0; + } + if (!m_Aircraft || !m_Group || !ERR_Actors.Alive(m_Aircraft)) { Check(false, "original airframe and group survive without replacement"); return -1; } + if (m_Step == 1) + { + if (now >= m_StageDeadline) { Check(false, "real components and original pilot initialize within30seconds"); return -1; } + if (!ReadyComponents()) return 0; + if (!Check(!m_PilotRequested && m_Group.GetAgentsCount() == 0, "one original native pilot request only")) return -1; + m_PilotRequested = true; AIGroup originalGroup = m_Group; + m_Pilot = m_Seat.SpawnCharacterInCompartment(PILOT, originalGroup, GROUP); + AIControlComponent control; if (m_Pilot) control = AIControlComponent.Cast(m_Pilot.FindComponent(AIControlComponent)); + AIAgent agent; if (control) agent = control.GetControlAIAgent(); + if (!Check(m_Pilot && originalGroup == m_Group && agent, "pilot seated by native mechanism in original group")) return -1; + agent.SetPermanentLOD(0); agent.ActivateAI(); m_Step = 2; return 0; + } + Diagnostic(now); + if (m_Step == 2) + { + if (now >= m_StageDeadline) { Check(false, "actual initial seating and native ground settling within30seconds"); return -1; } + if (!OriginalOccupancy()) { m_Stable = -1; return 0; } + Physics physics = m_Aircraft.GetPhysics(); + if (!physics || !physics.IsDynamic()) return 0; + if (m_Wakes == 0) { m_Wakes = 1; physics.SetActive(ActiveState.ACTIVE); m_Stable = -1; return 0; } + if (!m_Simulation.HasAnyGroundContact() || !ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft)) { m_Stable = -1; return 0; } + if (m_Stable < 0) m_Stable = now; + if (now - m_Stable < 1000) return 0; + if (!Check(!m_Controller.IsEngineOn(), "post-spawn qualification precedes native engine start")) return -1; + m_Envelope = ERR_AircraftFlightEnvelope.Qualify(m_Mode, m_Aircraft, m_Pilot); + if (!Check(m_Envelope != null, "actual post-spawn column and complete rotor/model footprint issue exact qualification")) return -1; + m_InitialFuel = m_Fuel.GetTotalFuel(); + m_Flight = new ERR_AircraftFlight(); m_ControllerStarts++; + m_ControlDeadline = Math.Min(m_Deadline, now + 240000); + bool started; + if (m_TranslationFixture) started = m_Flight.StartTranslation(m_Mode, m_Aircraft, m_Group, m_Pilot, m_Seat, m_Envelope, ORDER_TOKEN, m_ControlDeadline, m_Envelope.Home()); + else started = m_Flight.Start(m_Mode, m_Aircraft, m_Group, m_Pilot, m_Seat, m_Envelope, ORDER_TOKEN, m_ControlDeadline); + if (!Check(started, "actual controller accepts one qualified original pilot/aircraft order")) return -1; + m_Step = 3; return 0; + } + if (m_Step == 3) + { + if (!OriginalOccupancy()) { Check(false, "original pilot remains conscious and in its exact seat/group"); return -1; } + bool engine = m_Controller.IsEngineOn(); if (engine && !m_LastEngine) m_EngineStarts++; m_LastEngine = engine; + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + vector home = m_Envelope.Home(); float height = transform[3][1] - home[1]; + bool contact = m_Simulation.HasAnyGroundContact(); + bool landed = ERR_AircraftFlightRules.Landed(contact, height, m_Simulation.GetVelocity().Length(), m_Simulation.GetAngularVelocity().Length(), transform[1][1]); + if (m_CancelFixture && m_CancelCount == 0 && ERR_NativeAircraftControlRules.CanCancel(m_Flight.State(), contact, height)) + { + m_CancelCount = 1; m_CancelAt = now; + m_CancelPilotHooks = m_PilotHooks; m_CancelHelicopterHooks = m_HelicopterHooks; + m_Flight.Cancel("native fixture deliberate airborne cancellation"); + PrintFormat("ERR AIRCRAFT CANCEL: height=%1 contact=%2 state=%3 token=%4 deadline=%5 pilotHooks=%6 helicopterHooks=%7", height, contact, m_Flight.State(), m_Flight.OrderToken(), m_Flight.ERR_NativeControlDeadline(), m_PilotHooks, m_HelicopterHooks); + if (!Check(m_Flight.State() == ERR_AircraftFlightState.LANDING && !m_Flight.Finished(), "one actual airborne Cancel enters retained LANDING control")) return -1; + } + if (m_CancelCount == 1) + { + if (m_Flight.ERR_NativeControlDeadline() != m_ControlDeadline || m_Flight.OrderToken() != ORDER_TOKEN) { Check(false, "cancel retains original overall deadline and exact order token"); return -1; } + int state = m_Flight.State(); + if (state != ERR_AircraftFlightState.LANDING && state != ERR_AircraftFlightState.SHUTDOWN && state != ERR_AircraftFlightState.CANCELLED) { Check(false, "cancel retains landing or grounded shutdown states only"); return -1; } + if (state == ERR_AircraftFlightState.LANDING && !contact && height > 1 && m_PilotHooks > m_CancelPilotHooks + 10 && m_HelicopterHooks > m_CancelHelicopterHooks + 10) m_ContinuedAirborneControl = true; + if (!landed) m_LandingStable = -1; + else if (m_LandingStable < 0) m_LandingStable = now; + } + if (m_TranslationFixture && m_Flight.State() == ERR_AircraftFlightState.TRANSLATING) + { + if (!m_TranslationObserved) + { + m_TranslationObserved = true; m_TranslationOrigin = m_Flight.TranslationOrigin(); m_TranslationTarget = m_Flight.TranslationTarget(); + if (!Check(vector.DistanceXZ(m_TranslationTarget, home) < 0.001, "pre-takeoff translation target remains the original qualified home")) return -1; + } + if (m_Flight.TranslationTarget() != m_TranslationTarget || m_Flight.TranslationOrigin() != m_TranslationOrigin || m_Flight.ERR_NativeControlDeadline() != m_ControlDeadline) { Check(false, "translation never retargets or renews its original deadline"); return -1; } + vector horizontal = m_Simulation.GetVelocity(); horizontal[1] = 0; + float requested = vector.DistanceXZ(m_TranslationOrigin, m_TranslationTarget); + bool held = ERR_AircraftTranslationRules.Held(contact, height, m_Simulation.GetVelocity().Length(), m_Simulation.GetVelocity()[1], transform[1][1], horizontal.Length(), vector.DistanceXZ(transform[3], m_TranslationTarget), vector.DistanceXZ(transform[3], m_TranslationOrigin), requested); + if (!held) m_TranslationStable = -1; + else if (m_TranslationStable < 0) m_TranslationStable = now; + if (m_TranslationStable >= 0 && now - m_TranslationStable >= 5000) m_TranslationHeld = true; + } + m_Flight.Tick(); + if (m_CancelCount == 1 && m_Flight.State() == ERR_AircraftFlightState.SHUTDOWN) + { + if (!Check(landed && m_LandingStable >= 0 && now - m_LandingStable >= 2000, "cancel reaches shutdown only after two observed stable grounded seconds")) return -1; + m_LandingHeld = true; + } + if (!m_Flight.Finished()) return 0; + PrintFormat("ERR AIRCRAFT FIXTURE RESULT: state=%1 token=%2 engineStarts=%3 controllerStarts=%4 wakes=%5 pilotHooks=%6 helicopterHooks=%7 reason=%8", m_Flight.State(), m_Flight.OrderToken(), m_EngineStarts, m_ControllerStarts, m_Wakes, m_PilotHooks, m_HelicopterHooks, m_Flight.Reason()); + bool complete = ERR_NativeAircraftControlRules.Terminal(m_CancelFixture, m_Flight.State(), m_CancelCount); + complete = complete && ERR_NativeAircraftControlRules.PhysicalFinish(OriginalOccupancy(), landed, !m_Controller.IsEngineOn(), m_InitialFuel - m_Fuel.GetTotalFuel(), m_Wakes, m_EngineStarts, m_ControllerStarts, m_PilotHooks, m_HelicopterHooks); + if (m_CancelFixture) + { + bool proof = ERR_NativeAircraftControlRules.CancelProof(m_ContinuedAirborneControl, m_LandingHeld, m_Flight.ERR_NativeControlDeadline() == m_ControlDeadline, m_Flight.OrderToken() == ORDER_TOKEN); + PrintFormat("ERR AIRCRAFT CANCEL RESULT: count=%1 elapsed=%2 airborneHooks=%3 landingHeld=%4 deadline=%5 originalDeadline=%6", m_CancelCount, now - m_CancelAt, m_ContinuedAirborneControl, m_LandingHeld, m_Flight.ERR_NativeControlDeadline(), m_ControlDeadline); + complete = complete && proof; + } + if (m_TranslationFixture) + { + float requestedDistance = vector.DistanceXZ(m_TranslationOrigin, m_TranslationTarget); + float displacement = vector.DistanceXZ(transform[3], m_TranslationOrigin); + float targetError = vector.DistanceXZ(transform[3], m_TranslationTarget); + bool translated = ERR_NativeAircraftControlRules.TranslateProof(m_Flight.TranslationProven(), m_TranslationObserved && m_TranslationHeld, requestedDistance, displacement, targetError); + PrintFormat("ERR AIRCRAFT TRANSLATION RESULT: proven=%1 held=%2 requested=%3 displacement=%4 targetError=%5 updates=%6", m_Flight.TranslationProven(), m_TranslationHeld, requestedDistance, displacement, targetError, m_Flight.TranslationUpdates()); + complete = complete && translated; + } + if (!Check(complete && m_Flight.OrderToken() == ORDER_TOKEN, "actual control order completes on original physical grounded aircraft with engine off, finite fuel use and exact pilot")) return -1; + m_Complete = true; Stop(); return 1; + } + return 0; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (s_Current == this) s_Current = null; + if (m_Flight && !m_Flight.Finished() && m_CancelCount == 0) m_Flight.Cancel("native fixture stopped"); + // End-of-test disposal is not successful flight or a production cancellation. + // These assets are fixture-owned only, never registered with mission cleanup. + // Release the controller before deleting disposable unclaimed physical assets. + m_Flight = null; + bool context = GetGame() && GetGame().GetWorld() && GetGame().GetPlayerManager() && m_Mode && m_Mode == ERR_GameMode.Get(); + bool faction = context && (!m_Group || (!m_PilotRequested && m_Group.GetAgentsCount() == 0 && !m_Group.GetFaction()) || m_Group.GetFaction() == m_Mode.EnemyFaction()) && (!m_Aircraft || SCR_FactionManager.SGetFaction(m_Aircraft) == m_Mode.EnemyFaction()); + bool groupUnchanged = context && (!m_Group || m_Group.GetAgentsCount() == 0 || (m_Group.GetAgentsCount() == 1 && m_Pilot && ERR_Actors.Group(m_Pilot) == m_Group)); + bool pilotUnchanged = context && (!m_Pilot || (m_Group && ERR_Actors.Group(m_Pilot) == m_Group && !ERR_Actors.Player(m_Pilot))); + if (ERR_NativeAircraftControlRules.CanDispose(context, NoPlayers(), faction, groupUnchanged, pilotUnchanged)) + { + ERR_Actors.DeleteSpawned(m_Group); ERR_Actors.DeleteSpawned(m_Pilot); ERR_Actors.DeleteSpawned(m_Aircraft); + } + else Print("ERR AIRCRAFT FIXTURE CLEANUP: ownership changed; captured entities preserved"); + m_Envelope = null; + } + void ~ERR_NativeAircraftControlProbe() { Stop(); } +} +#endif diff --git a/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c b/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c index af71462..933dd7f 100644 --- a/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c +++ b/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c @@ -19,6 +19,10 @@ modded class ERR_GameMode protected bool m_ERRTestMortar; protected bool m_ERRTestMortarFire; protected bool m_ERRTestMapOwnership; + protected bool m_ERRTestAircraftControl; + protected bool m_ERRTestAircraftCancel; + protected bool m_ERRTestAircraftTranslate; + protected ref ERR_NativeAircraftControlProbe m_ERRAircraftControl; protected ref ERRM_NativeMapOwnershipProbe m_ERRMapOwnership; protected bool m_ERRTestMortarSalvo; protected ref ERR_NativeMortarSalvoProbe m_ERRMortarSalvo; @@ -43,6 +47,9 @@ modded class ERR_GameMode m_ERRTestHQResponse = outcome == "hq-response"; m_ERRTestMortar = outcome == "mortar-inventory"; m_ERRTestMapOwnership = outcome == "map-ownership"; + m_ERRTestAircraftCancel = outcome == "aircraft-cancel"; + m_ERRTestAircraftTranslate = outcome == "aircraft-translate"; + m_ERRTestAircraftControl = outcome == "aircraft-control" || m_ERRTestAircraftCancel || m_ERRTestAircraftTranslate; m_ERRTestMortarFire = outcome == "mortar-fire" || outcome == "mortar-expiry"; m_ERRTestMortarCourier = outcome == "mortar-courier"; m_ERRTestMortarSalvo = outcome == "mortar-salvo" || outcome == "mortar-refresh"; @@ -50,6 +57,7 @@ modded class ERR_GameMode m_ERRTestPatrolHQ = outcome == "patrol-hq"; m_ERRTestPlayerDeath = outcome == "player-death" || m_ERRTestRadioNetwork || m_ERRTestHQResponse || m_ERRTestMortar; m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 150000; + if (m_ERRTestAircraftControl) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 330000; if (m_ERRTestMortarCourier) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 450000; if (m_ERRTestMortarTransfer) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 330000; if (m_ERRTestMortarSalvo) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 330000; @@ -73,6 +81,7 @@ modded class ERR_GameMode protected void ERR_StopHQPatrol() { if (m_ERRMapOwnership) m_ERRMapOwnership.Stop(); + if (m_ERRAircraftControl) m_ERRAircraftControl.Stop(); if (m_ERRHQResponseProof) m_ERRHQResponseProof.Stop(); if (m_ERRMortarSalvo) m_ERRMortarSalvo.Stop(); if (m_ERRMortarCourier) m_ERRMortarCourier.Stop(); @@ -113,6 +122,19 @@ modded class ERR_GameMode protected void ERR_SmokePhase(ERR_Phase previous, ERR_Phase current) { if (m_ERRSmokeDone || !ERR_MissionRules.Terminal(current)) return; + if (m_ERRTestAircraftControl) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 221, "actual aircraft controller completed before explicit fixture reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + ERR_StopHQPatrol(); + if (m_ERRTestAircraftCancel) + Print("ERR SMOKE COMPLETE: actual airborne aircraft cancellation retains inputs through settled contact landing and engine-off; isolated mechanism, not HQ dispatch"); + else if (m_ERRTestAircraftTranslate) + Print("ERR SMOKE COMPLETE: actual aircraft controller immutable target translation, observed target hold and contact landing; bounded mechanism, not route support or HQ dispatch"); + else Print("ERR SMOKE COMPLETE: actual aircraft controller and post-spawn qualification, powered hover and contact landing; isolated physical mechanism, not HQ dispatch"); + return; + } if (m_ERRTestMapOwnership) { if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 201, "native map ownership probe cleaned up before explicit reset")) return; @@ -220,6 +242,13 @@ modded class ERR_GameMode if (m_ERRSmokeDone) return; if (now > m_ERRSmokeDeadline) { ERR_Check(false, "timeout at step " + m_ERRSmokeStep.ToString()); return; } if (now < m_ERRSmokeWait) return; + if (m_ERRSmokeStep == 220) + { + int result = m_ERRAircraftControl.Tick(now); + if (result < 0) { ERR_Check(false, "native actual aircraft controller fixture"); return; } + if (result == 1) { m_ERRSmokeStep = 221; Transition(ERR_Phase.DEFEAT); } + return; + } if (m_ERRSmokeStep == 200) { int result = m_ERRMapOwnership.Tick(now); @@ -280,6 +309,13 @@ modded class ERR_GameMode if (players.Count() != 1 || Phase() != ERR_Phase.PRISON) return; m_ERRSmokePlayer = players[0]; if (!ERR_CheckRoster() || !ERR_NativeContractsProbe.Run(this, m_ERRSmokePlayer) || !ERR_CheckCompanionCommands()) return; + if (m_ERRTestAircraftControl) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRAircraftControl = new ERR_NativeAircraftControlProbe(this); + m_ERRSmokeStep = 220; + return; + } if (m_ERRTestPatrolHQ) { DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); diff --git a/addons/core/Prefabs/ERR/Prison.et b/addons/core/Prefabs/ERR/Prison.et index d51ec79..047a5ed 100644 --- a/addons/core/Prefabs/ERR/Prison.et +++ b/addons/core/Prefabs/ERR/Prison.et @@ -86,5 +86,15 @@ GenericEntity { coords 0 -0.1 -6 angles 0 0 0 } + DecalEntity : "{4AD6EB80A8B1FA3A}Prefabs/Decals/Dirt/Decal_Dirt_Patch_03.et" { + ID "FCFBA935CC13E016" + components { + Hierarchy "{EF4B704D646D1759}" {} + } + coords 0 0 0 + angles -90 0 0 + scale 10 + FarPlane 1.5 + } } } diff --git a/addons/core/Scripts/Game/ERR/ERR_Actions.c b/addons/core/Scripts/Game/ERR/ERR_Actions.c index 2de2494..57e4d2f 100644 --- a/addons/core/Scripts/Game/ERR/ERR_Actions.c +++ b/addons/core/Scripts/Game/ERR/ERR_Actions.c @@ -3,7 +3,11 @@ class ERR_UnlockPrisonAction : ScriptedUserAction override bool CanBePerformedScript(IEntity user) { ERR_GameMode mode = ERR_GameMode.Get(); - return mode && mode.Phase() == ERR_Phase.PRISON && ERR_Actors.CanFight(user); + SetCannotPerformReason(string.Empty); + if (!mode) { SetCannotPerformReason("Mission is not ready"); return false; } + if (mode.Phase() != ERR_Phase.PRISON) { SetCannotPerformReason("Prison lock is not available in this mission phase"); return false; } + if (!ERR_Actors.CanFight(user)) { SetCannotPerformReason("You must be alive and conscious"); return false; } + return true; } override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) { @@ -28,7 +32,15 @@ class ERR_PrisonDoorAction : SCR_DoorUserAction override bool CanBePerformedScript(IEntity user) { ERR_GameMode mode = ERR_GameMode.Get(); - return mode && mode.Phase() > ERR_Phase.PRISON && super.CanBePerformedScript(user); + SetCannotPerformReason(string.Empty); + if (!mode) { SetCannotPerformReason("Mission is not ready"); return false; } + if (mode.Phase() <= ERR_Phase.PRISON) + { + SetCannotPerformReason("Pick the prison lock before opening the gate"); + return false; + } + // Vanilla owns any obstruction/door-specific reason after unlocking. + return super.CanBePerformedScript(user); } } @@ -38,7 +50,21 @@ class ERR_TuneRadioAction : ScriptedUserAction { ERR_GameMode mode = ERR_GameMode.Get(); ERR_LocationComponent location = ERR_LocationComponent.Cast(GetOwner().FindComponent(ERR_LocationComponent)); - return mode && mode.Phase() == ERR_Phase.RADIO_SEARCH && location && location.Knowledge() == 2 && ERR_Actors.CanFight(user); + SetCannotPerformReason(string.Empty); + if (!mode) { SetCannotPerformReason("Mission is not ready"); return false; } + if (mode.Phase() != ERR_Phase.RADIO_SEARCH) + { + string reason = "Radio is not available in this mission phase"; + if (mode.Phase() == ERR_Phase.PRISON) reason = "Escape the prison first"; + if (mode.Phase() == ERR_Phase.RADIO_DEFENCE) reason = "Transmission is already in progress; defend the radio"; + if (mode.Phase() == ERR_Phase.EXTRACTION) reason = "Transmission is complete; reach the extraction helicopter"; + SetCannotPerformReason(reason); + return false; + } + if (!location) { SetCannotPerformReason("Radio location is unavailable"); return false; } + if (location.Knowledge() != 2) { SetCannotPerformReason("Identify this radio through recovered intel or close reconnaissance first"); return false; } + if (!ERR_Actors.CanFight(user)) { SetCannotPerformReason("You must be alive and conscious"); return false; } + return true; } override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) { diff --git a/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c b/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c index fae422c..7c06393 100644 --- a/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c +++ b/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c @@ -55,6 +55,147 @@ class ERR_OrdinaryScenarioLaunchRequest : Managed } +// One optional capture request per world, with no camera or gameplay mutation. +// Managed callback ownership matches the ordinary launch request above. +class ERR_OrdinaryScreenshotRequest : Managed +{ + protected static ref ERR_OrdinaryScreenshotRequest s_Request; + protected static bool s_Attempted; + protected ERR_GameMode m_Mode; + protected PlayerController m_Controller; + protected IEntity m_Actor; + protected ref ERR_PlayerLife m_Life; + protected UUID m_Account; + protected int m_PlayerId; + protected bool m_Finished; + + protected static bool Enabled() + { + string project, screenshot; + if (!Replication.IsServer() || System.IsConsoleApp()) return false; + if (!System.GetCLIParam("errOrdinaryScenario", project) || (project != "core" && project != "chat")) return false; + return System.GetCLIParam("errOrdinaryScreenshot", screenshot) && screenshot == "1"; + } + static void Queue(ERR_GameMode mode, PlayerController controller, IEntity actor) + { + if (s_Attempted || !Enabled() || !mode || !controller || !actor || !mode.Players()) return; + ERR_PlayerLife life = mode.Players().CurrentActor(actor); + if (!life) return; + ERR_OrdinaryScreenshotRequest request = new ERR_OrdinaryScreenshotRequest(); + request.m_Mode = mode; request.m_Controller = controller; request.m_Actor = actor; + request.m_Life = life; request.m_Account = life.AccountId; request.m_PlayerId = controller.GetPlayerId(); + if (!request.Valid()) return; + s_Attempted = true; s_Request = request; + mode.OnStop().Insert(request.Cancel); + GetGame().GetCallqueue().CallLater(request.Capture, 3000, false); + Print("ERR ORDINARY: optional prisoner screenshot queued after finalized admission"); + } + protected bool Valid() + { + if (!Enabled() || !GetGame() || !m_Mode || m_Mode != ERR_GameMode.Get()) return false; + if (!GetGame().GetWorld() || m_Mode.GetWorld() != GetGame().GetWorld() || !m_Mode.Active() || m_Mode.Phase() != ERR_Phase.PRISON) return false; + if (!m_Controller || m_Controller != GetGame().GetPlayerController() || m_Controller.GetPlayerId() != m_PlayerId || m_PlayerId <= 0) return false; + PlayerManager manager = GetGame().GetPlayerManager(); + if (!manager || manager.GetPlayerController(m_PlayerId) != m_Controller || manager.GetPlayerControlledEntity(m_PlayerId) != m_Actor || m_Controller.GetControlledEntity() != m_Actor) return false; + if (!ERR_Actors.Alive(m_Actor) || !m_Mode.Players()) return false; + ERR_PlayerLife current = m_Mode.Players().CurrentActor(m_Actor); + return current && current == m_Life && current.AccountId == m_Account; + } + void Cancel() + { + if (m_Finished) return; + m_Finished = true; + if (GetGame() && GetGame().GetCallqueue()) GetGame().GetCallqueue().Remove(Capture); + if (m_Mode) m_Mode.OnStop().Remove(Cancel); + m_Mode = null; m_Controller = null; m_Actor = null; m_Life = null; + } + // Read-only projection evidence, only inside the already validated capture. + // World AABB corners transformed to prison space are an envelope, not a + // promise that the material's irregular clutter mask fills that envelope. + protected void YardDiagnostic() + { + array locations = {}; + m_Mode.Locations(locations); + if (locations.Count() > 64) return; + IEntity prison; + foreach (ERR_LocationComponent location : locations) + { + if (!location || location.Kind() != ERR_LocationKind.PRISON || location.Id() != "everon-prison-1") continue; + IEntity owner = location.GetOwner(); + if (!owner || owner.GetWorld() != m_Mode.GetWorld() || !owner.GetPrefabData()) continue; + if (owner.GetPrefabData().GetPrefabName() != "{BE6B8D56349038A6}Prefabs/ERR/Prison.et") continue; + if (prison) { Print("ERR YARD: ambiguous registered prison; no measurement"); return; } + prison = owner; + } + if (!prison) { Print("ERR YARD: exact registered prison missing; no measurement"); return; } + vector prisonTransform[4]; prison.GetWorldTransform(prisonTransform); + PrintFormat("ERR YARD: prison world origin=%1 basisX=%2 basisY=%3 basisZ=%4", prisonTransform[3], prisonTransform[0], prisonTransform[1], prisonTransform[2]); + array entities = {prison}; + array depths = {0}; + int decals; + for (int index = 0; index < entities.Count(); index++) + { + IEntity entity = entities[index]; + if (!entity) { Print("ERR YARD: hierarchy changed; partial measurement"); return; } + DecalEntity decal = DecalEntity.Cast(entity); + if (decal) + { + decals++; + vector mins, maxs; decal.GetWorldBounds(mins, maxs); + vector worldTransform[4]; decal.GetWorldTransform(worldTransform); + string nativeType = decal.Type().ToString(); + ResourceName prefab; + if (decal.GetPrefabData()) prefab = decal.GetPrefabData().GetPrefabName(); + PrintFormat("ERR YARD: decal=%1 type=%2 prefab=%3 worldMin=%4 worldMax=%5", decals, nativeType, prefab, mins, maxs); + PrintFormat("ERR YARD: decal=%1 world origin=%2 basisX=%3 basisY=%4 basisZ=%5", decals, worldTransform[3], worldTransform[0], worldTransform[1], worldTransform[2]); + for (int x = 0; x < 2; x++) + for (int y = 0; y < 2; y++) + for (int z = 0; z < 2; z++) + { + vector corner = mins; + if (x == 1) corner[0] = maxs[0]; + if (y == 1) corner[1] = maxs[1]; + if (z == 1) corner[2] = maxs[2]; + vector localCorner = prison.CoordToLocal(corner); + PrintFormat("ERR YARD: decal=%1 corner=%2/%3/%4 prisonLocal=%5", decals, x, y, z, localCorner); + } + } + IEntity child = entity.GetChildren(); + while (child) + { + if (depths[index] >= 8 || entities.Count() >= 64 || entities.Contains(child)) + { + Print("ERR YARD: hierarchy bound or duplicate reached; partial measurement"); + return; + } + entities.Insert(child); depths.Insert(depths[index] + 1); + child = child.GetSibling(); + } + } + PrintFormat("ERR YARD: measurement complete nodes=%1 decals=%2; bounds do not certify clutter-mask coverage", entities.Count(), decals); + } + protected void Capture() + { + if (m_Finished) return; + bool valid = Valid(); + if (valid) YardDiagnostic(); + Cancel(); + if (!valid) + { + Print("ERR ORDINARY: optional prisoner screenshot cancelled; original admission no longer current"); + return; + } + System.MakeScreenshot("$logs:err-ordinary-prison"); + Print("ERR ORDINARY: optional prisoner screenshot requested without camera or input changes"); + } + static void ClearWorld() + { + if (s_Request) s_Request.Cancel(); + s_Request = null; + s_Attempted = false; + } +} + modded class ArmaReforgerScripted { protected ref ERR_OrdinaryScenarioLaunchRequest m_ERRDiagnosticLaunchRequest; @@ -106,6 +247,7 @@ modded class ArmaReforgerScripted override protected void OnBeforeWorldCleanup() { + ERR_OrdinaryScreenshotRequest.ClearWorld(); if (m_ERRDiagnosticLaunchRequest) m_ERRDiagnosticLaunchRequest.Cancel(); m_ERRDiagnosticLaunchRequest = null; super.OnBeforeWorldCleanup(); @@ -124,6 +266,7 @@ modded class ERR_GameMode if (!local || local.GetPlayerId() != id || local.GetControlledEntity() != actor || !ERR_Actors.Alive(actor)) return; if (!Players().CurrentActor(actor) || Phase() != ERR_Phase.PRISON) return; PrintFormat("ERR ORDINARY: local participant verified project=%1 phase=prison", project); + ERR_OrdinaryScreenshotRequest.Queue(this, local, actor); } } diff --git a/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c b/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c index 2afe74b..6712d86 100644 --- a/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c +++ b/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c @@ -120,6 +120,10 @@ class ERR_SpawnLogic : SCR_SpawnLogic Observe(playerId, reason); return; } + // Every active, eligible admission consumes one attempt, even when native + // prerequisites or all safe positions are unavailable. Preparing and an + // already-pending request return above without spending this budget. + m_Attempts.Set(playerId, attempts + 1); SCR_PlayerFactionAffiliationComponent affiliation = GetPlayerFactionComponent_S(playerId); SCR_RespawnComponent respawn = GetPlayerRespawnComponent_S(playerId); Faction faction = mode.PlayerFaction(); @@ -127,7 +131,6 @@ class ERR_SpawnLogic : SCR_SpawnLogic affiliation.RequestFaction(faction); vector position; if (!SpawnPosition(mode, position)) { RetryLater(playerId); return; } - m_Attempts.Set(playerId, attempts + 1); SCR_FreeSpawnData request = new SCR_FreeSpawnData(mode.Factions().PrisonerPrefab, position); if (!respawn.CanSpawn(request)) { RetryLater(playerId); return; } m_AuthorizedPositions.Set(playerId, position); diff --git a/docs/acceptance.json b/docs/acceptance.json index a07bef4..bd0b1a8 100644 --- a/docs/acceptance.json +++ b/docs/acceptance.json @@ -81,8 +81,8 @@ ] }, "clean_native_runtime": { - "status": "pending", - "scope": "Checkpoint7c53b4b passed two companion rounds (103025),96 assertions with zero errors, plus ordinary Chat102737 on the same source. The opt-in actor-local flight-input experiment changes current addon source and requires fresh qualification. Seventeen release cases remain pending.", + "status": "passed", + "scope": "Current addon sources: Core 130347 completes two scripted escape/restart rounds (612 assertions); companion 131041 completes two (96 assertions), both zero captured errors. Ordinary Chat 125906 loads the same source, admits the real canonical prisoner and settles cleanly. Actual fixed-target controller130038 also matches this source. These are local development checks, not ordinary-input full escape, multiplayer, native packaging or FPS acceptance; all seventeen release cases remain pending.", "evidence": [ "docs/evidence/native-2026-09-19-065351/report.json", "docs/evidence/native-2026-09-19-065351/console.log.txt", @@ -110,10 +110,22 @@ "docs/evidence/game-2026-09-19-093115/source-sha256.json", "docs/evidence/native-2026-09-19-103025/report.json", "docs/evidence/native-2026-09-19-103025/console.log.txt", - "docs/evidence/native-2026-09-19-103025/source-sha256.json" + "docs/evidence/native-2026-09-19-103025/source-sha256.json", + "docs/evidence/native-2026-09-19-130347-core-loops/report.json", + "docs/evidence/native-2026-09-19-130347-core-loops/console.log.txt", + "docs/evidence/native-2026-09-19-130347-core-loops/source-sha256.json", + "docs/evidence/native-2026-09-19-131041-companion-loops/report.json", + "docs/evidence/native-2026-09-19-131041-companion-loops/console.log.txt", + "docs/evidence/native-2026-09-19-131041-companion-loops/source-sha256.json", + "docs/evidence/game-2026-09-19-125906-integrated-prison/report.json", + "docs/evidence/game-2026-09-19-125906-integrated-prison/console.log.txt", + "docs/evidence/game-2026-09-19-125906-integrated-prison/source-sha256.json", + "docs/evidence/native-2026-09-19-130038-aircraft-target/report.json", + "docs/evidence/native-2026-09-19-130038-aircraft-target/console.log.txt", + "docs/evidence/native-2026-09-19-130038-aircraft-target/source-sha256.json" ], - "source_manifest": "docs/evidence/native-2026-09-19-103025/source-sha256.json", - "native_report": "docs/evidence/native-2026-09-19-103025/report.json" + "source_manifest": "docs/evidence/native-2026-09-19-131041-companion-loops/source-sha256.json", + "native_report": "docs/evidence/native-2026-09-19-131041-companion-loops/report.json" }, "scripted_helicopter_loss_and_restart": { "status": "passed", @@ -748,12 +760,16 @@ }, "packed_chat_ordinary_startup": { "status": "passed", - "scope": "Artifact-bound ordinary Chat startup 113315: exact five successor addons plus two installed vanilla engine/data addons, all five PAK and resource database paths verified, real canonical prisoner and 15-second ready interval, zero captured errors. All fifteen runtime artifacts unchanged. Explicit noSplash; package is the archived 111731 snapshot, not current source. No build, manual escape, multiplayer or release qualification.", + "scope": "Artifact-bound current packed Chat 131942 startup: exact fifteen 1317 package artifacts, five successor plus two vanilla addons, verified PAK/RDB paths, real canonical prisoner, fifteen-second ready interval, zero captured errors and owned cleanup. All151 PAK entries match the captured183-file addon sources. Explicit noSplash; native packaging remains failed. No full player-controlled escape, multiplayer or release qualification.", "evidence": [ "docs/evidence/packed-chat-2026-09-19-113315/report.json", "docs/evidence/packed-chat-2026-09-19-113315/console.log.txt", "docs/evidence/packed-chat-2026-09-19-113315/runner.json.txt", - "docs/evidence/packed-chat-2026-09-19-113315/packed-input-provenance.json" + "docs/evidence/packed-chat-2026-09-19-113315/packed-input-provenance.json", + "docs/evidence/packed-chat-2026-09-19-131942-current/report.json", + "docs/evidence/packed-chat-2026-09-19-131942-current/packed-input-provenance.json", + "docs/evidence/packed-chat-2026-09-19-131942-current/console.log.txt", + "docs/evidence/packed-chat-2026-09-19-131942-current/archive-sha256.json" ] }, "native_powered_takeoff_hover_landing": { @@ -792,6 +808,52 @@ "docs/evidence/native-2026-09-19-120633-map-ownership/console.log.txt", "docs/evidence/native-2026-09-19-120633-map-ownership/source-sha256.json" ] + }, + "ordinary_prisoner_view": { + "status": "passed", + "scope": "Ordinary Chat 121730 and 122353 compile without WORKBENCH, admit the genuine local canonical prisoner and settle cleanly. Opt-in read-only screenshots show the authored prison and correct objective, without camera/input changes. Native BMP and lossless viewing PNG are retained. This establishes the initial view only, not ordinary-input escape, map usability, multiplayer or FPS.", + "evidence": [ + "docs/evidence/game-2026-09-19-121730-prison-view/report.json", + "docs/evidence/game-2026-09-19-121730-prison-view/err-ordinary-prison.bmp", + "docs/evidence/game-2026-09-19-121730-prison-view/image-conversion.json", + "docs/evidence/game-2026-09-19-122353-yard-candidate/report.json" + ] + }, + "actual_aircraft_controller_vertical": { + "status": "passed", + "scope": "Source-bound Chat Workbench 123439: actual production post-spawn envelope and controller, same physical Mi-8/original AI pilot, signed controls, finite fuel, sustained hover, contact landing, engine off; 37 assertions and zero captured errors. No operational HQ dispatch, ordinary-input piloting, route flight or multiplayer claim.", + "evidence": [ + "docs/evidence/native-2026-09-19-123439-aircraft-controller/report.json", + "docs/evidence/native-2026-09-19-123439-aircraft-controller/console.log.txt", + "docs/evidence/native-2026-09-19-123439-aircraft-controller/source-sha256.json" + ] + }, + "actual_aircraft_airborne_cancellation": { + "status": "passed", + "scope": "Chat Workbench 124915: one actual Cancel at5.09m altitude; same production controller, original aircraft/pilot/order and deadline; continued airborne input, stable contact landing and engine-off CANCELLED. 39 assertions, zero captured errors. Isolated mechanism only; no HQ, remote capture or broader fault-recovery qualification.", + "evidence": [ + "docs/evidence/native-2026-09-19-124915-aircraft-cancel/report.json", + "docs/evidence/native-2026-09-19-124915-aircraft-cancel/console.log.txt", + "docs/evidence/native-2026-09-19-124915-aircraft-cancel/source-sha256.json" + ] + }, + "actual_aircraft_fixed_target": { + "status": "passed", + "scope": "Source-bound Chat Workbench 130038: actual production StartTranslation with immutable pre-takeoff target, physical2.91183m displacement toward3.3096m request, independent five-second hold, contact landing and engine-off COMPLETE. 38 assertions, zero captured errors; original aircraft/pilot/order/deadline retained. No longer route, HQ dispatch, manual piloting or multiplayer claim.", + "evidence": [ + "docs/evidence/native-2026-09-19-130038-aircraft-target/report.json", + "docs/evidence/native-2026-09-19-130038-aircraft-target/console.log.txt", + "docs/evidence/native-2026-09-19-130038-aircraft-target/source-sha256.json" + ] + }, + "packed_linux_integrated_preparation": { + "status": "passed", + "scope": "Artifact-bound empty-server compilation/preparation only: fifteen exact1317 runtime files unchanged; five successor plus two vanilla addons,5780 Game files/11202classes, Chat header/MissionSystems, seven sites117stock and prison phase. Four native asset errors also occur in vanilla control; no clean-runtime or build qualification, no real clients, graceful shutdown, FPS or release claim. Isolated90-second timeout and host cleanup verified.", + "evidence": [ + "docs/evidence/dedicated-2026-09-19-132456-packed-chat/review.json", + "docs/evidence/dedicated-2026-09-19-132456-packed-chat/result.json", + "docs/evidence/dedicated-2026-09-19-132456-packed-chat/archive-sha256.json" + ] } } } diff --git a/docs/aircraft-flight-controller.md b/docs/aircraft-flight-controller.md new file mode 100644 index 0000000..74b6400 --- /dev/null +++ b/docs/aircraft-flight-controller.md @@ -0,0 +1,52 @@ +# Prepared physical aircraft controller + +`ERR_AircraftFlight` is a production-code mechanism in the AI addon with no automatic force allocation, target selection or HQ dispatcher. The separate opt-in Workbench fixture now calls the actual controller: [123439](evidence/native-2026-09-19-123439-aircraft-controller/report.json) passes 37 assertions, including native post-spawn clearance qualification, signed pilot controls, takeoff, sustained hover, contact landing and engine-off completion. The ordinary game also compiles this code without Workbench. Operational HQ integration, longer routes, repeated-flight reliability and multiplayer remain unfinished. Earlier Core flight experiments use a separate implementation and retain separate evidence. + +## Public integration contract + +A future owner must already possess one finite, initialized, seated AI Mi-8 and keep the controller alive until its terminal state: + +1. Call `ERR_AircraftFlightEnvelope.Qualify(mode, aircraft, pilot)`. Failure returns null, never an approximate or caller-asserted certificate. +2. Call `flight.Start(mode, aircraft, originalGroup, pilot, exactPilotSlot, qualification, uniqueOrderToken, absoluteDeadline)`. The deadline must be in the next 240 seconds. One controller is single-use; the exact aircraft also has an exclusive active-controller registry entry. +3. After the native helicopter's `OnPrepareControls`, call `PrepareHelicopter` for that exact controller. Before the pilot's native `OnPrepareControls`, call `PrepareActions` with its exact character, owner, AI-owned action manager and real frame interval. The global hardware input manager is rejected. No hook was added by this change. +4. Call `Tick()` regularly; it reads the native world clock itself. Continue after `Cancel(reason)` until `Finished()` and inspect `State()` and `Reason()`. Each input entry independently checks the stage/overall deadline and physical envelope, so a stalled owner tick cannot extend control indefinitely. + +The allocating owner, eventually HQ, must supply and retain the order identity, asset reservation and authority to dispatch. This class does not claim that a positive token represents a delivered radio order. It never marks a physical asset available. A future caller must not treat every terminal state as successful completion or release a lost/captured/faulted asset for another task. + +## Qualification and ownership + +The immutable qualification record binds the exact mission, aircraft, seated pilot, measured world origin and conservative complete model/rotor radius. Issuance checks terrain and a 40m horizontal column swept to 60m, then the proven successor footprint algorithm: bounded entity/depth/hitzone traversal, native world model bounds, both real rotor damage pivots/sweeps and simulation rotor extents. It is restricted to the audited stock unarmed Mi-8 resource and sweep dimensions. The column query excludes only the already-existing aircraft/pilot hierarchies, each traversed with strict bounds; foreign objects remain obstacles. The 123439 native fixture executes these actual post-spawn exclusion traces and accepts their exact-instance certificate. + +A record can be claimed once, within two seconds according to the native clock, by the same mission/aircraft/pilot and a positive order token. More than 0.1m of aircraft movement refuses the claim. A default-constructed record cannot be claimed. The caller cannot renew a record or set its validity fields. + +`Start` additionally requires the exact original pilot/group/seat/controller relationship, enemy affiliation, no human in the group or aircraft, live conscious pilot, working fueled airframe/engine/rotors, initialized native simulation/input, awake dynamic physics and actual native ground contact. It does not wake, teleport or repair the aircraft. The future preparation owner must establish those physical prerequisites. All native control writes retain these identity/ownership checks. Missing game/world/player-manager context during teardown makes ownership false and prevents writes. + +## Flight and cancellation states + +The controller applies actor-local directional actions in Direct collective mode. It proves positive and negative collective consumption against the existing native rotor signal before enabling autohover. One normal engine start, fuel consumption, five continuous seconds of 7–9m hover, a native contact landing stable for two seconds, and engine-off verification complete the vertical operation. Native autohover supplies lateral stabilization; vertical Start has no horizontal command. The optional bounded translation described below has no attitude PD or route-following mode. Minimum collective remains applied while the stopped engine's rotors coast. Engine-off is not proof of rotor stop. + +The original measured home stays fixed. Limits remain below 8m horizontal drift, -3m through 18m relative height, uprightness at least 0.85 and a maximum 240-second operation; each preparation/flight phase has its own shorter deadline. Failed or interrupted observations reset continuous holds. No position, velocity, health, fuel or signal setter exists. + +Cancellation before flight can complete on verified ground or request a normal grounded engine shutdown. Once flight has begun, cancellation enters or retains the normal landing path and keeps its control lease; even a fresh ground-contact sample must pass the two-second landing observation. Repeated cancellation cannot renew the deadline. A completed grounded abort is `CANCELLED`; normal completion is `COMPLETE`. + +Capability loss, envelope violation, deadline expiry or input failure is explicitly `FAILED`, with a reason printed and sent to the existing HQ journal when available. It is not normal completion. Grounded failures restore saved modes/LOD. An airborne fault clears only owned action requests and does not disable autohover, stop the engine, delete the pilot or claim that a safe landing occurred. Its allocating owner must retain/quarantine the physical asset as appropriate; this controller does not prove that an expired or damaged flight can always recover. + +Human capture or any original group/seat/aircraft/controller ownership loss is `RELINQUISHED`. No zeros or settings restoration are written into the captured controller. The destructor is defensive cleanup only, not an airborne cancellation scheduler; owners must retain and tick live operations rather than drop them to cancel flight. + +## Optional immutable horizontal target + +`StartTranslation(mode, aircraft, originalGroup, pilot, exactPilotSlot, qualification, uniqueOrderToken, absoluteDeadline, worldTarget)` preserves `Start(...)` as the unchanged vertical default. It copies the absolute target X/Z **before** Start performs any native writes, requires it within five metres of the original qualified home, and fixes Y to the existing eight-metre hover altitude. There is no target setter, home rebasing or second command. It is a bounded migration of the separately proven Core translation mechanism, not route support or operational aircraft dispatch. + +After the usual five-second physical hover, the controller measures the distance from its actual hover origin to that preselected target. A distance above 4.05 metres (four metres plus an explicit five-centimetre numerical/measurement tolerance) refuses translation and enters the normal retained cancellation/landing path. It never changes the target to make the test pass. Missing native cyclic signals also request controlled cancellation. Near-zero distances are permitted as a hold command but cannot substantiate movement in the native fixture. + +The appended `TRANSLATING` state preserves all prior numeric state values and is explicitly nonterminal. Native autohover remains enabled. Horizontal error requests velocity capped at 0.5m/s, then a measured-velocity correction capped at 0.03 cyclic; actual world forward/right projections feed the existing exact pilot's action pairs. There is no attitude PD and no physics write. The target must remain within 0.75m with horizontal speed below 0.25m/s, the existing hover conditions, and measured progress consistent with the initial distance for five continuous seconds. Movement plus settling is limited to 45 seconds under the unchanged 240-second overall deadline. The original below-eight-metre drift, 18-metre height and tilt limits remain active in both Tick and native callbacks. Success enters the existing stable contact landing and engine-off path; cancellation during translation also retains that path. Deadline/capability faults retain the existing explicit `FAILED` quarantine contract, not a guarantee of recovery. + +Read-only `TranslationStarted`, `TranslationOrigin`, `TranslationTarget`, `TranslationUpdates` and `TranslationProven` expose observation only. The opt-in `aircraft-translate` Chat fixture requests the original qualified home before takeoff. It can legitimately refuse if natural hover drift is outside the proven bound, or fail its evidence threshold if the initial drift is too small: no displacement is manufactured. The 130038 native run below qualifies this bounded path on its exact source. The existing [normal controller](evidence/native-2026-09-19-123439-aircraft-controller/report.json) and [airborne cancellation](evidence/native-2026-09-19-124915-aircraft-cancel/report.json) archives qualify their respective frozen pre-translation sources only. The latter records one Cancel at 5.08964m, 13.15s of continued control, an unchanged absolute deadline and engine-off `CANCELLED`, with 39 assertions and zero captured errors. + +## Source-local checks + +Run `python3 tests/test_aircraft_flight_policy.py`, `python3 tests/test_aircraft_flight_envelope.py` and `python3 tests/test_aircraft_translation.py`. The translation test executes the actual immutable-target Start wrapper, geometry/demand/hold policy and Begin/Check stage bodies, including excessive natural drift refusal, absent cyclic signal refusal, copied target ownership, interrupted hold, insufficient callbacks and original deadline preservation. They execute the actual policy, cancellation, landing/shutdown/tick, callback-lease, certificate-claim and release bodies with native boundaries adapted in the C++ harness. Cases include bounded deadlines independently enforced by callbacks, cancellation while airborne/on contact, repeated cancellation, interrupted hold, stale/moved/reused certificates, capture, ground failure restoration, and explicit fault rather than successful completion. The source-bound 123439 native fixture supplies collision, compilation, scoped input and physical vertical-flight evidence. Ordinary startup establishes compilation only; ordinary-game flight, operational dispatch and multiplayer remain separate requirements. + +## Native fixed-target result + +The [130038 fixed-target fixture](evidence/native-2026-09-19-130038-aircraft-target/report.json) passes 38 assertions and zero captured errors using this actual controller. The target was the original qualified home, fixed before takeoff. Native hover drift produced a 3.3096m requested movement; the helicopter physically moved 2.91183m and finished 0.399235m from that target after the sustained hold and contact landing. There were 484 translation updates, 1,572 callbacks on each native control path, one engine/controller start and one original aircraft/pilot. Its final state was COMPLETE with engine off. This establishes a bounded target command only; longer routes, dispatch and multiplayer remain unqualified. diff --git a/docs/current-status.md b/docs/current-status.md index fbb6011..8e92492 100644 --- a/docs/current-status.md +++ b/docs/current-status.md @@ -1,6 +1,6 @@ # Current development status -Updated **19 September 2026**, through refreshed mortar salvo 112900, packed five-addon startup 113315, current expiry 114751, crew registration 115232 and bounded powered translation 120245. Commit `7c53b4b` remains the clean development checkpoint: companion 103025, ordinary Chat 102737 and casualty 102037 have identical addon-source manifests. Newer flight, spectator and mortar changes mean the **current-source clean runtime gate remains pending**. Packed startup qualifies its archived artifact snapshot, which predates the latest mortar changes; it does not qualify the current source or build process. All seventeen first-release cases remain pending. +Updated **19 September 2026**. Current addon sources pass the local clean-runtime development gate: Core 130347 completes two scripted escape/restart rounds with 612 assertions; companion 131041 completes two with 96 assertions, both with zero captured errors. Ordinary Chat 125906 and actual fixed-target flight 130038 have the same addon-source manifest. The latest aircraft path adds bounded target movement to the independently authored controller; operational HQ aircraft routes remain unfinished. **All seventeen first-release acceptance cases remain pending.** The current 1317 packages pass ordinary Chat startup and isolated Linux empty-server preparation. Native packaging still fails with the known UI shutdown errors; Linux retains four installed-asset errors reproduced by its vanilla control. These are artifact-bound development observations, not release qualification. The primary deliverable is an independently authored replacement for the abandoned Escapists base mission, with companion behavior integrated through its interfaces. Five successor addon projects have their own identities, authored Everon sites and vanilla asset references. The first release targets up to twelve players completing prison → scavenging/intel → radio defence → helicopter extraction without the original mod or dependent extensions. Scripted development checkpoints exist; a dependable, manually playable multiplayer release is still unfinished. @@ -8,23 +8,23 @@ The primary deliverable is an independently authored replacement for the abandon | Area | Evidence | Practical limit | | --- | --- | --- | -| Integrated base loop | [Core 100619](evidence/native-2026-09-19-100619/report.json) completes two rounds, 612 assertions and zero errors, including canonical participant rejection/restored document recovery, rough/exact native markers, radio feedback, extraction and restart. [Companion 103025](evidence/native-2026-09-19-103025/report.json) completes two rounds, 96 assertions and zero errors at the committed checkpoint. | Scripted local integration with deliberate state/position changes, not a normal-input escape. Later addon edits require new source-bound checks. Earlier failures remain archived. | -| Ordinary game startup | [Chat 102737](evidence/game-2026-09-19-102737/report.json) loads all five addons in the regular game, verifies the header/MissionSystems and admits the real local controller to a living canonical prisoner, then observes a clean ready interval. | Explicit diagnostic noSplash and a scoped standalone round-local identity; no complete ordinary route, remote identity or manual input proof. [Admission design](local-singleplayer-admission.md). | -| Packed addon consumption | [Packed Core 110729](evidence/packed-core-2026-09-19-110729/report.json) passes ordinary startup from the archived project/PAK/resource database plus installed vanilla: exactly three expected addons, real canonical prisoner, a 15-second ready interval and zero captured errors. Package and log hashes are retained. | Artifact-bound startup with explicit noSplash; no loose successor addon was loaded. The artifact predates current mortar edits. [Packed Chat 113315](evidence/packed-chat-2026-09-19-113315/report.json) also passes startup from all five archived 111731 addons (fifteen exact artifacts), with no loose successor source, a real prisoner and zero captured errors. Native packaging remains unqualified: an [empty-addon control](native-packaging-control.md) reproduces the same UI resource-leak errors, without fixing or suppressing them. | +| Integrated base loop | [Core 130347](evidence/native-2026-09-19-130347-core-loops/report.json) completes two rounds, 612 assertions and zero errors, including canonical participant rejection/restored document recovery, rough/exact native markers, radio feedback, extraction and restart. [Companion 131041](evidence/native-2026-09-19-131041-companion-loops/report.json) completes two rounds, 96 assertions and zero errors at its source snapshot. | Scripted local integration with deliberate state/position changes, not a normal-input escape. The current Core, companion, ordinary startup and fixed-target flight archives share one exact addon-source snapshot. Future addon edits require fresh qualification. Earlier failures remain archived. | +| Ordinary game startup | [Chat 125906](evidence/game-2026-09-19-125906-integrated-prison/report.json) loads all five addons in the regular game, verifies the header/MissionSystems and admits the real local controller to a living canonical prisoner, then observes a clean ready interval. Native screenshots show the real prisoner view and the correct escape objective; the stock-scale yard decal creates a larger irregular bare patch, with substantial wheat remaining. | Explicit diagnostic noSplash and a scoped standalone round-local identity; no complete ordinary route, remote identity or manual input proof. [Admission design](local-singleplayer-admission.md). | +| Packed addon consumption | [Packed Core 110729](evidence/packed-core-2026-09-19-110729/report.json) passes ordinary startup from the archived project/PAK/resource database plus installed vanilla: exactly three expected addons, real canonical prisoner, a 15-second ready interval and zero captured errors. Package and log hashes are retained. | Artifact-bound startup with explicit noSplash; no loose successor addon was loaded. The artifact predates current mortar edits. [Current packed Chat 131942](evidence/packed-chat-2026-09-19-131942-current/report.json) passes startup from all five [1317 packages](evidence/package-2026-09-19-1317-all/review.json), with no loose successor source, a real prisoner and zero captured errors. All 151 PAK entries match the captured 183-file current addon source manifest; all fifteen runtime artifacts retain exact hashes. Native packaging remains unqualified: an [empty-addon control](native-packaging-control.md) reproduces the same UI resource-leak errors, without fixing or suppressing them. | | Prison and scavenging | [Prisoner capacity](evidence/native-2026-09-19-063949/report.json) uses one real player plus eleven physical characters, exact starter kits and native clue transfers. [Prison boundary 100148](evidence/native-2026-09-19-100148/report.json) covers the gate/progression corrections. | Extra physical actors are not twelve connected clients. Native action completion and deliberately repositioned boundary crossings do not prove held input or walking through the gate/debris. Equipment scarcity and combat balance need playtesting. | | Medicine and extraction casualties | [Medical treatment](evidence/native-2026-09-19-062406/report.json) demonstrates finite supplies and native recovery at its earlier snapshot. [Casualty 102037](evidence/native-2026-09-19-102037/report.json) passes 101 clean assertions at the committed checkpoint: grounded-aircraft checks, real incapacitation, helper rejection, seat/LOS constraints, one owner-handshake load and idempotent stop. [Native removal](evidence/native-2026-09-19-080058/report.json) proves the inherited exit mechanism. | Casualty loading explicitly adapts helper membership and invokes action completion. Held input, real remote ownership, competing rescuers and disconnect/death/deletion races remain separate. The older medical snapshot retains its historical catalog errors. | | Infantry and HQ | [Actual perception response](evidence/native-2026-09-19-092237/report.json) carries an original soldier's observation through both physical radio legs and HQ to a different original squad, which physically moves. Patrol/preemption/resumption are implemented. | The prisoner is arranged and temporarily protected. Broader combat and interrupted/captured support require additional qualification; no response force is created for this test. | | Finite support | [Mortar expiry](evidence/native-2026-09-19-091306/report.json) verifies fresh native commitments followed by stale-report withholding without duplicate orders. [Courier 095513](evidence/native-2026-09-19-095513/report.json) passes 154 clean assertions through actual radio, original-patrol walking, exact depot-shell delivery and patrol restoration. | Mortar observations are synthetic; impact accuracy and genuine late callbacks remain unproved. The new refresh now passes the bounded 112900 fixture: three actual radio updates, eight physical launches, native event completion, 19 surviving original shells and 25 seconds without replay. The current [114751 expiry regression](evidence/native-2026-09-19-114751-mortar-expiry/report.json) also passes 48 clean assertions. [115232 crew registration](evidence/native-2026-09-19-115232-intel-readiness/report.json) proves all four physical crew receive their one Intel carrying roll after setup, then exercises inventory depletion/loss; broader support-loss checks remain separate. Courier depletion is arranged by physically sequestering the original 27 rounds, not firing or replacing them. Broader losses and multiplayer remain unqualified. | -| Aircraft mechanism | [Flight 114504](evidence/native-2026-09-19-114504-powered-flight/report.json) passes 81 assertions with zero captured errors: signed actor-local collective consumption, native autohover, powered takeoff, five-second 7–9m hover, stable contact landing and an engine-off check with finite fuel. The same aircraft and living AI pilot remain inside the original physical limits. | [Translation 120245](evidence/native-2026-09-19-120245-powered-translation/report.json) additionally passes 85 clean assertions for a fixed four-metre target, five-second hold and landing. These are isolated flight mechanisms; rotors still coast after engine shutdown. Longer route navigation, operational HQ aircraft support, repeated-flight reliability and manual/multiplayer piloting remain unqualified. Earlier input, drift, hover and shutdown failures remain archived. | +| Aircraft mechanism | [Flight 114504](evidence/native-2026-09-19-114504-powered-flight/report.json) passes 81 assertions with zero captured errors: signed actor-local collective consumption, native autohover, powered takeoff, five-second 7–9m hover, stable contact landing and an engine-off check with finite fuel. The same aircraft and living AI pilot remain inside the original physical limits. | [Translation 120245](evidence/native-2026-09-19-120245-powered-translation/report.json) additionally passes 85 clean assertions for a fixed four-metre target, five-second hold and landing. The reusable production controller separately passes [123439](evidence/native-2026-09-19-123439-aircraft-controller/report.json), 37 assertions including actual post-spawn qualification and its own complete vertical operation. [Airborne cancellation 124915](evidence/native-2026-09-19-124915-aircraft-cancel/report.json) passes 39 assertions with retained control through contact landing and engine-off. The same reusable controller then passes [fixed-target movement 130038](evidence/native-2026-09-19-130038-aircraft-target/report.json), 38 assertions including a physical 2.9m translation and landing. These are isolated flight mechanisms; rotors still coast after engine shutdown. Longer route navigation, operational HQ aircraft support, repeated-flight reliability and manual/multiplayer piloting remain unqualified. Earlier input, drift, hover and shutdown failures remain archived. | | Shared field map | [Map ownership 120633](evidence/native-2026-09-19-120633-map-ownership/report.json) passes native replacement-view, delayed-callback, mode-clear and spare/interrupted deletion checks. The fixture observes actual cleanup and waits for native component references to expire. | Camera restore authorization is observed; no public native render-state getter exists. Visible held-map usability, previously focused stock gadget callbacks and remote presentation remain separate. | -| Independent runtime controls | [Linux dedicated startup](evidence/dedicated-2026-09-19-083213/review.json) prepares the empty Core mission in an isolated network namespace. Its four resource errors reproduce in a vanilla control. [Vanilla ordinary 102533](evidence/vanilla-game-2026-09-19-102533/report.json) reproduces the initial splash unknown-class error with exactly two vanilla addons and no successor. | No real dedicated client joined. The vanilla ordinary control remains failed despite entering the menu; it does not test scenario reload or input. [Splash diagnosis](normal-splash-audit.md). | +| Independent runtime controls | [Current packed Linux Chat 132456](evidence/dedicated-2026-09-19-132456-packed-chat/review.json) compiles the integrated game scripts, loads all five packages and prepares the empty prison mission in an isolated network namespace. Its four resource errors also occur in the earlier vanilla control. All fifteen packed inputs remain unchanged. [Vanilla ordinary 102533](evidence/vanilla-game-2026-09-19-102533/report.json) reproduces the initial splash unknown-class error with exactly two vanilla addons and no successor. | No real dedicated client joined. The vanilla ordinary control remains failed despite entering the menu; it does not test scenario reload or input. [Splash diagnosis](normal-splash-audit.md). | ## Immediate work 1. **Prove the ordinary player route.** Use normal gate, inventory, document/map, radio and medical interactions; travel the authored route, board and pilot the actual extraction helicopter, and verify partial escape. Keep finite supplies, vanilla recovery and explicit round abandonment intact. Direct-completion fixtures cannot settle these usability questions. -2. **Extend the proven bounded flight mechanism.** Signed actor-local collective and native autohover now pass vertical takeoff, hover, landing and engine-off checks. A bounded four-metre translation now passes too. Longer routes and operational HQ support still need implementation and native qualification. Keep experimental controls separate from operational HQ support, retain failed observations, and re-run applicable integration checks after source changes. +2. **Extend the proven bounded flight mechanism.** Signed actor-local collective and native autohover now pass vertical takeoff, hover, landing and engine-off checks. A bounded four-metre translation now passes too. Longer routes and operational HQ support still need implementation and native qualification. The reusable controller now passes a native vertical operation; airborne cancellation also passes; optional fixed-target movement now passes too. Longer paths remain the next implementation step. Keep unqualified flight modes out of operational HQ support, retain failed observations, and re-run applicable integration checks after source changes. 3. **Establish real multiplayer behavior.** Test accepted client identities, simultaneous/late joins, preload cancellation, reserved-body reconnect/expiry, spent lives, spectator streaming, remote task/map/radio/result updates and seat contention. Local controller injections and helper actors are not substitutes for connected clients. -4. **Qualify current support and observer changes.** The refreshed full salvo now passes a source-bound native check; finish current expiry and support-loss regressions. Spectator reason messages and survivor-cycling guidance have been added and compiled; visible behavior and real-client streaming remain unverified. Exercise actual interrupted reports, captured/dead couriers, pending inventory callbacks and support losses. Preserve stock and original patrols; retain historical failures alongside source-bound successful regressions. +4. **Broaden support-loss and observer checks.** Refreshed full salvo, current expiry and late crew registration now have source-bound native evidence; wider support-loss regressions remain. Spectator reason messages and survivor-cycling guidance have been added and compiled; visible behavior and real-client streaming remain unverified. Exercise actual interrupted reports, captured/dead couriers, pending inventory callbacks and support losses. Preserve stock and original patrols; retain historical failures alongside source-bound successful regressions. ## First-release qualification diff --git a/docs/dedicated-native-diagnostic.md b/docs/dedicated-native-diagnostic.md index 0ec7cea..8abf4d5 100644 --- a/docs/dedicated-native-diagnostic.md +++ b/docs/dedicated-native-diagnostic.md @@ -22,6 +22,16 @@ python3 tools/dedicated_native.py \ --route header --seconds 90 ``` +`--project core` is the default and preserves the original Core command. Select `--project chat --route header` to load `{FA804F411BDDF2C6}` through its existing declared Core/AI/Intel/Map dependencies and start `{C1E20667DCE324ED}Missions/ERR_Everon.conf`. The regular Linux executable still receives the scenario header; no diagnostic world-system override is added. The packed 13:24:56 run below demonstrates integrated Linux compilation and empty-server preparation for its exact fifteen artifacts, with inherited asset errors retained. It does not establish genuine connected-client or multiplayer behavior. + +`--route diag-world --project chat` selects the diagnostic executable with the same Chat addon and the already-authored `{B6C516F86302C679}Worlds/ERR_Everon.ent` plus `{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf`. Both projects share that Core world; their loaded scripts/resources differ through their dependency closure. Command/result metadata record the selected route and project. All network isolation, private copies, source snapshots, runtime bounds, backend disablement and owned-process cleanup remain unchanged. + +`--route vanilla-everon` remains strictly vanilla: no successor addon or custom system arguments are emitted. Combining it with `--project chat` is an error before any filesystem preparation or subprocess. Vanilla metadata records no successor project. + +Successor input must be runtime-resolvable, not just an authored-source bundle. Before creating the archive or invoking any process, preflight requires `addons/core/addon.gproj` and a **nonempty regular** `addons/core/resourceDatabase.rdb`. Chat additionally requires those two files for `ai`, `intel`, `map` and `chat`. Project GUIDs must match the selected successor identities; linked addon folders/files are refused. The copied private input is checked again before namespace preflight. A private input containing only `addons//{addon.gproj,data.pak,resourceDatabase.rdb}` is permitted: loose scripts are not required. This check proves file presence and project identity only; it does not establish database validity, compatibility with the PAK/source, successful native resource resolution, or a clean build. Native logs remain decisive. Vanilla control requires no successor RDBs. + +The [13:14:58 Chat attempt](evidence/dedicated-2026-09-19-131458-missing-databases/result.json) exposed this distinction: the engine listed all five successor GUIDs, then warned that **all five resource databases were missing**. Game compilation remained at the installed vanilla count of 5660 files; subsequent loading reported unknown `ERR_GameMode`, wrong resource GUIDs and further errors, with no mission preparation. Its authored-only input had 183 files and zero RDB entries. Before/after manifests matched, the isolated preflight succeeded, and the bounded run ended by supervisor SIGTERM; a read-only host check found its recorded supervisor and all server executable processes absent. The attempt remains failed. This does not demonstrate that Chat's dependency flags are wrong or that integrated Linux scripts compiled. The new early preflight prevents repeating that known incomplete-input launch, and the completed packaged retry below resolves that particular input failure. + The source, archive and runtime must be separate resolved `/tmp` paths. Archive must be new. Exit zero means bounded diagnostic collection finished, **not** that compilation or acceptance passed. Inspect raw errors and positive mission evidence. The separately enumerated `vanilla-everon` control route loads installed `Missions/21_GM_Eden.conf` without successor addon arguments; see [the resource diagnosis](dedicated-resource-audit.md). The alternative `diag-world` route remains available for a different bounded question but was not needed or executed in this result; it cannot establish ordinary-header startup by itself. ## Archived observations @@ -46,6 +56,14 @@ Earlier failed isolation checks are preserved. The sandbox-local network namespa ## Source-local regression scope -`python3 tests/test_dedicated_native.py` exercises the actual pre-exec isolation gate with substituted namespace/interface/routes and proves refusal happens before `exec`, detects source mutation and rejects linked sources, and checks header versus diagnostic-world CLI separation. It does not execute a server or simulate multiplayer. The native archive separately establishes that the observed regular server startup accepted the header and initialized the mission. +`python3 tests/test_dedicated_native.py` exercises the actual pre-exec isolation gate with substituted namespace/interface/routes and proves refusal happens before `exec`, detects source mutation and rejects linked sources, and checks exact Core/Chat identities against authored projects/metadata, their dependency closure, regular header versus diagnostic-world CLI separation, and rejection of Chat plus vanilla before filesystem or process operations, plus missing/empty/linked/wrong-identity addon inputs before archive creation or process launch. Packed-only input is tested without loose scripts; test RDB contents are explicitly synthetic and assert presence checks only. It does not execute a server or simulate multiplayer. The native archive separately establishes that the observed regular server startup accepted the header and initialized the mission. The subsequent vanilla-only control reproduced all four initial asset errors without successor addons. This attributes those specific errors to the installed vanilla content; it does not make the first run entirely error-free or close other acceptance requirements. Exact stacks and control limitations are recorded in [the resource audit](dedicated-resource-audit.md). + +## Current packed Chat retry — 13:24:56 + +[Independent review](evidence/dedicated-2026-09-19-132456-packed-chat/review.json) records the completed 90-second retry from the [1317 package snapshot](evidence/package-2026-09-19-1317-all/review.json). The input contains exactly fifteen successor runtime files: five project descriptors, five PAKs and five resource databases, with no loose scripts. Every artifact matches the package snapshot and remains unchanged after execution. + +The regular Linux executable loads exactly five successor and two vanilla addon identities, mounts all five PAKs and opens their five databases. Native Game compilation reports 5780 files and 11202 classes; the Chat scenario header and Core MissionSystems load, seven sites and 117 stock entities prepare, and phase 0 transitions to prison phase 1. Native statistics report zero players. No script/VM-pattern failure appears. + +Four native console errors remain. Each also occurs in the earlier vanilla 084040 control, whose complete error set is larger; this is subset attribution, not equality of the two complete runs. No errors are suppressed or waived. The isolated supervisor ends at its 90-second deadline with SIGTERM (`exit=-15`); a read-only process check confirms it and server executable processes are absent. This is artifact-bound integrated server startup/preparation, not a clean native build, graceful shutdown, connected-client qualification or an FPS comparison. diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/archive-sha256.json b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/archive-sha256.json new file mode 100644 index 0000000..9bdd61e --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/archive-sha256.json @@ -0,0 +1,199 @@ +{ + "command.json": "39664d6eddeef0998bfebdd6f2f69157f417b63f9592ee49a8ca44964261ae9f", + "isolation-preflight.json": "d39e14b6fbbbc0f7937772130c63e35a0bc23787a4d2f8918b3e4eabeacab09b", + "profile/logs/logs_2026-09-19_13-14-58/console.log": "ccc80fb88a4df681329bc4ab9e01b453b49de998593b49bd8c270e8afb22e8d8", + "profile/logs/logs_2026-09-19_13-14-58/crash.log": "10b059e914171e6df560767b24f5c04c680b867f3a6cc72fadc2408f4e5102f7", + "profile/logs/logs_2026-09-19_13-14-58/error.log": "e4dae58ce0ca06fbb95c881857aefc3e7e7e777fb24653bb473fd511717090fa", + "profile/logs/logs_2026-09-19_13-14-58/script.log": "b1bdb0efb02459d8cd0422d5d778e834a51f15cf078c4a8a523850d703f66dc2", + "profile/profile/.save/settings/ReforgerEngineSettings.conf": "7b72f3e6b6c9c47643a213914e5dcb40964a2d43328178a740bb512904157cb7", + "profile/profile/.save/settings/ReforgerGameSettings.conf": "1656680640c178239490ffbf9b3ddae04d3ac0993cd84471c0d27b28b76abf13", + "result.json": "d577ba940786dedbcdbd720c2e08305240d9ed775104b949eccfd040886ad371", + "review.json": "a3efd25c6f9f96da0184e272a8d20e0cf65f82405b5410495278da9b0d993a8d", + "runner.py": "213a5a1dafede017301f750d074c2432f7199d8fa92f3c3be5846afa654b499b", + "source/addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "source/addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "source/addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "source/addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "source/addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "source/addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "source/addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "source/addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "source/addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "source/addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "source/addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "source/addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "source/addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "source/addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "source/addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "source/addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "source/addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "source/addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "source/addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "source/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "source/addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "source/addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "source/addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "source/addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "source/addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "source/addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "source/addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "source/addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "source/addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "source/addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "source/addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "source/addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "source/addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "source/addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "source/addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "source/addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "source/addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "source/addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "source/addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "source/addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "source/addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "source/addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "source/addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "source/addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "source/addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "source/addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "source/addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "source/addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "source/addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "source/addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "source/addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "source/addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "source/addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "source/addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "source/addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "source/addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "source/addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "source/addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "source/addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "source/addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "source/addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "source/addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "source/addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "source/addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "source/addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "source/addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "source/addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "source/addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "source/addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "source/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "source/addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "source/addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "source/addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "source/addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "source/addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "source/addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "source/addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "source/addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "source/addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "source/addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "source/addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "source/addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "source/addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "source/addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "source/addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "source/addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "source/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "source/addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "source/addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "source/addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "source/addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "source/addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "source/addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "source/addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "source/addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "source/addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "source/addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "source/addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "source/addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "source/addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "source/addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "source/addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "source/addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "source/addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "source/addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "source/addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "source/addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "source/addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "source/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "source/addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "source/addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "source/addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "source/addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "source/addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "source/addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "source/addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "source/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "source/addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "source/addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "source/addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "source/addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "source/addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "source/addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "source/addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "source/addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "source/addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "source/addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "source/addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "source/addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "source/addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "source/addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "source/addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "source/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "source/addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "source/addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "source/addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "source/addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "source/addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "source/addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "source/addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "source/addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "source/addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "source/addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "source/addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "source/addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "source/addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "source/addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "source/addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "source/addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "source/addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a", + "source-manifest-after.json": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "source-manifest.json": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "stdout.log": "64963f62de592e2b38b3485cecaf81f0707eb55c7ba8a91aa4f2818fa370a6cb" +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/command.json b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/command.json new file mode 100644 index 0000000..da5c847 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/command.json @@ -0,0 +1,114 @@ +{ + "command": [ + "bwrap", + "--unshare-net", + "--unshare-pid", + "--unshare-ipc", + "--unshare-uts", + "--die-with-parent", + "--cap-drop", + "ALL", + "--clearenv", + "--ro-bind", + "/", + "/", + "--tmpfs", + "/home", + "--tmpfs", + "/tmp", + "--tmpfs", + "/run", + "--proc", + "/proc", + "--dev", + "/dev", + "--ro-bind", + "/tmp/erri-dedicated-runtime/server", + "/tmp/runtime", + "--bind", + "/tmp/erri-dedicated-chat-20260919-1314/source", + "/tmp/source", + "--bind", + "/tmp/erri-dedicated-chat-20260919-1314", + "/tmp/work", + "--setenv", + "HOME", + "/tmp/work/home", + "--setenv", + "TMPDIR", + "/tmp/work/tmp", + "--setenv", + "XDG_CONFIG_HOME", + "/tmp/work/home/.config", + "--setenv", + "XDG_DATA_HOME", + "/tmp/work/home/.local/share", + "--setenv", + "XDG_CACHE_HOME", + "/tmp/work/home/.cache", + "--setenv", + "PATH", + "/usr/bin:/bin", + "--setenv", + "LANG", + "C.UTF-8", + "--chdir", + "/tmp/runtime", + "/usr/bin/python3", + "-c", + "import json,os,socket,sys\nstate={\"netns\":os.readlink(\"/proc/self/ns/net\"),\"interfaces\":socket.if_nameindex(),\"routes\":open(\"/proc/net/route\").read(),\"ipv6Routes\":open(\"/proc/net/ipv6_route\").read()}\nprint(\"ERR ISOLATION \"+json.dumps(state),flush=True)\nassert state[\"netns\"] != sys.argv[1], \"network namespace was not isolated\"\nassert [name for _,name in state[\"interfaces\"]] == [\"lo\"], \"non-loopback interface present\"\nassert len(state[\"routes\"].splitlines()) == 1, \"IPv4 route present\"\nassert all(line.split()[-1] == \"lo\" for line in state[\"ipv6Routes\"].splitlines()), \"non-loopback IPv6 route present\"\nif len(sys.argv)>2: os.execv(sys.argv[2],sys.argv[2:])\n", + "net:[4026531833]", + "/tmp/runtime/ArmaReforgerServer", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-addonsDir", + "/tmp/source/addons", + "-addons", + "FA804F411BDDF2C6", + "-server", + "{C1E20667DCE324ED}Missions/ERR_Everon.conf" + ], + "engine": [ + "/tmp/runtime/ArmaReforgerServer", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-addonsDir", + "/tmp/source/addons", + "-addons", + "FA804F411BDDF2C6", + "-server", + "{C1E20667DCE324ED}Missions/ERR_Everon.conf" + ], + "seconds": 90, + "route": "header", + "project": "chat", + "binarySHA256": "91fdf333ec49c266d309be358aabab4244a93a2f9cfa11853a600e026104001f", + "serverLaunched": false, + "realPlayers": 0, + "multiplayerProven": false, + "scope": "successor chat empty-server startup" +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/isolation-preflight.json b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/isolation-preflight.json new file mode 100644 index 0000000..388284b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/isolation-preflight.json @@ -0,0 +1,65 @@ +{ + "command": [ + "bwrap", + "--unshare-net", + "--unshare-pid", + "--unshare-ipc", + "--unshare-uts", + "--die-with-parent", + "--cap-drop", + "ALL", + "--clearenv", + "--ro-bind", + "/", + "/", + "--tmpfs", + "/home", + "--tmpfs", + "/tmp", + "--tmpfs", + "/run", + "--proc", + "/proc", + "--dev", + "/dev", + "--ro-bind", + "/tmp/erri-dedicated-runtime/server", + "/tmp/runtime", + "--bind", + "/tmp/erri-dedicated-chat-20260919-1314/source", + "/tmp/source", + "--bind", + "/tmp/erri-dedicated-chat-20260919-1314", + "/tmp/work", + "--setenv", + "HOME", + "/tmp/work/home", + "--setenv", + "TMPDIR", + "/tmp/work/tmp", + "--setenv", + "XDG_CONFIG_HOME", + "/tmp/work/home/.config", + "--setenv", + "XDG_DATA_HOME", + "/tmp/work/home/.local/share", + "--setenv", + "XDG_CACHE_HOME", + "/tmp/work/home/.cache", + "--setenv", + "PATH", + "/usr/bin:/bin", + "--setenv", + "LANG", + "C.UTF-8", + "--chdir", + "/tmp/runtime", + "/usr/bin/python3", + "-c", + "import json,os,socket,sys\nstate={\"netns\":os.readlink(\"/proc/self/ns/net\"),\"interfaces\":socket.if_nameindex(),\"routes\":open(\"/proc/net/route\").read(),\"ipv6Routes\":open(\"/proc/net/ipv6_route\").read()}\nprint(\"ERR ISOLATION \"+json.dumps(state),flush=True)\nassert state[\"netns\"] != sys.argv[1], \"network namespace was not isolated\"\nassert [name for _,name in state[\"interfaces\"]] == [\"lo\"], \"non-loopback interface present\"\nassert len(state[\"routes\"].splitlines()) == 1, \"IPv4 route present\"\nassert all(line.split()[-1] == \"lo\" for line in state[\"ipv6Routes\"].splitlines()), \"non-loopback IPv6 route present\"\nif len(sys.argv)>2: os.execv(sys.argv[2],sys.argv[2:])\n", + "net:[4026531833]" + ], + "exit": 0, + "stdout": "ERR ISOLATION {\"netns\": \"net:[4026534801]\", \"interfaces\": [[1, \"lo\"]], \"routes\": \"Iface\\tDestination\\tGateway \\tFlags\\tRefCnt\\tUse\\tMetric\\tMask\\t\\tMTU\\tWindow\\tIRTT \\n\", \"ipv6Routes\": \"00000000000000000000000000000000 00 00000000000000000000000000000000 00 00000000000000000000000000000000 ffffffff 00000001 00000000 00200200 lo\\n00000000000000000000000000000001 80 00000000000000000000000000000000 00 00000000000000000000000000000000 00000000 00000002 00000000 80200001 lo\\n00000000000000000000000000000000 00 00000000000000000000000000000000 00 00000000000000000000000000000000 ffffffff 00000001 00000000 00200200 lo\\n\"}\n", + "stderr": "" +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/logs/logs_2026-09-19_13-14-58/console.log b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/logs/logs_2026-09-19_13-14-58/console.log new file mode 100644 index 0000000..5e4b680 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/logs/logs_2026-09-19_13-14-58/console.log @@ -0,0 +1,304 @@ +--------------------------------------------- +Log /tmp/work/profile/logs/logs_2026-09-19_13-14-58/console.log started at 2026-09-19 13:14:58 (2026-09-19 11:14:58 UTC) + +13:14:58.032 ENGINE : FileSystem: Adding relative directory '/tmp/work/profile/logs/logs_2026-09-19_13-14-58' to filesystem under name logs +13:14:58.032 ENGINE : FileSystem: Adding relative directory '/tmp/work/profile/profile' to filesystem under name profile +13:14:58.032 ENGINE : FileSystem: Current working directory: '/tmp/runtime/' +13:14:58.033 ENGINE : Initializing engine, version 192142 +13:14:58.033 ENGINE : CLI Params: -profile /tmp/work/profile -noBackend -noSound -noSplash -noThrow -bindIP 127.0.0.1 -bindPort 2001 -maxFPS 30 -logStats 5000 -addonsDir /tmp/source/addons -addons FA804F411BDDF2C6 -server {C1E20667DCE324ED}Missions/ERR_Everon.conf +13:14:58.034 ENGINE : Addon dirs: +13:14:58.034 ENGINE : dir: '/tmp/source/addons' +13:14:58.034 ENGINE : dir: './addons' +13:14:58.034 ENGINE : dir: '/tmp/work/profile/addons' +13:14:58.034 ENGINE : Available addons: +13:14:58.034 ENGINE : gproj: '/tmp/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:14:58.034 ENGINE : gproj: '/tmp/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:14:58.034 ENGINE : gproj: '/tmp/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:14:58.034 ENGINE : gproj: '/tmp/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:14:58.034 ENGINE : gproj: '/tmp/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:14:58.034 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +13:14:58.034 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +13:14:58.034 ENGINE : FileSystem: Adding relative directory '/tmp/source/addons/chat' to filesystem under name ERR_Chat +13:14:58.034 ENGINE : FileSystem: Adding relative directory '/tmp/source/addons/map' to filesystem under name ERR_Map +13:14:58.034 ENGINE : FileSystem: Adding relative directory '/tmp/source/addons/intel' to filesystem under name ERR_Intel +13:14:58.034 ENGINE : FileSystem: Adding relative directory '/tmp/source/addons/ai' to filesystem under name ERR_Ai +13:14:58.034 ENGINE : FileSystem: Adding relative directory '/tmp/source/addons/core' to filesystem under name ERR_Core +13:14:58.123 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 6) to filesystem under name ArmaReforger +13:14:58.123 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 1) to filesystem under name core +13:14:58.123 ENGINE : CPU vendor : AuthenticAMD +13:14:58.123 ENGINE : CPU type : 2 +13:14:58.123 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +13:14:58.123 ENGINE : CPU cache info : Unknown cache +13:14:58.123 ENGINE : CPU count logical : 16 +13:14:58.123 ENGINE : CPU count physical : 8 +13:14:58.123 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +13:14:58.123 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=/tmp/source/addons/chat/resourceDatabase.rdb) +13:14:58.124 RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/chat/resourceDatabase.rdb' +13:14:58.124 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=/tmp/source/addons/map/resourceDatabase.rdb) +13:14:58.124 RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/map/resourceDatabase.rdb' +13:14:58.124 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=/tmp/source/addons/intel/resourceDatabase.rdb) +13:14:58.124 RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/intel/resourceDatabase.rdb' +13:14:58.124 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=/tmp/source/addons/ai/resourceDatabase.rdb) +13:14:58.124 RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/ai/resourceDatabase.rdb' +13:14:58.124 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=/tmp/source/addons/core/resourceDatabase.rdb) +13:14:58.124 RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/core/resourceDatabase.rdb' +13:14:58.124 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +13:14:58.253 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +13:14:58.254 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=/tmp/work/profile/profile/resourceDatabase.rdb) +13:14:58.254 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=/tmp/work/profile/logs/logs_2026-09-19_13-14-58/resourceDatabase.rdb) +13:14:58.394 ENGINE : GameProject load +13:14:58.394 ENGINE : Loaded addons: +13:14:58.394 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +13:14:58.394 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +13:14:58.394 ENGINE : gproj: '/tmp/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:14:58.394 ENGINE : gproj: '/tmp/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:14:58.394 ENGINE : gproj: '/tmp/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:14:58.394 ENGINE : gproj: '/tmp/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:14:58.394 ENGINE : gproj: '/tmp/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:14:58.395 ENGINE : Loading custom engine user config '$profile:.save/settings/ReforgerEngineSettings.conf' +13:14:58.395 ENGINE : No Enfusion settings file loaded. Continuing with defaults +13:14:58.395 RENDER : Basic screen setup: +13:14:58.395 RENDER : Back buffer width x height: 0x0 +13:14:58.395 RENDER : Back buffer format : TEXFMT_UNKNOWN (0) +13:14:58.395 RENDER : MSAA : none +13:14:58.395 RENDER : GPU_DUMMY (0xFFFF) (Enfusion dummy render) with 1 GPU detected, VRAM 128MB (fast 128MB), shared 128MB, driver version Unknown version +13:14:58.395 RENDER : Detected output devices: +13:14:58.395 RENDER : * 1 device/s connected to Dummy: +13:14:58.395 RENDER : Dummy output (Dummy device for our dummy render.), 1920x1080 (offset 0x0), 60Hz +13:14:58.395 RENDER : Concurrent frames limit 2 +13:14:58.395 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7 +13:14:58.408 PROFILING : Settings changed took: 0.025000 ms +13:14:58.411 ENGINE : Initializing inputs. +13:14:58.419 NETWORK : Initializing networking. +13:14:58.419 NETWORK : Using new GameRplScheduler. +13:14:58.419 SCRIPT : SCRIPT : Initializing scripts +13:14:58.419 SCRIPT : SCRIPT : ScriptProjectManager init +13:14:58.419 PROFILING : ScriptProjectManager init took: 0.009000 ms +13:14:58.440 PROFILING : Initializing scripts took: 20.561000 ms +13:14:58.440 BACKEND : Backend Services are disabled. +13:14:58.440 ENGINE : Enfusion engine successfully created. +13:14:58.442 GUI : Using default language (en_us) +13:14:58.442 GUI : Loading 'en_us' localization file. +13:14:58.442 INIT : INIT : Loading StringTable +13:14:58.463 PROFILING : Loading StringTable took: 20.762000 ms +13:14:58.463 SCRIPT : SCRIPT : Compiling GameLib scripts +13:14:58.496 SCRIPT : Module: GameLib; loaded 465x files; 607x classes; used 654K of static memory; defines: "PLATFORM_LINUX,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 4507af04 +13:14:58.496 PROFILING : Compiling GameLib scripts took: 33.527000 ms +13:14:58.496 SCRIPT : SCRIPT : Compiling Game scripts +13:14:59.284 SCRIPT : Compiling Game scripts +13:14:59.284 SCRIPT (W): @"scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:14:59.284 SCRIPT (W): @"scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:14:59.510 SCRIPT (W): @"scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:14:59.536 SCRIPT (W): @"scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:14:59.624 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:14:59.624 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:14:59.624 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:14:59.624 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:14:59.706 SCRIPT (W): @"scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:14:59.706 SCRIPT (W): @"scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:14:59.707 SCRIPT (W): @"scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:14:59.744 SCRIPT (W): @"scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:14:59.744 SCRIPT (W): @"scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:14:59.799 SCRIPT (W): @"scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:14:59.906 SCRIPT : Module: Game; loaded 5660x files; 11004x classes; used 25508K 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"; CRC32: 931a2d4d +13:14:59.922 PROFILING : Compiling Game scripts took: 1425.231000 ms +13:14:59.922 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:14:59.943 ENGINE : Game successfully created. +13:15:00.028 PLATFORM : Save data from container 'settings' have been loaded +13:15:00.127 PLATFORM : Save data from container 'sessions' have been loaded +13:15:00.127 PLATFORM : System language differs from the saved one - using new language {new: 'en_us'; old: ''} +13:15:00.127 PLATFORM : Save data transaction to 'settings' started. +13:15:00.127 NETWORK : Starting local multiplayer server using command line args. +13:15:00.127 RESOURCES : GetResourceObject @"{C1E20667DCE324ED}Missions/ERR_Everon.conf" +13:15:00.127 DEFAULT : Config load @"{C1E20667DCE324ED}Missions/ERR_Everon.conf" +13:15:00.127 RESOURCES (E): Wrong GUID/name for resource @"{B6C516F86302C679}Worlds/ERR_Everon.ent" in property "World" +13:15:00.226 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{C1E20667DCE324ED}Missions/ERR_Everon.conf'. +13:15:00.227 WORLD : WORLD : Entities load 'Worlds/ERR_Everon.ent' +13:15:00.341 RESOURCES : GetResourceObject @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +13:15:00.341 WORLD : Entity prefab load @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +13:15:00.341 RESOURCES (E): Wrong GUID/name for resource @"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob" in property "Object" +13:15:00.816 WORLD : Entities load 'Worlds/ERR_Everon.ent' +13:15:00.816 WORLD : Subscene load @"{853E92315D1D9EFE}worlds/Eden/Eden.ent" +13:15:00.816 RESOURCES : GetResourceObject @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +13:15:00.816 WORLD : Entity prefab load @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +13:15:00.816 RESOURCES (E): Wrong GUID/name for resource @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" in property "AssignedMaterial" +13:15:00.963 WORLD : Entity layer load @"Worlds/ERR_Everon_Layers/default.layer" +13:15:00.963 RESOURCES (E): Wrong GUID/name for resource @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" in property "inherited-name" +13:15:00.963 WORLD (E): Unknown class 'ERR_GameMode' at offset 73(0x49) +13:15:00.963 RESOURCES (E): Wrong GUID/name for resource @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" in property "inherited-name" +13:15:00.963 RESOURCES : GetResourceObject @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" +13:15:00.963 WORLD : Entity prefab load @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" +13:15:00.963 RESOURCES (E): Wrong GUID/name for resource @"{5C67A1DDE0044806}Configs/ERR/Factions/US.conf" in property "inherited-name" +13:15:00.964 RESOURCES : GetResourceObject @"{5C67A1DDE0044806}Configs/ERR/Factions/US.conf" +13:15:00.964 DEFAULT : Config load @"{5C67A1DDE0044806}Configs/ERR/Factions/US.conf" +13:15:00.964 RESOURCES (E): Wrong GUID/name for resource @"{E4785D3AF1D043C2}Configs/ERR/Factions/MissionVehicles.conf" in property "inherited-name" +13:15:00.965 RESOURCES (E): Wrong GUID/name for resource @"{D7A5CFA62A36480D}Configs/ERR/Factions/USSR.conf" in property "inherited-name" +13:15:00.965 RESOURCES : GetResourceObject @"{D7A5CFA62A36480D}Configs/ERR/Factions/USSR.conf" +13:15:00.965 DEFAULT : Config load @"{D7A5CFA62A36480D}Configs/ERR/Factions/USSR.conf" +13:15:00.965 RESOURCES (E): Wrong GUID/name for resource @"{E4785D3AF1D043C2}Configs/ERR/Factions/MissionVehicles.conf" in property "inherited-name" +13:15:00.966 PROFILING : Entities load took: 739.507000 ms +13:15:00.967 WORLD : WORLD : Game::LoadEntities +13:15:00.967 WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" +13:15:00.968 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +13:15:00.969 WORLD : WORLD : CreateEntities +13:15:00.969 WORLD : WORLD : CreateEntities +13:15:00.969 WORLD : WORLD : NotifyBeforeEntitiesCreated +13:15:00.969 WORLD : Game::LoadEntities +13:15:00.969 WORLD : CreateEntities +13:15:00.969 WORLD : CreateEntities +13:15:00.969 WORLD : NotifyBeforeEntitiesCreated +13:15:00.969 RESOURCES : GetResourceObject '$ERR_Chat:Missions/ERR_Everon.conf' +13:15:00.969 DEFAULT : Config load '$ERR_Chat:Missions/ERR_Everon.conf' +13:15:00.969 RESOURCES (E): Wrong GUID/name for resource @"{B6C516F86302C679}Worlds/ERR_Everon.ent" in property "World" +13:15:00.969 RESOURCES : GetResourceObject '$ERR_Core:Missions/ERR_Everon_Base.conf' +13:15:00.969 DEFAULT : Config load '$ERR_Core:Missions/ERR_Everon_Base.conf' +13:15:00.969 RESOURCES (E): Wrong GUID/name for resource @"{B6C516F86302C679}Worlds/ERR_Everon.ent" in property "World" +13:15:00.970 RESOURCES : Loaded mission headers from 7 addon(s)! +13:15:00.970 PROFILING : NotifyBeforeEntitiesCreated took: 1.522000 ms +13:15:00.970 WORLD : WORLD : Wait for preloading data +13:15:02.042 PROFILING : Wait for preloading data took: 1072.274000 ms +13:15:02.105 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +13:15:02.105 PROFILING : PROFILING : Terrain load +13:15:03.298 PROFILING : Terrain load took: 1193.704000 ms +13:15:05.817 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" +13:15:05.817 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:15:05.817 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:15:07.939 ENTITY : Create entity @"ENTITY:1104061" ('StaticModelEntity') at <8831.291016 95.934265 2673.487061> +13:15:07.939 ENTITY : EntityPrefabUse @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +13:15:07.939 RESOURCES : CreateComponentData @"{904345715F67BBAC}Assets/Structures/Cultural/Calvaries/CalvaryLarge_01/CalvaryLarge_01.xob" +13:15:07.939 MATERIAL : Material load @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" +13:15:07.939 MATERIAL (E): Material file not found +13:15:07.939 MATERIAL (E): Cannot load material @"system/wbdata/PreviewWindow/TransparentMat.emat", creating default one (class MatPBRBasic) +13:15:10.631 WORLD : WORLD : NotifyBeforeEntitiesInitialized +13:15:10.631 PROFILING : NotifyBeforeEntitiesInitialized took: 0.034000 ms +13:15:10.631 WORLD : InitEntities 'world' +13:15:10.631 ENTITY : Init entity @"ENTITY:3" ('SCR_MapEntity1', SCR_MapEntity) at <6400.000000 0.000000 6400.000000> @"{E1B88C66BF6CA1F9}Prefabs/World/Game/Eden/MapEntity_Everon.et" +13:15:10.631 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default. +13:15:11.148 ENTITY : Init entity @"ENTITY:2305843009213693955" ('Factions', SCR_FactionManager) at <0.000000 0.000000 0.000000> @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" +13:15:11.148 RPL (E): Attempting to insert an entity with invalid prefab resource GUID @"{5414041A15DC4B54}". +13:15:11.149 SCRIPT (E): Virtual Machine Exception + +Reason: NULL pointer to instance. Variable 'm_OnPlayerDisconnected' + +Class: 'SCR_FactionManager' +Entity name:'Factions' id:2305843009213693955 + +Function: 'EOnInit' +Stack trace: +scripts/Game/GameMode/FactionManager/SCR_FactionManager.c:439 Function EOnInit +13:15:11.149 WORLD : WORLD : NotifyEntitiesInitialized +13:15:11.149 TERRAIN : TERRAIN : Initializing road networks... +13:15:11.151 PROFILING : Initializing road networks... took: 1.845000 ms +13:15:11.151 DEFAULT : DEFAULT : WorldVolumesCollection +13:15:11.207 PROFILING : WorldVolumesCollection took: 56.663000 ms +13:15:11.207 INIT : INIT : SoundWorldInit +13:15:11.215 PROFILING : SoundWorldInit took: 7.453000 ms +13:15:11.215 PROFILING : NotifyEntitiesInitialized took: 66.060000 ms +13:15:11.215 PROFILING : CreateEntities took: 10246.394000 ms +13:15:11.215 PROFILING : CreateEntities took: 10246.400000 ms +13:15:11.215 WORLD : WORLD : EOnActivate +13:15:11.248 PROFILING : EOnActivate took: 33.366000 ms +13:15:11.248 PROFILING : Game::LoadEntities took: 10280.968000 ms +13:15:11.365 NETWORK : Starting RPL server, listening on address 0.0.0.0:2001, fastValidation=false +13:15:11.841 DEFAULT : Entered online game state. +13:15:11.842 PROFILING : Settings changed took: 0.491000 ms +13:15:11.842 DEFAULT (W): No GameMode present in the world, using fallback logic! +13:15:11.842 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager! +13:15:11.842 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:16.854 WORLD : UpdateEntities +13:15:16.854 WORLD : Frame +13:15:16.854 DEFAULT : FPS: 29.7, frame time (avg: 33.6 ms, min: 23.4 ms, max: 96.0 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +13:15:21.854 WORLD : UpdateEntities +13:15:21.854 WORLD : Frame +13:15:21.854 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.0 ms, max: 35.2 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +13:15:26.887 WORLD : UpdateEntities +13:15:26.887 WORLD : Frame +13:15:26.887 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.4 ms, max: 34.3 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +13:15:31.920 WORLD : UpdateEntities +13:15:31.920 WORLD : Frame +13:15:31.920 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 30.8 ms, max: 36.3 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +13:15:36.954 WORLD : UpdateEntities +13:15:36.954 WORLD : Frame +13:15:36.954 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.2 ms, max: 34.3 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +13:15:41.987 WORLD : UpdateEntities +13:15:41.987 WORLD : Frame +13:15:41.987 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.4 ms, max: 34.3 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +13:15:46.987 WORLD : UpdateEntities +13:15:46.987 WORLD : Frame +13:15:46.987 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.4 ms, max: 34.2 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +13:15:52.021 WORLD : UpdateEntities +13:15:52.021 WORLD : Frame +13:15:52.021 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.3 ms, max: 34.4 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +13:15:57.053 WORLD : UpdateEntities +13:15:57.053 WORLD : Frame +13:15:57.053 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.0 ms, max: 35.3 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +13:16:02.054 WORLD : UpdateEntities +13:16:02.054 WORLD : Frame +13:16:02.054 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.5 ms, max: 34.6 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +13:16:07.087 WORLD : UpdateEntities +13:16:07.087 WORLD : Frame +13:16:07.087 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.7 ms, max: 34.6 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +13:16:12.120 WORLD : UpdateEntities +13:16:12.120 WORLD : Frame +13:16:12.120 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.4 ms, max: 34.7 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +13:16:17.121 WORLD : UpdateEntities +13:16:17.121 WORLD : Frame +13:16:17.121 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.4 ms, max: 34.4 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +13:16:22.154 WORLD : UpdateEntities +13:16:22.154 WORLD : Frame +13:16:22.154 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.4 ms, max: 33.9 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +13:16:27.187 WORLD : UpdateEntities +13:16:27.187 WORLD : Frame +13:16:27.187 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.3 ms, max: 34.0 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/logs/logs_2026-09-19_13-14-58/crash.log b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/logs/logs_2026-09-19_13-14-58/crash.log new file mode 100644 index 0000000..26eec39 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/logs/logs_2026-09-19_13-14-58/crash.log @@ -0,0 +1,20 @@ +--------------------------------------------- +Log /tmp/work/profile/logs/logs_2026-09-19_13-14-58/crash.log started at 2026-09-19 13:15:11 (2026-09-19 11:15:11 UTC) + + + +------------------------------------ +19.09 2026 13:15:11 +Virtual Machine Exception + +Reason: NULL pointer to instance. Variable 'm_OnPlayerDisconnected' + +Class: 'SCR_FactionManager' +Entity name:'Factions' id:2305843009213693955 + +Function: 'EOnInit' +Stack trace: +scripts/Game/GameMode/FactionManager/SCR_FactionManager.c:439 Function EOnInit + +Runtime mode +CLI params: profile /tmp/work/profile noBackend noSound noSplash noThrow bindIP 127.0.0.1 bindPort 2001 maxFPS 30 logStats 5000 addonsDir /tmp/source/addons addons FA804F411BDDF2C6 server {C1E20667DCE324ED}Missions/ERR_Everon.conf diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/logs/logs_2026-09-19_13-14-58/error.log b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/logs/logs_2026-09-19_13-14-58/error.log new file mode 100644 index 0000000..c97346a --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/logs/logs_2026-09-19_13-14-58/error.log @@ -0,0 +1,137 @@ +--------------------------------------------- +Log /tmp/work/profile/logs/logs_2026-09-19_13-14-58/error.log started at 2026-09-19 13:14:58 (2026-09-19 11:14:58 UTC) + +13:14:58.124 RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/chat/resourceDatabase.rdb' +13:14:58.124 RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/map/resourceDatabase.rdb' +13:14:58.124 RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/intel/resourceDatabase.rdb' +13:14:58.124 RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/ai/resourceDatabase.rdb' +13:14:58.124 RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/core/resourceDatabase.rdb' +13:14:59.284 SCRIPT : Compiling Game scripts +13:14:59.284 SCRIPT (W): @"scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:14:59.284 SCRIPT (W): @"scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:14:59.510 SCRIPT (W): @"scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:14:59.536 SCRIPT (W): @"scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:14:59.624 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:14:59.624 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:14:59.624 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:14:59.624 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:14:59.705 SCRIPT (W): @"scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:14:59.706 SCRIPT (W): @"scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:14:59.707 SCRIPT (W): @"scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:14:59.744 SCRIPT (W): @"scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:14:59.744 SCRIPT (W): @"scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:14:59.799 SCRIPT (W): @"scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:15:00.127 RESOURCES : GetResourceObject @"{C1E20667DCE324ED}Missions/ERR_Everon.conf" +13:15:00.127 DEFAULT : Config load @"{C1E20667DCE324ED}Missions/ERR_Everon.conf" +13:15:00.127 RESOURCES (E): Wrong GUID/name for resource @"{B6C516F86302C679}Worlds/ERR_Everon.ent" in property "World" +13:15:00.341 RESOURCES : GetResourceObject @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +13:15:00.341 WORLD : Entity prefab load @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +13:15:00.341 RESOURCES (E): Wrong GUID/name for resource @"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob" in property "Object" +13:15:00.816 WORLD : Entities load 'Worlds/ERR_Everon.ent' +13:15:00.816 WORLD : Subscene load @"{853E92315D1D9EFE}worlds/Eden/Eden.ent" +13:15:00.816 RESOURCES : GetResourceObject @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +13:15:00.816 WORLD : Entity prefab load @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +13:15:00.816 RESOURCES (E): Wrong GUID/name for resource @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" in property "AssignedMaterial" +13:15:00.963 WORLD : Entity layer load @"Worlds/ERR_Everon_Layers/default.layer" +13:15:00.963 RESOURCES (E): Wrong GUID/name for resource @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" in property "inherited-name" +13:15:00.963 WORLD (E): Unknown class 'ERR_GameMode' at offset 73(0x49) +13:15:00.963 RESOURCES (E): Wrong GUID/name for resource @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" in property "inherited-name" +13:15:00.963 RESOURCES : GetResourceObject @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" +13:15:00.963 WORLD : Entity prefab load @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" +13:15:00.963 RESOURCES (E): Wrong GUID/name for resource @"{5C67A1DDE0044806}Configs/ERR/Factions/US.conf" in property "inherited-name" +13:15:00.964 RESOURCES : GetResourceObject @"{5C67A1DDE0044806}Configs/ERR/Factions/US.conf" +13:15:00.964 DEFAULT : Config load @"{5C67A1DDE0044806}Configs/ERR/Factions/US.conf" +13:15:00.964 RESOURCES (E): Wrong GUID/name for resource @"{E4785D3AF1D043C2}Configs/ERR/Factions/MissionVehicles.conf" in property "inherited-name" +13:15:00.965 RESOURCES (E): Wrong GUID/name for resource @"{D7A5CFA62A36480D}Configs/ERR/Factions/USSR.conf" in property "inherited-name" +13:15:00.965 RESOURCES : GetResourceObject @"{D7A5CFA62A36480D}Configs/ERR/Factions/USSR.conf" +13:15:00.965 DEFAULT : Config load @"{D7A5CFA62A36480D}Configs/ERR/Factions/USSR.conf" +13:15:00.965 RESOURCES (E): Wrong GUID/name for resource @"{E4785D3AF1D043C2}Configs/ERR/Factions/MissionVehicles.conf" in property "inherited-name" +13:15:00.969 WORLD : Game::LoadEntities +13:15:00.969 WORLD : CreateEntities +13:15:00.969 WORLD : CreateEntities +13:15:00.969 WORLD : NotifyBeforeEntitiesCreated +13:15:00.969 RESOURCES : GetResourceObject '$ERR_Chat:Missions/ERR_Everon.conf' +13:15:00.969 DEFAULT : Config load '$ERR_Chat:Missions/ERR_Everon.conf' +13:15:00.969 RESOURCES (E): Wrong GUID/name for resource @"{B6C516F86302C679}Worlds/ERR_Everon.ent" in property "World" +13:15:00.969 RESOURCES : GetResourceObject '$ERR_Core:Missions/ERR_Everon_Base.conf' +13:15:00.969 DEFAULT : Config load '$ERR_Core:Missions/ERR_Everon_Base.conf' +13:15:00.969 RESOURCES (E): Wrong GUID/name for resource @"{B6C516F86302C679}Worlds/ERR_Everon.ent" in property "World" +13:15:05.817 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" +13:15:05.817 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:15:05.817 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:15:07.939 ENTITY : Create entity @"ENTITY:1104061" ('StaticModelEntity') at <8831.291016 95.934265 2673.487061> +13:15:07.939 ENTITY : EntityPrefabUse @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +13:15:07.939 RESOURCES : CreateComponentData @"{904345715F67BBAC}Assets/Structures/Cultural/Calvaries/CalvaryLarge_01/CalvaryLarge_01.xob" +13:15:07.939 MATERIAL : Material load @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" +13:15:07.939 MATERIAL (E): Material file not found +13:15:07.939 MATERIAL (E): Cannot load material @"system/wbdata/PreviewWindow/TransparentMat.emat", creating default one (class MatPBRBasic) +13:15:10.631 WORLD : InitEntities 'world' +13:15:10.631 ENTITY : Init entity @"ENTITY:3" ('SCR_MapEntity1', SCR_MapEntity) at <6400.000000 0.000000 6400.000000> @"{E1B88C66BF6CA1F9}Prefabs/World/Game/Eden/MapEntity_Everon.et" +13:15:10.631 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default. +13:15:11.148 ENTITY : Init entity @"ENTITY:2305843009213693955" ('Factions', SCR_FactionManager) at <0.000000 0.000000 0.000000> @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" +13:15:11.148 RPL (E): Attempting to insert an entity with invalid prefab resource GUID @"{5414041A15DC4B54}". +13:15:11.149 SCRIPT (E): Virtual Machine Exception + +Reason: NULL pointer to instance. Variable 'm_OnPlayerDisconnected' + +Class: 'SCR_FactionManager' +Entity name:'Factions' id:2305843009213693955 + +Function: 'EOnInit' +Stack trace: +scripts/Game/GameMode/FactionManager/SCR_FactionManager.c:439 Function EOnInit +13:15:11.842 DEFAULT (W): No GameMode present in the world, using fallback logic! +13:15:11.842 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager! +13:15:11.842 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/logs/logs_2026-09-19_13-14-58/script.log b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/logs/logs_2026-09-19_13-14-58/script.log new file mode 100644 index 0000000..2bf1fd7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/logs/logs_2026-09-19_13-14-58/script.log @@ -0,0 +1,89 @@ +--------------------------------------------- +Log /tmp/work/profile/logs/logs_2026-09-19_13-14-58/script.log started at 2026-09-19 13:14:58 (2026-09-19 11:14:58 UTC) + +13:14:58.419 SCRIPT : SCRIPT : Initializing scripts +13:14:58.419 SCRIPT : SCRIPT : ScriptProjectManager init +13:14:58.463 SCRIPT : SCRIPT : Compiling GameLib scripts +13:14:58.496 SCRIPT : Module: GameLib; loaded 465x files; 607x classes; used 654K of static memory; defines: "PLATFORM_LINUX,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 4507af04 +13:14:58.496 SCRIPT : SCRIPT : Compiling Game scripts +13:14:59.284 SCRIPT : Compiling Game scripts +13:14:59.284 SCRIPT (W): @"scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:14:59.284 SCRIPT (W): @"scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:14:59.510 SCRIPT (W): @"scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:14:59.536 SCRIPT (W): @"scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:14:59.624 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:14:59.624 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:14:59.624 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:14:59.624 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:14:59.706 SCRIPT (W): @"scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:14:59.706 SCRIPT (W): @"scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:14:59.707 SCRIPT (W): @"scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:14:59.744 SCRIPT (W): @"scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:14:59.744 SCRIPT (W): @"scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:14:59.799 SCRIPT (W): @"scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:14:59.906 SCRIPT : Module: Game; loaded 5660x files; 11004x classes; used 25508K 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"; CRC32: 931a2d4d +13:15:10.631 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default. +13:15:11.149 SCRIPT (E): Virtual Machine Exception + +Reason: NULL pointer to instance. Variable 'm_OnPlayerDisconnected' + +Class: 'SCR_FactionManager' +Entity name:'Factions' id:2305843009213693955 + +Function: 'EOnInit' +Stack trace: +scripts/Game/GameMode/FactionManager/SCR_FactionManager.c:439 Function EOnInit +13:15:11.842 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager! +13:15:11.842 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +13:15:11.847 SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/profile/.save/settings/ReforgerEngineSettings.conf b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/profile/.save/settings/ReforgerEngineSettings.conf new file mode 100644 index 0000000..5aa75b0 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/profile/.save/settings/ReforgerEngineSettings.conf @@ -0,0 +1,96 @@ +EngineUserSettings { + GameProjectUserSettings GameProjectUserSettings { + } + GraphicsQualitySettings GraphicsQualitySettings { + } + GrassMaterialSettings GrassMaterialSettings { + } + InputDeviceUserSettings InputDeviceUserSettings { + GamepadProfile InputProfileGamepad "{6A66B3BA49B3DB26}" { + LeftThumbHorizontal InputProfileKey "{6A66B3BA49B3DB20}" { + Transition CurveCubicSplineFloat "{6A66B3BA49B3DB21}" { + } + } + LeftThumbVertical InputProfileKey "{6A66B3BA49B3DB23}" { + Transition CurveCubicSplineFloat "{6A66B3BA49B228E5}" { + } + } + RightThumbHorizontal InputProfileKey "{6A66B3BA49B254AB}" { + Transition CurveCubicSplineFloat "{6A66B3BA49B254A4}" { + } + } + RightThumbVertical InputProfileKey "{6A66B3BA49B2C432}" { + Transition CurveCubicSplineFloat "{6A66B3BA49AD465D}" { + } + } + LeftTrigger InputProfileKey "{6A66B3BA49AD5EA0}" { + Transition CurveCubicSplineFloat "{6A66B3BA49AD9B6F}" { + } + } + RightTrigger InputProfileKey "{6A66B3BA49AD9B6E}" { + Transition CurveCubicSplineFloat "{6A66B3BA49ADFE10}" { + } + } + } + JoystickProfile InputProfileJoystick "{6A66B3BA49ADFE13}" { + Axis00 InputProfileKey "{6A66B3BA49AC2CF5}" { + Transition CurveCubicSplineFloat "{6A66B3BA49AC7F87}" { + } + } + Axis01 InputProfileKey "{6A66B3BA49AC9E02}" { + Transition CurveCubicSplineFloat "{6A66B3BA49ACC774}" { + } + } + Axis02 InputProfileKey "{6A66B3BA49ACC775}" { + Transition CurveCubicSplineFloat "{6A66B3BA49ACF67B}" { + } + } + Axis03 InputProfileKey "{6A66B3BA49AF233F}" { + Transition CurveCubicSplineFloat "{6A66B3BA49AF66E8}" { + } + } + Axis04 InputProfileKey "{6A66B3BA49AFBED3}" { + Transition CurveCubicSplineFloat "{6A66B3BA49AFEF1C}" { + } + } + Axis05 InputProfileKey "{6A66B3BA49AE34D2}" { + Transition CurveCubicSplineFloat "{6A66B3BA49AE6934}" { + } + } + Axis06 InputProfileKey "{6A66B3BA49AE6933}" { + Transition CurveCubicSplineFloat "{6A66B3BA49AE99CD}" { + } + } + Axis07 InputProfileKey "{6A66B3BA49AEBC2D}" { + Transition CurveCubicSplineFloat "{6A66B3BA49AEC52D}" { + } + } + Axis08 InputProfileKey "{6A66B3BA49AEC514}" { + Transition CurveCubicSplineFloat "{6A66B3BA49AED910}" { + } + } + Axis09 InputProfileKey "{6A66B3BA49AEF812}" { + Transition CurveCubicSplineFloat "{6A66B3BA49A97831}" { + } + } + } + } + MaterialSystemUserSettings MaterialSystemUserSettings { + } + PostprocessUserSettings PostprocessUserSettings { + } + ResourceManagerUserSettings ResourceManagerUserSettings { + } + TerrainGenMaterialSettings TerrainGenMaterialSettings { + } + UserInterfaceSettings UserInterfaceSettings { + LanguageCode "en_us" + SystemLanguageCode "en_us" + } + VideoUserSettings VideoUserSettings { + WindowPosX -640 + WindowPosY -360 + } + WaterPoolMaterialSettings WaterPoolMaterialSettings { + } +} \ No newline at end of file diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/profile/.save/settings/ReforgerGameSettings.conf b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/profile/.save/settings/ReforgerGameSettings.conf new file mode 100644 index 0000000..c7eec71 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/profile/profile/.save/settings/ReforgerGameSettings.conf @@ -0,0 +1,2 @@ +GameUserSettings { +} \ No newline at end of file diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/result.json b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/result.json new file mode 100644 index 0000000..0208fc5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/result.json @@ -0,0 +1,119 @@ +{ + "command": [ + "bwrap", + "--unshare-net", + "--unshare-pid", + "--unshare-ipc", + "--unshare-uts", + "--die-with-parent", + "--cap-drop", + "ALL", + "--clearenv", + "--ro-bind", + "/", + "/", + "--tmpfs", + "/home", + "--tmpfs", + "/tmp", + "--tmpfs", + "/run", + "--proc", + "/proc", + "--dev", + "/dev", + "--ro-bind", + "/tmp/erri-dedicated-runtime/server", + "/tmp/runtime", + "--bind", + "/tmp/erri-dedicated-chat-20260919-1314/source", + "/tmp/source", + "--bind", + "/tmp/erri-dedicated-chat-20260919-1314", + "/tmp/work", + "--setenv", + "HOME", + "/tmp/work/home", + "--setenv", + "TMPDIR", + "/tmp/work/tmp", + "--setenv", + "XDG_CONFIG_HOME", + "/tmp/work/home/.config", + "--setenv", + "XDG_DATA_HOME", + "/tmp/work/home/.local/share", + "--setenv", + "XDG_CACHE_HOME", + "/tmp/work/home/.cache", + "--setenv", + "PATH", + "/usr/bin:/bin", + "--setenv", + "LANG", + "C.UTF-8", + "--chdir", + "/tmp/runtime", + "/usr/bin/python3", + "-c", + "import json,os,socket,sys\nstate={\"netns\":os.readlink(\"/proc/self/ns/net\"),\"interfaces\":socket.if_nameindex(),\"routes\":open(\"/proc/net/route\").read(),\"ipv6Routes\":open(\"/proc/net/ipv6_route\").read()}\nprint(\"ERR ISOLATION \"+json.dumps(state),flush=True)\nassert state[\"netns\"] != sys.argv[1], \"network namespace was not isolated\"\nassert [name for _,name in state[\"interfaces\"]] == [\"lo\"], \"non-loopback interface present\"\nassert len(state[\"routes\"].splitlines()) == 1, \"IPv4 route present\"\nassert all(line.split()[-1] == \"lo\" for line in state[\"ipv6Routes\"].splitlines()), \"non-loopback IPv6 route present\"\nif len(sys.argv)>2: os.execv(sys.argv[2],sys.argv[2:])\n", + "net:[4026531833]", + "/tmp/runtime/ArmaReforgerServer", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-addonsDir", + "/tmp/source/addons", + "-addons", + "FA804F411BDDF2C6", + "-server", + "{C1E20667DCE324ED}Missions/ERR_Everon.conf" + ], + "engine": [ + "/tmp/runtime/ArmaReforgerServer", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-addonsDir", + "/tmp/source/addons", + "-addons", + "FA804F411BDDF2C6", + "-server", + "{C1E20667DCE324ED}Missions/ERR_Everon.conf" + ], + "seconds": 90, + "route": "header", + "project": "chat", + "binarySHA256": "91fdf333ec49c266d309be358aabab4244a93a2f9cfa11853a600e026104001f", + "serverLaunched": true, + "realPlayers": 0, + "multiplayerProven": false, + "scope": "successor chat empty-server startup", + "supervisorPid": 3553742, + "startedUTC": "2026-09-19T11:14:57Z", + "timeout": true, + "exit": -15, + "finishedUTC": "2026-09-19T11:16:27Z" +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/review.json b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/review.json new file mode 100644 index 0000000..ef4e03d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/review.json @@ -0,0 +1,37 @@ +{ + "result": "failed-input-missing-resource-databases", + "scope": "Isolated native Linux Chat attempt; no successful successor compilation/preparation, clients or multiplayer proof.", + "source_files": 183, + "source_unchanged": true, + "input_resource_databases": [], + "missing_database_warnings": [ + "/tmp/source/addons/chat/resourceDatabase.rdb", + "/tmp/source/addons/map/resourceDatabase.rdb", + "/tmp/source/addons/intel/resourceDatabase.rdb", + "/tmp/source/addons/ai/resourceDatabase.rdb", + "/tmp/source/addons/core/resourceDatabase.rdb" + ], + "errors": [ + "13:15:00.127 RESOURCES (E): Wrong GUID/name for resource @\"{B6C516F86302C679}Worlds/ERR_Everon.ent\" in property \"World\"", + "13:15:00.341 RESOURCES (E): Wrong GUID/name for resource @\"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob\" in property \"Object\"", + "13:15:00.816 RESOURCES (E): Wrong GUID/name for resource @\"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat\" in property \"AssignedMaterial\"", + "13:15:00.963 RESOURCES (E): Wrong GUID/name for resource @\"{978E045E53EF36C8}Prefabs/ERR/GameMode.et\" in property \"inherited-name\"", + "13:15:00.963 WORLD (E): Unknown class 'ERR_GameMode' at offset 73(0x49)", + "13:15:00.963 RESOURCES (E): Wrong GUID/name for resource @\"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et\" in property \"inherited-name\"", + "13:15:00.963 RESOURCES (E): Wrong GUID/name for resource @\"{5C67A1DDE0044806}Configs/ERR/Factions/US.conf\" in property \"inherited-name\"", + "13:15:00.964 RESOURCES (E): Wrong GUID/name for resource @\"{E4785D3AF1D043C2}Configs/ERR/Factions/MissionVehicles.conf\" in property \"inherited-name\"", + "13:15:00.965 RESOURCES (E): Wrong GUID/name for resource @\"{D7A5CFA62A36480D}Configs/ERR/Factions/USSR.conf\" in property \"inherited-name\"", + "13:15:00.965 RESOURCES (E): Wrong GUID/name for resource @\"{E4785D3AF1D043C2}Configs/ERR/Factions/MissionVehicles.conf\" in property \"inherited-name\"", + "13:15:00.969 RESOURCES (E): Wrong GUID/name for resource @\"{B6C516F86302C679}Worlds/ERR_Everon.ent\" in property \"World\"", + "13:15:00.969 RESOURCES (E): Wrong GUID/name for resource @\"{B6C516F86302C679}Worlds/ERR_Everon.ent\" in property \"World\"", + "13:15:07.939 MATERIAL (E): Material file not found", + "13:15:07.939 MATERIAL (E): Cannot load material @\"system/wbdata/PreviewWindow/TransparentMat.emat\", creating default one (class MatPBRBasic)", + "13:15:11.148 RPL (E): Attempting to insert an entity with invalid prefab resource GUID @\"{5414041A15DC4B54}\".", + "13:15:11.149 SCRIPT (E): Virtual Machine Exception", + "13:15:11.842 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager!", + "13:15:11.842 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager!" + ], + "raw_console": "profile/logs/logs_2026-09-19_13-14-58/console.log", + "multiplayer_proven": false, + "release_qualified": false +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/runner.py b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/runner.py new file mode 100644 index 0000000..aa9095e --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/runner.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python3 +"""Bounded Linux server diagnostic: isolated network, frozen sources, no clients.""" +import argparse +import fcntl +import hashlib +import json +import os +from pathlib import Path +import shutil +import signal +import subprocess +import time + +PROBE = '''import json,os,socket,sys +state={"netns":os.readlink("/proc/self/ns/net"),"interfaces":socket.if_nameindex(),"routes":open("/proc/net/route").read(),"ipv6Routes":open("/proc/net/ipv6_route").read()} +print("ERR ISOLATION "+json.dumps(state),flush=True) +assert state["netns"] != sys.argv[1], "network namespace was not isolated" +assert [name for _,name in state["interfaces"]] == ["lo"], "non-loopback interface present" +assert len(state["routes"].splitlines()) == 1, "IPv4 route present" +assert all(line.split()[-1] == "lo" for line in state["ipv6Routes"].splitlines()), "non-loopback IPv6 route present" +if len(sys.argv)>2: os.execv(sys.argv[2],sys.argv[2:]) +''' + + +def manifest(source): + result = {} + for path in sorted(source.rglob('*')): + if path.is_symlink(): + raise ValueError('Linked source entry is not allowed: ' + str(path)) + if path.is_file(): + result[str(path.relative_to(source))] = hashlib.sha256(path.read_bytes()).hexdigest() + return result + + +def sandbox(runtime, source, run): + return ['bwrap', '--unshare-net', '--unshare-pid', '--unshare-ipc', '--unshare-uts', + '--die-with-parent', '--cap-drop', 'ALL', '--clearenv', + '--ro-bind', '/', '/', '--tmpfs', '/home', '--tmpfs', '/tmp', '--tmpfs', '/run', + '--proc', '/proc', '--dev', '/dev', '--ro-bind', str(runtime), '/tmp/runtime', + '--bind', str(source), '/tmp/source', '--bind', str(run), '/tmp/work', + '--setenv', 'HOME', '/tmp/work/home', '--setenv', 'TMPDIR', '/tmp/work/tmp', + '--setenv', 'XDG_CONFIG_HOME', '/tmp/work/home/.config', + '--setenv', 'XDG_DATA_HOME', '/tmp/work/home/.local/share', + '--setenv', 'XDG_CACHE_HOME', '/tmp/work/home/.cache', + '--setenv', 'PATH', '/usr/bin:/bin', '--setenv', 'LANG', 'C.UTF-8', + '--chdir', '/tmp/runtime'] + + +PROJECTS = { + 'core': ('2528466DE220D91C', '{AD62322D5213C440}Missions/ERR_Everon_Base.conf'), + 'chat': ('FA804F411BDDF2C6', '{C1E20667DCE324ED}Missions/ERR_Everon.conf'), +} +WORLD = '{B6C516F86302C679}Worlds/ERR_Everon.ent' +SYSTEMS = '{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf' + + +def engine_args(route, project='core'): + if route not in ('header', 'diag-world', 'vanilla-everon') or project not in PROJECTS: + raise ValueError('Unsupported diagnostic route or project') + if route == 'vanilla-everon' and project != 'core': + raise ValueError('vanilla-everon cannot be combined with --project chat') + args = ['/tmp/runtime/ArmaReforgerServer' + ('Diag' if route == 'diag-world' else ''), + '-profile', '/tmp/work/profile', '-noBackend', '-noSound', '-noSplash', '-noThrow', + '-bindIP', '127.0.0.1', '-bindPort', '2001', '-maxFPS', '30', '-logStats', '5000'] + if route == 'vanilla-everon': + return args + ['-server', 'Missions/21_GM_Eden.conf'] + addon, header = PROJECTS[project] + args += ['-addonsDir', '/tmp/source/addons', '-addons', addon] + if route == 'header': + return args + ['-server', header] + return args + ['-server', WORLD, '-worldSystemsConfig', SYSTEMS] + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--source', type=Path, required=True) + parser.add_argument('--runtime', type=Path, default=Path('/tmp/erri-dedicated-runtime/server')) + parser.add_argument('--archive', type=Path, required=True) + parser.add_argument('--route', choices=['header', 'diag-world', 'vanilla-everon'], default='header') + parser.add_argument('--project', choices=['core', 'chat'], default='core', + help='Core base (default) or Chat with all five declared successor addons') + parser.add_argument('--seconds', type=int, default=90) + args = parser.parse_args() + if args.route == 'vanilla-everon' and args.project != 'core': + parser.error('vanilla-everon cannot be combined with --project chat') + if not 1 <= args.seconds <= 110: + parser.error('Runtime bound must be 1..110 seconds (plus at most 10 seconds owned cleanup)') + source, runtime, archive = args.source.resolve(), args.runtime.resolve(), args.archive.resolve() + if not source.is_relative_to('/tmp') or not runtime.is_relative_to('/tmp') or not archive.is_relative_to('/tmp'): + parser.error('Sources, runtime and archive must be isolated /tmp paths') + if archive == source or source in archive.parents or archive in source.parents or archive == runtime or runtime in archive.parents or archive in runtime.parents: + parser.error('Source, archive and runtime must not overlap') + if archive.exists() or archive.is_symlink(): + parser.error('Archive must be new') + origin = runtime.parent / 'runtime-origin.json' + if not origin.is_file() or json.loads(origin.read_text()).get('app_id') != 1874900: + parser.error('Stable private runtime origin missing') + binary = runtime / Path(engine_args(args.route, args.project)[0]).name + with binary.open('rb') as stream: + elf = stream.read(20) + if binary.is_symlink() or len(elf) != 20 or elf[:6] != b'\x7fELF\x02\x01' or int.from_bytes(elf[18:20], 'little') != 62: + parser.error('Expected real native x86-64 ELF server') + archive.mkdir(mode=0o700, parents=True) + (archive / 'runner.py').write_bytes(Path(__file__).read_bytes()) + for child in ['home', 'profile', 'tmp']: + (archive / child).mkdir() + # Reject links before copytree follows them into the isolated source snapshot. + manifest(source) + frozen = archive / 'source' + shutil.copytree(source, frozen, ignore=shutil.ignore_patterns('.git', '__pycache__', 'evidence', 'generated')) + initial = manifest(frozen) + (archive / 'source-manifest.json').write_text(json.dumps(initial, indent=2)+'\n') + base = sandbox(runtime, frozen, archive) + netns = os.readlink('/proc/self/ns/net') + check = base + ['/usr/bin/python3', '-c', PROBE, netns] + preflight = subprocess.run(check, capture_output=True, text=True, timeout=15) + (archive / 'isolation-preflight.json').write_text(json.dumps({'command':check,'exit':preflight.returncode,'stdout':preflight.stdout,'stderr':preflight.stderr}, indent=2)+'\n') + if preflight.returncode: + print('Isolation refused; no server launched:', archive) + return 2 + command = base + ['/usr/bin/python3', '-c', PROBE, netns] + engine_args(args.route, args.project) + record = {'command': command, 'engine': engine_args(args.route, args.project), 'seconds':args.seconds, + 'route': args.route, 'project': None if args.route == 'vanilla-everon' else args.project, + 'binarySHA256':hashlib.sha256(binary.read_bytes()).hexdigest(), + 'serverLaunched':False,'realPlayers':0,'multiplayerProven':False, + 'scope':'vanilla Everon control; no successor loaded' if args.route == 'vanilla-everon' else f'successor {args.project} empty-server startup'} + (archive / 'command.json').write_text(json.dumps(record, indent=2)+'\n') + lock_fd = os.open('/tmp/erri-dedicated-native-diagnostic.lock', os.O_WRONLY | os.O_CREAT | os.O_NOFOLLOW, 0o600) + with os.fdopen(lock_fd, 'a') as lock: + fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + with (archive / 'stdout.log').open('wb') as log: + process = subprocess.Popen(command, stdout=log, stderr=subprocess.STDOUT, start_new_session=True) + record['serverLaunched'] = True + record['supervisorPid'] = process.pid + record['startedUTC'] = time.strftime('%Y-%m-%dT%H:%M:%SZ',time.gmtime()) + try: + record['exit'] = process.wait(timeout=args.seconds) + record['timeout'] = False + except subprocess.TimeoutExpired: + record['timeout'] = True + finally: + if process.poll() is None: + os.killpg(process.pid, signal.SIGTERM) + try: process.wait(timeout=5) + except subprocess.TimeoutExpired: + os.killpg(process.pid, signal.SIGKILL) + process.wait(timeout=5) + record['exit'] = process.returncode + record['finishedUTC'] = time.strftime('%Y-%m-%dT%H:%M:%SZ',time.gmtime()) + (archive / 'result.json').write_text(json.dumps(record, indent=2)+'\n') + (archive / 'source-manifest-after.json').write_text(json.dumps(manifest(frozen), indent=2)+'\n') + print('Diagnostic archived; inspect actual compilation/header/systems/errors:',archive) + return 0 + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source-manifest-after.json b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source-manifest-after.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source-manifest-after.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source-manifest.json b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source-manifest.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source-manifest.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Prefabs/ERR/MortarCrew.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Prefabs/ERR/MortarCrew.et new file mode 100644 index 0000000..1159fe9 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Prefabs/ERR/MortarCrew.et @@ -0,0 +1,8 @@ +SCR_AIGroup : "{8DE0C0830FE0C33D}Prefabs/Groups/OPFOR/Group_USSR_Base.et" { + m_aUnitPrefabSlots { + "{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et" + "{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et" + "{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et" + "{612F43A4D5AE765F}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_RTO.et" + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Prefabs/ERR/MortarCrew.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Prefabs/ERR/MortarCrew.et.meta new file mode 100644 index 0000000..adaeb61 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Prefabs/ERR/MortarCrew.et.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{B84C05941C4C81B8}Prefabs/ERR/MortarCrew.et" + Configurations { + EntityTemplateResourceClass PC {} + EntityTemplateResourceClass HEADLESS {} + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c new file mode 100644 index 0000000..3c4953a --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c @@ -0,0 +1,436 @@ +// Prepared control mechanism only. No global hooks, force allocation or HQ selection. +enum ERR_AircraftFlightState +{ + IDLE, HOOKS, STARTING, POSITIVE, NEGATIVE, CLIMB, LANDING, SHUTDOWN, + COMPLETE, CANCELLED, FAILED, RELINQUISHED, TRANSLATING +} +class ERR_AircraftFlightRules +{ + static bool Terminal(int state) { return state >= ERR_AircraftFlightState.COMPLETE && state <= ERR_AircraftFlightState.RELINQUISHED; } + static bool Deadline(float now, float deadline) { return now >= 0 && deadline > now && deadline - now <= 240000; } + static bool Envelope(float height, float drift, float upright) + { + return height >= -3 && height <= 18 && drift >= 0 && drift < 8 && upright >= 0.85; + } + static bool Hover(float height, float speed, float vertical, float upright) + { + return height >= 7 && height <= 9 && speed >= 0 && speed < 1.5 && Math.AbsFloat(vertical) < 0.5 && upright > 0.98; + } + static bool Landed(bool contact, float height, float speed, float angular, float upright) + { + return contact && height > -1 && height < 1 && speed >= 0 && speed < 0.5 && angular >= 0 && angular < 0.1 && upright > 0.98; + } + static float Vertical(float height, bool landing) + { + float target = 8; if (landing) target = 0; + return Math.Clamp((target - height) * 0.6, -0.8, 1.5); + } + // Ground aborts may stop the engine; airborne cancellation retains the flight lease. + static int CancelAction(bool ownershipValid, bool landed, bool engineOn) + { + if (!ownershipValid) return 0; + if (!landed) return 1; + if (engineOn) return 2; + return 3; + } +} + +// Bounded migration of the separately proven native-autohover translation. +class ERR_AircraftTranslationRules +{ + static bool Target(vector home, vector target) + { + float distance = vector.DistanceXZ(home, target); + return distance >= 0 && distance <= 5; + } + static bool Reachable(float distance) { return distance >= 0 && distance <= 4.05; } + static vector Demand(vector target, vector position, vector velocity) + { + vector error = target - position; error[1] = 0; + vector desired = error * 0.25; + float speed = desired.Length(); + if (speed > 0.5) desired = desired * (0.5 / speed); + velocity[1] = 0; + vector demand = (desired - velocity) * 0.05; + float magnitude = demand.Length(); + if (magnitude > 0.03) demand = demand * (0.03 / magnitude); + return demand; + } + static bool Held(bool contact, float height, float speed, float vertical, float upright, float horizontalSpeed, float targetError, float displacement, float distance) + { + if (contact || !ERR_AircraftFlightRules.Hover(height, speed, vertical, upright)) return false; + if (!(horizontalSpeed >= 0 && horizontalSpeed < 0.25 && targetError >= 0 && targetError <= 0.75)) return false; + return Reachable(distance) && displacement >= Math.Max(0, distance - 0.75); + } +} + +class ERR_AircraftFlight +{ + protected static ref map s_Owners = new map(); + protected ERR_GameMode m_Mode; + protected Vehicle m_Aircraft; + protected SCR_AIGroup m_Group; + protected IEntity m_Pilot; + protected PilotCompartmentSlot m_Seat; + protected HelicopterControllerComponent m_Controller; + protected VehicleHelicopterSimulation m_Simulation; + protected CharacterControllerComponent m_Character; + protected CharacterInputContext m_Input; + protected AIAgent m_Agent; + protected ActionManager m_Actions; + protected FuelManagerComponent m_Fuel; + protected ref ERR_AircraftFlightEnvelope m_Qualification; + protected ERR_AircraftFlightState m_State; + protected int m_Token; + protected vector m_Home; + protected float m_Heading; + protected float m_Deadline; + protected float m_StageDeadline; + protected float m_Stable = -1; + protected float m_LastTick = -1; + protected float m_LastControl = -1; + protected float m_InitialFuel; + protected float m_Collective = -0.8; + protected int m_ActionUpdates; + protected int m_HelicopterUpdates; + protected int m_GateUpdates; + protected int m_OriginalLOD; + protected CollectiveMode m_OriginalMode; + protected bool m_OriginalAutohover; + protected bool m_SettingsOwned; + protected bool m_Readback = true; + protected bool m_Cancelled; + protected bool m_StartAttempted; + protected string m_Reason; + protected bool m_TranslationRequested; + protected bool m_TranslationStarted; + protected bool m_TranslationProven; + protected vector m_TranslationTarget; + protected vector m_TranslationOrigin; + protected float m_TranslationDistance; + protected int m_TranslationUpdates; + + ERR_AircraftFlightState State() { return m_State; } + string Reason() { return m_Reason; } + int OrderToken() { return m_Token; } + bool Finished() { return ERR_AircraftFlightRules.Terminal(m_State); } + Vehicle Aircraft() { return m_Aircraft; } + bool TranslationStarted() { return m_TranslationStarted; } + bool TranslationProven() { return m_TranslationProven; } + vector TranslationTarget() { return m_TranslationTarget; } + vector TranslationOrigin() { return m_TranslationOrigin; } + int TranslationUpdates() { return m_TranslationUpdates; } + // Absolute horizontal target fixed before takeoff. Its altitude is the existing + // eight-metre hover, not a caller-supplied route or a new qualification home. + bool StartTranslation(ERR_GameMode mode, Vehicle aircraft, SCR_AIGroup group, IEntity pilot, PilotCompartmentSlot seat, ERR_AircraftFlightEnvelope qualification, int token, float deadline, vector target) + { + if (m_StartAttempted || m_TranslationRequested || !qualification || !ERR_AircraftTranslationRules.Target(qualification.Home(), target)) return false; + m_TranslationRequested = true; m_TranslationTarget = target; + vector home = qualification.Home(); m_TranslationTarget[1] = home[1] + 8; + return Start(mode, aircraft, group, pilot, seat, qualification, token, deadline); + } + protected float Now() + { + if (!GetGame() || !GetGame().GetWorld()) return -1; + return GetGame().GetWorld().GetWorldTime(); + } + protected bool NoPlayers() + { + if (!GetGame() || !GetGame().GetPlayerManager()) return false; + if (!m_Group || m_Group.GetPlayerCount(true) > 0 || ERR_Actors.Player(m_Pilot)) return false; + array players = {}; GetGame().GetPlayerManager().GetPlayers(players); + foreach (int id : players) + { + IEntity actor = GetGame().GetPlayerManager().GetPlayerControlledEntity(id); + if (actor && (actor == m_Pilot || CompartmentAccessComponent.GetVehicleIn(actor) == m_Aircraft)) return false; + } + return true; + } + protected bool Owns() + { + if (!GetGame() || !GetGame().GetWorld() || !GetGame().GetPlayerManager()) return false; + if (!Replication.IsServer() || !m_Mode || m_Mode != ERR_GameMode.Get() || !m_Mode.Active() || !m_Aircraft || !m_Group || !m_Pilot) return false; + if (!m_Controller || m_Controller.GetOwner() != m_Aircraft || !m_Seat || m_Controller.GetPilotCompartmentSlot() != m_Seat || m_Seat.GetOccupant() != m_Pilot) return false; + if (CompartmentAccessComponent.GetVehicleIn(m_Pilot) != m_Aircraft || ERR_Actors.Group(m_Pilot) != m_Group || m_Group.GetFaction() != m_Mode.EnemyFaction()) return false; + if (SCR_FactionManager.SGetFaction(m_Aircraft) != m_Mode.EnemyFaction() || !NoPlayers()) return false; + return m_Agent && m_Agent.GetControlledEntity() == m_Pilot && m_Agent.GetActionManager() == m_Actions && m_Actions && m_Actions != GetGame().GetInputManager(); + } + protected bool Healthy() + { + if (!ERR_Actors.Alive(m_Aircraft) || !ERR_Actors.CanFight(m_Pilot) || !m_Simulation || !m_Simulation.IsValid() || !m_Fuel || !m_Fuel.HasFuel()) return false; + SCR_VehicleDamageManagerComponent damage = SCR_VehicleDamageManagerComponent.Cast(m_Aircraft.FindComponent(SCR_VehicleDamageManagerComponent)); + if (!damage || !damage.GetEngineFunctional() || damage.GetMovementDamage() >= 1 || damage.IsOnFire() || m_Simulation.RotorCount() != 2) return false; + for (int rotor = 0; rotor < 2; rotor++) if (m_Simulation.RotorGetState(rotor) == RotorState.DESTROYED) return false; + return true; + } + protected bool Grounded() + { + if (!GetGame() || !GetGame().GetWorld() || !m_Aircraft || !m_Simulation) return false; + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + return ERR_AircraftFlightRules.Landed(m_Simulation.HasAnyGroundContact(), transform[3][1] - m_Home[1], m_Simulation.GetVelocity().Length(), m_Simulation.GetAngularVelocity().Length(), transform[1][1]); + } + // Single use. A future HQ owner supplies its immutable unique order token and + // retains this instance, calling Tick and the two scoped callbacks until terminal. + bool Start(ERR_GameMode mode, Vehicle aircraft, SCR_AIGroup group, IEntity pilot, PilotCompartmentSlot seat, ERR_AircraftFlightEnvelope qualification, int token, float deadline) + { + if (m_StartAttempted || m_State != ERR_AircraftFlightState.IDLE || m_Token != 0 || !Replication.IsServer() || !GetGame() || !qualification || !aircraft || !pilot || !group || !seat) return false; + m_StartAttempted = true; + float now = Now(); + if (!ERR_AircraftFlightRules.Deadline(now, deadline) || token <= 0 || s_Owners.Get(aircraft)) return false; + m_Mode = mode; m_Aircraft = aircraft; m_Group = group; m_Pilot = pilot; m_Seat = seat; + m_Controller = HelicopterControllerComponent.Cast(aircraft.FindComponent(HelicopterControllerComponent)); + if (m_Controller) m_Simulation = m_Controller.GetSimulation(); + m_Character = CharacterControllerComponent.Cast(pilot.FindComponent(CharacterControllerComponent)); + if (m_Character) m_Input = m_Character.GetInputContext(); + AIControlComponent control = AIControlComponent.Cast(pilot.FindComponent(AIControlComponent)); + if (control) m_Agent = control.GetControlAIAgent(); + if (m_Agent) m_Actions = m_Agent.GetActionManager(); + m_Fuel = FuelManagerComponent.Cast(aircraft.FindComponent(FuelManagerComponent)); + if (!Owns() || !Healthy() || !m_Input || m_Controller.IsEngineOn() || !ERR_CasualtyLoadingRules.AircraftReady(aircraft)) return false; + Physics physics = aircraft.GetPhysics(); + if (!physics || !physics.IsDynamic() || !physics.IsActive() || !m_Simulation.HasAnyGroundContact()) return false; + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + if (!signals || signals.FindSignal("MainRotorCollective") < 0) return false; + if (!qualification.Claim(mode, aircraft, pilot, token)) return false; + m_Qualification = qualification; m_Home = qualification.Home(); m_Token = token; m_Deadline = deadline; + m_Heading = aircraft.GetYawPitchRoll()[0]; m_InitialFuel = m_Fuel.GetTotalFuel(); + m_OriginalMode = m_Controller.GetCollectiveMode(); m_OriginalAutohover = m_Controller.GetAutohoverEnabled(); m_OriginalLOD = m_Agent.GetPermanentLOD(); + m_SettingsOwned = true; s_Owners.Set(aircraft, this); + m_Agent.SetPermanentLOD(0); m_Agent.ActivateAI(); + m_Controller.SetAutohoverEnabled(false); + if (m_Controller.GetAutohoverEnabled()) { Fail("native autohover disable refused"); return false; } + m_State = ERR_AircraftFlightState.HOOKS; m_StageDeadline = Math.Min(deadline, now + 5000); + PrintFormat("ERR AIRCRAFT CONTROL: token=%1 bound qualified finite aircraft; no HQ dispatch installed", token); + return true; + } + protected bool Lease() + { + return m_Token > 0 && !Finished() && m_State != ERR_AircraftFlightState.IDLE && s_Owners.Get(m_Aircraft) == this && m_Qualification && m_Qualification.ClaimedBy(m_Aircraft, m_Pilot, m_Token); + } + // Every input entry checks the immutable deadlines even if owner Tick stalls. + protected bool ControlLease() + { + if (!Lease()) return false; + if (!Owns()) { Relinquish("ownership or world unavailable at control callback"); return false; } + float now = Now(); + if (now < 0 || now >= m_Deadline || now >= m_StageDeadline) { Fail("control callback reached bounded flight deadline"); return false; } + if (!Healthy() || !m_Readback) { Fail("flight capability or input readback lost"); return false; } + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + if (!ERR_AircraftFlightRules.Envelope(transform[3][1] - m_Home[1], vector.DistanceXZ(transform[3], m_Home), transform[1][1])) { Fail("control callback exceeded qualified flight envelope"); return false; } + return true; + } + // Must be called after the native helicopter's OnPrepareControls. + void PrepareHelicopter(HelicopterControllerComponent controller) + { + if (!Lease() || controller != m_Controller) return; + if (!ControlLease()) return; + controller.SetCollectiveMode(CollectiveMode.Direct); m_HelicopterUpdates++; + } + protected bool Pair(string positive, string negative, float demand) + { + float a = Math.Clamp(demand, 0, 1), b = Math.Clamp(-demand, 0, 1); + m_Actions.SetActionValue(positive, a); m_Actions.SetActionValue(negative, b); + return Math.AbsFloat(m_Actions.GetActionValue(positive) - a) < 0.001 && Math.AbsFloat(m_Actions.GetActionValue(negative) - b) < 0.001; + } + // Must be called on the exact AI actor manager before native OnPrepareControls. + void PrepareActions(CharacterControllerComponent controller, IEntity owner, ActionManager actions, float dt) + { + if (!Lease() || controller != m_Character || owner != m_Pilot || actions != m_Actions) return; + if (!ControlLease()) return; + if (!m_Readback || dt <= 0 || dt > 0.2) return; + if (!actions.IsContextActive("HelicopterContext")) actions.ActivateContext("HelicopterContext", 1); + if (!actions.IsContextActive("HelicopterContext")) { m_Readback = false; return; } + float collective, torque, forward, aside; + if (m_State == ERR_AircraftFlightState.POSITIVE) collective = 0.05; + else if (m_State == ERR_AircraftFlightState.NEGATIVE) collective = -0.05; + else if (m_State == ERR_AircraftFlightState.SHUTDOWN) collective = -1; + else if (m_State == ERR_AircraftFlightState.CLIMB || m_State == ERR_AircraftFlightState.LANDING || m_State == ERR_AircraftFlightState.TRANSLATING) + { + if (!m_Controller.GetAutohoverEnabled()) { Fail("native autohover lost while flying"); return; } + float height = m_Aircraft.GetOrigin()[1] - m_Home[1]; + float error = ERR_AircraftFlightRules.Vertical(height, m_State == ERR_AircraftFlightState.LANDING) - m_Simulation.GetVelocity()[1]; + m_Collective = Math.Clamp(m_Collective + error * dt * 0.12, -0.95, 0.8); + collective = Math.Clamp(m_Collective + error * 0.12, -1, 0.9); + float headingError = m_Heading - m_Aircraft.GetYawPitchRoll()[0]; + while (headingError > 180) headingError -= 360; + while (headingError < -180) headingError += 360; + torque = Math.Clamp(headingError * 0.01 - m_Simulation.GetAngularVelocityLocal()[1] * 0.3, -0.3, 0.3); + if (m_State == ERR_AircraftFlightState.TRANSLATING) + { + if (!m_TranslationStarted || !ERR_AircraftTranslationRules.Target(m_Home, m_TranslationTarget)) { Fail("immutable translation target unavailable"); return; } + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + vector demand = ERR_AircraftTranslationRules.Demand(m_TranslationTarget, transform[3], m_Simulation.GetVelocity()); + forward = Math.Clamp(vector.Dot(demand, transform[2]), -0.03, 0.03); + aside = Math.Clamp(vector.Dot(demand, transform[0]), -0.03, 0.03); + m_TranslationUpdates++; + } + if (m_State == ERR_AircraftFlightState.LANDING && Grounded()) collective = -1; + } + bool a = Pair("HelicopterCollectiveIncrease", "HelicopterCollectiveDecrease", collective); + bool b = Pair("HelicopterCyclicForward", "HelicopterCyclicBack", forward); + bool c = Pair("HelicopterCyclicRight", "HelicopterCyclicLeft", aside); + bool d = Pair("HelicopterAntiTorqueRight", "HelicopterAntiTorqueLeft", torque); + m_Readback = a && b && c && d; m_ActionUpdates++; m_LastControl = Now(); + } + protected void Release(bool restore) + { + // No writes after capture/group/seat change, including apparently harmless zeros. + if (m_SettingsOwned && Owns()) + { + Pair("HelicopterCollectiveIncrease", "HelicopterCollectiveDecrease", 0); + Pair("HelicopterCyclicForward", "HelicopterCyclicBack", 0); + Pair("HelicopterCyclicRight", "HelicopterCyclicLeft", 0); + Pair("HelicopterAntiTorqueRight", "HelicopterAntiTorqueLeft", 0); + // Restore native modes only after verified ground completion. Airborne + // failure leaves native autohover enabled rather than disabling it midair. + if (restore && Grounded()) + { + m_Controller.SetAutohoverEnabled(m_OriginalAutohover); + m_Controller.SetCollectiveMode(m_OriginalMode); + m_Agent.SetPermanentLOD(m_OriginalLOD); + } + } + if (m_Aircraft && s_Owners && s_Owners.Get(m_Aircraft) == this) s_Owners.Remove(m_Aircraft); + m_SettingsOwned = false; + } + protected void RecordState() + { + string detail = string.Format("token=%1 state=%2 reason=%3; physical availability remains with the allocating owner", m_Token, m_State, m_Reason); + Print("ERR AIRCRAFT CONTROL: " + detail); + if (m_Mode && m_Mode == ERR_GameMode.Get()) ERR_HQ.Event("AIRCRAFT CONTROL", detail); + } + protected void Relinquish(string reason) + { + if (Finished()) return; + m_Reason = reason; m_State = ERR_AircraftFlightState.RELINQUISHED; Release(false); RecordState(); + } + protected void Fail(string reason) + { + if (Finished()) return; + m_Reason = reason; m_State = ERR_AircraftFlightState.FAILED; Release(true); RecordState(); + } + protected bool Landing(float now) + { + m_Controller.SetAutohoverEnabled(true); + if (!m_Controller.GetAutohoverEnabled()) { Fail("native autohover enable refused"); return false; } + m_State = ERR_AircraftFlightState.LANDING; m_Stable = -1; + m_StageDeadline = Math.Min(m_Deadline, now + 65000); + return true; + } + protected void Shutdown(float now) + { + m_Controller.StopEngine(false); + m_State = ERR_AircraftFlightState.SHUTDOWN; m_StageDeadline = Math.Min(m_Deadline, now + 15000); m_Stable = -1; + } + void Cancel(string reason) + { + if (!Lease()) return; + if (m_Cancelled) return; // repeated invalid reports cannot extend a landing deadline + m_Cancelled = true; m_Reason = reason; RecordState(); + // After flight begins, even a current contact sample must pass the normal + // two-second landing observation; cancellation cannot shortcut touchdown. + bool preflightGround = m_State < ERR_AircraftFlightState.CLIMB && Grounded(); + int action = ERR_AircraftFlightRules.CancelAction(Owns(), preflightGround, m_Controller && m_Controller.IsEngineOn()); + if (action == 0) { Relinquish(reason); return; } + if (!Healthy()) { Fail(reason + "; flight capability lost"); return; } + if (action == 3) { m_State = ERR_AircraftFlightState.CANCELLED; Release(true); RecordState(); return; } + float now = Now(); + if (action == 2) { Shutdown(now); return; } + if (m_State != ERR_AircraftFlightState.LANDING && m_State != ERR_AircraftFlightState.SHUTDOWN) Landing(now); + } + protected bool BeginTranslation(float now, vector position) + { + if (!m_TranslationRequested || m_TranslationStarted || m_State != ERR_AircraftFlightState.CLIMB) { Cancel("translation stage ownership refused"); return false; } + float distance = vector.DistanceXZ(position, m_TranslationTarget); + if (!ERR_AircraftTranslationRules.Target(m_Home, m_TranslationTarget) || !ERR_AircraftTranslationRules.Reachable(distance)) { Cancel("fixed target beyond qualified four-metre translation after hover drift"); return false; } + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + if (!signals || signals.FindSignal("MainRotorCyclicForward") < 0 || signals.FindSignal("MainRotorCyclicAside") < 0 || !m_Controller.GetAutohoverEnabled()) { Cancel("native autohover cyclic signals unavailable"); return false; } + m_TranslationOrigin = position; m_TranslationDistance = distance; + m_TranslationStarted = true; m_State = ERR_AircraftFlightState.TRANSLATING; + m_Stable = -1; m_StageDeadline = Math.Min(m_Deadline, now + 45000); + PrintFormat("ERR AIRCRAFT TRANSLATION: token=%1 origin=%2 immutableTarget=%3 home=%4 distance=%5 deadline=%6", m_Token, position, m_TranslationTarget, m_Home, distance, m_StageDeadline); + return true; + } + protected void CheckTranslation(float now, vector position, float height, float speed, float upright) + { + if (!m_TranslationStarted || !m_Controller.GetAutohoverEnabled() || !ERR_AircraftTranslationRules.Target(m_Home, m_TranslationTarget)) { Cancel("translation ownership or autohover lost"); return; } + vector velocity = m_Simulation.GetVelocity(); vector horizontal = velocity; horizontal[1] = 0; + bool held = m_TranslationUpdates >= 3 && ERR_AircraftTranslationRules.Held(m_Simulation.HasAnyGroundContact(), height, speed, velocity[1], upright, horizontal.Length(), vector.DistanceXZ(position, m_TranslationTarget), vector.DistanceXZ(position, m_TranslationOrigin), m_TranslationDistance); + if (!held) { m_Stable = -1; return; } + if (m_Stable < 0) m_Stable = now; + if (now - m_Stable < 5000) return; + m_TranslationProven = true; + PrintFormat("ERR AIRCRAFT TRANSLATION HELD: token=%1 targetError=%2 displacement=%3 updates=%4", m_Token, vector.DistanceXZ(position, m_TranslationTarget), vector.DistanceXZ(position, m_TranslationOrigin), m_TranslationUpdates); + Landing(now); + } + // The owner continues ticking after Cancel until Finished, including landing. + void Tick() + { + if (!Lease()) return; + float now = Now(); + if (!Owns()) { Relinquish("ownership or mission changed"); return; } + if (!Healthy()) { Fail("flight capability lost"); return; } + if (!m_Readback) { Fail("native action readback failed"); return; } + if (now >= m_Deadline || now >= m_StageDeadline || now < 0) { Fail("bounded flight stage expired"); return; } + if (m_LastTick >= 0 && (now < m_LastTick || now - m_LastTick > 1500)) m_Stable = -1; + m_LastTick = now; + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + float height = transform[3][1] - m_Home[1], speed = m_Simulation.GetVelocity().Length(); + if (!ERR_AircraftFlightRules.Envelope(height, vector.DistanceXZ(transform[3], m_Home), transform[1][1])) { Fail("qualified flight envelope exceeded"); return; } + if (m_State == ERR_AircraftFlightState.HOOKS) + { + if (m_ActionUpdates < 3 || m_HelicopterUpdates < 3) return; + if (m_Controller.GetCollectiveMode() != CollectiveMode.Direct || m_Input.GetVehicleCollective() != 0 || m_Controller.IsEngineOn()) { Fail("native initial control state refused"); return; } + m_Controller.StartEngine(); m_State = ERR_AircraftFlightState.STARTING; m_StageDeadline = Math.Min(m_Deadline, now + 65000); return; + } + if (m_LastControl < 0 || now - m_LastControl > 1000) { Fail("pilot callback stopped"); return; } + if (m_State == ERR_AircraftFlightState.STARTING) + { + float rpm = m_Simulation.RotorGetRPMTarget(0); + if (!m_Controller.IsEngineOn() || rpm <= 0 || m_Simulation.RotorGetRPM(0) < rpm * 0.9 || m_Fuel.GetTotalFuel() >= m_InitialFuel) return; + m_State = ERR_AircraftFlightState.POSITIVE; m_StageDeadline = Math.Min(m_Deadline, now + 3000); m_GateUpdates = m_ActionUpdates; m_Stable = -1; return; + } + if (m_State != ERR_AircraftFlightState.SHUTDOWN && !m_Controller.IsEngineOn()) { Fail("running engine lost"); return; } + if (m_State == ERR_AircraftFlightState.POSITIVE || m_State == ERR_AircraftFlightState.NEGATIVE) + { + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + int index = -1; if (signals) index = signals.FindSignal("MainRotorCollective"); + if (index < 0 || m_Controller.GetCollectiveMode() != CollectiveMode.Direct || m_Controller.GetAutohoverEnabled()) { Fail("native collective proof unavailable"); return; } + float expected = 0.05; if (m_State == ERR_AircraftFlightState.NEGATIVE) expected = -0.05; + bool matched = m_ActionUpdates >= m_GateUpdates + 3 && Math.AbsFloat(signals.GetSignalValue(index) - expected) <= 0.01 && Math.AbsFloat(m_Input.GetVehicleCollective() - expected) <= 0.01; + if (!matched) { m_Stable = -1; return; } + if (m_Stable < 0) m_Stable = now; + if (now - m_Stable < 500) return; + m_Stable = -1; + if (m_State == ERR_AircraftFlightState.POSITIVE) { m_State = ERR_AircraftFlightState.NEGATIVE; m_StageDeadline = Math.Min(m_Deadline, now + 3000); m_GateUpdates = m_ActionUpdates; return; } + m_Controller.SetAutohoverEnabled(true); + if (!m_Controller.GetAutohoverEnabled()) { Fail("native autohover enable refused"); return; } + m_State = ERR_AircraftFlightState.CLIMB; m_StageDeadline = Math.Min(m_Deadline, now + 65000); return; + } + if (m_State == ERR_AircraftFlightState.TRANSLATING) { CheckTranslation(now, transform[3], height, speed, transform[1][1]); return; } + if (m_State == ERR_AircraftFlightState.CLIMB || m_State == ERR_AircraftFlightState.LANDING) + { + if (!m_Controller.GetAutohoverEnabled()) { Fail("native autohover lost"); return; } + bool stable = Grounded(); float duration = 2000; + if (m_State == ERR_AircraftFlightState.CLIMB) { stable = !m_Simulation.HasAnyGroundContact() && ERR_AircraftFlightRules.Hover(height, speed, m_Simulation.GetVelocity()[1], transform[1][1]); duration = 5000; } + if (!stable) m_Stable = -1; + if (stable && m_Stable < 0) m_Stable = now; + if (m_Stable < 0 || now - m_Stable < duration) return; + if (m_State == ERR_AircraftFlightState.CLIMB) + { + if (m_TranslationRequested) BeginTranslation(now, transform[3]); + else Landing(now); + return; + } + Shutdown(now); return; + } + if (m_State == ERR_AircraftFlightState.SHUTDOWN && !m_Controller.IsEngineOn()) + { + if (!Grounded()) { Fail("engine-off physical ground check failed"); return; } + if (m_Cancelled) m_State = ERR_AircraftFlightState.CANCELLED; + else m_State = ERR_AircraftFlightState.COMPLETE; + Release(true); RecordState(); + } + } + void ~ERR_AircraftFlight() { Release(true); } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c new file mode 100644 index 0000000..6345f61 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c @@ -0,0 +1,236 @@ +// Successor-owned measured envelope, independent of aircraft yaw/pitch/roll. +// Adapted from the separately qualified native vertical fixture; no native hook. +// All distances are around the native physics origin, not the rotor centre. +class ERR_AircraftFlightFootprintRules +{ + static float CylinderSphere(float originDistance, float radius, float thickness) + { + // Triangle inequality deliberately overbounds the one-sided rotor cylinder. + return originDistance + radius + thickness; + } + static bool Fits(float radius, float initialDrift, float initialHeight) + { + if (!(radius > 0 && radius < 32 && initialDrift >= 0 && initialDrift < 32)) return false; + if (!(initialHeight >= -3 && initialHeight <= 5)) return false; + return radius + initialDrift + 8 + 1 <= 40 && radius + initialHeight + 18 + 1 <= 60; + } +} + +class ERR_AircraftFlightFootprint +{ + static const int MAX_ENTITIES = 256; + static const int MAX_DEPTH = 16; + static const int MAX_HITZONES = 512; + protected static bool Refuse(string reason) + { + Print("ERR AIRCRAFT FOOTPRINT: refused " + reason); + return false; + } + protected static bool PointRadius(vector point, vector origin, inout float radius) + { + float distance = vector.Distance(point, origin); + if (!(distance >= 0 && distance < 1000)) return false; + radius = Math.Max(radius, distance); + return true; + } + static bool Measure(Vehicle aircraft, VehicleHelicopterSimulation simulation, vector pad, out vector origin, out float radius) + { + radius = 0; + if (!aircraft || !simulation || !simulation.IsValid() || !aircraft.GetPrefabData()) return Refuse("missing initialized native airframe"); + if (aircraft.GetPrefabData().GetPrefabName() != "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et") return Refuse("different airframe resource"); + // Model bounds and damage pivots are world-space. The simulation getter + // exposes internal physics space (identity at the airport in 100422), so + // use this same physical aircraft's actual entity world transform. + vector worldTransform[4]; aircraft.GetWorldTransform(worldTransform); + origin = worldTransform[3]; + for (int axis = 0; axis < 3; axis++) + if (!(Math.AbsFloat(worldTransform[axis].Length() - 1) < 0.001)) return Refuse("non-unit native entity world basis"); + + array entities = {aircraft}; + array depths = {0}; + array seenZones = {}; + int meshes, mainSweeps, tailSweeps; + float modelRadius, damageRadius, simulationRadius; + for (int index = 0; index < entities.Count(); index++) + { + IEntity entity = entities[index]; + if (!entity) return Refuse("hierarchy changed during measurement"); + if (entity.GetVObject()) + { + vector mins, maxs; entity.GetWorldBounds(mins, maxs); + for (int dimension = 0; dimension < 3; dimension++) + if (!(mins[dimension] <= maxs[dimension])) return Refuse("invalid model bounds"); + // A sphere around every corner encloses the complete world AABB. Its radius + // remains conservative under any rigid orientation of the whole aircraft. + for (int x = 0; x < 2; x++) + for (int y = 0; y < 2; y++) + for (int z = 0; z < 2; z++) + { + vector corner = mins; + if (x == 1) corner[0] = maxs[0]; + if (y == 1) corner[1] = maxs[1]; + if (z == 1) corner[2] = maxs[2]; + if (!PointRadius(corner, origin, modelRadius)) return Refuse("non-finite or excessive model bounds"); + } + meshes++; + } + HitZoneContainerComponent container = HitZoneContainerComponent.Cast(entity.FindComponent(HitZoneContainerComponent)); + if (container) + { + int count = container.CountAllHitZones(); + if (count < 0 || count + seenZones.Count() > MAX_HITZONES) return Refuse("hitzone traversal bound"); + array zones = {}; + if (container.GetAllHitZones(zones) != count || zones.Count() != count) return Refuse("hitzones changed during measurement"); + foreach (HitZone zone : zones) + { + if (!zone || seenZones.Contains(zone)) continue; + seenZones.Insert(zone); + SCR_RotorHitZone rotorZone = SCR_RotorHitZone.Cast(zone); + if (!rotorZone || rotorZone.GetRotorRadius() <= 0) continue; // transmission zones have no sweep + int rotorIndex = rotorZone.GetRotorIndex(); + float expectedRadius, thickness; + if (rotorIndex == 0) { expectedRadius = 12; thickness = 1.5; mainSweeps++; } + else if (rotorIndex == 1) { expectedRadius = 2.3; thickness = 0.75; tailSweeps++; } + else return Refuse("unknown rotor sweep index"); + // Stock thickness is protected with no getter. Scope to the exact prefab + // and verify its public sweep radius against the audited stock constants. + if (!(Math.AbsFloat(rotorZone.GetRotorRadius() - expectedRadius) < 0.001)) return Refuse("stock damage sweep radius changed"); + PointInfo point = rotorZone.GetPointInfo(); + if (!point) return Refuse("missing actual rotor sweep pivot"); + vector rotorWorld[4]; point.GetWorldTransform(rotorWorld); + // Frobenius norm bounds the transform's maximum stretch even with scale + // or shear; do not assume the PointInfo basis is orthonormal. + float scaleSquared = 0; + for (int basis = 0; basis < 3; basis++) scaleSquared += vector.Dot(rotorWorld[basis], rotorWorld[basis]); + float scale = Math.Sqrt(scaleSquared); + if (!(scale > 0 && scale < 4)) return Refuse("invalid damage sweep basis"); + float distance = vector.Distance(origin, rotorWorld[3]); + float sweepBound = ERR_AircraftFlightFootprintRules.CylinderSphere(distance, expectedRadius * scale, thickness * scale); + if (!(sweepBound > 0 && sweepBound < 1000)) return Refuse("invalid damage sweep extent"); + damageRadius = Math.Max(damageRadius, sweepBound); + PrintFormat("ERR AIRCRAFT FOOTPRINT ROTOR: index=%1 pivot=%2 damageRadius=%3 thickness=%4 scale=%5 sphereBound=%6", rotorIndex, rotorWorld[3], expectedRadius, thickness, scale, sweepBound); + } + } + IEntity child = entity.GetChildren(); + while (child) + { + if (entities.Count() >= MAX_ENTITIES || depths[index] >= MAX_DEPTH || entities.Contains(child)) return Refuse("entity/depth/cycle traversal bound"); + entities.Insert(child); depths.Insert(depths[index] + 1); + child = child.GetSibling(); + } + } + if (meshes == 0 || mainSweeps != 1 || tailSweeps != 1) return Refuse("complete model and both actual damage sweeps required"); + if (simulation.RotorCount() != 2) return Refuse("stock simulation rotor count changed"); + for (int rotor = 0; rotor < 2; rotor++) + { + vector localRotor[4]; simulation.RotorGetTransform(rotor, localRotor); + float physicalRadius = simulation.RotorGetRadius(rotor); + float physicalBound = localRotor[3].Length() + physicalRadius; + if (!(physicalRadius > 0 && physicalBound > 0 && physicalBound < 1000)) return Refuse("invalid native simulation rotor extent"); + simulationRadius = Math.Max(simulationRadius, physicalBound); + PrintFormat("ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=%1 localPivot=%2 radius=%3 sphereBound=%4", rotor, localRotor[3], physicalRadius, physicalBound); + } + radius = Math.Max(modelRadius, Math.Max(damageRadius, simulationRadius)); + float initialDrift = vector.DistanceXZ(origin, pad); + float initialHeight = origin[1] - pad[1]; + PrintFormat("ERR AIRCRAFT FOOTPRINT: entities=%1 meshes=%2 zones=%3 modelSphere=%4 damageSphere=%5 simulationSphere=%6 completeSphere=%7 initialDrift=%8 initialHeight=%9", entities.Count(), meshes, seenZones.Count(), modelRadius, damageRadius, simulationRadius, radius, initialDrift, initialHeight); + if (!ERR_AircraftFlightFootprintRules.Fits(radius, initialDrift, initialHeight)) return Refuse("measured footprint plus initial placement,8m drift and1m margin exceeds40m corridor or60m ceiling"); + return true; + } +} + + +// Issued only by physical qualification; fields have no public mutators. +// One claim binds this short-lived record to one original aircraft/pilot/order. +class ERR_AircraftFlightEnvelope +{ + protected ERR_GameMode m_Mode; + protected Vehicle m_Aircraft; + protected IEntity m_Pilot; + protected vector m_Home; + protected float m_Radius; + protected float m_QualifiedAt; + protected int m_Claim; + vector Home() { return m_Home; } + float Radius() { return m_Radius; } + bool ClaimedBy(Vehicle aircraft, IEntity pilot, int token) + { + return m_Claim > 0 && m_Claim == token && m_Aircraft == aircraft && m_Pilot == pilot; + } + bool Claim(ERR_GameMode mode, Vehicle aircraft, IEntity pilot, int token) + { + if (!GetGame() || !GetGame().GetWorld()) return false; + float now = GetGame().GetWorld().GetWorldTime(); + if (!Replication.IsServer() || !mode || mode != m_Mode || mode != ERR_GameMode.Get() || !mode.Active() || m_Claim != 0 || token <= 0) return false; + if (aircraft != m_Aircraft || pilot != m_Pilot || !aircraft || !pilot || now < m_QualifiedAt || now - m_QualifiedAt > 2000) return false; + if (vector.Distance(aircraft.GetOrigin(), m_Home) > 0.1) return false; + m_Claim = token; + return true; + } + protected static bool Hierarchy(IEntity root, array excluded) + { + if (!root) return false; + array pending = {root}; + array depths = {0}; + for (int i = 0; i < pending.Count(); i++) + { + IEntity entity = pending[i]; + if (!entity || excluded.Count() >= 512) return false; + if (!excluded.Contains(entity)) excluded.Insert(entity); + IEntity child = entity.GetChildren(); + while (child) + { + if (pending.Count() >= 256 || depths[i] >= 16 || pending.Contains(child)) return false; + pending.Insert(child); depths.Insert(depths[i] + 1); child = child.GetSibling(); + } + } + return true; + } + protected static bool ClearColumn(Vehicle aircraft, IEntity pilot, vector pad) + { + array excluded = {}; + if (!Hierarchy(aircraft, excluded) || !Hierarchy(pilot, excluded)) return false; + for (int edge = 0; edge < 4; edge++) + { + float side = edge * Math.PI / 2; + vector point = pad + Vector(Math.Cos(side) * 14, 0, Math.Sin(side) * 14); + if (!(Math.AbsFloat(SCR_TerrainHelper.GetTerrainY(point) - pad[1]) <= 0.8)) return false; + } + // Same four finite diagonal cylinder traces as the native fixture, with + // exclusions restricted to this already-existing aircraft and seated pilot. + array diagonals = {"40 2 0", "-40 2 0", "0 2 40", "0 2 -40"}; + foreach (vector diagonal : diagonals) + { + TraceParam trace = new TraceParam(); + trace.Start = pad + "0 2.5 0" + diagonal; + trace.End = pad + "0 2.5 0" - diagonal; + trace.Flags = TraceFlags.ENTS; trace.ExcludeArray = excluded; + if (!(aircraft.GetWorld().TraceMove(trace, null) >= 1)) return false; + } + TraceBox clearance = new TraceBox(); + clearance.Start = pad + "0 3 0"; clearance.End = pad + "0 60 0"; + clearance.Mins = "-40 -1 -40"; clearance.Maxs = "40 1 40"; + clearance.Flags = TraceFlags.ENTS | TraceFlags.WORLD; clearance.ExcludeArray = excluded; + return aircraft.GetWorld().TraceMove(clearance, null) >= 1; + } + static ERR_AircraftFlightEnvelope Qualify(ERR_GameMode mode, Vehicle aircraft, IEntity pilot) + { + if (!GetGame() || !GetGame().GetWorld() || !GetGame().GetPlayerManager()) return null; + if (!Replication.IsServer() || !mode || mode != ERR_GameMode.Get() || !mode.Active() || !aircraft || !pilot || ERR_Actors.Player(pilot)) return null; + if (CompartmentAccessComponent.GetVehicleIn(pilot) != aircraft || !ERR_Actors.Alive(aircraft) || !ERR_Actors.CanFight(pilot)) return null; + HelicopterControllerComponent controller = HelicopterControllerComponent.Cast(aircraft.FindComponent(HelicopterControllerComponent)); + if (!controller || controller.IsEngineOn() || !controller.GetSimulation() || !controller.GetSimulation().IsValid()) return null; + PilotCompartmentSlot seat = controller.GetPilotCompartmentSlot(); + if (!seat || seat.GetOccupant() != pilot) return null; + if (!ERR_CasualtyLoadingRules.AircraftReady(aircraft)) return null; + vector pad = ERR_Actors.Ground(aircraft.GetOrigin()); + if (!(pad[1] >= 2) || !ClearColumn(aircraft, pilot, pad)) return null; + vector origin; float radius; + if (!ERR_AircraftFlightFootprint.Measure(aircraft, controller.GetSimulation(), pad, origin, radius)) return null; + ERR_AircraftFlightEnvelope record = new ERR_AircraftFlightEnvelope(); + record.m_Mode = mode; record.m_Aircraft = aircraft; record.m_Pilot = pilot; + record.m_Home = origin; record.m_Radius = radius; + record.m_QualifiedAt = GetGame().GetWorld().GetWorldTime(); + return record; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQ.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQ.c new file mode 100644 index 0000000..2a0acd3 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQ.c @@ -0,0 +1,391 @@ +class ERR_HQUnit +{ + int Id; + SCR_AIGroup Group; + SCR_AIGroupUtilityComponent Utility; + IEntity Radio; + float NextReport; + ref ERR_HQRoute Uplink; + ref ERR_HQReport PendingReport; + ref ERR_HQRoute Downlink; + ref ERR_HQReport PendingOrder; + ref ERR_HQReport Assignment; + AIWaypoint Waypoint; + bool ReservedForSupport; + int LogisticsReservation; + ref ERR_MortarSupplyStatus PendingSupplyStatus; + + bool Eligible(ERR_GameMode mode) + { + if (ReservedForSupport || LogisticsReservation > 0 || !Group || !Utility || Group.GetPlayerCount(true) > 0 || Group.IsSlave() || Group.GetFaction() != mode.EnemyFaction()) return false; + array agents = {}; + Group.GetAgents(agents); + bool survivor; + foreach (AIAgent agent : agents) + { + if (!agent || !ERR_Actors.CanFight(agent.GetControlledEntity())) continue; + survivor = true; + if (CompartmentAccessComponent.GetVehicleIn(agent.GetControlledEntity())) return false; + } + return survivor; + } + + void Release() + { + if (Waypoint) + { + if (Group) Group.RemoveWaypoint(Waypoint); + SCR_EntityHelper.DeleteEntityAndChildren(Waypoint); + } + Waypoint = null; + Assignment = null; + PendingOrder = null; + Downlink = null; + } +} + +class ERR_HQ : ERR_CommandService +{ + protected ERR_GameMode m_Mode; + protected ref ERR_MortarSystem m_Mortars; + protected ref ERR_MortarLogistics m_Logistics; + protected ref array m_Units = {}; + protected ref array m_Contacts = {}; + protected ref ERR_HQNetwork m_Network = new ERR_HQNetwork(); + protected ref ERR_HQJournal m_Journal = new ERR_HQJournal(); + protected int m_NextId; + protected float m_NextNetwork; + protected float m_NextAssignment; + + void ERR_HQ(ERR_GameMode mode) { m_Mode = mode; m_Mortars = new ERR_MortarSystem(this); m_Logistics = new ERR_MortarLogistics(this, mode); } + static ERR_HQ Get() + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode) return null; + return ERR_HQ.Cast(mode.Command()); + } + static bool MissionActive() + { + ERR_GameMode mode = ERR_GameMode.Get(); + return mode && mode.Active(); + } + static void Event(string kind, string message, int messageId = 0) + { + ERR_HQ hq = Get(); + if (hq) hq.Journal().Write(kind, message, messageId); + } + ERR_MortarSystem Mortars() { return m_Mortars; } + bool PrepareSupport() { return m_Mortars.Prepare() && m_Logistics.Prepare(); } + ERR_MortarLogistics Logistics() { return m_Logistics; } + void ReserveGroup(SCR_AIGroup group) + { + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != group) continue; + unit.Release(); + unit.ReservedForSupport = true; + } + } + // Temporary reservations never alter the permanent support reservation. + int LogisticsToken(SCR_AIGroup group) + { + foreach (ERR_HQUnit unit : m_Units) if (unit.Group == group) return unit.LogisticsReservation; + return 0; + } + bool ReserveLogistics(SCR_AIGroup group, int token) + { + if (!Replication.IsServer() || token <= 0 || !MissionActive()) return false; + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != group || !unit.Eligible(m_Mode) || !unit.Radio || unit.Assignment || unit.PendingOrder || unit.Downlink || unit.Waypoint) continue; + if (unit.Utility.m_Perception && !unit.Utility.m_Perception.m_aTargets.IsEmpty()) continue; + unit.LogisticsReservation = token; + return true; + } + return false; + } + void ReleaseLogistics(SCR_AIGroup group, int token) + { + foreach (ERR_HQUnit unit : m_Units) + if (unit.Group == group && unit.LogisticsReservation == token) unit.LogisticsReservation = 0; + } + bool QueueSupplyStatus(ERR_MortarBattery battery, float now) + { + if (!Replication.IsServer() || !MissionActive() || !battery || !battery.StartupActivated || !battery.Operational() || !m_Logistics.CanSample(battery) || !ERR_MortarLogisticsRules.Need(battery.CountShells())) return false; + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != battery.Group || unit.Uplink || !unit.Radio || unit.Radio != battery.RadioOperator) continue; + ERR_HQRoute route = m_Network.Route(unit.Radio); + if (!route) return false; + ERR_MortarSupplyStatus report = new ERR_MortarSupplyStatus(); + report.Group = battery.Group; report.Gun = battery.Gun; report.Position = battery.Gun.GetOrigin(); + report.Shells = battery.CountShells(); report.ObservedAt = now; report.MessageId = m_Journal.Message(); + route.MessageId = report.MessageId; + route.Payload = string.Format("mortar supply status; usable HE=%1; position=%2; sampled=%3", report.Shells, report.Position, report.ObservedAt); + unit.PendingSupplyStatus = report; unit.Uplink = route; + m_Journal.Write("SUPPLY REPORT", route.Payload, route.MessageId); + return true; + } + return false; + } + void PhysicalForces(out array entities) + { + entities.Clear(); + foreach (ERR_HQUnit unit : m_Units) + { + if (!unit.Group) continue; + array agents = {}; + unit.Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + if (!agent || !agent.GetControlledEntity()) continue; + IEntity actor = agent.GetControlledEntity(); + if (!entities.Contains(actor)) entities.Insert(actor); + IEntity vehicle = CompartmentAccessComponent.GetVehicleIn(actor); + if (vehicle && !entities.Contains(vehicle)) entities.Insert(vehicle); + } + } + m_Mortars.AppendGuns(entities); + } + bool MortarConnected(SCR_AIGroup group) + { + foreach (ERR_HQUnit unit : m_Units) + if (unit.Group == group && unit.Radio) return m_Network.Route(unit.Radio) != null; + return false; + } + ERR_HQRoute Downlink(SCR_AIGroup group, string kind, string detail, int sourceId) + { + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != group || !unit.Radio) continue; + ERR_HQRoute route = m_Network.Route(unit.Radio, true); + if (!route) return null; + route.MessageId = m_Journal.Message(); + route.Payload = string.Format("%1 from report M%2; %3", kind, sourceId, detail); + m_Journal.Write("ORDER QUEUED", route.Payload, route.MessageId); + return route; + } + return null; + } + void SupportContacts(out array contacts, float now) + { + contacts.Clear(); + foreach (ERR_HQReport contact : m_Contacts) + if (ERR_MortarPrediction.Fresh(contact, now)) contacts.Insert(contact.Snapshot()); + } + + ERR_HQJournal Journal() { return m_Journal; } + string Status() + { + return string.Format("HQ: %1 groups, %2 delivered contacts, %3 assignments", m_Units.Count(), m_Contacts.Count(), Assigned()) + "; " + m_Mortars.Status() + "; " + m_Logistics.Status(); + } + + override void RegisterGroup(SCR_AIGroup group) + { + if (!Replication.IsServer() || !group || m_Units.Count() >= 128) return; + foreach (ERR_HQUnit known : m_Units) if (known.Group == group) return; + SCR_AIGroupUtilityComponent utility = SCR_AIGroupUtilityComponent.Cast(group.FindComponent(SCR_AIGroupUtilityComponent)); + if (!utility || group.GetFaction() != m_Mode.EnemyFaction()) return; + ERR_HQUnit unit = new ERR_HQUnit(); + unit.Id = ++m_NextId; + unit.Group = group; + unit.Utility = utility; + int phase = unit.Id % 5; + unit.NextReport = GetGame().GetWorld().GetWorldTime() + phase * 1000; + m_Units.Insert(unit); + m_Journal.Write("REGISTER", string.Format("group %1", unit.Id)); + } + + override void UnregisterGroup(SCR_AIGroup group) + { + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != group) continue; + unit.Release(); + unit.Group = null; + unit.Utility = null; + } + } + + protected int Assigned() + { + int total; + foreach (ERR_HQUnit unit : m_Units) if (unit.Assignment || unit.PendingOrder) total++; + return total; + } + + protected void IndexRadios() + { + m_Network.Clear(); + foreach (ERR_HQUnit unit : m_Units) + { + unit.Radio = null; + if (!unit.Group || unit.Group.GetPlayerCount(true) > 0 || unit.Group.GetFaction() != m_Mode.EnemyFaction()) continue; + array agents = {}; + unit.Group.GetAgents(agents); + int best; + foreach (AIAgent agent : agents) + { + if (!agent) continue; + IEntity actor = agent.GetControlledEntity(); + int capability = ERR_HQRadio.Capability(actor); + if (capability <= 0) continue; + m_Network.Add(actor, unit.Group, unit.Id, capability); + if (capability > best) { unit.Radio = actor; best = capability; } + } + } + m_Network.Build(); + } + + protected void Observe(ERR_HQUnit unit, float now) + { + if (!unit.Utility || !unit.Radio || unit.Uplink || now < unit.NextReport) return; + unit.NextReport = now + m_Mode.Settings().Get("reportIntervalSeconds") * 1000; + array samples = {}; + ERR_HQObservation.Gather(unit.Utility, now, samples); + if (samples.IsEmpty()) return; + ERR_HQVisualContact seen = samples[0]; + ERR_HQRoute route = m_Network.Route(unit.Radio); + if (!route) return; + ERR_HQReport report = new ERR_HQReport(); + report.MessageId = m_Journal.Message(); + report.Target = seen.Entity; + report.Source = unit.Group; + report.Position = seen.Position; + report.ObservedAt = seen.ObservedAt; + ERR_HQObservation.Describe(report, samples, now); + route.MessageId = report.MessageId; + route.Payload = report.Description(now); + unit.PendingReport = report; + unit.Uplink = route; + m_Journal.Write("REPORT", route.Payload, report.MessageId); + } + + protected void Accept(ERR_HQReport report, float now) + { + if (!report || !ERR_MissionRules.ContactFresh(report.ObservedAt, now)) return; + for (int i = 0; i < m_Contacts.Count(); i++) + { + ERR_HQReport previous = m_Contacts[i]; + if (previous.Target != report.Target) continue; + if (previous.ObservedAt >= report.ObservedAt) return; + float seconds = (report.ObservedAt - previous.ObservedAt) / 1000; + if (seconds > 0 && seconds < 30 && vector.DistanceXZ(previous.Position, report.Position) < 500) + { + report.Velocity = (report.Position - previous.Position) / seconds; + report.HasVelocity = report.Velocity.Length() <= 100; + } + m_Contacts[i] = report.Snapshot(); + return; + } + if (m_Contacts.Count() >= 64) m_Contacts.Remove(0); + m_Contacts.Insert(report.Snapshot()); + } + + protected void DeliverOrder(ERR_HQUnit unit, float now) + { + ERR_HQReport order = unit.PendingOrder; + if (!order || !ERR_MissionRules.ContactFresh(order.ObservedAt, now) || !unit.Eligible(m_Mode)) { unit.Release(); return; } + SCR_AIGroupPerception perception = unit.Utility.m_Perception; + if (perception && !perception.m_aTargets.IsEmpty()) { unit.Release(); return; } + int deliveryId; + if (unit.Downlink) deliveryId = unit.Downlink.MessageId; + unit.Release(); + vector position = order.Position; + if (order.HasVelocity) position = ERR_HQReport.Predict(position, order.Velocity, (now - order.ObservedAt) / 1000); + AIWaypoint waypoint = AIWaypoint.Cast(ERR_Actors.Spawn(ERR_Resources.SearchWaypoint(), ERR_Actors.Ground(position))); + if (!waypoint) { m_Journal.Write("ORDER FAILED", "waypoint spawn failed", order.MessageId); return; } + unit.Waypoint = waypoint; + unit.Assignment = order; + unit.Group.AddWaypointAt(waypoint, 0); + m_Journal.Write("ORDER DELIVERED", string.Format("group %1 from report M%2: %3", unit.Id, order.MessageId, order.Description(now)), deliveryId); + } + + protected void Assign(float now) + { + int limit = m_Mode.Settings().Get("supportSquadLimit"); + int radius = m_Mode.Settings().Get("responseRadiusMetres"); + int assigned = Assigned(); + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Assignment && (!ERR_MissionRules.ContactFresh(unit.Assignment.ObservedAt, now) || !unit.Eligible(m_Mode) || assigned > limit)) + { + unit.Release(); assigned--; + } + if (unit.PendingOrder && (!ERR_MissionRules.ContactFresh(unit.PendingOrder.ObservedAt, now) || !unit.Eligible(m_Mode) || assigned > limit)) + { + unit.Release(); assigned--; + } + } + foreach (ERR_HQReport report : m_Contacts) + { + if (!ERR_MissionRules.ContactFresh(report.ObservedAt, now)) continue; + foreach (ERR_HQUnit unit : m_Units) + { + if (assigned >= limit) return; + if (unit.Assignment || unit.PendingOrder || !unit.Eligible(m_Mode) || !unit.Radio) continue; + if (vector.DistanceXZ(unit.Group.GetOrigin(), report.Position) > radius) continue; + SCR_AIGroupPerception perception = unit.Utility.m_Perception; + if (perception && !perception.m_aTargets.IsEmpty()) continue; + ERR_HQRoute route = m_Network.Route(unit.Radio, true); + if (!route) continue; + unit.PendingOrder = report.Snapshot(); + unit.Downlink = route; + route.MessageId = m_Journal.Message(); + route.Payload = "order from report M" + report.MessageId.ToString(); + assigned++; + } + } + } + + override void Tick(float now) + { + if (!Replication.IsServer()) return; + if (now >= m_NextNetwork) { IndexRadios(); m_NextNetwork = now + 5000; } + for (int i = m_Contacts.Count() - 1; i >= 0; i--) + if (!ERR_MissionRules.ContactFresh(m_Contacts[i].ObservedAt, now)) m_Contacts.Remove(i); + for (int i = m_Units.Count() - 1; i >= 0; i--) + { + ERR_HQUnit unit = m_Units[i]; + if (unit.Uplink) + { + int delivered = unit.Uplink.Advance(now, m_Journal); + if (delivered == 1) + { + if (unit.PendingSupplyStatus) m_Logistics.Receive(unit.PendingSupplyStatus, now); + else Accept(unit.PendingReport, now); + } + if (delivered != 0) { unit.Uplink = null; unit.PendingReport = null; unit.PendingSupplyStatus = null; } + } + if (unit.Downlink) + { + int delivered = unit.Downlink.Advance(now, m_Journal); + if (delivered == 1) DeliverOrder(unit, now); + else if (delivered < 0) unit.Release(); + } + if (!unit.Group && !unit.Uplink) { unit.Release(); m_Units.Remove(i); continue; } + Observe(unit, now); + } + if (now >= m_NextAssignment) { Assign(now); m_NextAssignment = now + 5000; } + m_Logistics.Tick(now); + m_Mortars.Tick(now); + m_Journal.Flush(); + } + + override void Stop() + { + m_Logistics.Stop(); + m_Mortars.Stop(); + foreach (ERR_HQUnit unit : m_Units) unit.Release(); + m_Units.Clear(); + m_Contacts.Clear(); + m_Network.Clear(); + m_Journal.Write("STOP", "HQ stopped; tactical orders released"); + m_Journal.Flush(); + } +} + +modded class ERR_GameMode +{ + protected override ERR_CommandService CreateCommandService() { return new ERR_HQ(this); } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQJournal.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQJournal.c new file mode 100644 index 0000000..84e46a8 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQJournal.c @@ -0,0 +1,101 @@ +// Server-owned audit stream. The file contains every event; chat reads a bounded +// recent-history window with explicit gap notices for clients that fall behind. +class ERR_HQJournal +{ + protected ref array m_Recent = {}; + protected ref array m_Pending = {}; + protected int m_Sequence; + protected int m_Message; + protected static int s_Part; + protected static int s_Session; + protected string m_Session; + + void ERR_HQJournal() + { + s_Session++; + m_Session = string.Format("%1-%2", System.GetUnixTime(), s_Session); + } + protected float m_RetryAt; + protected int m_Lost; + + string Path() + { + if (s_Part == 0) + return "$logs:rereintroduced-hq.log"; + return "$logs:rereintroduced-hq-" + s_Part.ToString() + ".log"; + } + + int Message() + { + return ++m_Message; + } + + int Sequence() + { + return m_Sequence; + } + + void Write(string kind, string message, int messageId = 0) + { + if (!Replication.IsServer()) + return; + float seconds = GetGame().GetWorld().GetWorldTime() / 1000; + string line = string.Format("#%1 t=%2s M%3 %4 %5", ++m_Sequence, Math.Round(seconds * 10) / 10.0, messageId, kind, message) + " [session=" + m_Session + "]"; + if (m_Recent.Count() >= 300) + m_Recent.Remove(0); + m_Recent.Insert(line); + if (m_Pending.Count() < 4096) + m_Pending.Insert(line); + else + m_Lost++; + } + + void Read(int after, out array lines, out int cursor, int limit = 8) + { + lines.Clear(); + cursor = Math.Clamp(after, 0, m_Sequence); + int first = m_Sequence - m_Recent.Count(); + if (cursor < first) + { + lines.Insert(string.Format("HQ log: %1 older entries are outside chat history; see %2", first - cursor, Path())); + cursor = first; + } + int characters; + for (int i = cursor - first; i < m_Recent.Count() && lines.Count() < Math.Clamp(limit, 1, 40); i++) + { + // Bound each menu RPC without skipping unread records. Chat still + // requests eight; the live menu can drain a busy journal faster. + if (characters + m_Recent[i].Length() > 16000 && !lines.IsEmpty()) + break; + lines.Insert(m_Recent[i]); + characters += m_Recent[i].Length(); + cursor++; + } + } + + void Flush() + { + if (m_Pending.IsEmpty() || !Replication.IsServer()) + return; + float now = GetGame().GetWorld().GetWorldTime(); + if (now < m_RetryAt) + return; + FileHandle file = FileIO.OpenFile(Path(), FileMode.APPEND); + if (!file) + { + m_RetryAt = now + 30000; + PrintFormat("Escapists AI [HQ log]: cannot open %1; retry in 30s, chat history remains available", Path(), level: LogLevel.ERROR); + return; + } + foreach (string line : m_Pending) + file.WriteLine(line); + if (m_Lost > 0) + file.WriteLine(string.Format("HQ log: %1 entries lost while file was unavailable and buffer full", m_Lost)); + bool rotate = file.GetLength() >= 5242880; + file.Close(); + m_Pending.Clear(); + m_Lost = 0; + if (rotate) + s_Part++; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c new file mode 100644 index 0000000..b783100 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c @@ -0,0 +1,241 @@ +// Radio propagation is simulated using actual living carriers and inventory. +// A manpack is the HQ uplink; short-range hops are limited to 500 m and three +// retransmissions. No virtual relay is fabricated when the network is broken. +class ERR_HQRadioNode +{ + IEntity Carrier; + SCR_AIGroup Group; + int UnitId; + int Capability; + protected float m_CheckedAt = -1; + protected int m_LiveCapability; + + bool Valid(bool manpack = false) + { + ERR_GameMode factions = ERR_GameMode.Get(); + if (!Carrier || !Group || Group.GetPlayerCount(true) > 0 || !factions || Group.GetFaction() != factions.EnemyFaction() || ERR_Actors.Group(Carrier) != Group) + return false; + int required = 1; + if (manpack) + required = 2; + float now = GetGame().GetWorld().GetWorldTime(); + if (m_CheckedAt < 0 || now < m_CheckedAt || now - m_CheckedAt >= 1000) + { + m_CheckedAt = now; + m_LiveCapability = ERR_HQRadio.Capability(Carrier); + } + return m_LiveCapability >= required; + } + + string Label() + { + return "unit " + UnitId.ToString(); + } +} + +class ERR_HQRoute +{ + ref array Nodes = {}; + bool Downlink; + int Cursor; + bool Sending; + float Due; + vector SentFrom; + float StartedAt = -1; + int MessageId; + string Payload; + bool Failed; + + // -1 failed, 0 travelling, 1 delivered. Each hop really gates delivery. + int Advance(float now, ERR_HQJournal journal) + { + if (Failed) + return -1; + if (StartedAt < 0) + { + StartedAt = now; + if (Downlink) + Cursor = -1; // first leg is HQ to the manpack + } + if (now - StartedAt > 30000) + return Fail(journal, "route timed out"); + int target = Cursor + 1; + if (Sending) + { + if (now < Due) + return 0; + if (target < Nodes.Count()) + { + if (!Nodes[target].Valid(Downlink && target == 0)) + return Fail(journal, "receiving carrier lost radio, died or changed ownership"); + if (Cursor >= 0 && vector.DistanceXZ(SentFrom, Nodes[target].Carrier.GetOrigin()) > 500) + return Fail(journal, "receiver moved beyond the 500m link"); + journal.Write("RECEIVE", Nodes[target].Label() + " received from " + SenderLabel(), MessageId); + } + else + journal.Write("RECEIVE", "HQ received from " + SenderLabel(), MessageId); + Cursor++; + Sending = false; + if ((!Downlink && Cursor >= Nodes.Count()) || (Downlink && Cursor == Nodes.Count() - 1)) + return 1; + target = Cursor + 1; + } + if (Nodes.IsEmpty()) + return Fail(journal, "no physical radio route"); + if (Cursor >= 0 && !Nodes[Cursor].Valid(!Downlink && Cursor == Nodes.Count() - 1)) + return Fail(journal, "transmitting carrier lost radio, died or changed ownership"); + string recipient = "HQ"; + string link = "long-range"; + if (target < Nodes.Count()) + { + if (!Nodes[target].Valid(Downlink && target == 0)) + return Fail(journal, "next relay unavailable"); + recipient = Nodes[target].Label(); + if (Cursor >= 0) + { + SentFrom = Nodes[Cursor].Carrier.GetOrigin(); + float distance = vector.DistanceXZ(SentFrom, Nodes[target].Carrier.GetOrigin()); + if (distance > 500) + return Fail(journal, "next relay beyond 500m"); + link = Math.Round(distance).ToString() + "m short-range"; + } + } + journal.Write("TRANSMIT", SenderLabel() + " -> " + recipient + " (" + link + ")", MessageId); + Sending = true; + Due = now + 2000; + return 0; + } + + protected string SenderLabel() + { + if (Cursor < 0) + return "HQ"; + return Nodes[Cursor].Label(); + } + + protected int Fail(ERR_HQJournal journal, string reason) + { + Failed = true; + journal.Write("LOST", reason + "; " + Payload, MessageId); + return -1; + } +} + +class ERR_HQNetwork +{ + protected ref array m_Nodes = {}; + protected ref array m_Parents = {}; + protected ref array m_Depths = {}; + protected ref map m_Indices = new map(); + protected ref map> m_Cells = new map>(); + bool Overflow; + + void Clear() + { + m_Nodes.Clear(); + m_Parents.Clear(); + m_Depths.Clear(); + m_Indices.Clear(); + m_Cells.Clear(); + Overflow = false; + } + + protected string Cell(int x, int z) + { + return string.Format("%1:%2", x, z); + } + + void Add(IEntity carrier, SCR_AIGroup group, int unitId, int capability) + { + if (m_Indices.Contains(carrier)) + return; + if (m_Nodes.Count() >= 2048) + { + Overflow = true; + return; + } + ERR_HQRadioNode node = new ERR_HQRadioNode(); + node.Carrier = carrier; + node.Group = group; + node.UnitId = unitId; + node.Capability = capability; + int index = m_Nodes.Count(); + m_Nodes.Insert(node); + m_Indices.Insert(carrier, index); + m_Parents.Insert(-2); + m_Depths.Insert(99); + vector position = carrier.GetOrigin(); + string key = Cell(Math.Floor(position[0] / 500), Math.Floor(position[2] / 500)); + array cell = m_Cells.Get(key); + if (!cell) + { + cell = {}; + m_Cells.Insert(key, cell); + } + cell.Insert(index); + } + + void Build() + { + array queue = {}; + int checks; + for (int root = 0; root < m_Nodes.Count(); root++) + { + if (m_Nodes[root].Capability == 2) + { + m_Parents[root] = -1; + m_Depths[root] = 0; + queue.Insert(root); + } + } + for (int head = 0; head < queue.Count(); head++) + { + int from = queue[head]; + if (m_Depths[from] >= 3) + continue; + vector position = m_Nodes[from].Carrier.GetOrigin(); + int x = Math.Floor(position[0] / 500); + int z = Math.Floor(position[2] / 500); + for (int dx = -1; dx <= 1; dx++) + { + for (int dz = -1; dz <= 1; dz++) + { + array neighbors = m_Cells.Get(Cell(x + dx, z + dz)); + if (!neighbors) + continue; + foreach (int candidate : neighbors) + { + if (++checks > 100000) + { + Overflow = true; + return; + } + if (m_Parents[candidate] != -2 || vector.DistanceXZ(position, m_Nodes[candidate].Carrier.GetOrigin()) > 500) + continue; + m_Parents[candidate] = from; + m_Depths[candidate] = m_Depths[from] + 1; + queue.Insert(candidate); + } + } + } + } + } + + ERR_HQRoute Route(IEntity caller, bool downlink = false) + { + int index; + if (!m_Indices.Find(caller, index) || m_Parents[index] == -2) + return null; + ERR_HQRoute route = new ERR_HQRoute(); + route.Downlink = downlink; + while (index >= 0) + { + if (downlink) + route.Nodes.InsertAt(m_Nodes[index], 0); + else + route.Nodes.Insert(m_Nodes[index]); + index = m_Parents[index]; + } + return route; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQObservation.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQObservation.c new file mode 100644 index 0000000..814c515 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQObservation.c @@ -0,0 +1,199 @@ +// These samples exist only at intake. HQ never revisits their entity loadouts. +class ERR_HQVisualContact +{ + IEntity Entity; + vector Position; + float ObservedAt; + bool Escapist; + string Travel = "unknown"; + string Weapon = "unknown"; +} + +class ERR_HQObservation +{ + // Require current native line of sight before reading visible equipment. + static bool IsClearSighting(float age, float traceFraction, float exposure) + { + return age >= 0 && age <= 0.5 && traceFraction >= 1 && exposure > 0; + } + + static bool CanIdentifyWeapon(float distance, float exposure) + { + return distance >= 0 && distance <= 150 && exposure >= 0.5; + } + + static string WeaponCategory(EWeaponType type) + { + switch (type) + { + case EWeaponType.WT_HANDGUN: return "pistol"; + case EWeaponType.WT_RIFLE: return "rifle"; + case EWeaponType.WT_SNIPERRIFLE: return "sniper rifle"; + case EWeaponType.WT_MACHINEGUN: return "machine gun"; + case EWeaponType.WT_ROCKETLAUNCHER: return "rocket launcher"; + case EWeaponType.WT_GRENADELAUNCHER: return "grenade launcher"; + case EWeaponType.WT_FRAGGRENADE: return "grenade"; + case EWeaponType.WT_SMOKEGRENADE: return "smoke grenade"; + } + return "unidentified weapon"; + } + + static ERR_HQVisualContact Capture(BaseTarget target, float now) + { + if (!target || target.GetTargetCategory() != ETargetCategory.ENEMY || !IsClearSighting(target.GetTimeSinceSeen(), target.GetTraceFraction(), target.GetExposure())) + return null; + DamageManagerComponent damage = target.GetDamageManagerComponent(); + if (damage && damage.IsDestroyed()) + return null; + IEntity entity = target.GetTargetEntity(); + if (!entity) + return null; + ERR_HQVisualContact seen = new ERR_HQVisualContact(); + seen.Entity = entity; + seen.Position = target.GetLastSeenPosition(); + seen.ObservedAt = now - target.GetTimeSinceSeen() * 1000; + SCR_ChimeraCharacter character = SCR_ChimeraCharacter.Cast(entity); + if (character) + { + if (GetGame().GetPlayerManager()) + seen.Escapist = GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(entity) > 0; + seen.Travel = "on foot"; + if (CompartmentAccessComponent.GetVehicleIn(entity)) + seen.Travel = "in vehicle"; + // Read only the drawn weapon; never enumerate weapons or inventory. + if (CanIdentifyWeapon(target.GetDistance(), target.GetExposure())) + { + CharacterControllerComponent controller = CharacterControllerComponent.Cast(entity.FindComponent(CharacterControllerComponent)); + if (controller) + { + IEntity heldItem = controller.GetCurrentItemInHands(); + BaseWeaponComponent weapon; + if (heldItem) + weapon = BaseWeaponComponent.Cast(heldItem.FindComponent(BaseWeaponComponent)); + seen.Weapon = "none drawn"; + if (weapon) + seen.Weapon = WeaponCategory(weapon.GetWeaponType()); + } + } + } + else if (Vehicle.Cast(entity)) + { + seen.Travel = "vehicle"; + if (target.GetUnitType() == EAIUnitType.UnitType_Aircraft) + seen.Travel = "aircraft"; + } + return seen; + } + + static void Gather(SCR_AIGroupUtilityComponent utility, float now, out array samples) + { + samples.Clear(); + if (!utility) + return; + array visible = {}; + utility.ERR_HQGetVisualTargets(visible); + foreach (BaseTarget target : visible) + { + ERR_HQVisualContact seen = Capture(target, now); + if (!seen) + continue; + ERR_HQVisualContact existing; + foreach (ERR_HQVisualContact sample : samples) + { + if (sample.Entity == seen.Entity) + { + existing = sample; + break; + } + } + if (!existing) + { + if (samples.Count() < 64) + samples.Insert(seen); + } + else if (seen.ObservedAt > existing.ObservedAt || (seen.ObservedAt == existing.ObservedAt && existing.Weapon == "unknown" && seen.Weapon != "unknown")) + { + existing.Position = seen.Position; + existing.ObservedAt = seen.ObservedAt; + existing.Travel = seen.Travel; + existing.Weapon = seen.Weapon; + } + } + } + + static void Describe(ERR_HQReport report, array samples, float now) + { + // New observations must not silently inherit old equipment/travel details. + report.SeenEscapists = -1; + report.TravelMode = "unknown"; + report.SeenWeapons = "unknown"; + report.DetailsObservedAt = -1; + if (report.Distress) + return; + ERR_HQVisualContact anchor; + foreach (ERR_HQVisualContact sample : samples) + { + if (sample.Entity == report.Target && now - sample.ObservedAt >= 0 && now - sample.ObservedAt <= 500) + { + anchor = sample; + break; + } + } + if (!anchor) + return; + report.DetailsObservedAt = anchor.ObservedAt; + report.TravelMode = anchor.Travel; + report.SeenWeapons = anchor.Weapon; + array counted = {}; + array weapons = {}; + string travel; + foreach (ERR_HQVisualContact sighting : samples) + { + if (!sighting.Escapist || !sighting.Entity || counted.Contains(sighting.Entity) || now - sighting.ObservedAt < 0 || now - sighting.ObservedAt > 500 || vector.DistanceXZ(anchor.Position, sighting.Position) > 100) + continue; + counted.Insert(sighting.Entity); + if (travel.IsEmpty()) + travel = sighting.Travel; + else if (travel != sighting.Travel) + travel = "mixed travel"; + if (sighting.Weapon != "unknown" && !weapons.Contains(sighting.Weapon) && weapons.Count() < 4) + weapons.Insert(sighting.Weapon); + } + if (counted.IsEmpty()) + return; // A visible vehicle does not reveal its hidden occupants. + report.SeenEscapists = counted.Count(); + // A vehicle anchor remains a vehicle report, even with people near it. + if (anchor.Escapist) + report.TravelMode = travel; + report.SeenWeapons = "unknown"; + if (!weapons.IsEmpty()) + { + report.SeenWeapons = weapons[0]; + for (int i = 1; i < weapons.Count(); i++) + report.SeenWeapons += ", " + weapons[i]; + } + } +} + +modded class SCR_AIGroupUtilityComponent +{ + void ERR_HQGetVisualTargets(out array targets) + { + targets.Clear(); + foreach (SCR_AIInfoComponent info : m_aInfoComponents) + { + if (!info || !info.m_Perception) + continue; + AIAgent observer = AIAgent.Cast(info.GetOwner()); + if (!observer || !ERR_Actors.CanFight(observer.GetControlledEntity())) + continue; + array own = {}; + info.m_Perception.GetTargetsList(own, ETargetCategory.ENEMY); + foreach (BaseTarget target : own) + { + if (target && ERR_HQObservation.IsClearSighting(target.GetTimeSinceSeen(), target.GetTraceFraction(), target.GetExposure())) + targets.Insert(target); + } + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQReport.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQReport.c new file mode 100644 index 0000000..314f4a3 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HQReport.c @@ -0,0 +1,144 @@ +// A radio's category is protected in the stock gadget component. +modded class SCR_RadioComponent +{ + bool ERR_IsHQManpack() + { + return m_iRadioCategory == ERadioCategory.MANPACK; + } +} + +class ERR_HQRadio +{ + // 0: no radio, 1: basic radio, 2: manpack. Inventory is checked live. + static int Capability(IEntity character) + { + if (!ERR_Actors.CanFight(character)) + return 0; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(character.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) + return 0; + array items = {}; + inventory.GetItems(items); + int result; + foreach (IEntity item : items) + { + if (!item || !item.FindComponent(BaseRadioComponent)) + continue; + result = 1; + SCR_RadioComponent gadget = SCR_RadioComponent.Cast(item.FindComponent(SCR_RadioComponent)); + if (gadget && gadget.ERR_IsHQManpack()) + return 2; + } + return result; + } +} + +// HQ uses entity identity only for matching observations, never for its origin. +// Visible details are captured at intake and copied as scalar snapshots. +// Reports and orders contain immutable observed coordinates and timestamps. +class ERR_HQReport +{ + int MessageId; + IEntity Target; + SCR_AIGroup Source; + vector Position; + vector Velocity; + float ObservedAt = -1; + float LastSent = -60000; + float PerceptionStamp = -1; + bool HasVelocity; + bool Engaged; + bool Distress; + int SeenEscapists = -1; + string TravelMode = "unknown"; + string SeenWeapons = "unknown"; + float DetailsObservedAt = -1; + + ERR_HQReport Snapshot() + { + ERR_HQReport copy = new ERR_HQReport(); + copy.MessageId = MessageId; + copy.Target = Target; + copy.Source = Source; + copy.Position = Position; + copy.Velocity = Velocity; + copy.ObservedAt = ObservedAt; + copy.Engaged = Engaged; + copy.Distress = Distress; + copy.HasVelocity = HasVelocity; + copy.SeenEscapists = SeenEscapists; + copy.TravelMode = TravelMode; + copy.SeenWeapons = SeenWeapons; + copy.DetailsObservedAt = DetailsObservedAt; + return copy; + } + + string TravelDirection() + { + if (!HasVelocity) + return "unknown"; + if (Velocity.Length() < 0.5) + return "stationary"; + float x = Math.AbsFloat(Velocity[0]); + float z = Math.AbsFloat(Velocity[2]); + string northSouth = "N"; + string eastWest = "E"; + if (Velocity[2] < 0) + northSouth = "S"; + if (Velocity[0] < 0) + eastWest = "W"; + if (x < z * 0.414214) + return northSouth; + if (z < x * 0.414214) + return eastWest; + return northSouth + eastWest; + } + + string Description(float now, bool brief = false) + { + if (Distress) + return string.Format("Distress at friendly X=%1 Z=%2; enemy details unknown (%3s ago)", Math.Round(Position[0]), Math.Round(Position[2]), Math.Round(Math.Max(0, now - ObservedAt) / 1000)); + string count = "count unknown"; + if (SeenEscapists >= 0) + count = "at least " + SeenEscapists.ToString() + " spotted nearby"; + string motion = "speed/direction unknown"; + if (HasVelocity) + { + float speed = Math.Round(Velocity.Length() * 10) / 10.0; + float azimuth = Math.Atan2(Velocity[0], Velocity[2]) * Math.RAD2DEG; + if (azimuth < 0) + azimuth += 360; + int heading = Math.Round(azimuth); + motion = string.Format("%1 km/h, azimuth %2 degrees (%3)", Math.Round(speed * 3.6), heading % 360, TravelDirection()); + } + string details = count + "; " + TravelMode + "; " + motion + "; seen weapons: " + SeenWeapons; + if (brief) + return details; + string velocity = "unknown"; + if (HasVelocity) + velocity = string.Format("[%1,%2] m/s", Math.Round(Velocity[0] * 10) / 10.0, Math.Round(Velocity[2] * 10) / 10.0); + return string.Format("X=%1 Z=%2: %3; vector X/Z=%4 (%5s ago)", Math.Round(Position[0]), Math.Round(Position[2]), details, velocity, Math.Round(Math.Max(0, now - ObservedAt) / 1000)); + } + + static vector Predict(vector position, vector velocity, float seconds) + { + vector offset = velocity * Math.Clamp(seconds, 0, 20); + offset[1] = 0; + if (offset.Length() > 300) + offset = offset.Normalized() * 300; + return position + offset; + } + + int Priority(float now) + { + if (Distress) + return 0; + if (now - ObservedAt <= 15000) + { + if (Engaged) + return 3; + return 2; + } + return 1; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c new file mode 100644 index 0000000..e808bd7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c @@ -0,0 +1,31 @@ +// An idle rotor or zero speed alone is normal during takeoff, landing and reload. +// Confirm prolonged grounding, but recognize actual loss of flight capability. +class ERR_HelicopterAvailability +{ + protected float m_fGroundedSince = -1; + + string Check(float now, float spawnedAt, bool destroyed, bool disabled, bool livingPilot, bool playerControlled, bool servicing, float height, float speed) + { + if (destroyed) return "destroyed"; + if (now - spawnedAt < 20000) + { + m_fGroundedSince = -1; + return ""; + } + if (disabled) return "engine, rotor or airframe disabled"; + if (playerControlled) + { + m_fGroundedSince = -1; + return ""; + } + if (!livingPilot) return "no living pilot"; + if (servicing || height > 5 || speed > 2) + { + m_fGroundedSince = -1; + return ""; + } + if (m_fGroundedSince < 0) m_fGroundedSince = now; + if (now - m_fGroundedSince >= 60000) return "grounded for 60 seconds"; + return ""; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c new file mode 100644 index 0000000..ed47286 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c @@ -0,0 +1,32 @@ +// The stored geometry is the command actually emitted to the native aiming +// tree, never a chain of refreshed approximations. Entity/report/node links +// are weak; cancellation and physical projectile observation clear ownership. +class ERR_MortarAimSolution +{ + IEntity Gun; + // Last delivered observation proved equivalent to this original geometry. + ERR_HQReport Report; + int OrderId; + int Shot; + vector GunOrigin; + vector Impact; + vector AimTarget; + vector SalvoOffset; + int Charge; + float FlightTime; + + bool Matches(ERR_MortarBattery battery, ERR_HQReport report) + { + return battery && Gun && Gun == battery.Gun && Report && Report == report && OrderId == battery.OrderId && Shot == battery.OrderShots; + } +} + +class ERR_MortarAimRules +{ + // Three-dimensional tolerances include terrain/aim-height changes. These are + // equivalence limits, not permission to move the gun or redirect its barrel. + static bool Equivalent(int commandedCharge, int updatedCharge, vector commandedOrigin, vector updatedOrigin, vector commandedImpact, vector updatedImpact, vector commandedAim, vector updatedAim, float commandedFlight, float updatedFlight) + { + return commandedCharge >= 0 && commandedCharge == updatedCharge && commandedFlight > 0 && updatedFlight > 0 && vector.Distance(commandedOrigin, updatedOrigin) <= 0.05 && vector.Distance(commandedImpact, updatedImpact) <= 0.1 && vector.Distance(commandedAim, updatedAim) <= 0.1 && Math.AbsFloat(commandedFlight - updatedFlight) <= 0.05; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c new file mode 100644 index 0000000..f1a40f8 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c @@ -0,0 +1,557 @@ +// Migrated from the independently authored AI extension; successor-owned physical groups. +// Each site/phase has its own repeat limiter. Changed reasons and lifecycle +// events are immediate; only identical polling results are summarized. +class ERR_MortarTraceState +{ + string LastReason; + float NextLog; + int Suppressed; + + bool Due(string reason, float now) + { + if (reason != LastReason || now >= NextLog) + { + LastReason = reason; + NextLog = now + 30000; + return true; + } + Suppressed++; + return false; + } +} + +class ERR_MortarBattery +{ + static const ResourceName GUN = "{D1FFE458E8AC4BDB}Prefabs/Weapons/Mortars/2B14/Mortar_2B14.et"; + static const ResourceName SHELL = "{98EC9C526AFBA282}Prefabs/Weapons/Ammo/Ammo_Shell_82mm_HE_O832DU.et"; + static const ResourceName CREW = "{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et"; + static const ResourceName RADIO_OPERATOR = "{612F43A4D5AE765F}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_RTO.et"; + IEntity RadioOperator; + IEntity Gun; + SCR_AIGroup Group; + ref SCR_AIStaticArtilleryActivity Activity; + ref ERR_HQReport Report; + ref ERR_HQRoute RadioOrder; + ref ERR_HQReport PendingRadioReport; + ref ERR_HQReport PendingSupplyReport; + ref ERR_MortarRefresh Refresh; + bool RefreshRejected; // latched through an already committed projectile + protected ref ERR_MortarReadiness m_Readiness; + protected ref ERR_MortarSupplyTransfer m_Transfer; + protected ref array m_AttemptedShells = {}; + protected bool m_Stopped; + protected SCR_AIStaticArtilleryActivity m_ObservedActivity; + protected int m_ObservedActivityOrder; + protected EAIActionState m_ActivityTerminal = EAIActionState.EVALUATED; + protected ref ERR_MortarReportLedger m_ReportLedger = new ERR_MortarReportLedger(); + vector Position; + vector Impact; + vector AimOffset; + int AimedShot = -1; + float FlightTime; + float AimedAt = -1; + float AimValidatedAt = -1; + SCR_AIGetArtilleryAimDistanceCompensation AimSolver; + ref ERR_MortarAimSolution AimSolution; + float AirspaceUntil; + vector AirspaceImpact; + float AirspaceRadius = 600; + float OrderedAt; + float NextOrder; + float SpawnedAt; + bool StartupActivated; + bool Released; + bool Rejected; + bool Claimed; // keeps the world slot occupied after the battery is destroyed + int SiteId; + int OrderId; + int RadioId; + int SourceId; + int OrderShots; + int TotalShots; + bool CommandOpen; + string LastFailure; + string SpawnFailure; + vector LastCandidate; + ref map SearchCounts = new map(); + ref map Traces = new map(); + + void Audit(string kind, string detail) + { + ERR_HQ.Event("MORTAR " + kind, string.Format("site=%1 order=%2 radio=M%3 source=M%4 position=%5; %6", SiteId, OrderId, RadioId, SourceId, Position, detail), RadioId); + } + + void Trace(string phase, string reason, string detail) + { + ERR_MortarTraceState state; + if (!Traces.Find(phase, state)) + { + state = new ERR_MortarTraceState(); + Traces.Insert(phase, state); + } + string previous = state.LastReason; + if (!state.Due(reason, GetGame().GetWorld().GetWorldTime())) + return; + Audit(phase, string.Format("reason=%1; %2; previous=%3 repeated polls omitted=%4", reason, detail, previous, state.Suppressed)); + state.Suppressed = 0; + } + + void FlushTraces() + { + foreach (string phase, ERR_MortarTraceState state : Traces) + { + if (state.Suppressed > 0) + Audit("REPEATS", string.Format("phase=%1 reason=%2 repeated polls omitted=%3", phase, state.LastReason, state.Suppressed)); + } + Traces.Clear(); + } + + string OperationalReason() + { + if (m_Stopped) return "battery stopped"; + if (!Gun) return "gun missing"; + if (!SpawnFailure.IsEmpty()) return SpawnFailure; + if (!Group || !Group.GetGroupUtilityComponent()) return "crew group missing"; + if (Group.GetFaction() != ERR_GameMode.Get().EnemyFaction()) return "crew changed faction"; + if (Group.GetPlayerCount(true) > 0) return "player in crew group"; + if (Group.GetAgentsCount() == 0) return "crew group empty"; + DamageManagerComponent damage = DamageManagerComponent.Cast(Gun.FindComponent(DamageManagerComponent)); + if (damage && damage.IsDestroyed()) return "gun destroyed"; + return ""; + } + + bool CanRequest(ERR_HQReport report, float now) + { + return !m_Stopped && ERR_MortarPrediction.Fresh(report, now) && m_ReportLedger.Available(report.MessageId, report.ObservedAt, now); + } + bool BeginRequest(ERR_HQReport report, float now) + { + if (!CanRequest(report, now) || !m_ReportLedger.Claim(report.MessageId, report.ObservedAt, now)) return false; + Cancel("superseded by new HQ order"); + FlushTraces(); + OrderId++; + RadioId = 0; + SourceId = report.MessageId; + OrderShots = 0; + Released = false; + CommandOpen = true; + OrderedAt = now; + LastFailure = ""; + Audit("COMMAND", string.Format("requested rounds=%1 HE radius=%2m; %3", ERR_MortarSalvo.ROUNDS, ERR_MortarSalvo.RADIUS_METRES, report.Description(now))); + return true; + } + + bool CanRefresh(ERR_HQReport report, float now) + { + if (m_Stopped || !CommandOpen || !Activity || Refresh || RefreshRejected || Rejected || !Operational()) return false; + return ERR_MortarRefreshRules.Newer(Report, report, now) && m_ReportLedger.Available(report.MessageId, report.ObservedAt, now); + } + bool BeginRefresh(ERR_HQReport report, ERR_HQRoute route, float now) + { + if (!route || !CanRefresh(report, now) || !m_ReportLedger.Claim(report.MessageId, report.ObservedAt, now)) return false; + Refresh = new ERR_MortarRefresh(this, report, route); + Audit("UPDATE QUEUED", string.Format("same order; update radio=M%1 newer observation=M%2 observed=%3", route.MessageId, report.MessageId, report.ObservedAt)); + return true; + } + void RejectRefresh(string reason) + { + // Never clear the commit latch or steal the physical projectile callback. + // AllowShot refuses further loads now; HQ cancels after it is observed. + RefreshRejected = true; + Refresh = null; + LastFailure = reason; + Audit("UPDATE REJECTED", reason); + } + + void ObserveProjectile(IEntity projectileEntity, IEntity firingCharacter, bool playerGunner) + { + if (!projectileEntity) + { + Audit("FIRE CALLBACK", "native OnWeaponFired had no projectile; no confirmed shot counted"); + return; + } + TotalShots++; + if (CommandOpen && Released && !playerGunner) + { + OrderShots++; + // Only a physical projectile unlocks the next load. It must be aimed again. + Released = false; + AimedAt = -1; + AimValidatedAt = -1; + AimSolver = null; + AimSolution = null; + Audit("FIRED", string.Format("physical projectile=%1 origin=%2 order shots=%3 total shots=%4 predicted impact=%5 predicted flight=%6s gunner=%7 (impact not observed)", projectileEntity, projectileEntity.GetOrigin(), OrderShots, TotalShots, Impact, FlightTime, firingCharacter)); + } + else + Audit("FIRED UNASSIGNED", string.Format("physical projectile=%1 origin=%2 player gunner=%3 order open=%4 committed=%5 total shots=%6; no active HQ order attribution", projectileEntity, projectileEntity.GetOrigin(), playerGunner, CommandOpen, Released, TotalShots)); + } + + void ReserveShellAirspace(float now) + { + // Enclose every still-airborne shell, including an earlier, longer flight. + // A later round must not move/shrink the existing exclusion or deadline. + if (now >= AirspaceUntil) + { + AirspaceImpact = Impact; + AirspaceRadius = 600; + } + AirspaceRadius = Math.Max(AirspaceRadius, vector.DistanceXZ(AirspaceImpact, Impact) + 600); + AirspaceUntil = Math.Max(AirspaceUntil, now + (FlightTime + 10) * 1000); + } + + bool SpawnFailed(string reason) + { + SpawnFailure = reason; + Audit("DEPLOY FAILED", string.Format("reason=%1 claimed=%2 gun=%3 group=%4", reason, Claimed, Gun, Group)); + return false; + } + + void SearchResult(vector candidate, string reason) + { + LastCandidate = candidate; + int count; + SearchCounts.Find(reason, count); + SearchCounts.Set(reason, count + 1); + } + + void SiteStatus(float now) + { + if (!SearchCounts.IsEmpty()) + { + string counts; + foreach (string reason, int count : SearchCounts) counts += string.Format("%1=%2; ", reason, count); + Audit("SITE SEARCH", string.Format("candidate counts since last summary: %1 last candidate=%2", counts, LastCandidate)); + SearchCounts.Clear(); + } + int agents, living; + int actionState = -1; + if (Group) + { + array crew = {}; + Group.GetAgents(crew); + agents = crew.Count(); + foreach (AIAgent agent : crew) + { + if (agent && ERR_Actors.CanFight(agent.GetControlledEntity())) living++; + } + } + if (Activity) actionState = Activity.GetActionState(); + bool connected; + ERR_HQ hq = ERR_HQ.Get(); + if (hq && Group) connected = hq.MortarConnected(Group); + Audit("SITE STATUS", string.Format("claimed=%1 startup=%2 operational=%3 crew agents=%4 fighting=%5 inventory HE=%6 radio connected=%7 cooldown remaining=%8s", Claimed, StartupActivated, Operational(), agents, living, CountShells(), connected, Math.Max(0, NextOrder - now) / 1000)); + Audit("ORDER STATUS", string.Format("open=%1 route pending=%2 native action=%3 shell committed=%4 order shots=%5 total shots=%6 age=%7s last failure=%8", CommandOpen, RadioOrder != null, actionState, Released, OrderShots, TotalShots, Math.Max(0, now - OrderedAt) / 1000, LastFailure)); + if (!SpawnFailure.IsEmpty()) Audit("PARTIAL DEPLOYMENT", SpawnFailure); + if (!Operational()) Trace("SITE BLOCK", OperationalReason(), "spawn failure=" + SpawnFailure); + } + + bool Operational() + { + return OperationalReason().IsEmpty(); + } + + int CountShells() + { + if (!Group) + return 0; + int count; + array items = {}; + array agents = {}; + Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + if (!agent || !ERR_Actors.CanFight(agent.GetControlledEntity())) + continue; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(agent.GetControlledEntity().FindComponent(InventoryStorageManagerComponent)); + if (!inventory) + continue; + ERR_Inventory.AppendUnique(inventory, items); + } + foreach (IEntity item : items) + if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == SHELL) count++; + return count; + } + + void Bind(int siteId, SCR_AIGroup group, IEntity gun, float now) + { + SiteId = siteId; + Group = group; + Gun = gun; + Position = gun.GetOrigin(); + SpawnedAt = now; + Claimed = true; + m_Readiness = new ERR_MortarReadiness(this); + } + + + int InventoryShells(InventoryStorageManagerComponent inventory) + { + if (!inventory) + return 0; + int count; + array items = {}; + ERR_Inventory.Items(inventory, items); + foreach (IEntity item : items) + { + if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == SHELL) + count++; + } + return count; + } + + bool Stopped() { return m_Stopped; } + bool SupplyPending() { return m_Transfer && m_Transfer.Unresolved(); } + bool SupplyAuthorized(float now) + { + if (!Replication.IsServer() || m_Stopped || !StartupActivated || !Operational() || !CommandOpen || !ERR_HQ.MissionActive()) return false; + ERR_MortarSystem system = ERR_MortarSystem.Get(); + if (!system || system.FindGun(Gun) != this) return false; + ERR_HQReport suppliedReport = Report; + if (!suppliedReport) suppliedReport = PendingSupplyReport; + return ERR_MortarPrediction.Fresh(suppliedReport, now); + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + Cancel("HQ stopped"); + if (m_Readiness) m_Readiness.Stop(); + } + + ERR_MortarSupplyState SupplyState(float now) + { + // Observe an existing native operation even after its order was canceled. + // No second request may race an unresolved transfer on this battery. + if (m_Transfer) + { + ERR_MortarSupplyState observed = m_Transfer.Poll(now); + if (m_Transfer.CapturedOrder() == OrderId) + { + if (observed == ERR_MortarSupplyState.READY) m_Transfer = null; + return observed; + } + if (m_Transfer.Unresolved()) return ERR_MortarSupplyState.FAILED; + m_Transfer = null; + } + if (!SupplyAuthorized(now)) return SupplyStateFailed("current HQ order, crew or report is unavailable"); + SCR_AIVehicleUsageComponent usage = SCR_AIVehicleUsageComponent.Cast(Gun.FindComponent(SCR_AIVehicleUsageComponent)); + IEntity gunner; + if (usage && usage.GetTurretCompartmentSlot()) + gunner = usage.GetTurretCompartmentSlot().GetOccupant(); + array agents = {}; + Group.GetAgents(agents); + float nearest = float.MAX; + if (!gunner) + { + foreach (AIAgent candidate : agents) + { + if (!candidate || candidate.GetControlledEntity() == RadioOperator || !ERR_Actors.CanFight(candidate.GetControlledEntity())) + continue; + float distance = vector.DistanceXZ(Gun.GetOrigin(), candidate.GetControlledEntity().GetOrigin()); + if (distance < nearest) + { + nearest = distance; + gunner = candidate.GetControlledEntity(); + } + } + } + if (!gunner) return SupplyStateFailed("no fighting gunner found"); + if (ERR_Actors.Group(gunner) != Group) return SupplyStateFailed("turret occupant belongs to another group"); + if (!ERR_Actors.CanFight(gunner)) return SupplyStateFailed("gunner cannot fight"); + InventoryStorageManagerComponent destination = InventoryStorageManagerComponent.Cast(gunner.FindComponent(InventoryStorageManagerComponent)); + if (!destination) + return SupplyStateFailed("gunner inventory missing"); + if (InventoryShells(destination) > 0) + return ERR_MortarSupplyState.READY; + int nearbyDonors, donorShells, storageRejected; + array consideredShells = {}; + foreach (AIAgent bearer : agents) + { + if (!bearer || !ERR_Actors.CanFight(bearer.GetControlledEntity())) + continue; + IEntity donor = bearer.GetControlledEntity(); + if (donor == gunner || vector.DistanceXZ(donor.GetOrigin(), gunner.GetOrigin()) > 12) + continue; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(donor.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) + continue; + nearbyDonors++; + array items = {}; + ERR_Inventory.Items(inventory, items); + foreach (IEntity item : items) + { + if (!item || !item.GetPrefabData() || item.GetPrefabData().GetPrefabName() != SHELL) + continue; + if (consideredShells.Contains(item) || m_AttemptedShells.Contains(item)) continue; + consideredShells.Insert(item); + donorShells++; + BaseInventoryStorageComponent storage = destination.FindStorageForItem(item, EStoragePurpose.PURPOSE_DEPOSIT); + if (!storage) { storageRejected++; continue; } + m_AttemptedShells.Insert(item); // even rejected/ambiguous requests are never retried + m_Transfer = new ERR_MortarSupplyTransfer(this, donor, gunner, item, storage, now); + if (!m_Transfer.Begin(now)) return SupplyStateFailed("exact shell transfer request rejected; no retry"); + Audit("AMMO TRANSFER", string.Format("one exact-item move pending donor=%1 gunner=%2 shell=%3 order=%4; awaiting callback AND physical destination", donor, gunner, item, OrderId)); + return ERR_MortarSupplyState.PENDING; + } + } + return SupplyStateFailed(string.Format("gunner empty; fighting donors within 12m=%1 unattempted HE=%2 destination storage rejected=%3", nearbyDonors, donorShells, storageRejected)); + } + + // Compatibility for existing native callers; request acceptance is NOT ready. + bool SupplyGunner() { return SupplyState(GetGame().GetWorld().GetWorldTime()) == ERR_MortarSupplyState.READY; } + protected ERR_MortarSupplyState SupplyStateFailed(string reason) + { + SupplyFailed(reason); + return ERR_MortarSupplyState.FAILED; + } + + bool SupplyFailed(string reason) + { + LastFailure = reason; + Audit("AMMO FAILED", reason); + return false; + } + + protected void WatchActivity() + { + DetachActivity(); + if (!Activity || !CommandOpen || m_Stopped) return; + m_ObservedActivity = Activity; + m_ObservedActivityOrder = OrderId; + Activity.m_OnActionCompleted.Insert(OnActivityCompleted); + Activity.m_OnActionFailed.Insert(OnActivityFailed); + } + protected void DetachActivity() + { + if (m_ObservedActivity) + { + m_ObservedActivity.m_OnActionCompleted.Remove(OnActivityCompleted); + m_ObservedActivity.m_OnActionFailed.Remove(OnActivityFailed); + } + m_ObservedActivity = null; + m_ObservedActivityOrder = 0; + m_ActivityTerminal = EAIActionState.EVALUATED; + } + protected void OnActivityCompleted(SCR_AIActionBase action) + { + ObserveActivityTerminal(action, EAIActionState.COMPLETED); + } + protected void OnActivityFailed(SCR_AIActionBase action) + { + ObserveActivityTerminal(action, EAIActionState.FAILED); + } + protected void ObserveActivityTerminal(SCR_AIActionBase action, EAIActionState terminal) + { + if (m_Stopped || !CommandOpen || !Activity || action != Activity || action != m_ObservedActivity || OrderId != m_ObservedActivityOrder) return; + if (m_ActivityTerminal != EAIActionState.EVALUATED) return; + if (terminal != EAIActionState.COMPLETED && terminal != EAIActionState.FAILED) return; + // Vanilla deselection can overwrite COMPLETED/FAILED with EVALUATED + // before the next HQ tick. Record its actual event, never infer completion + // from projectile totals, and never cancel from inside the native callback. + m_ActivityTerminal = terminal; + Audit("ACTIVITY EVENT", string.Format("native terminal event=%1 current state=%2 captured order=%3 physical order shots=%4 total shots=%5 committed=%6", terminal, Activity.GetActionState(), m_ObservedActivityOrder, OrderShots, TotalShots, Released)); + } + protected EAIActionState ActivityTerminal() + { + if (Activity == m_ObservedActivity && OrderId == m_ObservedActivityOrder) + if (m_ActivityTerminal == EAIActionState.COMPLETED || m_ActivityTerminal == EAIActionState.FAILED) return m_ActivityTerminal; + return Activity.GetActionState(); + } + + void Cancel(string reason = "cancel requested") + { + if (CommandOpen) + { + FlushTraces(); + Audit("ORDER END", string.Format("reason=%1 observed shots=%2 shell committed=%3 elapsed=%4s last failure=%5", reason, OrderShots, Released, (GetGame().GetWorld().GetWorldTime() - OrderedAt) / 1000, LastFailure)); + } + CommandOpen = false; + // Remove before our own cleanup calls Complete; that is not a native + // successful fire mission and must not manufacture an observed event. + DetachActivity(); + RadioOrder = null; + PendingRadioReport = null; + PendingSupplyReport = null; + Refresh = null; + RefreshRejected = false; + if (m_Transfer) m_Transfer.Invalidate(); + Report = null; + AimedAt = -1; + AimValidatedAt = -1; + AimSolver = null; + AimSolution = null; + if (Activity) + Activity.Complete(); + Activity = null; + } + + // Idle distant batteries still report through HQ's scheduler. Their native + // AI needs full detail while firing or when players can interact with them. + protected void UpdateCrewDetail(float now, bool firing = false) + { + if (!Group || Group.GetPlayerCount(true) > 0) + return; + bool active = firing || Activity != null || ERR_MortarSystem.NearPlayer(Position); + int lod = -1; + if (active) + lod = 0; + if (Group.GetPermanentLOD() != lod) + Group.SetPermanentLOD(lod); + if (active && !Group.IsAIActivated()) + Group.ActivateAI(); + array agents = {}; + Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + if (!agent || EntityUtils.IsPlayer(agent.GetControlledEntity())) + continue; + if (agent.GetPermanentLOD() != lod) + agent.SetPermanentLOD(lod); + if (active && !agent.IsAIActivated() && ERR_Actors.CanFight(agent.GetControlledEntity())) + agent.ActivateAI(); + } + } + + void Update(float now) + { + if (m_Stopped) return; + if (!StartupActivated) + { + if (!SpawnFailure.IsEmpty()) return; + if (!m_Readiness) { SpawnFailed("initial support readiness owner missing"); return; } + ERR_MortarSupplyState startup = m_Readiness.Poll(now); + if (startup != ERR_MortarSupplyState.READY) return; + StartupActivated = true; + } + if (m_Transfer) m_Transfer.Poll(now); + if (!Operational()) + { + Cancel(OperationalReason()); + return; + } + if (Activity) + { + Trace("ACTIVITY", string.Format("native state=%1", Activity.GetActionState()), string.Format("age=%1s aim age=%2s committed=%3 shots=%4", (now - OrderedAt) / 1000, (now - AimedAt) / 1000, Released, OrderShots)); + EAIActionState terminal = ActivityTerminal(); + if (terminal == EAIActionState.FAILED) Cancel("native artillery activity FAILED"); + else if (terminal == EAIActionState.COMPLETED) Cancel("native artillery activity COMPLETED (shot count is separate)"); + else if (now - OrderedAt > ERR_MortarSalvo.TIMEOUT_MS) Cancel("120s artillery salvo timeout"); + } + if (StartupActivated) + UpdateCrewDetail(now); + } + + void Order(ERR_HQReport report, float now) + { + if (m_Stopped || !StartupActivated || !Operational() || !CommandOpen || Activity || !ERR_MortarPrediction.Fresh(report, now)) return; + Report = report.Snapshot(); + OrderedAt = now; + NextOrder = now + 30000; + Released = false; + UpdateCrewDetail(now, true); + Activity = new SCR_AIStaticArtilleryActivity(Group.GetGroupUtilityComponent(), null, report.Position, SCR_EAIArtilleryAmmoType.HIGH_EXPLOSIVE, ERR_MortarSalvo.ROUNDS); + WatchActivity(); + Group.GetGroupUtilityComponent().AddAction(Activity); + Audit("AIM", string.Format("native activity created; latest source=M%1 observed=%2", report.MessageId, report.Description(now))); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c new file mode 100644 index 0000000..a225a87 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c @@ -0,0 +1,68 @@ +class ERR_MortarCourierCallback : ScriptedInventoryOperationCallback +{ + ERR_MortarCourierTransfer Transfer; + protected override void OnComplete() { if (Transfer) Transfer.Acknowledge(true); } + protected override void OnFailed() { if (Transfer) Transfer.Acknowledge(false); } +} +// One exact native move belonging to one courier trip. Never retries ambiguous work. +class ERR_MortarCourierTransfer +{ + protected ERR_MortarLogistics m_Service; + protected IEntity m_Shell; + protected IEntity m_From; + protected IEntity m_To; + protected InventoryStorageManagerComponent m_Source; + protected InventoryStorageManagerComponent m_Destination; + protected BaseInventoryStorageComponent m_Storage; + protected ref ERR_MortarCourierCallback m_Callback; + protected int m_Trip; + protected int m_Acknowledgement; + protected float m_Deadline; + protected bool m_Accepted; + protected bool m_Invalidated; + protected bool m_Resolved; + void ERR_MortarCourierTransfer(ERR_MortarLogistics service, int trip, IEntity shell, IEntity from, IEntity to, BaseInventoryStorageComponent storage, float now) + { + m_Service = service; m_Trip = trip; m_Shell = shell; m_From = from; m_To = to; m_Storage = storage; m_Deadline = now + 8000; + m_Source = InventoryStorageManagerComponent.Cast(from.FindComponent(InventoryStorageManagerComponent)); + m_Destination = InventoryStorageManagerComponent.Cast(to.FindComponent(InventoryStorageManagerComponent)); + } + static bool Proven(bool complete, bool source, bool destination, bool exact) { return complete && !source && destination && exact; } + protected bool Contains(InventoryStorageManagerComponent inventory) + { + if (!inventory || !m_Shell) return false; + array items = {}; ERR_Inventory.Items(inventory, items); return items.Contains(m_Shell); + } + void Acknowledge(bool success) + { + if (m_Acknowledgement != 0) return; + if (success) m_Acknowledgement = 1; + else m_Acknowledgement = -1; + } + bool Begin(float now) + { + if (m_Callback || !Replication.IsServer() || !m_Service.TransferAllowed(m_Trip, m_Shell, m_From, m_To, now) || !Contains(m_Source) || Contains(m_Destination)) return false; + m_Callback = new ERR_MortarCourierCallback(); m_Callback.Transfer = this; + m_Accepted = m_Source.TryMoveItemToStorage(m_Shell, m_Storage, -1, m_Callback); + if (!m_Accepted) { Acknowledge(false); m_Resolved = true; } + return m_Accepted; + } + void Invalidate() { m_Invalidated = true; } + bool Unresolved() { return m_Accepted && !m_Resolved; } + IEntity Shell() { return m_Shell; } + int Poll(float now) + { + // A deleted exact entity cannot complete later; close as a permanent loss. + if (!m_Shell) { m_Resolved = true; m_Invalidated = true; return -1; } + bool exact; + InventoryItemComponent item; + if (m_Shell) item = InventoryItemComponent.Cast(m_Shell.FindComponent(InventoryItemComponent)); + if (item && item.GetParentSlot()) exact = item.GetParentSlot().GetStorage() == m_Storage; + bool proven = Proven(m_Acknowledgement == 1, Contains(m_Source), Contains(m_Destination), exact); + if (proven || m_Acknowledgement < 0) m_Resolved = true; + if (m_Invalidated || now >= m_Deadline || !m_Service.TransferAllowed(m_Trip, m_Shell, m_From, m_To, now)) { m_Invalidated = true; return -1; } + if (proven) return 1; + if (m_Acknowledgement < 0 || !m_Accepted) return -1; + return 0; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c new file mode 100644 index 0000000..a457392 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c @@ -0,0 +1,308 @@ +// The dedicated manpack operator has no mortar-shell backpack. Preserve the +// native chooser and its caller's original index for every eligible gunner. +modded class SCR_AIStaticArtilleryActivity +{ + protected override AIAgent FindBestAgentForArtillery(notnull array agents, notnull IEntity artilleryEntity, out int outIndex) + { + ERR_MortarSystem system = ERR_MortarSystem.Get(); + ERR_MortarBattery battery; + if (system) battery = system.FindGun(artilleryEntity); + if (!battery) return super.FindBestAgentForArtillery(agents, artilleryEntity, outIndex); + array gunners = {}; + foreach (AIAgent agent : agents) + { + if (agent && agent.GetControlledEntity() != battery.RadioOperator && ERR_Actors.CanFight(agent.GetControlledEntity())) + gunners.Insert(agent); + } + int filteredIndex; + AIAgent selected = super.FindBestAgentForArtillery(gunners, artilleryEntity, filteredIndex); + outIndex = -1; + if (selected) outIndex = agents.Find(selected); + return selected; + } +} + +// Leave all other artillery (including player-operated captured guns) native. +modded class SCR_AIGetArtilleryAimDistanceCompensation +{ + override ENodeResult EOnTaskSimulate(AIAgent owner, float dt) + { + IEntity gun; + GetVariableIn(PORT_ARTILLERY_ENTITY, gun); + ERR_MortarSystem system = ERR_MortarSystem.Get(); + ERR_MortarBattery battery; + if (system) + battery = system.FindGun(gun); + if (!battery) + return super.EOnTaskSimulate(owner, dt); + battery.AimedAt = -1; + battery.AimValidatedAt = -1; + battery.AimSolver = null; + battery.AimSolution = null; + float now = GetGame().GetWorld().GetWorldTime(); + ERR_HQReport report = system.Latest(battery, now); + if (!ERR_HQ.MissionActive()) { system.Withhold(battery, "aim: mission inactive"); return ENodeResult.FAIL; } + if (!battery.CommandOpen || battery.OrderShots >= ERR_MortarSalvo.ROUNDS) { system.Withhold(battery, "aim: salvo complete or order closed"); return ENodeResult.FAIL; } + if (battery.Released) { system.Withhold(battery, "aim: waiting for committed projectile"); return ENodeResult.FAIL; } + if (!report) { system.Withhold(battery, "aim: " + system.ContactFailure(battery)); return ENodeResult.FAIL; } + battery.Trace("AIM START", "solving moving intercept", string.Format("latest source=M%1; %2", report.MessageId, report.Description(now))); + ERR_MortarAimSolution solution = ERR_Solve(battery, system, report, now); + if (!solution) return ENodeResult.FAIL; + battery.Impact = solution.Impact; + battery.AimOffset = solution.SalvoOffset; + battery.AimedShot = battery.OrderShots; + battery.FlightTime = solution.FlightTime; + battery.AimSolution = solution; + battery.AimSolver = this; // weak: do not retain a destroyed native behavior tree + battery.AimedAt = now; + battery.AimValidatedAt = now; + battery.LastFailure = ""; + battery.Trace("AIM SOLUTION", "ready", string.Format("predicted impact=%1 flight=%2s charge index=%3 aim target=%4 latest source=M%5", solution.Impact, solution.FlightTime, solution.Charge, solution.AimTarget, report.MessageId)); + SetVariableOut(PORT_AIM_POS, solution.AimTarget); + SetVariableOut(PORT_INIT_SPEED_ID, solution.Charge); + return ENodeResult.SUCCESS; + } + + // Reuse this exact native node's coefficient/elevation APIs. A slow native + // barrel can keep its command only if a NEW solve still matches that command. + bool ERR_RevalidateAim(ERR_MortarBattery battery, ERR_MortarSystem system, ERR_HQReport report, float now) + { + IEntity gun; + ResourceName ammo; + GetVariableIn(PORT_ARTILLERY_ENTITY, gun); + GetVariableIn(PORT_AMMO_PREFAB, ammo); + ERR_MortarAimSolution commanded = battery.AimSolution; + if (battery.AimSolver != this || !commanded || !commanded.Matches(battery, report) || gun != battery.Gun || ammo != ERR_MortarBattery.SHELL) + return system.Withhold(battery, "original aim solver or command no longer available"); + if (!ERR_MortarPrediction.Fresh(report, now)) return system.Withhold(battery, system.ContactFailure(battery)); + ERR_MortarAimSolution updated = ERR_Solve(battery, system, report, now); + if (!updated) return false; + if (!ERR_MortarAimRules.Equivalent(commanded.Charge, updated.Charge, commanded.GunOrigin, updated.GunOrigin, commanded.Impact, updated.Impact, commanded.AimTarget, updated.AimTarget, commanded.FlightTime, updated.FlightTime)) + return system.Withhold(battery, "new ballistic solution requires native re-aim", string.Format("gun drift=%1m impact drift=%2m aim drift=%3m charge=%4/%5 flight=%6/%7s", vector.Distance(commanded.GunOrigin, updated.GunOrigin), vector.Distance(commanded.Impact, updated.Impact), vector.Distance(commanded.AimTarget, updated.AimTarget), commanded.Charge, updated.Charge, commanded.FlightTime, updated.FlightTime)); + // Keep the ORIGINAL command/impact/flight. Comparing successive refreshed + // solutions would allow a moving target to drift away in small increments. + battery.AimValidatedAt = now; + battery.Trace("AIM REVALIDATED", "same native command", string.Format("fresh ballistic solve matched original; source=M%1 observed age=%2s", report.MessageId, (now - report.ObservedAt) / 1000)); + return true; + } + + // The report may change only after a real HQ downlink. Re-solve against the + // ORIGINAL geometry; never replace the commanded solution with an + // approximately equivalent successor (which would permit tolerance creep). + bool ERR_AdoptReport(ERR_MortarBattery battery, ERR_MortarSystem system, ERR_HQReport report, float now) + { + IEntity gun; + ResourceName ammo; + GetVariableIn(PORT_ARTILLERY_ENTITY, gun); + GetVariableIn(PORT_AMMO_PREFAB, ammo); + ERR_MortarAimSolution commanded = battery.AimSolution; + if (battery.Released || battery.RefreshRejected || !battery.CommandOpen || !battery.Refresh || !battery.Refresh.DeliveredFor(battery, report)) + return system.Withhold(battery, "target update lacks completed delivery for this uncommitted order"); + if (battery.AimSolver != this || !commanded || !commanded.Matches(battery, battery.Report) || gun != battery.Gun || ammo != ERR_MortarBattery.SHELL) + return system.Withhold(battery, "target update lost its original native aim owner"); + if (battery.AimedAt < 0 || now < battery.AimedAt) return system.Withhold(battery, "original native aim timestamp invalid"); + if (!ERR_MortarRefreshRules.Newer(battery.Report, report, now)) return system.Withhold(battery, "target update is not a newer fresh same-target observation"); + ERR_MortarAimSolution updated = ERR_Solve(battery, system, report, now); + if (!updated) return false; + if (!ERR_MortarAimRules.Equivalent(commanded.Charge, updated.Charge, commanded.GunOrigin, updated.GunOrigin, commanded.Impact, updated.Impact, commanded.AimTarget, updated.AimTarget, commanded.FlightTime, updated.FlightTime)) + return system.Withhold(battery, "target update requires a different native aim command"); + // Synchronous adoption changes accepted observation identity together. + // Original command time/geometry, order deadline and shot count survive. + commanded.Report = report; + battery.Report = report; + battery.AimValidatedAt = now; + return true; + } + + protected ERR_MortarAimSolution ERR_Solve(ERR_MortarBattery battery, ERR_MortarSystem system, ERR_HQReport report, float now) + { + IEntity gun = battery.Gun; + vector gunOrigin = gun.GetOrigin(); + ResourceName ammo; + GetVariableIn(PORT_AMMO_PREFAB, ammo); + if (ammo != ERR_MortarBattery.SHELL) { system.Withhold(battery, "unsupported ammunition prefab", ammo); return null; } + Resource resource = Resource.Load(ammo); + if (!resource || !resource.IsValid() || !resource.GetResource()) { system.Withhold(battery, "shell resource load failed", ammo); return null; } + IEntitySource source = resource.GetResource().ToEntitySource(); + if (!source) { system.Withhold(battery, "shell resource has no entity source", ammo); return null; } + array coefficients = {}; + GetAmmoInitialSpeedCoefficients(ammo, coefficients); + if (coefficients.IsEmpty()) + coefficients.Insert(1.0); + float minimum, maximum; + GetVerticalAimLimits(gun, minimum, maximum); + float flight = 30; + float offset; + int charge; + vector impact; + vector salvoOffset = ERR_MortarSalvo.Offset(battery.SiteId, battery.OrderId, battery.OrderShots); + bool converged; + // Iterate the moving intercept using the native shell's flight time. + // Reject non-convergence rather than fire with an arbitrary lead time. + for (int iteration = 0; iteration < 4; iteration++) + { + if (!ERR_MortarPrediction.Predict(report, now, flight + 2, impact)) { system.Withhold(battery, "aim prediction: " + ERR_MortarPrediction.FailureReason, string.Format("flight lead=%1s; %2", flight + 2, report.Description(now))); return null; } + if (!system.OutsideSettlements(impact)) { system.Withhold(battery, "aim target inside settlement exclusion", system.SettlementReason); return null; } + impact += salvoOffset; + impact[1] = SCR_TerrainHelper.GetTerrainY(impact); + float distance = vector.DistanceXZ(gunOrigin, impact); + float altitude = impact[1] - gunOrigin[1]; + if (distance < 350 || distance > 4000) { system.Withhold(battery, "predicted impact out of range", string.Format("iteration=%1 distance=%2m impact=%3 allowed=350..4000m", iteration, distance, impact)); return null; } + bool reachable; + float calculated; + for (int i = 0; i < coefficients.Count(); i++) + { + if (!BallisticTable.GetAimHeightOfProjectileAltitudeFromSource(distance, offset, calculated, source, altitude, coefficients[i])) + continue; + float tangent = (offset + altitude) / distance; + if (calculated <= 0 || calculated > 75 || tangent < Math.Tan(minimum) || tangent > Math.Tan(maximum)) + continue; + charge = i; + reachable = true; + break; + } + if (!reachable) { system.Withhold(battery, "no native ballistic solution within elevation/flight-time limits", string.Format("iteration=%1 distance=%2 altitude=%3 charges=%4 elevation radians=%5..%6 flight limit=75s", iteration, distance, altitude, coefficients.Count(), minimum, maximum)); return null; } + converged = Math.AbsFloat(calculated - flight) < 1; + flight = calculated; + if (converged) + break; + } + if (!converged) { system.Withhold(battery, "moving intercept did not converge in four iterations"); return null; } + if (!system.Safe(battery, impact, flight + 2)) { system.Withhold(battery, "aim impact safety rejected", system.SafetyReason); return null; } + ERR_MortarAimSolution solution = new ERR_MortarAimSolution(); + solution.Gun = gun; + solution.Report = report; + solution.OrderId = battery.OrderId; + solution.Shot = battery.OrderShots; + solution.GunOrigin = gunOrigin; + solution.Impact = impact; + solution.AimTarget = impact + Vector(0, offset, 0); + solution.SalvoOffset = salvoOffset; + solution.Charge = charge; + solution.FlightTime = flight; + return solution; + } +} + +modded class SCR_AIShootStaticArtillery +{ + override ENodeResult EOnTaskSimulate(AIAgent owner, float dt) + { + IEntity gun; + GetVariableIn(PORT_ARTILLERY_ENTITY, gun); + ERR_MortarSystem system = ERR_MortarSystem.Get(); + ERR_MortarBattery battery; + if (system) + battery = system.FindGun(gun); + if (battery && !system.AllowShot(battery)) + { + battery.Trace("SHOOT NODE", "authorization rejected", battery.LastFailure); + return ENodeResult.FAIL; + } + ENodeResult result = super.EOnTaskSimulate(owner, dt); + if (battery) + battery.Trace("SHOOT NODE", string.Format("native result=%1", result), "authorization passed; node result does not confirm a physical shot"); + return result; + } +} + +modded class SCR_MortarMuzzleComponent +{ + protected override void TransferShellToMortar() + { + ERR_MortarSystem system = ERR_MortarSystem.Get(); + ERR_MortarBattery battery; + if (system && m_CharController && !EntityUtils.IsPlayer(m_CharController.GetOwner())) + battery = system.FindGun(GetOwner()); + if (battery) + { + // The loading animation takes time. Recheck at the actual transfer, + // before native inventory insertion triggers the physical projectile. + if (!system.AllowShot(battery)) + { + if (m_ShellComponent) + { + m_ShellComponent.GetOnShellUsed().Remove(TransferShellToMortar); + m_ShellComponent.SetLoadedState(false); + } + CharacterAnimationComponent animation = m_CharController.GetAnimationComponent(); + if (animation && animation.GetCommandHandler()) + animation.GetCommandHandler().FinishItemUse(false); + battery.Audit("ABORT", "final shell transfer rejected; " + battery.LastFailure); + return; + } + battery.Released = true; + battery.ReserveShellAirspace(GetGame().GetWorld().GetWorldTime()); + battery.Audit("SHELL COMMIT", string.Format("final safety passed; gunner=%1 predicted impact=%2 flight=%3s; invoking native transfer, awaiting projectile event", m_CharController.GetOwner(), battery.Impact, battery.FlightTime)); + } + super.TransferShellToMortar(); + } + + override void OnWeaponFired(IEntity effectEntity, BaseMuzzleComponent muzzle, IEntity projectileEntity) + { + IEntity firingCharacter; + if (m_CharController) firingCharacter = m_CharController.GetOwner(); + super.OnWeaponFired(effectEntity, muzzle, projectileEntity); + ERR_MortarSystem system = ERR_MortarSystem.Get(); + ERR_MortarBattery battery; + if (system) + battery = system.FindGun(GetOwner()); + if (!battery) + return; + bool playerGunner; + if (firingCharacter) playerGunner = EntityUtils.IsPlayer(firingCharacter); + battery.ObserveProjectile(projectileEntity, firingCharacter, playerGunner); + } +} + +// The native tree normally re-aims only every five shots (and skips the first +// re-aim). Each salvo shell needs its own spread point and fresh authorization. +modded class SCR_AIStaticArtilleryBehavior +{ + ERR_MortarBattery ERR_GetMortarBattery() + { + ERR_MortarSystem system = ERR_MortarSystem.Get(); + if (!system) return null; + return system.FindGun(m_ArtilleryEntity.m_Value); + } +} + +modded class SCR_AIStaticArtilleryBehavior_ShootingLogic +{ + override ENodeResult EOnTaskSimulate(AIAgent owner, float dt) + { + ERR_MortarBattery battery; + SCR_AIStaticArtilleryBehavior behavior; + if (m_Utility) + { + behavior = SCR_AIStaticArtilleryBehavior.Cast(m_Utility.GetExecutedAction()); + if (behavior) battery = behavior.ERR_GetMortarBattery(); + } + if (battery) + { + int gate = ERR_MortarSupplyRules.CycleGate(battery.CommandOpen, battery.OrderShots, behavior.GetShotCount(), ERR_MortarSalvo.ROUNDS, ERR_MortarSupplyState.READY); + if (gate < 0) return ENodeResult.FAIL; + if (gate == 0) return ENodeResult.RUNNING; + // Native super increments the behavior counter. Wait BEFORE calling it, + // so repeated pending ticks cannot count the same projectile twice. + if (battery.OrderShots < ERR_MortarSalvo.ROUNDS) + { + float now = GetGame().GetWorld().GetWorldTime(); + ERR_MortarSupplyState supply = battery.SupplyState(now); + if (supply == ERR_MortarSupplyState.PENDING) return ENodeResult.RUNNING; + if (supply == ERR_MortarSupplyState.FAILED) + { + ERR_MortarSystem system = ERR_MortarSystem.Get(); + if (system) system.Withhold(battery, system.SupplyFailure(battery, now)); + return ENodeResult.FAIL; + } + } + } + ENodeResult result = super.EOnTaskSimulate(owner, dt); + if (battery && result == ENodeResult.SUCCESS) + { + SetVariableOut(PORT_AIMING_NEEDED, true); + } + return result; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c new file mode 100644 index 0000000..8c3d42d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c @@ -0,0 +1,347 @@ +class ERR_MortarSupplyStatus +{ + SCR_AIGroup Group; + IEntity Gun; + vector Position; + float ObservedAt; + int MessageId; + int Shells; +} +class ERR_MortarLogisticsRules +{ + static bool Fresh(float observedAt, float now) { return observedAt >= 0 && now >= observedAt && now - observedAt <= 180000; } + static bool Need(int shells) { return shells >= 0 && shells <= 6; } + static bool NewRequest(int message, int consumed, bool fresh) { return fresh && message > 0 && message > consumed; } + static bool Near(float distance) { return distance >= 0 && distance <= 12; } + static bool ActiveTrip(bool server, bool stopped, int trip, int current, bool fresh, bool ownershipValid) { return server && !stopped && trip > 0 && trip == current && fresh && ownershipValid; } +} +// One finite western-cache courier, owned and ticked exclusively by HQ. +class ERR_MortarLogistics +{ + protected ERR_HQ m_HQ; + protected ERR_GameMode m_Mode; + protected ERR_SiteRuntime m_Site; + protected IEntity m_Cache; + protected SCR_AIGroup m_Group; + protected ERR_MortarBattery m_Battery; + protected IEntity m_OriginalGun; + protected SCR_AIGroup m_OriginalBatteryGroup; + protected ref array m_BatteryMembers = {}; + protected ref array m_OriginalMembers = {}; + protected ref array m_Stock = {}; + protected ref array m_Cargo = {}; + protected ref array m_AttemptedPickup = {}; + protected ref array m_AttemptedUnload = {}; + protected ref array m_Initial = {}; + protected ref ERR_MortarSupplyStatus m_Report; + protected ref ERR_HQRoute m_Order; + protected ref ERR_MortarCourierTransfer m_Move; + protected IEntity m_Courier; + protected AIWaypoint m_Waypoint; + protected AIWaypoint m_HoldWaypoint; + protected float m_InitialDeadline; + protected float m_NextReport; + protected float m_LastDeliveryAt = -1; + protected int m_ConsumedMessage; + protected int m_Trip; + protected int m_State; // 0 initial, 1 idle, 2 downlink, 3 pickup, 4 travel, 5 unload + protected int m_Delivered; + protected int m_CompletedTrips; + protected bool m_Started; + protected bool m_Stopped; + protected string m_Reason; + static const int INITIAL_SHELLS = 12; + static const int TRIP_SHELLS = 6; + void ERR_MortarLogistics(ERR_HQ hq, ERR_GameMode mode) { m_HQ = hq; m_Mode = mode; } + int State() { return m_State; } + int Trip() { return m_Trip; } + int Delivered() { return m_Delivered; } + int CompletedTrips() { return m_CompletedTrips; } + IEntity Cache() { return m_Cache; } + SCR_AIGroup Group() { return m_Group; } + IEntity Courier() { return m_Courier; } + ERR_MortarBattery Battery() { return m_Battery; } + ERR_MortarSupplyStatus Report() { return m_Report; } + bool Stopped() { return m_Stopped; } + void InitialStock(out array items) { items.Copy(m_Stock); } + protected void Audit(string kind, string reason) + { + int message; if (m_Report) message = m_Report.MessageId; + m_Reason = reason; + m_HQ.Journal().Write("COURIER " + kind, string.Format("trip=%1 state=%2 delivered=%3; %4", m_Trip, m_State, m_Delivered, reason), message); + } + protected InventoryStorageManagerComponent Inventory(IEntity entity) + { + if (!entity) return null; + return InventoryStorageManagerComponent.Cast(entity.FindComponent(InventoryStorageManagerComponent)); + } + protected bool Contains(IEntity owner, IEntity shell) + { + InventoryStorageManagerComponent inventory = Inventory(owner); + if (!inventory || !shell) return false; + array items = {}; ERR_Inventory.Items(inventory, items); return items.Contains(shell); + } + protected void Shells(IEntity owner, out array shells) + { + shells.Clear(); InventoryStorageManagerComponent inventory = Inventory(owner); if (!inventory) return; + array items = {}; ERR_Inventory.Items(inventory, items); + foreach (IEntity item : items) + if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == ERR_MortarBattery.SHELL) shells.Insert(item); + } + bool Prepare() + { + if (!Replication.IsServer() || m_Started || m_Stopped) return false; + m_Started = true; + ERR_ScenarioComponent scenario = ERR_ScenarioComponent.Cast(m_Mode.FindComponent(ERR_ScenarioComponent)); + if (!scenario || !scenario.Sites()) return false; + m_Site = scenario.Sites().Find("everon-supply-2"); + if (!m_Site || !m_Site.Group || !m_Site.PatrolCycle || !scenario.Sites().Owns(m_Site.Container)) return false; + m_Cache = m_Site.Container; m_Group = m_Site.Group; + array batteries = {}; m_HQ.Mortars().Batteries(batteries); + if (batteries.Count() != 1) return false; + m_Battery = batteries[0]; m_OriginalGun = m_Battery.Gun; m_OriginalBatteryGroup = m_Battery.Group; + InventoryStorageManagerComponent inventory = Inventory(m_Cache); + if (!inventory || !inventory.CanInsertResource(ERR_MortarBattery.SHELL, EStoragePurpose.PURPOSE_DEPOSIT)) return false; + array existing = {}; Shells(m_Cache, existing); if (!existing.IsEmpty()) return false; + array agents = {}; m_Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + if (!agent || !ERR_Actors.CanFight(agent.GetControlledEntity())) return false; + m_OriginalMembers.Insert(agent.GetControlledEntity()); + } + if (m_OriginalMembers.Count() != m_Site.InitialGuardCount) return false; + m_InitialDeadline = GetGame().GetWorld().GetWorldTime() + 15000; + // SiteService owns this existing cache and its contents through rollback/world teardown. + // This bounded startup allocation is never reopened, including partial failure/theft. + for (int i = 0; i < INITIAL_SHELLS; i++) + { + IEntity shell = ERR_Actors.Spawn(ERR_MortarBattery.SHELL, m_Cache.GetOrigin()); + if (!shell) return false; + // Keep the exact created identity; counts cannot prove an external item was + // not substituted while an asynchronous insertion was pending. + m_Mode.Own(shell); m_Stock.Insert(shell); + ERR_MortarInitialItem operation = new ERR_MortarInitialItem(); m_Initial.Insert(operation); + if (!inventory.TryInsertItem(shell, EStoragePurpose.PURPOSE_DEPOSIT, operation)) { operation.Rejected(); return false; } + } + return true; + } + protected bool OriginalGroup() + { + if (!m_Site || m_Site.Group != m_Group || m_Site.Container != m_Cache || !m_Group || !m_Cache || m_Group.GetPlayerCount(true) > 0 || m_Group.GetFaction() != m_Mode.EnemyFaction()) return false; + array agents = {}; m_Group.GetAgents(agents); bool living; + foreach (AIAgent agent : agents) + { + if (!agent || !agent.GetControlledEntity()) continue; + IEntity actor = agent.GetControlledEntity(); + if (!m_OriginalMembers.Contains(actor) || ERR_Actors.Player(actor) || ERR_Actors.Group(actor) != m_Group || SCR_FactionManager.SGetFaction(actor) != m_Mode.EnemyFaction()) return false; + if (ERR_Actors.CanFight(actor)) living = true; + } + return living; + } + protected bool BindBatteryMembers() + { + if (!m_Battery || !m_Battery.StartupActivated || m_Battery.Group != m_OriginalBatteryGroup || m_Battery.Gun != m_OriginalGun) return false; + if (!m_BatteryMembers.IsEmpty()) return true; + array agents = {}; m_Battery.Group.GetAgents(agents); + foreach (AIAgent agent : agents) + if (agent && agent.GetControlledEntity() && !m_BatteryMembers.Contains(agent.GetControlledEntity())) m_BatteryMembers.Insert(agent.GetControlledEntity()); + return !m_BatteryMembers.IsEmpty(); + } + bool TargetAvailable() + { + if (!m_Battery || m_Battery.Gun != m_OriginalGun || m_Battery.Group != m_OriginalBatteryGroup || !m_OriginalGun || !m_Battery.StartupActivated || m_Battery.Stopped() || !m_Battery.Operational() || m_HQ.Mortars().FindGun(m_OriginalGun) != m_Battery || m_BatteryMembers.IsEmpty()) return false; + if (SCR_FactionManager.SGetFaction(m_OriginalGun) != m_Mode.EnemyFaction()) return false; + SCR_AIVehicleUsageComponent usage = SCR_AIVehicleUsageComponent.Cast(m_OriginalGun.FindComponent(SCR_AIVehicleUsageComponent)); + if (!usage || !usage.GetTurretCompartmentSlot()) return false; + IEntity occupant = usage.GetTurretCompartmentSlot().GetOccupant(); + if (!occupant) return true; + return m_BatteryMembers.Contains(occupant) && ERR_Actors.CanFight(occupant) && !ERR_Actors.Player(occupant) && ERR_Actors.Group(occupant) == m_OriginalBatteryGroup && SCR_FactionManager.SGetFaction(occupant) == m_Mode.EnemyFaction(); + } + bool CanSample(ERR_MortarBattery battery) { return battery == m_Battery && TargetAvailable(); } + protected bool Bearer(IEntity actor) + { + return actor && m_OriginalMembers.Contains(actor) && ERR_Actors.Group(actor) == m_Group && ERR_Actors.CanFight(actor) && !ERR_Actors.Player(actor) && !CompartmentAccessComponent.GetVehicleIn(actor) && SCR_FactionManager.SGetFaction(actor) == m_Mode.EnemyFaction() && ERR_HQRadio.Capability(actor) != 2; + } + bool AcceptsStatus(ERR_MortarSupplyStatus report, float now) + { + return !m_Stopped && m_State == 1 && report && m_Battery && report.Group == m_Battery.Group && report.Gun == m_Battery.Gun && ERR_MortarLogisticsRules.Need(report.Shells) && ERR_MortarLogisticsRules.NewRequest(report.MessageId, m_ConsumedMessage, ERR_MortarLogisticsRules.Fresh(report.ObservedAt, now)); + } + void Receive(ERR_MortarSupplyStatus report, float now) + { + if (!AcceptsStatus(report, now)) return; + m_Report = report; + Audit("RECEIVED", "immutable low-ammunition status delivered by native physical radio route"); + } + protected bool Authorized(float now) + { + if (!m_Mode || !m_Mode.Active() || !m_Report || !m_Battery) return false; + return ERR_MortarLogisticsRules.ActiveTrip(Replication.IsServer(), m_Stopped, m_Trip, m_HQ.LogisticsToken(m_Group), ERR_MortarLogisticsRules.Fresh(m_Report.ObservedAt, now), OriginalGroup()) && TargetAvailable() && m_Report.Gun == m_Battery.Gun && m_Report.Group == m_Battery.Group && vector.Distance(m_Report.Position, m_Battery.Gun.GetOrigin()) <= 5; + } + bool TransferAllowed(int trip, IEntity shell, IEntity from, IEntity to, float now) + { + if (trip != m_Trip || !Authorized(now) || !shell || !m_Stock.Contains(shell) || !Bearer(m_Courier)) return false; + if (m_State == 3) return from == m_Cache && to == m_Courier && ERR_MortarLogisticsRules.Near(vector.Distance(from.GetOrigin(), to.GetOrigin())); + if (m_State != 5 || from != m_Courier || !m_Cargo.Contains(shell) || !ERR_Actors.CanFight(to) || ERR_Actors.Player(to) || to == m_Battery.RadioOperator || !m_BatteryMembers.Contains(to) || ERR_Actors.Group(to) != m_Battery.Group || SCR_FactionManager.SGetFaction(to) != m_Mode.EnemyFaction()) return false; + return !CompartmentAccessComponent.GetVehicleIn(to) && ERR_MortarLogisticsRules.Near(vector.Distance(from.GetOrigin(), to.GetOrigin())); + } + protected void ClearWaypoint() + { + if (m_Waypoint) { if (m_Group) m_Group.RemoveWaypoint(m_Waypoint); ERR_Actors.DeleteSpawned(m_Waypoint); } + m_Waypoint = null; + if (m_HoldWaypoint) { if (m_Group) m_Group.RemoveWaypoint(m_HoldWaypoint); ERR_Actors.DeleteSpawned(m_HoldWaypoint); } + m_HoldWaypoint = null; + } + protected bool MoveTo(vector position) + { + ClearWaypoint(); + m_Waypoint = AIWaypoint.Cast(ERR_Actors.Spawn(ERR_Resources.MoveWaypoint(), ERR_Actors.Ground(position))); + if (!m_Waypoint) return false; + // A completed Move alone would let the original patrol resume during the + // asynchronous item operation. This owned, non-completing native Defend + // keeps that queue below us until release; its original entries are untouched. + m_HoldWaypoint = AIWaypoint.Cast(ERR_Actors.Spawn(ERR_Resources.DefendWaypoint(), ERR_Actors.Ground(position))); + if (!m_HoldWaypoint) { ClearWaypoint(); return false; } + m_HoldWaypoint.SetCompletionRadius(8); + m_Group.AddWaypointAt(m_HoldWaypoint, 0); m_Group.AddWaypointAt(m_Waypoint, 0); m_Group.ActivateAI(); return true; + } + protected void Finish(string reason) + { + Audit("END", reason); + if (m_Move) m_Move.Invalidate(); + ClearWaypoint(); m_HQ.ReleaseLogistics(m_Group, m_Trip); + m_Order = null; m_Report = null; m_Courier = null; m_Cargo.Clear(); m_State = 1; + // Native requests cannot be canceled. A pending move remains held until its + // physical outcome resolves; callbacks cannot authorize a later trip. + m_NextReport = GetGame().GetWorld().GetWorldTime() + 60000; + } + protected bool BeginMove(IEntity shell, IEntity from, IEntity to, float now) + { + InventoryStorageManagerComponent destination = Inventory(to); + BaseInventoryStorageComponent storage; if (destination) storage = destination.FindStorageForItem(shell, EStoragePurpose.PURPOSE_DEPOSIT); + if (!storage) return false; + m_Move = new ERR_MortarCourierTransfer(this, m_Trip, shell, from, to, storage, now); + return m_Move.Begin(now); + } + protected bool PollMove(float now) + { + if (!m_Move) return true; + int result = m_Move.Poll(now); + if (result == 0) return false; + if (result < 0) { Finish("native item operation rejected, expired or lost authority; physical items retained"); return false; } + IEntity shell = m_Move.Shell(); m_Move = null; + if (m_State == 3) { m_Cargo.Insert(shell); Audit("PICKUP", "exact depot shell confirmed in original bearer inventory"); } + else if (m_State == 5) { m_Cargo.RemoveItem(shell); m_Delivered++; m_LastDeliveryAt = now; Audit("DELIVERED", "exact original shell confirmed in living mortar crew inventory"); } + return true; + } + protected void Pickup(float now) + { + if (!m_Courier) + { + foreach (IEntity candidate : m_OriginalMembers) + if (Bearer(candidate) && Inventory(candidate) && Inventory(candidate).CanInsertResource(ERR_MortarBattery.SHELL, EStoragePurpose.PURPOSE_DEPOSIT) && ERR_MortarLogisticsRules.Near(vector.Distance(candidate.GetOrigin(), m_Cache.GetOrigin()))) { m_Courier = candidate; break; } + if (!m_Courier) return; + } + if (!Bearer(m_Courier)) { Finish("original bearer lost or captured"); return; } + if (!PollMove(now)) return; + if (m_Cargo.Count() < TRIP_SHELLS) + { + foreach (IEntity shell : m_Stock) + { + if (!shell || !Contains(m_Cache, shell) || m_AttemptedPickup.Contains(shell)) continue; + InventoryStorageManagerComponent destination = Inventory(m_Courier); + if (!destination || !destination.FindStorageForItem(shell, EStoragePurpose.PURPOSE_DEPOSIT)) break; + m_AttemptedPickup.Insert(shell); + if (!BeginMove(shell, m_Cache, m_Courier, now)) Finish("native pickup rejected; no second request for that shell"); + return; + } + } + if (m_Cargo.IsEmpty()) { Finish("finite cache empty or bearer native storage full"); return; } + m_State = 4; + if (!MoveTo(m_Report.Position)) { Finish("native delivery waypoint unavailable"); return; } + Audit("OUTBOUND", "original patrol walking with verified finite cargo to reported battery position"); + } + protected void Unload(float now) + { + if (!PollMove(now)) return; + if (m_Cargo.IsEmpty()) { m_CompletedTrips++; Finish("finite delivery complete; original patrol restored"); return; } + array agents = {}; m_Battery.Group.GetAgents(agents); + foreach (IEntity shell : m_Cargo) + { + if (!shell || !Contains(m_Courier, shell)) { Finish("carried shell lost or stolen; no replacement"); return; } + if (m_AttemptedUnload.Contains(shell)) { Finish("previous unload unresolved or failed; no retry"); return; } + foreach (AIAgent agent : agents) + { + if (!agent) continue; + IEntity recipient = agent.GetControlledEntity(); + if (!TransferAllowed(m_Trip, shell, m_Courier, recipient, now)) continue; + InventoryStorageManagerComponent destination = Inventory(recipient); + if (!destination || !destination.FindStorageForItem(shell, EStoragePurpose.PURPOSE_DEPOSIT)) continue; + m_AttemptedUnload.Insert(shell); + if (!BeginMove(shell, m_Courier, recipient, now)) Finish("native recipient move rejected; cargo remains physical"); + return; + } + } + } + void Tick(float now) + { + if (m_Stopped || !m_Started || !Replication.IsServer() || !m_Mode.Active()) return; + if (m_State == 0) + { + bool failed; foreach (ERR_MortarInitialItem operation : m_Initial) { if (!operation.Finished) { if (now < m_InitialDeadline) return; failed = true; } else if (!operation.Succeeded) failed = true; } + if (!OriginalGroup()) failed = true; + array shells = {}; Shells(m_Cache, shells); + if (shells.Count() != INITIAL_SHELLS) { if (now < m_InitialDeadline && !failed) return; failed = true; } + foreach (IEntity originalShell : m_Stock) if (!originalShell || !shells.Contains(originalShell)) failed = true; + if (m_Stock.Count() != INITIAL_SHELLS) failed = true; + if (failed) { Audit("STARTUP FAILED", "one-time native stock allocation incomplete; no refill"); Stop(); return; } + m_State = 1; Audit("READY", "12 distinct original HE shells physically confirmed in existing western cache"); + } + if (m_State == 1) + { + if (m_Move) { m_Move.Poll(now); if (m_Move.Unresolved()) return; m_Move = null; } + if (!OriginalGroup() || !BindBatteryMembers() || !TargetAvailable()) return; + bool available; foreach (IEntity stocked : m_Stock) if (Contains(m_Cache, stocked) && !m_AttemptedPickup.Contains(stocked)) available = true; + if (!available) return; + if (now >= m_NextReport && ERR_MortarLogisticsRules.Need(m_Battery.CountShells())) { if (m_HQ.QueueSupplyStatus(m_Battery, now)) m_NextReport = now + 60000; } + if (!m_Report || !ERR_MortarLogisticsRules.NewRequest(m_Report.MessageId, m_ConsumedMessage, ERR_MortarLogisticsRules.Fresh(m_Report.ObservedAt, now))) return; + int nextTrip = m_Trip + 1; + if (!m_HQ.ReserveLogistics(m_Group, nextTrip)) return; + m_Trip = nextTrip; m_ConsumedMessage = m_Report.MessageId; + m_Order = m_HQ.Downlink(m_Group, "MORTAR SUPPLY", "collect finite western-cache HE; walk to reported battery", m_Report.MessageId); + m_State = 2; + if (!m_Order) { Finish("no native courier downlink"); return; } + Audit("QUEUED", "original patrol reserved pending physical radio command delivery"); + } + if (!Authorized(now)) { Finish("supply report expired or original ownership/gun/group changed"); return; } + if (m_Courier && !Bearer(m_Courier)) { Finish("original bearer unavailable; surviving cargo retained"); return; } + if (m_State == 2) + { + int delivered = m_Order.Advance(now, m_HQ.Journal()); + if (delivered == 0) return; + if (delivered < 0) { Finish("courier command interrupted"); return; } + m_Order = null; m_State = 3; + if (!MoveTo(m_Cache.GetOrigin())) { Finish("native pickup waypoint unavailable"); return; } + Audit("DISPATCH", "same original patrol receives delivered order and walks to finite cache"); + } + if (m_State == 3) { Pickup(now); return; } + if (m_State == 4) + { + if (!ERR_MortarLogisticsRules.Near(vector.Distance(m_Courier.GetOrigin(), m_Report.Position))) return; + m_State = 5; Audit("ARRIVED", "physical bearer reached reported gun area; exact recipient checks still required"); + } + if (m_State == 5) Unload(now); + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_Move) m_Move.Invalidate(); + ClearWaypoint(); m_HQ.ReleaseLogistics(m_Group, m_Trip); m_Order = null; m_Report = null; + } + #ifdef WORKBENCH + ERR_HQRoute ProbeOrder() { return m_Order; } + int ProbeSourceMessage() { return m_ConsumedMessage; } + float ProbeLastDelivery() { return m_LastDeliveryAt; } + #endif + string Status() { return string.Format("courier state=%1 finite initial=%2 delivered=%3 stopped=%4 (%5)", m_State, m_Stock.Count(), m_Delivered, m_Stopped, m_Reason); } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c new file mode 100644 index 0000000..7f513e2 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c @@ -0,0 +1,131 @@ +// All target coordinates come from delivered HQ observations, never a player's +// current transform. Road projection stops at an unknown junction/road end. +class ERR_MortarPrediction +{ + // Read immediately after a failed synchronous prediction; no extra world scan. + static string FailureReason; + // Includes observation uplink, HQ downlink and native aiming. All stages + // retain the original observation time; radio delivery never renews it. + static const float MAX_REPORT_AGE_MS = 60000; + + static bool Fresh(ERR_HQReport report, float now) + { + return report && report.Target && !report.Distress && now >= report.ObservedAt && now - report.ObservedAt <= MAX_REPORT_AGE_MS && report.TravelMode != "aircraft"; + } + + static bool Reject(string reason) + { + FailureReason = reason; + return false; + } + + static vector ClosestOnSegment(vector point, vector start, vector end) + { + vector segment = end - start; + segment[1] = 0; + vector offset = point - start; + offset[1] = 0; + float lengthSq = segment.LengthSq(); + if (lengthSq < 0.01) + return start; + return vector.Lerp(start, end, Math.Clamp(vector.Dot(offset, segment) / lengthSq, 0, 1)); + } + + static bool FollowRoad(array points, vector observed, vector velocity, float seconds, out vector impact) + { + if (!points || points.Count() < 2) + return Reject("road polyline has fewer than two points"); + int segment = -1; + float closest = 20; + vector projected; + for (int i = 0; i < points.Count() - 1; i++) + { + vector candidate = ClosestOnSegment(observed, points[i], points[i + 1]); + float distance = vector.DistanceXZ(candidate, observed); + if (distance < closest) + { + closest = distance; + segment = i; + projected = candidate; + } + } + if (segment < 0) + return Reject("observed vehicle is not within 20m of a road segment"); + vector forward = points[segment + 1] - points[segment]; + forward[1] = 0; + forward.Normalize(); + vector travel = velocity; + travel[1] = 0; + float speed = travel.Length(); + travel.Normalize(); + float alignment = vector.Dot(forward, travel); + if (Math.AbsFloat(alignment) < 0.7) + return Reject("vehicle heading crosses road; alignment below 0.7"); + int step = 1; + int next = segment + 1; + if (alignment < 0) + { + step = -1; + next = segment; + } + float remaining = speed * seconds; + vector position = projected; + while (next >= 0 && next < points.Count()) + { + float length = vector.DistanceXZ(position, points[next]); + if (length >= remaining && length > 0.01) + { + impact = vector.Lerp(position, points[next], remaining / length); + return true; + } + remaining -= length; + position = points[next]; + next += step; + } + return Reject("prediction reaches unknown road end/junction"); + } + + static bool Predict(ERR_HQReport report, float now, float flightSeconds, out vector impact) + { + FailureReason = ""; + if (!report) return Reject("target report missing"); + if (report.Distress) return Reject("distress report cannot authorize fire"); + if (now < report.ObservedAt) return Reject("observation timestamp is in the future"); + if (now - report.ObservedAt > MAX_REPORT_AGE_MS) return Reject("observation older than 60s"); + float seconds = (now - report.ObservedAt) / 1000 + flightSeconds; + if (seconds < 0 || seconds > 90) + return Reject("observation age plus flight outside 0..90s"); + if (report.TravelMode == "aircraft") return Reject("aircraft target unsupported"); + if (report.TravelMode == "mixed travel") return Reject("mixed travel cannot be predicted"); + impact = report.Position; + if (!report.HasVelocity || report.Velocity.Length() < 0.5) + return true; + if (report.Velocity.Length() * seconds > 1800) + return Reject("predicted travel exceeds 1800m"); + bool vehicle = report.TravelMode == "vehicle" || report.TravelMode == "in vehicle"; + if (vehicle) + { + SCR_AIWorld world = SCR_AIWorld.Cast(GetGame().GetAIWorld()); + if (!world || !world.GetRoadNetworkManager()) + return Reject("road network unavailable"); + BaseRoad road; + float roadDistance; + world.GetRoadNetworkManager().GetClosestRoad(report.Position, road, roadDistance, skipNavlinks: true); + if (!road) return Reject("no road near reported vehicle position"); + if (roadDistance > 20) return Reject("reported vehicle farther than 20m from road"); + array points = {}; + road.GetPoints(points); + return FollowRoad(points, report.Position, report.Velocity, seconds, impact); + } + impact += report.Velocity * seconds; + return true; + } + + static bool ThreatensFriendly(vector impact, vector position, vector velocity, float flightSeconds) + { + velocity[1] = 0; + vector future = position + velocity * Math.Clamp(flightSeconds, 0, 90); + // Protect the entire predicted path, not only where a soldier is now. + return vector.DistanceXZ(impact, ClosestOnSegment(impact, position, future)) <= 100; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c new file mode 100644 index 0000000..49d3b4f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c @@ -0,0 +1,180 @@ +enum ERR_MortarSupplyState { FAILED = -1, PENDING, READY } + +class ERR_MortarSupplyRules +{ + static int CycleGate(bool commandOpen, int confirmedShots, int behaviorShots, int limit, int supplyState) + { + if (!commandOpen) return -1; + if (confirmedShots <= behaviorShots) return 0; + if (confirmedShots < limit) return supplyState; + return 1; + } +} + +class ERR_MortarInitialItem : ScriptedInventoryOperationCallback +{ + bool Finished; + bool Succeeded; + protected void Finish(bool success) { if (!Finished) { Finished = true; Succeeded = success; } } + protected override void OnComplete() { Finish(true); } + protected override void OnFailed() { Finish(false); } + protected override void OnAllComplete() { Finish(true); } + protected override void OnAllFailed() { Finish(false); } + void Rejected() { Finish(false); } +} + +// One finite allocation, after the ENTIRE original support crew exists. Failed +// or stopped setup retains physical assets and retires only its pending spawn intent. +class ERR_MortarReadiness +{ + protected ERR_MortarBattery m_Battery; + protected ref array m_Members = {}; + protected ref array m_Operations = {}; + protected bool m_Allocated; + protected bool m_Ready; + protected bool m_Stopped; + protected bool m_Retired; + protected int m_RequestedShells; + void ERR_MortarReadiness(ERR_MortarBattery battery) { m_Battery = battery; } + static ERR_MortarSupplyState Population(int physical, int gunners, int operators, bool complete, bool expired) + { + if (physical > 4 || gunners > 3 || operators > 1) return ERR_MortarSupplyState.FAILED; + if (physical == 4 && gunners == 3 && operators == 1 && complete && !expired) return ERR_MortarSupplyState.READY; + if (expired) return ERR_MortarSupplyState.FAILED; + return ERR_MortarSupplyState.PENDING; + } + static bool AllocationValid(int shells) { return shells >= 0 && shells <= 9; } + int RequestedShells() { return m_RequestedShells; } + bool Ready() { return m_Ready && !m_Stopped; } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_Ready || m_Retired || !m_Battery || !m_Battery.Group || !Replication.IsServer()) return; + m_Retired = true; + // As in Core initial guard cleanup: stopping the current request alone does + // not retire the native group's still-authored future expansion intent. + RetireGroup(m_Battery.Group); + } + static void RetireGroup(SCR_AIGroup group) + { + if (!group || !Replication.IsServer()) return; + group.SetSpawnImmediately(false); + group.m_aUnitPrefabSlots = new array(); + if (!GetGame()) return; + ChimeraAIWorld world = ChimeraAIWorld.Cast(GetGame().GetAIWorld()); + if (world) world.PurgeSpawnRequestsForGroup(group); + } + + protected ERR_MortarSupplyState Fail(string reason) + { + m_Battery.SpawnFailed(reason); + Stop(); + return ERR_MortarSupplyState.FAILED; + } + protected bool Allocate() + { + m_Allocated = true; // before native requests; never refill or retry a failure + foreach (IEntity actor : m_Members) + { + if (actor == m_Battery.RadioOperator) continue; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(actor.FindComponent(InventoryStorageManagerComponent)); + int existing = m_Battery.InventoryShells(inventory); + if (!AllocationValid(existing)) return false; + if (ERR_HQRadio.Capability(actor) == 0 && !inventory.TrySpawnPrefabToStorage("{E1A5D4B878AA8980}Prefabs/Items/Equipment/Radios/Radio_R148.et")) + m_Battery.Audit("RADIO EQUIP", "optional crew handset did not fit; dedicated manpack remains required"); + for (int i = existing; i < 9; i++) + { + ERR_MortarInitialItem operation = new ERR_MortarInitialItem(); + m_Operations.Insert(operation); + m_RequestedShells++; + if (!inventory.TrySpawnPrefabToStorage(ERR_MortarBattery.SHELL, purpose: EStoragePurpose.PURPOSE_DEPOSIT, cb: operation)) + { + operation.Rejected(); + return false; + } + } + } + return true; + } + ERR_MortarSupplyState Poll(float now) + { + if (m_Stopped || !Replication.IsServer() || !m_Battery || m_Battery.Stopped()) return ERR_MortarSupplyState.FAILED; + if (m_Ready) return ERR_MortarSupplyState.READY; + SCR_AIGroup group = m_Battery.Group; + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode || !group || !m_Battery.Gun || group.GetFaction() != mode.EnemyFaction() || group.GetPlayerCount(true) > 0) return Fail("initial support group/gun/faction changed"); + DamageManagerComponent damage = DamageManagerComponent.Cast(m_Battery.Gun.FindComponent(DamageManagerComponent)); + if (!damage || damage.IsDestroyed()) return Fail("initial support gun missing damage manager or destroyed"); + bool expired = now < m_Battery.SpawnedAt || now - m_Battery.SpawnedAt >= 90000; + array agents = {}; group.GetAgents(agents); + array physical = {}; + int gunners, operators; + IEntity operatorActor; + foreach (AIAgent agent : agents) + { + if (!agent || !agent.GetControlledEntity()) continue; + IEntity actor = agent.GetControlledEntity(); + if (physical.Contains(actor)) return Fail("initial support group reports duplicate physical actor"); + physical.Insert(actor); + if (!ERR_Actors.CanFight(actor) || SCR_FactionManager.SGetFaction(actor) != mode.EnemyFaction() || !actor.GetPrefabData()) return Fail("initial support actor unavailable or has wrong faction/resource"); + ResourceName prefab = actor.GetPrefabData().GetPrefabName(); + if (prefab == ERR_MortarBattery.CREW) gunners++; + else if (prefab == ERR_MortarBattery.RADIO_OPERATOR) { operators++; operatorActor = actor; } + else return Fail("initial support actor does not belong to authored crew catalog"); + } + ERR_MortarSupplyState population = Population(physical.Count(), gunners, operators, group.IsExpandComplete(), expired); + if (population == ERR_MortarSupplyState.FAILED) return Fail("initial four-person support population incomplete/invalid within 90 seconds"); + if (population == ERR_MortarSupplyState.PENDING) return population; + if (m_Allocated) + { + foreach (IEntity original : m_Members) + if (!physical.Contains(original)) return Fail("initial support member replaced after finite allocation"); + } + foreach (IEntity member : physical) + { + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(member.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) return ERR_MortarSupplyState.PENDING; + if (!m_Allocated && member != operatorActor && m_Battery.InventoryShells(inventory) < 9 && !inventory.CanInsertResource(ERR_MortarBattery.SHELL, EStoragePurpose.PURPOSE_DEPOSIT)) return ERR_MortarSupplyState.PENDING; + } + if (ERR_HQRadio.Capability(operatorActor) != 2) return ERR_MortarSupplyState.PENDING; + // Preserve the existing earliest activation delay, but it is not readiness. + if (now - m_Battery.SpawnedAt < 10000) return ERR_MortarSupplyState.PENDING; + if (!m_Allocated) + { + if (!group.GetGroupUtilityComponent() || !group.GetGroupUtilityComponent().m_VehicleMgr) return ERR_MortarSupplyState.PENDING; + SCR_AIVehicleUsageComponent usage = SCR_AIVehicleUsageComponent.Cast(m_Battery.Gun.FindComponent(SCR_AIVehicleUsageComponent)); + if (!usage || !group.GetGroupUtilityComponent().m_VehicleMgr.TryAddVehicle(usage)) return Fail("native support gun registration failed"); + m_Members.Copy(physical); m_Battery.RadioOperator = operatorActor; + if (!Allocate()) return Fail("finite initial support shell allocation rejected; no retry"); + return ERR_MortarSupplyState.PENDING; // never accept mutation-frame readiness + } + foreach (ERR_MortarInitialItem operation : m_Operations) + { + if (!operation.Finished) return ERR_MortarSupplyState.PENDING; + if (!operation.Succeeded) return Fail("finite initial support shell operation failed; no retry"); + } + foreach (IEntity equipped : m_Members) + { + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(equipped.FindComponent(InventoryStorageManagerComponent)); + int shells = m_Battery.InventoryShells(inventory); + if (equipped == operatorActor) + { + if (shells != 0) return Fail("dedicated initial manpack operator unexpectedly carries mortar shells"); + } + else if (shells != 9) return ERR_MortarSupplyState.PENDING; + } + if (m_Battery.CountShells() != 27) return ERR_MortarSupplyState.PENDING; + m_Ready = true; + // One physical-ready handoff: HQ already owns/reserves this group, while + // Intel must see its actual late-spawned members after finite stock settles. + mode.RegisterGroup(group); + group.ActivateAI(); + foreach (AIAgent readyAgent : agents) + { + if (readyAgent) { readyAgent.SetPermanentLOD(0); readyAgent.ActivateAI(); } + } + m_Battery.Audit("CREW READY", string.Format("four original physical members, one manpack, 27 confirmed HE; new shell requests=%1; allocation permanently closed", m_RequestedShells)); + return ERR_MortarSupplyState.READY; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c new file mode 100644 index 0000000..f0e68c5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c @@ -0,0 +1,37 @@ +// One newer observation in transit for one existing physical firing order. +// The report's observed time survives both radio legs unchanged. +class ERR_MortarRefresh +{ + IEntity Gun; + SCR_AIGroup Group; + int OrderId; + int RadioId; + ref ERR_HQReport Report; + ref ERR_HQRoute Route; + + void ERR_MortarRefresh(ERR_MortarBattery battery, ERR_HQReport report, ERR_HQRoute route) + { + Gun = battery.Gun; + Group = battery.Group; + OrderId = battery.OrderId; + RadioId = route.MessageId; + Report = report.Snapshot(); + Route = route; + } + bool Owns(ERR_MortarBattery battery) + { + return battery && Gun && Group && Gun == battery.Gun && Group == battery.Group && OrderId == battery.OrderId; + } + bool DeliveredFor(ERR_MortarBattery battery, ERR_HQReport report) + { + return !Route && Report && Report == report && Owns(battery); + } +} + +class ERR_MortarRefreshRules +{ + static bool Newer(ERR_HQReport current, ERR_HQReport incoming, float now) + { + return current && incoming && current.Target && incoming.Target == current.Target && incoming.MessageId > 0 && incoming.MessageId != current.MessageId && incoming.ObservedAt > current.ObservedAt && ERR_MortarPrediction.Fresh(incoming, now); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c new file mode 100644 index 0000000..46aad47 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c @@ -0,0 +1,20 @@ +// One finite response per delivered observation at this battery. Cancellation +// does not turn the same radio message into new ammunition authorization. +class ERR_MortarReportLedger +{ + protected ref map m_Attempts = new map(); + + bool Available(int messageId, float observedAt, float now) + { + if (messageId <= 0 || observedAt < 0 || now < observedAt || now - observedAt > ERR_MortarPrediction.MAX_REPORT_AGE_MS) return false; + for (int i = m_Attempts.Count() - 1; i >= 0; i--) + if (now - m_Attempts.GetElement(i) > ERR_MortarPrediction.MAX_REPORT_AGE_MS) m_Attempts.Remove(m_Attempts.GetKey(i)); + return !m_Attempts.Contains(messageId) && m_Attempts.Count() < 128; + } + bool Claim(int messageId, float observedAt, float now) + { + if (!Available(messageId, observedAt, now)) return false; + m_Attempts.Insert(messageId, observedAt); + return true; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c new file mode 100644 index 0000000..1a4a07b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c @@ -0,0 +1,16 @@ +// One delivered HQ order drives a continuous native loading/firing cycle. +class ERR_MortarSalvo +{ + static const int ROUNDS = 8; + static const float RADIUS_METRES = 40; + static const float TIMEOUT_MS = 120000; + + static vector Offset(int site, int order, int shot) + { + // Stable throughout one ballistic solve; successive shells cover the disk + // instead of clustering on the same point or changing every iteration. + float radius = RADIUS_METRES * Math.Sqrt((shot + 1.0) / ROUNDS); + float angle = (site * 53 + order * 97 + shot * 137.5) * Math.DEG2RAD; + return Vector(Math.Sin(angle) * radius, 0, Math.Cos(angle) * radius); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c new file mode 100644 index 0000000..ece2586 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c @@ -0,0 +1,108 @@ +class ERR_MortarSupplyCallback : ScriptedInventoryOperationCallback +{ + ERR_MortarSupplyTransfer Transfer; + protected override void OnComplete() { if (Transfer) Transfer.Acknowledge(true); } + protected override void OnFailed() { if (Transfer) Transfer.Acknowledge(false); } +} + +// Exact-item native transaction. Callbacks only record outcomes; the HQ tick +// authorizes progress after checking actual inventory ownership and the order. +class ERR_MortarSupplyTransfer +{ + protected ERR_MortarBattery m_Battery; + protected IEntity m_Gun; + protected SCR_AIGroup m_Group; + protected IEntity m_Donor; + protected IEntity m_Gunner; + protected IEntity m_Shell; + protected InventoryStorageManagerComponent m_Source; + protected InventoryStorageManagerComponent m_Destination; + protected BaseInventoryStorageComponent m_Storage; + protected ref ERR_MortarSupplyCallback m_Callback; + protected int m_Order; + protected int m_Acknowledgement; + protected float m_Deadline; + protected bool m_Accepted; + protected bool m_Invalidated; + protected bool m_Resolved; + protected bool m_Ready; + void ERR_MortarSupplyTransfer(ERR_MortarBattery battery, IEntity donor, IEntity gunner, IEntity shell, BaseInventoryStorageComponent storage, float now) + { + m_Battery = battery; m_Gun = battery.Gun; m_Group = battery.Group; + m_Donor = donor; m_Gunner = gunner; m_Shell = shell; m_Storage = storage; + m_Order = battery.OrderId; m_Deadline = now + 8000; + m_Source = InventoryStorageManagerComponent.Cast(donor.FindComponent(InventoryStorageManagerComponent)); + m_Destination = InventoryStorageManagerComponent.Cast(gunner.FindComponent(InventoryStorageManagerComponent)); + } + static bool Authority(bool valid, bool invalidated, int capturedOrder, int currentOrder) + { + return valid && !invalidated && capturedOrder == currentOrder; + } + static bool Proven(bool callbackComplete, bool sourceContains, bool destinationContains, bool exactSlot) + { + return callbackComplete && !sourceContains && destinationContains && exactSlot; + } + protected bool Contains(InventoryStorageManagerComponent inventory) + { + if (!inventory || !m_Shell) return false; + array items = {}; ERR_Inventory.Items(inventory, items); + return items.Contains(m_Shell); + } + protected bool Valid(float now) + { + if (!m_Battery || !Authority(m_Battery.SupplyAuthorized(now), m_Invalidated, m_Order, m_Battery.OrderId)) return false; + if (m_Battery.Gun != m_Gun || m_Battery.Group != m_Group || !m_Donor || !m_Gunner || m_Donor == m_Gunner || !m_Shell || !m_Source || !m_Destination || !m_Storage) return false; + if (!ERR_Actors.CanFight(m_Donor) || !ERR_Actors.CanFight(m_Gunner) || ERR_Actors.Group(m_Donor) != m_Group || ERR_Actors.Group(m_Gunner) != m_Group) return false; + Faction faction = m_Group.GetFaction(); + if (SCR_FactionManager.SGetFaction(m_Donor) != faction || SCR_FactionManager.SGetFaction(m_Gunner) != faction || vector.Distance(m_Donor.GetOrigin(), m_Gunner.GetOrigin()) > 12) return false; + SCR_AIVehicleUsageComponent usage = SCR_AIVehicleUsageComponent.Cast(m_Gun.FindComponent(SCR_AIVehicleUsageComponent)); + if (!usage || !usage.GetTurretCompartmentSlot()) return false; + IEntity occupant = usage.GetTurretCompartmentSlot().GetOccupant(); + return !occupant || occupant == m_Gunner; + } + void Acknowledge(bool success) + { + if (m_Acknowledgement != 0) return; + if (success) m_Acknowledgement = 1; + else m_Acknowledgement = -1; + } + bool Begin(float now) + { + if (m_Callback || !Replication.IsServer() || !Valid(now) || !Contains(m_Source) || Contains(m_Destination)) return false; + m_Callback = new ERR_MortarSupplyCallback(); m_Callback.Transfer = this; + // Do not use callback.GetItem(): the native contract excludes Move operations. + m_Accepted = m_Source.TryMoveItemToStorage(m_Shell, m_Storage, -1, m_Callback); + if (!m_Accepted) { Acknowledge(false); m_Resolved = true; } + return m_Accepted; + } + void Invalidate() { m_Invalidated = true; m_Ready = false; } + bool Unresolved() { return m_Accepted && !m_Resolved; } + int CapturedOrder() { return m_Order; } + ERR_MortarSupplyState Poll(float now) + { + if (!Replication.IsServer()) return ERR_MortarSupplyState.FAILED; + bool valid = Valid(now); + bool sourceContains = Contains(m_Source); + bool destinationContains = Contains(m_Destination); + bool exactSlot; + InventoryItemComponent item; + if (m_Shell) item = InventoryItemComponent.Cast(m_Shell.FindComponent(InventoryItemComponent)); + if (item && item.GetParentSlot()) exactSlot = item.GetParentSlot().GetStorage() == m_Storage; + bool proven = Proven(m_Acknowledgement == 1, sourceContains, destinationContains, exactSlot); + if (proven || m_Acknowledgement < 0) m_Resolved = true; + // A successful callback without physical destination proof is ambiguous. + // Keep it reserved through timeout/cancellation; never start a second move. + if (!valid || now >= m_Deadline) + { + m_Invalidated = true; m_Ready = false; + return ERR_MortarSupplyState.FAILED; + } + if (proven) + { + m_Ready = true; + return ERR_MortarSupplyState.READY; + } + if (m_Acknowledgement < 0 || !m_Accepted) return ERR_MortarSupplyState.FAILED; + return ERR_MortarSupplyState.PENDING; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c new file mode 100644 index 0000000..b09e66e --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c @@ -0,0 +1,343 @@ +// Owned and ticked by HQ. Initial assets are authored once; losses are never replaced. +class ERR_MortarSystem +{ + protected ERR_HQ m_HQ; + protected ref array m_Batteries = {}; + protected ref ERR_SettlementSafety m_Settlements = new ERR_SettlementSafety(); + protected bool m_Prepared; + protected bool m_Stopped; + protected float m_NextDecision; + protected float m_NextRefreshDecision; + string SafetyReason; + string SettlementReason; + + void ERR_MortarSystem(ERR_HQ hq) { m_HQ = hq; } + static ERR_MortarSystem Get() + { + ERR_HQ hq = ERR_HQ.Get(); + if (!hq || !Replication.IsServer()) return null; + return hq.Mortars(); + } + static bool NearPlayer(vector position) + { + array players = {}; + ERR_Actors.Players(players); + foreach (IEntity player : players) + if (vector.DistanceXZ(player.GetOrigin(), position) <= 1200) return true; + return false; + } + bool Prepare() + { + if (!Replication.IsServer() || m_Prepared || m_Stopped) return false; + m_Prepared = true; + vector position = ERR_Actors.Ground("6000 0 7000"); + if (position[1] < 1) return false; + IEntity gun = ERR_Actors.Spawn(ERR_MortarBattery.GUN, position); + SCR_AIGroup group = SCR_AIGroup.Cast(ERR_Actors.Spawn(MortarGroup(), ERR_Actors.Ground(position + "0 0 4"))); + if (!gun || !group) + { + ERR_Actors.DeleteSpawned(gun); + ERR_MortarReadiness.RetireGroup(group); + ERR_Actors.DeleteSpawned(group); + return false; + } + if (group.GetFaction() != ERR_GameMode.Get().EnemyFaction()) + { + ERR_Actors.DeleteSpawned(gun); + ERR_MortarReadiness.RetireGroup(group); + ERR_Actors.DeleteSpawned(group); + return false; + } + FactionAffiliationComponent affiliation = FactionAffiliationComponent.Cast(gun.FindComponent(FactionAffiliationComponent)); + if (affiliation) affiliation.SetAffiliatedFaction(ERR_GameMode.Get().EnemyFaction()); + ERR_MortarBattery battery = new ERR_MortarBattery(); + battery.Bind(1, group, gun, GetGame().GetWorld().GetWorldTime()); + m_Batteries.Insert(battery); + ERR_GameMode mode = ERR_GameMode.Get(); + mode.Own(gun); + // HQ owns/reserves the finite asset immediately. Publish its physical + // membership to companion consumers only after readiness has completed. + mode.Own(group); + m_HQ.RegisterGroup(group); + m_HQ.ReserveGroup(group); + battery.Audit("DEPLOY", "authored gun and four-person crew; finite ammunition initialization pending"); + return true; + } + static ResourceName MortarGroup() { return "{B84C05941C4C81B8}Prefabs/ERR/MortarCrew.et"; } + void Batteries(out array batteries) + { + batteries.Clear(); + foreach (ERR_MortarBattery battery : m_Batteries) batteries.Insert(battery); + } + ERR_MortarBattery FindGun(IEntity gun) + { + foreach (ERR_MortarBattery battery : m_Batteries) + if (gun && battery.Gun == gun) return battery; + return null; + } + ERR_MortarBattery FindGroup(SCR_AIGroup group) + { + foreach (ERR_MortarBattery battery : m_Batteries) + if (group && battery.Group == group) return battery; + return null; + } + ERR_HQReport Latest(ERR_MortarBattery battery, float now) + { + // Only the coordinates actually delivered to this battery are available. + // A newer HQ contact cannot update a gun's knowledge without another downlink. + if (!battery || !ERR_MortarPrediction.Fresh(battery.Report, now)) return null; + return battery.Report; + } + string ContactFailure(ERR_MortarBattery battery) + { + if (!battery.Report) return "no delivered target report"; + return "delivered target report expired or invalid"; + } + // Classify only after SupplyState has observed any accepted inventory move. + // Report expiry must not be mislabeled as physical ammunition depletion. + string SupplyFailure(ERR_MortarBattery battery, float now) + { + if (!Latest(battery, now)) return ContactFailure(battery); + return "next native load lacks confirmed physical gunner ammunition"; + } + bool OutsideSettlements(vector impact) + { + bool clear = m_Settlements.OutsideSettlements(impact); + SettlementReason = m_Settlements.SettlementReason; + return clear; + } + bool Safe(ERR_MortarBattery battery, vector impact, float flight) + { + SafetyReason = "clear"; + if (!battery.Operational()) { SafetyReason = battery.OperationalReason(); return false; } + if (!OutsideSettlements(impact)) { SafetyReason = SettlementReason; return false; } + if (SCR_TerrainHelper.GetTerrainY(impact) < 0) { SafetyReason = "impact below Everon sea level"; return false; } + Faction faction = battery.Group.GetFaction(); + if (!faction) { SafetyReason = "battery faction missing"; return false; } + array friendlies = {}; + m_HQ.PhysicalForces(friendlies); + foreach (IEntity entity : friendlies) + { + Faction friendly = SCR_FactionManager.SGetFaction(entity); + if (!friendly || faction.IsFactionEnemy(friendly) || !ERR_Actors.Alive(entity)) continue; + vector velocity; + IEntity moving = CompartmentAccessComponent.GetVehicleIn(entity); + if (!moving) moving = entity; + if (moving.GetPhysics()) velocity = moving.GetPhysics().GetVelocity(); + if (ERR_MortarPrediction.ThreatensFriendly(impact, entity.GetOrigin(), velocity, flight)) + { + SafetyReason = "friendly physical force can enter the impact area"; + return false; + } + } + return true; + } + bool Withhold(ERR_MortarBattery battery, string reason, string detail = "") + { + battery.LastFailure = reason + "; " + detail; + battery.Trace("WITHHELD", reason, detail); + // Finish the activity from the next HQ tick, never from inside its own node. + battery.Rejected = true; + return false; + } + bool AllowShot(ERR_MortarBattery battery) + { + float now = GetGame().GetWorld().GetWorldTime(); + if (m_Stopped || !ERR_HQ.MissionActive()) return Withhold(battery, "mission inactive or HQ stopped"); + if (!battery.Operational()) return Withhold(battery, battery.OperationalReason()); + if (battery.RefreshRejected) return Withhold(battery, "target update failed; order awaiting cancellation"); + if (!battery.CommandOpen || battery.OrderShots >= ERR_MortarSalvo.ROUNDS) return Withhold(battery, "salvo complete or order closed"); + if (battery.Released) return Withhold(battery, "waiting for committed projectile"); + if (battery.AimedShot != battery.OrderShots || battery.AimedAt < 0 || now < battery.AimedAt) return Withhold(battery, "fresh aim solution required"); + ERR_HQReport report = Latest(battery, now); + if (!report) return Withhold(battery, ContactFailure(battery)); + if (!battery.AimSolution || !battery.AimSolution.Matches(battery, report)) return Withhold(battery, "aim command does not match delivered order"); + if (battery.AimValidatedAt < battery.AimedAt || now < battery.AimValidatedAt) return Withhold(battery, "aim validation timestamp invalid"); + if (now - battery.AimValidatedAt > 10000) + { + if (!battery.AimSolver) return Withhold(battery, "original native aim solver no longer available"); + if (!battery.AimSolver.ERR_RevalidateAim(battery, this, report, now)) return false; + } + vector updated; + if (!ERR_MortarPrediction.Predict(report, now, battery.FlightTime, updated)) return Withhold(battery, ERR_MortarPrediction.FailureReason); + updated += battery.AimOffset; + if (vector.DistanceXZ(updated, battery.Impact) > 60) return Withhold(battery, "predicted target left aimed impact area"); + if (!OutsideSettlements(updated)) return Withhold(battery, SettlementReason); + if (!Safe(battery, battery.Impact, battery.FlightTime)) return Withhold(battery, SafetyReason); + return true; + } + protected void AdvanceOrder(ERR_MortarBattery battery, float now) + { + if (battery.RadioOrder) + { + int deliveredState = battery.RadioOrder.Advance(now, m_HQ.Journal()); + if (deliveredState == 0) return; + ERR_HQReport delivered = battery.PendingRadioReport; + battery.RadioOrder = null; + battery.PendingRadioReport = null; + if (deliveredState < 0 || !ERR_MortarPrediction.Fresh(delivered, now) || !battery.Operational() || battery.Activity || !battery.CommandOpen) + { + battery.Cancel("radio delivery, report freshness or battery availability failed"); + battery.NextOrder = now + 10000; + return; + } + battery.PendingSupplyReport = delivered; + } + if (!battery.PendingSupplyReport) return; + if (!battery.CommandOpen || !ERR_MortarPrediction.Fresh(battery.PendingSupplyReport, now) || !battery.Operational() || battery.Activity) + { + battery.Cancel("delivered order expired or became unavailable while awaiting physical ammunition"); + battery.NextOrder = now + 10000; + return; + } + ERR_MortarSupplyState supply = battery.SupplyState(now); + if (supply == ERR_MortarSupplyState.PENDING) return; + if (supply == ERR_MortarSupplyState.FAILED) + { + battery.Cancel("physical gunner ammunition unavailable or transfer failed"); + battery.NextOrder = now + 10000; + return; + } + ERR_HQReport ready = battery.PendingSupplyReport; + battery.PendingSupplyReport = null; + battery.Order(ready, now); + } + + protected void AdvanceRefresh(ERR_MortarBattery battery, float now) + { + ERR_MortarRefresh update = battery.Refresh; + if (!update) return; + // A stale transaction must not cancel or modify a later order. + if (update.OrderId != battery.OrderId || !battery.CommandOpen) + { + battery.Refresh = null; + return; + } + if (!update.Owns(battery) || !battery.Operational() || !battery.Activity || !ERR_MortarRefreshRules.Newer(battery.Report, update.Report, now)) + { + battery.RejectRefresh("target update ownership, observation freshness or activity changed"); + return; + } + if (update.Route) + { + int state = update.Route.Advance(now, m_HQ.Journal()); + if (state == 0) return; + if (state < 0) + { + battery.RejectRefresh("new target observation failed physical HQ radio delivery"); + return; + } + update.Route = null; + } + // The original committed shell owns its report, geometry and airspace until + // native OnWeaponFired confirms it. A delivered update cannot relabel it. + if (battery.Released) return; + if (battery.AimSolution) + { + if (!battery.AimSolver || !battery.AimSolver.ERR_AdoptReport(battery, this, update.Report, now)) + { + battery.RejectRefresh("delivered update cannot preserve the original native aim command"); + return; + } + } + else + { + // No barrel command exists for the next shell yet. Its normal native aim + // node must solve this report; receiving it is not an aim authorization. + battery.Report = update.Report; + } + battery.Audit("UPDATE RECEIVED", string.Format("same order; update radio=M%1 accepted observation=M%2 observed=%3; shots=%4 original aim time=%5", update.RadioId, update.Report.MessageId, update.Report.ObservedAt, battery.OrderShots, battery.AimedAt)); + battery.Refresh = null; + } + + protected void QueueRefreshes(float now) + { + if (now < m_NextRefreshDecision) return; + m_NextRefreshDecision = now + 5000; + array reports = {}; + m_HQ.SupportContacts(reports, now); + foreach (ERR_MortarBattery battery : m_Batteries) + { + ERR_HQReport newest; + foreach (ERR_HQReport report : reports) + { + if (!battery.CanRefresh(report, now)) continue; + if (!newest || report.ObservedAt > newest.ObservedAt) newest = report; + } + if (!newest) continue; + ERR_HQRoute route = m_HQ.Downlink(battery.Group, "MORTAR UPDATE", newest.Description(now), newest.MessageId); + if (!route) + { + battery.RejectRefresh("HQ has a newer observation but no physical downlink to the active battery"); + continue; + } + battery.BeginRefresh(newest, route, now); + } + } + + void Tick(float now) + { + if (m_Stopped || !Replication.IsServer()) return; + foreach (ERR_MortarBattery battery : m_Batteries) + { + if ((battery.Rejected || battery.RefreshRejected) && !battery.Released) + { + battery.Cancel("native aim or firing authorization rejected"); + battery.NextOrder = now + 10000; + } + battery.Rejected = false; + battery.Update(now); + AdvanceOrder(battery, now); + AdvanceRefresh(battery, now); + } + QueueRefreshes(now); + if (now < m_NextDecision) return; + m_NextDecision = now + 10000; + array reports = {}; + m_HQ.SupportContacts(reports, now); + ERR_MortarBattery selected; + ERR_HQReport target; + float distance = float.MAX; + foreach (ERR_MortarBattery battery : m_Batteries) + { + if (!battery.StartupActivated || !battery.Operational() || battery.Activity || battery.RadioOrder || battery.PendingSupplyReport || battery.SupplyPending() || now < battery.NextOrder || battery.CountShells() == 0) continue; + foreach (ERR_HQReport report : reports) + { + if (!battery.CanRequest(report, now)) continue; + float candidate = vector.DistanceXZ(battery.Position, report.Position); + if (candidate < 350 || candidate > 4000 || candidate >= distance || !OutsideSettlements(report.Position)) continue; + selected = battery; + target = report; + distance = candidate; + } + } + if (!selected || !target) return; + ERR_HQRoute route = m_HQ.Downlink(selected.Group, "MORTAR ORDER", target.Description(now), target.MessageId); + if (!route) return; + if (!selected.BeginRequest(target, now)) return; + selected.RadioId = route.MessageId; + selected.RadioOrder = route; + selected.PendingRadioReport = target.Snapshot(); + m_NextDecision = now + 20000; + } + void AppendGuns(array entities) + { + foreach (ERR_MortarBattery battery : m_Batteries) + if (battery.Gun && !entities.Contains(battery.Gun)) entities.Insert(battery.Gun); + } + string Status() + { + int ready, shells; + foreach (ERR_MortarBattery battery : m_Batteries) + { + if (battery.StartupActivated && battery.Operational()) ready++; + shells += battery.CountShells(); + } + return string.Format("mortars %1/%2; HE shells %3", ready, m_Batteries.Count(), shells); + } + void Stop() + { + m_Stopped = true; + foreach (ERR_MortarBattery battery : m_Batteries) battery.Stop(); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c new file mode 100644 index 0000000..d08a12a --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c @@ -0,0 +1,366 @@ +#ifdef WORKBENCH +// Separate Chat fixture for the ACTUAL dormant AI controller. Core's original +// powered-flight probe is disabled for this outcome and retains its own evidence. +modded class SCR_CharacterControllerComponent +{ + override void OnPrepareControls(IEntity owner, ActionManager am, float dt, bool player) + { + ERR_NativeAircraftControlProbe probe = ERR_NativeAircraftControlProbe.Current(); + if (probe && !player) probe.PrepareActions(this, owner, am, dt); + super.OnPrepareControls(owner, am, dt, player); + } +} +modded class SCR_HelicopterControllerComponent +{ + protected override event void OnPrepareControls() + { + super.OnPrepareControls(); + ERR_NativeAircraftControlProbe probe = ERR_NativeAircraftControlProbe.Current(); + if (probe) probe.PrepareHelicopter(this); + } +} +// Read-only native fixture observation; no production method or state override. +modded class ERR_AircraftFlight +{ + float ERR_NativeControlDeadline() { return m_Deadline; } +} +class ERR_NativeAircraftControlRules +{ + static bool Terminal(bool cancellation, int state, int cancellationCount) + { + if (cancellation) return state == ERR_AircraftFlightState.CANCELLED && cancellationCount == 1; + return state == ERR_AircraftFlightState.COMPLETE && cancellationCount == 0; + } + static bool CanCancel(int state, bool contact, float height) + { + return state == ERR_AircraftFlightState.CLIMB && !contact && height >= 5 && height <= 18; + } + static bool CancelProof(bool airborneHooks, bool landingHeld, bool sameDeadline, bool sameToken) + { + return airborneHooks && landingHeld && sameDeadline && sameToken; + } + static bool TranslateProof(bool proven, bool held, float requestedDistance, float displacement, float targetError) + { + return proven && held && requestedDistance >= 1.75 && requestedDistance <= 4.05 && displacement >= 1 && targetError >= 0 && targetError <= 0.75; + } + static bool PhysicalFinish(bool originalOccupancy, bool landed, bool engineOff, float fuelUsed, int wakes, int starts, int controllerStarts, int pilotHooks, int helicopterHooks) + { + if (!originalOccupancy || !landed || !engineOff) return false; + return fuelUsed > 0.05 && wakes == 1 && starts == 1 && controllerStarts == 1 && pilotHooks > 100 && helicopterHooks > 100; + } + static bool CanDispose(bool context, bool noPlayers, bool sameFaction, bool groupUnchanged, bool pilotUnchanged) + { + return context && noPlayers && sameFaction && groupUnchanged && pilotUnchanged; + } +} +class ERR_NativeAircraftControlProbe +{ + protected static ERR_NativeAircraftControlProbe s_Current; + protected ERR_GameMode m_Mode; + protected Vehicle m_Aircraft; + protected SCR_AIGroup m_Group; + protected IEntity m_Pilot; + protected PilotCompartmentSlot m_Seat; + protected HelicopterControllerComponent m_Controller; + protected VehicleHelicopterSimulation m_Simulation; + protected FuelManagerComponent m_Fuel; + protected ref ERR_AircraftFlightEnvelope m_Envelope; + protected ref ERR_AircraftFlight m_Flight; + protected float m_Deadline; + protected float m_StageDeadline; + protected float m_Stable = -1; + protected float m_LastTick = -1; + protected float m_NextLog; + protected float m_InitialFuel; + protected float m_ControlDeadline; + protected float m_CancelAt = -1; + protected float m_LandingStable = -1; + protected int m_CancelCount; + protected int m_CancelPilotHooks; + protected int m_CancelHelicopterHooks; + protected bool m_CancelFixture; + protected bool m_TranslationFixture; + protected bool m_TranslationObserved; + protected bool m_TranslationHeld; + protected vector m_TranslationOrigin; + protected vector m_TranslationTarget; + protected float m_TranslationStable = -1; + protected bool m_ContinuedAirborneControl; + protected bool m_LandingHeld; + protected vector m_Pad; + protected int m_Step; + protected int m_Wakes; + protected int m_ControllerStarts; + protected int m_EngineStarts; + protected int m_PilotHooks; + protected int m_HelicopterHooks; + protected bool m_LastEngine; + protected bool m_AllocationRequested; + protected bool m_PilotRequested; + protected bool m_Stopped; + protected bool m_Complete; + static const int ORDER_TOKEN = 771001; + static const ResourceName AIRCRAFT = "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et"; + static const ResourceName GROUP = "{000CD338713F2B5A}Prefabs/AI/Groups/Group_Base.et"; + static const ResourceName PILOT = "{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et"; + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && (outcome == "aircraft-control" || outcome == "aircraft-cancel" || outcome == "aircraft-translate"); + } + static ERR_NativeAircraftControlProbe Current() { return s_Current; } + void ERR_NativeAircraftControlProbe(ERR_GameMode mode) + { + m_Mode = mode; + if (!GetGame() || !GetGame().GetWorld() || !Enabled() || s_Current) { m_Stopped = true; return; } + string outcome; System.GetCLIParam("errSmokeOutcome", outcome); m_CancelFixture = outcome == "aircraft-cancel"; m_TranslationFixture = outcome == "aircraft-translate"; + m_Deadline = GetGame().GetWorld().GetWorldTime() + 300000; + s_Current = this; + } + protected bool Check(bool passed, string detail) + { + string outcome = "aircraft-control"; if (m_CancelFixture) outcome = "aircraft-cancel"; else if (m_TranslationFixture) outcome = "aircraft-translate"; + if (passed) { Print("ERR SMOKE PASS: " + outcome + " " + detail); return true; } + Print("ERR SMOKE FAIL: " + outcome + " " + detail, LogLevel.ERROR); Stop(); return false; + } + protected bool NoPlayers() + { + if (!GetGame() || !GetGame().GetPlayerManager()) return false; + if (m_Group && m_Group.GetPlayerCount(true) > 0) return false; + array players = {}; GetGame().GetPlayerManager().GetPlayers(players); + foreach (int id : players) + { + IEntity actor = GetGame().GetPlayerManager().GetPlayerControlledEntity(id); + if (actor && (actor == m_Pilot || actor == m_Aircraft || (m_Aircraft && CompartmentAccessComponent.GetVehicleIn(actor) == m_Aircraft))) return false; + } + return true; + } + protected bool OriginalOccupancy() + { + if (!m_Pilot || !m_Group || !m_Aircraft || !m_Controller || !m_Seat || !NoPlayers()) return false; + if (m_Group.GetAgentsCount() != 1 || ERR_Actors.Group(m_Pilot) != m_Group || !ERR_Actors.CanFight(m_Pilot)) return false; + return m_Seat.GetOccupant() == m_Pilot && m_Controller.GetPilotCompartmentSlot() == m_Seat && CompartmentAccessComponent.GetVehicleIn(m_Pilot) == m_Aircraft; + } + void PrepareActions(CharacterControllerComponent controller, IEntity owner, ActionManager am, float dt) + { + if (m_Stopped || !m_Flight || owner != m_Pilot) return; + m_Flight.PrepareActions(controller, owner, am, dt); m_PilotHooks++; + } + void PrepareHelicopter(HelicopterControllerComponent controller) + { + if (m_Stopped || !m_Flight || controller != m_Controller) return; + m_Flight.PrepareHelicopter(controller); m_HelicopterHooks++; + } + protected bool FindPad(out vector result) + { + vector anchor = m_Mode.ExtractionVehicle().GetOrigin(); + float bestSlope = float.MAX; vector bestCandidate, refinementAnchor; + int localCandidates = ERR_PoweredFlightRules.PAD_CANDIDATES + ERR_PoweredFlightRules.PAD_REFINEMENTS; + for (int index = 0; index < localCandidates + ERR_PoweredFlightRules.AIRPORT_CANDIDATES; index++) + { + if (index == ERR_PoweredFlightRules.PAD_CANDIDATES) + { + refinementAnchor = anchor; if (bestSlope != float.MAX) refinementAnchor = bestCandidate; + } + vector candidate; + if (index < ERR_PoweredFlightRules.PAD_CANDIDATES) candidate = ERR_Actors.Ground(anchor + ERR_PoweredFlightRules.PadOffset(index)); + else if (index < localCandidates) candidate = ERR_Actors.Ground(refinementAnchor + ERR_PoweredFlightRules.RefineOffset(index - ERR_PoweredFlightRules.PAD_CANDIDATES)); + else candidate = ERR_Actors.Ground("4900.953 0 11787.412" + ERR_PoweredFlightRules.AirportOffset(index - localCandidates)); + if (candidate[1] < 2) continue; + float delta; + for (int edge = 0; edge < 4; edge++) + { + float side = edge * Math.PI / 2; + vector point = candidate + Vector(Math.Cos(side) * 14, 0, Math.Sin(side) * 14); + delta = Math.Max(delta, Math.AbsFloat(SCR_TerrainHelper.GetTerrainY(point) - candidate[1])); + } + if (delta < bestSlope) { bestSlope = delta; bestCandidate = candidate; } + if (delta > 0.8) continue; + if (!SCR_WorldTools.TraceCilinderUtil(candidate + "0 2.5 0", 40, 4, TraceFlags.ENTS)) continue; + TraceBox clearance = new TraceBox(); clearance.Start = candidate + "0 3 0"; clearance.End = candidate + "0 60 0"; + clearance.Mins = "-40 -1 -40"; clearance.Maxs = "40 1 40"; clearance.Flags = TraceFlags.ENTS | TraceFlags.WORLD; + if (!(GetGame().GetWorld().TraceMove(clearance, null) >= 1)) continue; + PrintFormat("ERR AIRCRAFT FIXTURE PAD: candidate=%1 tested=%2 terrainDelta=%3; no fallback", candidate, index + 1, delta); + result = candidate; return true; + } + return false; + } + protected bool ReadyComponents() + { + m_Controller = HelicopterControllerComponent.Cast(m_Aircraft.FindComponent(HelicopterControllerComponent)); + if (!m_Controller) return false; + m_Simulation = m_Controller.GetSimulation(); + m_Fuel = FuelManagerComponent.Cast(m_Aircraft.FindComponent(FuelManagerComponent)); + if (!m_Simulation || !m_Simulation.IsValid() || !m_Fuel || !m_Fuel.HasFuel()) return false; + BaseCompartmentManagerComponent manager = BaseCompartmentManagerComponent.Cast(m_Aircraft.FindComponent(BaseCompartmentManagerComponent)); + if (!manager) return false; + array slots = {}; manager.GetCompartments(slots); + if (slots.Count() > 64) return false; + foreach (BaseCompartmentSlot slot : slots) + { + PilotCompartmentSlot pilotSlot = PilotCompartmentSlot.Cast(slot); + if (!pilotSlot || pilotSlot.GetOwner() != m_Aircraft || pilotSlot.GetVehicle() != m_Aircraft || pilotSlot.GetCompartmentName() != "PilotCompartment") continue; + if (pilotSlot.GetType() != ECompartmentType.PILOT) continue; + if (pilotSlot.GetOccupant() || pilotSlot.IsReserved() || pilotSlot.IsGetInLocked() || !pilotSlot.IsCompartmentAccessible()) continue; + m_Seat = pilotSlot; return true; + } + return false; + } + protected void Diagnostic(float now) + { + if (!m_Aircraft || !m_Controller || !m_Simulation || now < m_NextLog) return; + m_NextLog = now + 2000; + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + vector home = m_Pad; if (m_Envelope) home = m_Envelope.Home(); + int state = -1; string reason; if (m_Flight) { state = m_Flight.State(); reason = m_Flight.Reason(); } + PrintFormat("ERR AIRCRAFT FIXTURE: step=%1 state=%2 height=%3 drift=%4 speed=%5 contact=%6 engine=%7 fuelUsed=%8 reason=%9", m_Step, state, transform[3][1] - home[1], vector.DistanceXZ(transform[3], home), m_Simulation.GetVelocity().Length(), m_Simulation.HasAnyGroundContact(), m_Controller.IsEngineOn(), m_InitialFuel - m_Fuel.GetTotalFuel(), reason); + } + int Tick(float now) + { + if (m_Complete) return 1; + if (m_Stopped) return -1; + if (!Enabled() || !m_Mode || m_Mode != ERR_GameMode.Get() || !m_Mode.Active() || now >= m_Deadline) { Check(false, "active exact mission and bounded300-second fixture"); return -1; } + if (!NoPlayers()) { Check(false, "fixture remains unclaimed by any human"); return -1; } + if (m_LastTick >= 0 && (now < m_LastTick || now - m_LastTick > 1500)) { m_Stable = -1; m_LandingStable = -1; m_TranslationStable = -1; } + m_LastTick = now; + if (m_Step == 0) + { + if (!m_Mode.ExtractionVehicle()) return 0; + if (!Check(!m_AllocationRequested && FindPad(m_Pad), "independent qualified candidate found before one finite allocation")) return -1; + m_AllocationRequested = true; + m_Aircraft = Vehicle.Cast(ERR_Actors.Spawn(AIRCRAFT, m_Pad)); + m_Group = SCR_AIGroup.Cast(ERR_Actors.Spawn(GROUP, m_Pad + "20 0 0")); + if (!Check(m_Aircraft && m_Group && m_Group.InitFactionKey("USSR") && m_Group.GetFaction() == m_Mode.EnemyFaction(), "one finite native Mi8 and memberless enemy group created")) return -1; + m_Group.SetPermanentLOD(0); m_Group.ActivateAI(); + m_Step = 1; m_StageDeadline = now + 30000; return 0; + } + if (!m_Aircraft || !m_Group || !ERR_Actors.Alive(m_Aircraft)) { Check(false, "original airframe and group survive without replacement"); return -1; } + if (m_Step == 1) + { + if (now >= m_StageDeadline) { Check(false, "real components and original pilot initialize within30seconds"); return -1; } + if (!ReadyComponents()) return 0; + if (!Check(!m_PilotRequested && m_Group.GetAgentsCount() == 0, "one original native pilot request only")) return -1; + m_PilotRequested = true; AIGroup originalGroup = m_Group; + m_Pilot = m_Seat.SpawnCharacterInCompartment(PILOT, originalGroup, GROUP); + AIControlComponent control; if (m_Pilot) control = AIControlComponent.Cast(m_Pilot.FindComponent(AIControlComponent)); + AIAgent agent; if (control) agent = control.GetControlAIAgent(); + if (!Check(m_Pilot && originalGroup == m_Group && agent, "pilot seated by native mechanism in original group")) return -1; + agent.SetPermanentLOD(0); agent.ActivateAI(); m_Step = 2; return 0; + } + Diagnostic(now); + if (m_Step == 2) + { + if (now >= m_StageDeadline) { Check(false, "actual initial seating and native ground settling within30seconds"); return -1; } + if (!OriginalOccupancy()) { m_Stable = -1; return 0; } + Physics physics = m_Aircraft.GetPhysics(); + if (!physics || !physics.IsDynamic()) return 0; + if (m_Wakes == 0) { m_Wakes = 1; physics.SetActive(ActiveState.ACTIVE); m_Stable = -1; return 0; } + if (!m_Simulation.HasAnyGroundContact() || !ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft)) { m_Stable = -1; return 0; } + if (m_Stable < 0) m_Stable = now; + if (now - m_Stable < 1000) return 0; + if (!Check(!m_Controller.IsEngineOn(), "post-spawn qualification precedes native engine start")) return -1; + m_Envelope = ERR_AircraftFlightEnvelope.Qualify(m_Mode, m_Aircraft, m_Pilot); + if (!Check(m_Envelope != null, "actual post-spawn column and complete rotor/model footprint issue exact qualification")) return -1; + m_InitialFuel = m_Fuel.GetTotalFuel(); + m_Flight = new ERR_AircraftFlight(); m_ControllerStarts++; + m_ControlDeadline = Math.Min(m_Deadline, now + 240000); + bool started; + if (m_TranslationFixture) started = m_Flight.StartTranslation(m_Mode, m_Aircraft, m_Group, m_Pilot, m_Seat, m_Envelope, ORDER_TOKEN, m_ControlDeadline, m_Envelope.Home()); + else started = m_Flight.Start(m_Mode, m_Aircraft, m_Group, m_Pilot, m_Seat, m_Envelope, ORDER_TOKEN, m_ControlDeadline); + if (!Check(started, "actual controller accepts one qualified original pilot/aircraft order")) return -1; + m_Step = 3; return 0; + } + if (m_Step == 3) + { + if (!OriginalOccupancy()) { Check(false, "original pilot remains conscious and in its exact seat/group"); return -1; } + bool engine = m_Controller.IsEngineOn(); if (engine && !m_LastEngine) m_EngineStarts++; m_LastEngine = engine; + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + vector home = m_Envelope.Home(); float height = transform[3][1] - home[1]; + bool contact = m_Simulation.HasAnyGroundContact(); + bool landed = ERR_AircraftFlightRules.Landed(contact, height, m_Simulation.GetVelocity().Length(), m_Simulation.GetAngularVelocity().Length(), transform[1][1]); + if (m_CancelFixture && m_CancelCount == 0 && ERR_NativeAircraftControlRules.CanCancel(m_Flight.State(), contact, height)) + { + m_CancelCount = 1; m_CancelAt = now; + m_CancelPilotHooks = m_PilotHooks; m_CancelHelicopterHooks = m_HelicopterHooks; + m_Flight.Cancel("native fixture deliberate airborne cancellation"); + PrintFormat("ERR AIRCRAFT CANCEL: height=%1 contact=%2 state=%3 token=%4 deadline=%5 pilotHooks=%6 helicopterHooks=%7", height, contact, m_Flight.State(), m_Flight.OrderToken(), m_Flight.ERR_NativeControlDeadline(), m_PilotHooks, m_HelicopterHooks); + if (!Check(m_Flight.State() == ERR_AircraftFlightState.LANDING && !m_Flight.Finished(), "one actual airborne Cancel enters retained LANDING control")) return -1; + } + if (m_CancelCount == 1) + { + if (m_Flight.ERR_NativeControlDeadline() != m_ControlDeadline || m_Flight.OrderToken() != ORDER_TOKEN) { Check(false, "cancel retains original overall deadline and exact order token"); return -1; } + int state = m_Flight.State(); + if (state != ERR_AircraftFlightState.LANDING && state != ERR_AircraftFlightState.SHUTDOWN && state != ERR_AircraftFlightState.CANCELLED) { Check(false, "cancel retains landing or grounded shutdown states only"); return -1; } + if (state == ERR_AircraftFlightState.LANDING && !contact && height > 1 && m_PilotHooks > m_CancelPilotHooks + 10 && m_HelicopterHooks > m_CancelHelicopterHooks + 10) m_ContinuedAirborneControl = true; + if (!landed) m_LandingStable = -1; + else if (m_LandingStable < 0) m_LandingStable = now; + } + if (m_TranslationFixture && m_Flight.State() == ERR_AircraftFlightState.TRANSLATING) + { + if (!m_TranslationObserved) + { + m_TranslationObserved = true; m_TranslationOrigin = m_Flight.TranslationOrigin(); m_TranslationTarget = m_Flight.TranslationTarget(); + if (!Check(vector.DistanceXZ(m_TranslationTarget, home) < 0.001, "pre-takeoff translation target remains the original qualified home")) return -1; + } + if (m_Flight.TranslationTarget() != m_TranslationTarget || m_Flight.TranslationOrigin() != m_TranslationOrigin || m_Flight.ERR_NativeControlDeadline() != m_ControlDeadline) { Check(false, "translation never retargets or renews its original deadline"); return -1; } + vector horizontal = m_Simulation.GetVelocity(); horizontal[1] = 0; + float requested = vector.DistanceXZ(m_TranslationOrigin, m_TranslationTarget); + bool held = ERR_AircraftTranslationRules.Held(contact, height, m_Simulation.GetVelocity().Length(), m_Simulation.GetVelocity()[1], transform[1][1], horizontal.Length(), vector.DistanceXZ(transform[3], m_TranslationTarget), vector.DistanceXZ(transform[3], m_TranslationOrigin), requested); + if (!held) m_TranslationStable = -1; + else if (m_TranslationStable < 0) m_TranslationStable = now; + if (m_TranslationStable >= 0 && now - m_TranslationStable >= 5000) m_TranslationHeld = true; + } + m_Flight.Tick(); + if (m_CancelCount == 1 && m_Flight.State() == ERR_AircraftFlightState.SHUTDOWN) + { + if (!Check(landed && m_LandingStable >= 0 && now - m_LandingStable >= 2000, "cancel reaches shutdown only after two observed stable grounded seconds")) return -1; + m_LandingHeld = true; + } + if (!m_Flight.Finished()) return 0; + PrintFormat("ERR AIRCRAFT FIXTURE RESULT: state=%1 token=%2 engineStarts=%3 controllerStarts=%4 wakes=%5 pilotHooks=%6 helicopterHooks=%7 reason=%8", m_Flight.State(), m_Flight.OrderToken(), m_EngineStarts, m_ControllerStarts, m_Wakes, m_PilotHooks, m_HelicopterHooks, m_Flight.Reason()); + bool complete = ERR_NativeAircraftControlRules.Terminal(m_CancelFixture, m_Flight.State(), m_CancelCount); + complete = complete && ERR_NativeAircraftControlRules.PhysicalFinish(OriginalOccupancy(), landed, !m_Controller.IsEngineOn(), m_InitialFuel - m_Fuel.GetTotalFuel(), m_Wakes, m_EngineStarts, m_ControllerStarts, m_PilotHooks, m_HelicopterHooks); + if (m_CancelFixture) + { + bool proof = ERR_NativeAircraftControlRules.CancelProof(m_ContinuedAirborneControl, m_LandingHeld, m_Flight.ERR_NativeControlDeadline() == m_ControlDeadline, m_Flight.OrderToken() == ORDER_TOKEN); + PrintFormat("ERR AIRCRAFT CANCEL RESULT: count=%1 elapsed=%2 airborneHooks=%3 landingHeld=%4 deadline=%5 originalDeadline=%6", m_CancelCount, now - m_CancelAt, m_ContinuedAirborneControl, m_LandingHeld, m_Flight.ERR_NativeControlDeadline(), m_ControlDeadline); + complete = complete && proof; + } + if (m_TranslationFixture) + { + float requestedDistance = vector.DistanceXZ(m_TranslationOrigin, m_TranslationTarget); + float displacement = vector.DistanceXZ(transform[3], m_TranslationOrigin); + float targetError = vector.DistanceXZ(transform[3], m_TranslationTarget); + bool translated = ERR_NativeAircraftControlRules.TranslateProof(m_Flight.TranslationProven(), m_TranslationObserved && m_TranslationHeld, requestedDistance, displacement, targetError); + PrintFormat("ERR AIRCRAFT TRANSLATION RESULT: proven=%1 held=%2 requested=%3 displacement=%4 targetError=%5 updates=%6", m_Flight.TranslationProven(), m_TranslationHeld, requestedDistance, displacement, targetError, m_Flight.TranslationUpdates()); + complete = complete && translated; + } + if (!Check(complete && m_Flight.OrderToken() == ORDER_TOKEN, "actual control order completes on original physical grounded aircraft with engine off, finite fuel use and exact pilot")) return -1; + m_Complete = true; Stop(); return 1; + } + return 0; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (s_Current == this) s_Current = null; + if (m_Flight && !m_Flight.Finished() && m_CancelCount == 0) m_Flight.Cancel("native fixture stopped"); + // End-of-test disposal is not successful flight or a production cancellation. + // These assets are fixture-owned only, never registered with mission cleanup. + // Release the controller before deleting disposable unclaimed physical assets. + m_Flight = null; + bool context = GetGame() && GetGame().GetWorld() && GetGame().GetPlayerManager() && m_Mode && m_Mode == ERR_GameMode.Get(); + bool faction = context && (!m_Group || (!m_PilotRequested && m_Group.GetAgentsCount() == 0 && !m_Group.GetFaction()) || m_Group.GetFaction() == m_Mode.EnemyFaction()) && (!m_Aircraft || SCR_FactionManager.SGetFaction(m_Aircraft) == m_Mode.EnemyFaction()); + bool groupUnchanged = context && (!m_Group || m_Group.GetAgentsCount() == 0 || (m_Group.GetAgentsCount() == 1 && m_Pilot && ERR_Actors.Group(m_Pilot) == m_Group)); + bool pilotUnchanged = context && (!m_Pilot || (m_Group && ERR_Actors.Group(m_Pilot) == m_Group && !ERR_Actors.Player(m_Pilot))); + if (ERR_NativeAircraftControlRules.CanDispose(context, NoPlayers(), faction, groupUnchanged, pilotUnchanged)) + { + ERR_Actors.DeleteSpawned(m_Group); ERR_Actors.DeleteSpawned(m_Pilot); ERR_Actors.DeleteSpawned(m_Aircraft); + } + else Print("ERR AIRCRAFT FIXTURE CLEANUP: ownership changed; captured entities preserved"); + m_Envelope = null; + } + void ~ERR_NativeAircraftControlProbe() { Stop(); } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c new file mode 100644 index 0000000..b141896 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c @@ -0,0 +1,213 @@ +#ifdef WORKBENCH +class ERR_NativeCourierMoveCallback : ScriptedInventoryOperationCallback +{ + int Result; + protected override void OnComplete() { if (Result == 0) Result = 1; } + protected override void OnFailed() { if (Result == 0) Result = -1; } +} +modded class ERR_HQ +{ + override bool QueueSupplyStatus(ERR_MortarBattery battery, float now) + { + bool queued = super.QueueSupplyStatus(battery, now); + ERR_NativeMortarCourierProbe probe = ERR_NativeMortarCourierProbe.Current(); + if (queued && probe) + foreach (ERR_HQUnit unit : m_Units) + if (unit.Group == battery.Group && unit.PendingSupplyStatus) probe.Uplink(unit.Uplink, unit.PendingSupplyStatus); + return queued; + } +} +class ERR_NativeMortarCourierProbe +{ + protected static ERR_NativeMortarCourierProbe s_Current; + protected ERR_GameMode m_Mode; + protected ERR_MortarLogistics m_Service; + protected ERR_MortarBattery m_Battery; + protected ref array m_Original = {}; + protected ref array m_Crew = {}; + protected ref array m_Depot = {}; + protected ref array m_Forces = {}; + protected ref array m_Boxes = {}; + protected ref array m_Stores = {}; + protected ref ERR_NativeCourierMoveCallback m_Callback; + protected IEntity m_Moving; + protected IEntity m_Source; + protected BaseInventoryStorageComponent m_Destination; + protected ref ERR_HQRoute m_Uplink; + protected ref ERR_HQRoute m_Downlink; + protected ref ERR_MortarSupplyStatus m_Status; + protected float m_ObservedAt; + protected int m_Message; + protected int m_Index; + protected int m_Stage; + protected float m_Deadline; + protected float m_MoveDeadline; + protected bool m_Complete; + protected bool m_Stopped; + protected vector m_Departure; + protected IEntity m_Bearer; + protected AIWaypointCycle m_OriginalPatrolCycle; + protected ref array m_OriginalPatrolMoves = {}; + static const int STORAGE_CANDIDATES = 64; + static const int STORAGE_COUNT = 5; + // The compact 8x8 grid keeps 3m between centers; blocked points are skipped. + static vector StorageOffset(int index) + { + if (index < 0 || index >= STORAGE_CANDIDATES) return vector.Zero; + int column = Math.Mod(index, 8); + int row = index / 8; + return Vector(20 + column * 3, 0, 15 + row * 3); + } + static const ResourceName BOX = "{EBBC859CCD94D96D}Prefabs/Props/EmptyStorages/USSR_AmmoBox_empty.et"; + static ERR_NativeMortarCourierProbe Current() { return s_Current; } + static bool Enabled() + { + string smoke, outcome; + return Replication.IsServer() && System.GetCLIParam("errSmoke", smoke) && smoke == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "mortar-courier"; + } + void ERR_NativeMortarCourierProbe(ERR_GameMode mode) { m_Mode = mode; if (Enabled()) s_Current = this; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: mortar courier " + detail); return true; } + Print("ERR SMOKE FAIL: mortar courier " + detail, LogLevel.ERROR); Stop(); return false; + } + protected bool Has(IEntity owner, IEntity shell) + { + if (!owner || !shell) return false; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(owner.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) return false; + array items = {}; ERR_Inventory.Items(inventory, items); return items.Contains(shell); + } + void Uplink(ERR_HQRoute route, ERR_MortarSupplyStatus report) + { + if (m_Stopped || !report || !m_Battery || report.Group != m_Battery.Group || m_Status) return; + m_Uplink = route; m_Status = report; m_ObservedAt = report.ObservedAt; m_Message = report.MessageId; + } + protected bool OriginalStored() + { + foreach (IEntity shell : m_Original) + { + if (!shell) return false; + int owners; + foreach (BaseInventoryStorageComponent storage : m_Stores) if (storage && storage.Contains(shell)) owners++; + foreach (IEntity actor : m_Crew) if (Has(actor, shell)) owners++; + if (owners != 1) return false; + } + return true; + } + protected bool PreservedForces(ERR_HQ hq) + { + array forces = {}; hq.PhysicalForces(forces); + if (forces.Count() != m_Forces.Count()) return false; + foreach (IEntity original : m_Forces) if (!original || !forces.Contains(original)) return false; + return true; + } + int Tick(float now) + { + if (m_Complete) return 1; + if (m_Stopped || !Enabled()) return -1; + if (m_Deadline == 0) m_Deadline = now + 360000; + if (now > m_Deadline) { Check(false, "bounded native courier deadline"); return -1; } + ERR_HQ hq = ERR_HQ.Get(); if (!hq) return 0; + m_Service = hq.Logistics(); if (!m_Service) return 0; + m_Battery = m_Service.Battery(); + if (m_Service.Stopped()) { Check(false, "production finite stock setup remains available"); return -1; } + if (!m_Battery || !m_Battery.StartupActivated || m_Service.State() == 0) return 0; + // No fire-controller hold, synthetic contact or routing bypass: this fixture + // requires the actual local prisoner to remain inside the gun's minimum range. + PlayerController controller = GetGame().GetPlayerController(); + IEntity player; if (controller) player = controller.GetControlledEntity(); + if (!player || !m_Mode.Players().CurrentActor(player) || vector.DistanceXZ(player.GetOrigin(), m_Battery.Gun.GetOrigin()) >= 300) { Check(false, "actual local prisoner remains below artillery minimum engagement range"); return -1; } + if (m_Stage == 0) + { + m_Service.InitialStock(m_Depot); hq.PhysicalForces(m_Forces); + ERR_ScenarioComponent scenario = ERR_ScenarioComponent.Cast(m_Mode.FindComponent(ERR_ScenarioComponent)); + ERR_SiteRuntime site = scenario.Sites().Find("everon-supply-2"); + if (!Check(site && site.Group == m_Service.Group() && site.PatrolCycle, "same original western cache patrol")) return -1; + m_OriginalPatrolCycle = site.PatrolCycle; m_OriginalPatrolMoves.Copy(site.PatrolWaypoints); + array agents = {}; m_Battery.Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + if (!agent || !agent.GetControlledEntity()) continue; + IEntity actor = agent.GetControlledEntity(); m_Crew.Insert(actor); + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(actor.FindComponent(InventoryStorageManagerComponent)); + array items = {}; ERR_Inventory.Items(inventory, items); + foreach (IEntity item : items) if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == ERR_MortarBattery.SHELL && !m_Original.Contains(item)) m_Original.Insert(item); + } + if (!Check(m_Original.Count() == 27 && m_Depot.Count() == 12 && m_Battery.TotalShots == 0, "27 original crew rounds and 12 distinct finite depot rounds")) return -1; + foreach (IEntity depotShell : m_Depot) if (!Check(!m_Original.Contains(depotShell) && Has(m_Service.Cache(), depotShell), "depot round is a distinct original cache item")) return -1; + int tested, lowGround, obstructed; + for (int i = 0; i < STORAGE_CANDIDATES && m_Stores.Count() < STORAGE_COUNT; i++) + { + tested++; + vector position = ERR_Actors.Ground(m_Battery.Gun.GetOrigin() + StorageOffset(i)); + if (position[1] <= 1) { lowGround++; continue; } + if (!SCR_WorldTools.TraceCilinderUtil(position + "0 1 0", 1.3, 2, TraceFlags.ENTS | TraceFlags.WORLD)) { obstructed++; continue; } + IEntity box = ERR_Actors.Spawn(BOX, position); + if (!Check(box != null, "fixture-only empty box created; no new ammunition")) return -1; + m_Mode.Own(box); m_Boxes.Insert(box); + BaseInventoryStorageComponent storage = BaseInventoryStorageComponent.Cast(box.FindComponent(BaseInventoryStorageComponent)); + if (!Check(storage != null, "fixture box has real native storage")) return -1; + m_Stores.Insert(storage); + } + Print(string.Format("ERR COURIER STORAGE: tested=%1/64 ready=%2/5 lowGround=%3 obstructed=%4", tested, m_Stores.Count(), lowGround, obstructed)); + if (!Check(m_Boxes.Count() == STORAGE_COUNT && m_Stores.Count() == STORAGE_COUNT, "five owned empty native stores ready before moving any original shell")) return -1; + Print("ERR COURIER FIXTURE: original 27 shells will be physically sequestered in five fixture boxes, not fired/destroyed; no report insertion, teleport, AI hold or replacement ammunition"); + m_Stage = 1; + } + if (m_Stage == 1) + { + if (m_Callback) + { + if (m_Callback.Result < 0 || now >= m_MoveDeadline || !m_Moving) { Check(false, "native depletion move neither failed nor timed out/item lost"); return -1; } + InventoryItemComponent item = InventoryItemComponent.Cast(m_Moving.FindComponent(InventoryItemComponent)); + if (m_Callback.Result == 0 || !item || !item.GetParentSlot() || item.GetParentSlot().GetStorage() != m_Destination || Has(m_Source, m_Moving) || !m_Destination.Contains(m_Moving)) return 0; + m_Callback = null; m_Moving = null; m_Source = null; m_Destination = null; m_Index++; + } + if (m_Index < m_Original.Count()) + { + m_Moving = m_Original[m_Index]; + foreach (IEntity owner : m_Crew) if (Has(owner, m_Moving)) m_Source = owner; + if (!Check(m_Source != null, "original shell still belongs to original crew before depletion")) return -1; + foreach (BaseInventoryStorageComponent candidate : m_Stores) if (candidate.PerformVolumeValidation(m_Moving)) { m_Destination = candidate; break; } + if (!Check(m_Destination != null, "five native boxes have capacity for original shells")) return -1; + InventoryStorageManagerComponent source = InventoryStorageManagerComponent.Cast(m_Source.FindComponent(InventoryStorageManagerComponent)); + m_Callback = new ERR_NativeCourierMoveCallback(); m_MoveDeadline = now + 8000; + if (!Check(source.TryMoveItemToStorage(m_Moving, m_Destination, -1, m_Callback), "native depletion move accepted, awaiting exact ownership proof")) return -1; + return 0; + } + if (!Check(OriginalStored() && m_Battery.CountShells() == 0, "all 27 original shells remain physical while real battery inventory is exhausted")) return -1; + m_Stage = 2; + } + if (!OriginalStored() || !PreservedForces(hq)) { Check(false, "all original shells and all original physical forces preserved"); return -1; } + if (!m_Downlink && m_Service.ProbeOrder()) m_Downlink = m_Service.ProbeOrder(); + if (!m_Bearer && m_Service.Courier()) { m_Bearer = m_Service.Courier(); m_Departure = m_Bearer.GetOrigin(); } + if (m_Service.Delivered() < 1 || m_Service.CompletedTrips() < 1 || m_Service.State() != 1) return 0; + AIWaypoint current = m_Service.Group().GetCurrentWaypoint(); + if (!current || (current != m_OriginalPatrolCycle && !m_OriginalPatrolMoves.Contains(current))) return 0; + if (!Check(m_Service.CompletedTrips() == 1 && hq.LogisticsToken(m_Service.Group()) == 0, "complete physical trip released HQ reservation and restored original native patrol")) return -1; + if (!Check(m_Status && m_Service.ProbeSourceMessage() == m_Message && m_Status.MessageId == m_Message && m_Status.ObservedAt == m_ObservedAt && ERR_MortarLogisticsRules.Fresh(m_ObservedAt, m_Service.ProbeLastDelivery()), "same immutable originally delivered supply status authorizes delivery")) return -1; + if (!Check(m_Uplink && !m_Uplink.Failed && !m_Uplink.Sending && m_Uplink.Cursor >= m_Uplink.Nodes.Count(), "actual low-ammo radio uplink reached HQ")) return -1; + if (!Check(m_Downlink && !m_Downlink.Failed && !m_Downlink.Sending && m_Downlink.Cursor == m_Downlink.Nodes.Count() - 1, "actual courier downlink completed before item delivery")) return -1; + if (!Check(m_Bearer && ERR_Actors.Group(m_Bearer) == m_Service.Group() && vector.DistanceXZ(m_Departure, m_Bearer.GetOrigin()) > 100, "same original bearer physically walked more than 100m")) return -1; + bool found; foreach (IEntity deliveredShell : m_Depot) foreach (IEntity recipient : m_Crew) if (Has(recipient, deliveredShell)) found = true; + if (!Check(found && m_Battery.CountShells() > 0 && m_Battery.TotalShots == 0, "previously empty battery now owns an exact original depot shell; no synthetic rounds or shots")) return -1; + foreach (IEntity retained : m_Depot) + { + int owners; + if (Has(m_Service.Cache(), retained)) owners++; + if (Has(m_Bearer, retained)) owners++; + foreach (IEntity crew : m_Crew) if (Has(crew, retained)) owners++; + if (!Check(retained && owners == 1, "each of 12 initial depot shells has exactly one physical owner")) return -1; + } + m_Complete = true; Stop(); return 1; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; if (s_Current == this) s_Current = null; + // Boxes with borrowed originals remain owned by normal mission cleanup. + // No manual restoration/deletion can race the production/native moves. + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c new file mode 100644 index 0000000..8f3c5dc --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c @@ -0,0 +1,334 @@ +#ifdef WORKBENCH +// Explicit synthetic observation only. Delivery, HQ scheduling and native fire +// are unchanged; this helper never writes directly into the HQ contact list. +modded class ERR_HQ +{ + int ERR_QueueMortarFixtureReport(SCR_AIGroup source, IEntity target, vector position, float now) + { + if (!ERR_NativeMortarFiringProbe.Enabled() || !target || !m_Contacts.IsEmpty()) return 0; + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != source || !unit.ReservedForSupport || !unit.Radio || unit.Uplink || unit.PendingReport) continue; + ERR_HQRoute route = m_Network.Route(unit.Radio); + if (!route || route.Nodes.IsEmpty()) return 0; + ERR_HQReport report = new ERR_HQReport(); + report.MessageId = m_Journal.Message(); report.Target = target; report.Source = source; + report.Position = position; report.ObservedAt = now; report.DetailsObservedAt = now; + report.HasVelocity = true; report.Velocity = vector.Zero; + report.TravelMode = "on foot"; report.SeenEscapists = 1; report.SeenWeapons = "fixture observation"; + route.MessageId = report.MessageId; route.Payload = "EXPLICIT SYNTHETIC OBSERVATION: " + report.Description(now); + unit.PendingReport = report; unit.Uplink = route; + m_Journal.Write("FIXTURE REPORT", route.Payload, report.MessageId); + return report.MessageId; + } + return 0; + } + void ERR_RemoveMortarFixtureReport(IEntity target) + { + if (!target) return; + for (int i = m_Contacts.Count() - 1; i >= 0; i--) + if (m_Contacts[i].Target == target) m_Contacts.Remove(i); + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.PendingReport && unit.PendingReport.Target == target) { unit.PendingReport = null; unit.Uplink = null; } + if ((unit.PendingOrder && unit.PendingOrder.Target == target) || (unit.Assignment && unit.Assignment.Target == target)) unit.Release(); + } + } +} + +// Production sets Released immediately before reserving shell airspace, then +// invokes native inventory transfer. Observe that existing commit boundary so +// even a synchronous native projectile has a prior recorded authorization. +modded class ERR_MortarBattery +{ + override void ReserveShellAirspace(float now) + { + super.ReserveShellAirspace(now); + ERR_NativeMortarFiringProbe probe = ERR_NativeMortarFiringProbe.Active(); + if (probe) probe.NativeCommit(this, now); + } + override void Cancel(string reason = "cancel requested") + { + ERR_NativeMortarFiringProbe probe = ERR_NativeMortarFiringProbe.Active(); + if (probe) probe.NativeClosing(this, reason, LastFailure); + super.Cancel(reason); + } +} + +class ERR_NativeMortarEvidenceRules +{ + static bool AimFresh(float commandedAt, float validatedAt, float now) + { + return commandedAt >= 0 && now >= commandedAt && validatedAt >= commandedAt && now >= validatedAt && now - validatedAt <= 10000; + } + static bool CommitFresh(float observed, float expectedObserved, float committed) + { + return observed == expectedObserved && observed >= 0 && committed >= observed && committed - observed <= ERR_MortarPrediction.MAX_REPORT_AGE_MS; + } + static bool EventBound(bool pending, int order, int currentOrder, int shot, int currentShot, float committed, float emitted) + { + // The fixture has its own overall deadline. A committed shell does not gain + // a second authorization expiry while native physical transfer completes. + return pending && order == currentOrder && shot == currentShot && emitted >= committed; + } + static bool ExpiredClosure(float observed, float closed, string failure) + { + return observed >= 0 && closed > observed + ERR_MortarPrediction.MAX_REPORT_AGE_MS && (failure.Contains("delivered target report expired") || failure.Contains("observation older than 60s")); + } +} + +// Observe only the actual native event. Node SUCCESS, accepted inventory moves +// and committed shell loading are never counted as physical projectiles. +modded class SCR_MortarMuzzleComponent +{ + override void OnWeaponFired(IEntity effectEntity, BaseMuzzleComponent muzzle, IEntity projectileEntity) + { + ERR_NativeMortarFiringProbe probe = ERR_NativeMortarFiringProbe.Active(); + if (probe) probe.NativeProjectile(GetOwner(), projectileEntity); + super.OnWeaponFired(effectEntity, muzzle, projectileEntity); + } +} + +class ERR_NativeMortarFiringProbe +{ + protected static ERR_NativeMortarFiringProbe s_Active; + protected ERR_GameMode m_Mode; + protected ERR_MortarBattery m_Battery; + protected IEntity m_Gun; + protected SCR_AIGroup m_Group; + protected IEntity m_Target; + protected vector m_Impact; + protected ref array m_Crew = {}; + protected ref array m_InitialShells = {}; + protected ref array m_Projectiles = {}; + protected int m_Source; + protected int m_Order; + protected int m_Step; + protected int m_Events; + protected int m_StoppedShells; + protected float m_Deadline; + protected float m_NextDiagnostic; + protected float m_StopUntil; + protected float m_ObservedAt; + protected bool m_WaitForExpiry; + protected int m_FinalEvents; + protected bool m_CommitPending; + protected float m_CommittedAt; + protected int m_CommitOrder; + protected int m_CommitShot; + protected int m_Commits; + protected bool m_ClosureSeen; + protected bool m_ClosureExpired; + protected bool m_ClosureComplete; + protected bool m_Unsafe; + protected bool m_BadProjectile; + protected bool m_SawUplink; + protected bool m_SawDownlink; + protected bool m_SawActivity; + protected bool m_Stopped; + protected string m_BadReason; + + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && (outcome == "mortar-fire" || outcome == "mortar-expiry"); + } + static ERR_NativeMortarFiringProbe Active() { return s_Active; } + void ERR_NativeMortarFiringProbe(ERR_GameMode mode) + { + m_Mode = mode; + string outcome; System.GetCLIParam("errSmokeOutcome", outcome); m_WaitForExpiry = outcome == "mortar-expiry"; + m_Deadline = GetGame().GetWorld().GetWorldTime() + 180000; + if (Enabled() && !s_Active) s_Active = this; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: mortar firing " + detail); return true; } + Print("ERR SMOKE FAIL: mortar firing " + detail, LogLevel.ERROR); Stop(); return false; + } + protected void Shells(out array shells) + { + shells.Clear(); + foreach (IEntity actor : m_Crew) + { + if (!actor) continue; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(actor.FindComponent(InventoryStorageManagerComponent)); + array items = {}; ERR_Inventory.Items(inventory, items); + foreach (IEntity item : items) + if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == ERR_MortarBattery.SHELL && !shells.Contains(item)) shells.Insert(item); + } + } + protected bool CheckNoOccupants(IEntity entity) + { + if (ChimeraCharacter.Cast(entity) || Vehicle.Cast(entity)) { m_Unsafe = true; return false; } + return true; + } + protected bool EmptyImpact(vector position) + { + m_Unsafe = false; + GetGame().GetWorld().QueryEntitiesByAABB(position - "200 5000 200", position + "200 5000 200", CheckNoOccupants, null, EQueryEntitiesFlags.ALL); + return !m_Unsafe; + } + protected bool SelectImpact(ERR_MortarSystem system) + { + // Bounded candidate survey: no clearance assumption from coordinates alone. + array offsets = {"-800 0 -600", "-600 0 -800", "0 0 -1000", "600 0 -800", "-1000 0 0", "800 0 -600", "-800 0 600", "0 0 1000"}; + foreach (vector offset : offsets) + { + vector candidate = ERR_Actors.Ground(m_Battery.Position + offset); + if (candidate[1] < 1 || !EmptyImpact(candidate) || !system.Safe(m_Battery, candidate, 75)) continue; + bool clear = true; + for (int shot = 0; shot < ERR_MortarSalvo.ROUNDS; shot++) + { + vector spread = ERR_Actors.Ground(candidate + ERR_MortarSalvo.Offset(m_Battery.SiteId, m_Battery.OrderId + 1, shot)); + if (!system.Safe(m_Battery, spread, 75)) { clear = false; break; } + } + if (!clear) continue; + m_Impact = candidate; + PrintFormat("ERR MORTAR FIXTURE IMPACT: position=%1 batteryDistance=%2; no characters/vehicles in 400m square; production settlement/friendly exclusions passed", candidate, vector.DistanceXZ(candidate, m_Battery.Position)); + return true; + } + return false; + } + protected void Diagnose(float now) + { + if (now < m_NextDiagnostic) return; + m_NextDiagnostic = now + 5000; + if (!m_Battery) { Print("ERR MORTAR FIXTURE: waiting for one authored battery"); return; } + PrintFormat("ERR MORTAR FIXTURE: step=%1 startup=%2 source=M%3 observedEvents=%4 ready=%5 failure=%6", m_Step, m_Battery.StartupActivated, m_Source, m_Events, m_Battery.Operational(), m_Battery.SpawnFailure); + m_Battery.SiteStatus(now); + } + void NativeCommit(ERR_MortarBattery battery, float now) + { + if (m_Stopped || battery != m_Battery) return; + if ((m_Step != 1 && m_Step != 3) || m_CommitPending || !battery.CommandOpen || !battery.Released || battery.SourceId != m_Source || battery.OrderId != m_Order || !battery.Report || battery.Report.MessageId != m_Source || !ERR_NativeMortarEvidenceRules.CommitFresh(battery.Report.ObservedAt, m_ObservedAt, now) || !ERR_NativeMortarEvidenceRules.AimFresh(battery.AimedAt, battery.AimValidatedAt, now) || battery.FlightTime <= 0) + { m_BadProjectile = true; m_BadReason = "physical commit lacks immutable fresh report/current order/native aim, or duplicates pending commit"; return; } + m_CommitPending = true; m_CommittedAt = now; m_CommitOrder = battery.OrderId; m_CommitShot = battery.OrderShots; m_Commits++; + PrintFormat("ERR MORTAR FIXTURE COMMIT: count=%1 order=%2 shot=%3 source=M%4 observedAge=%5; recorded before native inventory transfer", m_Commits, m_CommitOrder, m_CommitShot, m_Source, now - m_ObservedAt); + } + void NativeClosing(ERR_MortarBattery battery, string reason, string failure) + { + if (m_Stopped || !m_WaitForExpiry || battery != m_Battery || !battery.CommandOpen || battery.SourceId != m_Source || m_Source <= 0) return; + float now = GetGame().GetWorld().GetWorldTime(); + m_ClosureSeen = true; + m_ClosureComplete = battery.OrderShots == ERR_MortarSalvo.ROUNDS && m_Events == ERR_MortarSalvo.ROUNDS; + m_ClosureExpired = ERR_NativeMortarEvidenceRules.ExpiredClosure(m_ObservedAt, now, failure); + PrintFormat("ERR MORTAR FIXTURE CLOSURE: order=%1 observedAge=%2 reason=%3 lastFailure=%4 complete=%5 expiredWithheld=%6", battery.OrderId, now - m_ObservedAt, reason, failure, m_ClosureComplete, m_ClosureExpired); + if (battery.Stopped() || battery.OrderId != m_Order || (!m_ClosureExpired && !m_ClosureComplete)) + { m_BadProjectile = true; m_BadReason = "expiry evidence interrupted by Stop or unrelated/incomplete order closure"; } + } + void NativeProjectile(IEntity gun, IEntity projectile) + { + if (m_Stopped || !m_Battery || gun != m_Gun) return; + if (!projectile) { m_BadProjectile = true; m_BadReason = "native fired event has no physical projectile"; return; } + if (m_Projectiles.Contains(projectile)) { m_BadProjectile = true; m_BadReason = "same physical projectile observed twice"; return; } + m_Projectiles.Insert(projectile); m_Events++; + float now = GetGame().GetWorld().GetWorldTime(); + if ((m_Step != 1 && m_Step != 3) || !m_Battery.Released || m_Battery.SourceId != m_Source || !ERR_NativeMortarEvidenceRules.EventBound(m_CommitPending, m_CommitOrder, m_Battery.OrderId, m_CommitShot, m_Battery.OrderShots, m_CommittedAt, now)) + { m_BadProjectile = true; m_BadReason = "projectile lacks the recorded fresh physical commit for its current order/shot"; } + m_CommitPending = false; + PrintFormat("ERR MORTAR FIXTURE PROJECTILE: event=%1 entity=%2 origin=%3 order=%4 source=M%5 aimAge=%6 flight=%7; impact is not measured", m_Events, projectile, projectile.GetOrigin(), m_Battery.OrderId, m_Battery.SourceId, now - m_Battery.AimedAt, m_Battery.FlightTime); + } + int Tick(float now) + { + if (m_Stopped) return -1; + if (!Enabled() || s_Active != this || !m_Mode || !m_Mode.Active()) { Check(false, "explicit active fixture context retained"); return -1; } + ERR_HQ hq = ERR_HQ.Get(); + ERR_MortarSystem system; + if (hq) system = hq.Mortars(); + if (!system) { Check(false, "real HQ mortar service available"); return -1; } + if (!m_Battery) + { + array guns = {}; system.AppendGuns(guns); + if (guns.Count() == 1) { m_Gun = guns[0]; m_Battery = system.FindGun(m_Gun); } + } + Diagnose(now); + if (now >= m_Deadline) { Check(false, "bounded deadline; inspect readiness/route/activity/aim diagnostics"); return -1; } + if (m_BadProjectile) { Check(false, m_BadReason); return -1; } + if (!m_Battery) return 0; + if (!m_Battery.SpawnFailure.IsEmpty()) { Check(false, "battery startup failed: " + m_Battery.SpawnFailure); return -1; } + if (m_Step == 0) + { + if (!m_Battery.StartupActivated || !m_Battery.Operational() || !hq.MortarConnected(m_Battery.Group)) return 0; + m_Group = m_Battery.Group; + if (!Check(m_Group && m_Group.IsExpandComplete() && m_Group.GetAgentsCount() == 4 && m_Battery.TotalShots == 0 && m_Battery.OrderId == 0 && !m_Battery.CommandOpen && !m_Battery.Activity && !m_Battery.RadioOrder, "untasked original gun and complete four-person crew start without shots")) return -1; + array agents = {}; m_Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + IEntity actor; if (agent) actor = agent.GetControlledEntity(); + if (!Check(ERR_Actors.CanFight(actor) && !m_Crew.Contains(actor), "initial physical crew member is conscious and unique")) return -1; + m_Crew.Insert(actor); + } + if (!Check(m_Battery.RadioOperator && ERR_HQRadio.Capability(m_Battery.RadioOperator) == 2, "dedicated actual manpack supplies the radio route")) return -1; + Shells(m_InitialShells); + if (!Check(m_InitialShells.Count() == 27 && m_Battery.CountShells() == 27, "exactly 27 distinct physical initial HE shells")) return -1; + if (!Check(SelectImpact(system), "bounded candidate survey finds an unoccupied production-safe impact area")) return -1; + m_Target = ERR_Actors.Spawn(ERR_Resources.IntelFolder(), m_Impact); + if (!Check(m_Target != null, "fixture-owned inert report identity exists; no enemy perception is claimed")) return -1; + m_Source = hq.ERR_QueueMortarFixtureReport(m_Group, m_Target, m_Impact, now); + if (!Check(m_Source > 0, "synthetic observation enters actual existing radio uplink once")) return -1; + m_ObservedAt = now; m_SawUplink = true; m_Deadline = now + 90000; m_Step = 1; return 0; + } + if (m_WaitForExpiry && m_Battery.Stopped()) { Check(false, "battery must remain running throughout natural expiry observation"); return -1; } + if (m_Battery.Report && (m_Battery.Report.MessageId != m_Source || m_Battery.Report.ObservedAt != m_ObservedAt)) { Check(false, "delivered report identity and original observation timestamp remain immutable"); return -1; } + if (m_Battery.Gun != m_Gun || m_Battery.Group != m_Group) { Check(false, "original gun and crew identity retained"); return -1; } + if (!EmptyImpact(m_Impact)) { Check(false, "impact exclusion stays unoccupied before native firing/cancellation"); return -1; } + array remaining = {}; Shells(remaining); + foreach (IEntity item : remaining) + if (!m_InitialShells.Contains(item)) { Check(false, "no replacement HE shell appears after initialization"); return -1; } + if (m_Step == 1) + { + if (m_Battery.RadioOrder && m_Battery.SourceId == m_Source) { m_SawDownlink = true; m_Order = m_Battery.OrderId; } + if (m_Battery.Activity && m_Battery.Report && m_Battery.Report.MessageId == m_Source) m_SawActivity = true; + if (m_Battery.OrderId > 1 || (m_Battery.SourceId != 0 && m_Battery.SourceId != m_Source)) { Check(false, "one unchanged fixture source creates only one HQ order"); return -1; } + if (m_Events == 0) return 0; + if (!Check(m_Events == 1 && m_Battery.TotalShots == 1 && m_Battery.OrderShots == 1 && !m_Battery.Released && m_SawUplink && m_SawDownlink && m_SawActivity && m_Order == 1, "one physical projectile follows real uplink/downlink, native activity and fresh aim")) return -1; + if (!Check(remaining.Count() == 26 && m_Battery.CountShells() == 26, "one fired projectile consumes one of 27 original inventory shells")) return -1; + if (m_WaitForExpiry) + { + m_Step = 3; m_Deadline = m_ObservedAt + ERR_MortarPrediction.MAX_REPORT_AGE_MS + 50000; + return 0; + } + m_FinalEvents = m_Events; + // Cancel on this later fixture tick, never reentrantly inside the firing node. + hq.ERR_RemoveMortarFixtureReport(m_Target); + system.Stop(); system.Stop(); + if (!Check(!m_Battery.CommandOpen && !m_Battery.Activity && !m_Battery.RadioOrder, "explicit support Stop closes native order and route idempotently")) return -1; + m_StoppedShells = remaining.Count(); m_StopUntil = now + 12000; m_Deadline = m_StopUntil + 2000; m_Step = 2; return 0; + } + if (m_Step == 3) + { + if (m_Battery.OrderId != m_Order || m_Battery.SourceId != m_Source) { Check(false, "unchanged delivered observation received a second order"); return -1; } + if (m_Events > ERR_MortarSalvo.ROUNDS || m_Battery.TotalShots > ERR_MortarSalvo.ROUNDS) { Check(false, "single observation cannot exceed finite salvo"); return -1; } + if (now < m_ObservedAt + ERR_MortarPrediction.MAX_REPORT_AGE_MS + 25000) return 0; + if (!Check(m_ClosureSeen && (m_ClosureExpired || m_ClosureComplete) && !m_CommitPending && m_Commits == m_Events && m_Events >= 1 && m_Battery.TotalShots == m_Events && m_Battery.OrderShots == m_Events && remaining.Count() == 27 - m_Events && !m_Battery.CommandOpen && !m_Battery.Activity && !m_Battery.RadioOrder && !m_Battery.Report, "explicit expired-withheld closure or complete finite salvo, with only fresh commits and observed physical shells consumed")) return -1; + m_FinalEvents = m_Events; + // Keep HQ running and the expired contact present throughout this next wait. + m_StoppedShells = remaining.Count(); m_StopUntil = now + 12000; m_Deadline = m_StopUntil + 2000; m_Step = 4; + return 0; + } + if (now < m_StopUntil) return 0; + if (!Check(m_Battery.TotalShots == m_FinalEvents && m_Events == m_FinalEvents && m_Battery.OrderId == m_Order && remaining.Count() == m_StoppedShells && !m_Battery.CommandOpen && !m_Battery.Activity && !m_Battery.RadioOrder, "closed order issues no duplicate order, projectile or replenishment over 12 seconds")) return -1; + array finalCrew = {}; m_Group.GetAgents(finalCrew); + if (!Check(finalCrew.Count() == 4 && m_Battery.Gun == m_Gun, "original group and gun retain four crew")) return -1; + foreach (AIAgent finalAgent : finalCrew) + if (!Check(finalAgent && m_Crew.Contains(finalAgent.GetControlledEntity()) && ERR_Actors.CanFight(finalAgent.GetControlledEntity()), "final conscious crew entity belongs to original physical roster")) return -1; + if (m_WaitForExpiry) { hq.ERR_RemoveMortarFixtureReport(m_Target); system.Stop(); system.Stop(); } + Stop(); return 1; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + ERR_HQ hq = ERR_HQ.Get(); + if (hq) + { + hq.ERR_RemoveMortarFixtureReport(m_Target); + if (m_Battery && m_Battery.SourceId == m_Source && m_Source > 0) m_Battery.Cancel("mortar firing fixture cleanup"); + } + ERR_Actors.DeleteSpawned(m_Target); m_Target = null; + if (s_Active == this) s_Active = null; + } + void ~ERR_NativeMortarFiringProbe() { Stop(); } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c new file mode 100644 index 0000000..cbc0d66 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c @@ -0,0 +1,476 @@ +#ifdef WORKBENCH +// Explicit synthetic observation only. Delivery, HQ scheduling and native fire +// are unchanged; this helper never writes directly into the HQ contact list. +modded class ERR_HQ +{ + int ERR_QueueMortarRefreshReport(SCR_AIGroup source, IEntity radio, IEntity target, vector position, out float observedAt) + { + observedAt = -1; + if (!ERR_NativeMortarSalvoProbe.RefreshEnabled() || !target || !radio || ERR_HQRadio.Capability(radio) != 2) return 0; + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != source || !unit.ReservedForSupport || unit.Radio != radio || unit.Uplink || unit.PendingReport || unit.PendingSupplyStatus) continue; + ERR_HQRoute route = m_Network.Route(radio); + if (!route || route.Nodes.IsEmpty()) return 0; + observedAt = GetGame().GetWorld().GetWorldTime(); + ERR_HQReport report = new ERR_HQReport(); + report.MessageId = m_Journal.Message(); report.Target = target; report.Source = source; + report.Position = position; report.ObservedAt = observedAt; report.DetailsObservedAt = observedAt; + report.HasVelocity = true; report.Velocity = vector.Zero; + report.TravelMode = "on foot"; report.SeenEscapists = 1; report.SeenWeapons = "fixture observation"; + route.MessageId = report.MessageId; route.Payload = "NEW EXPLICIT SYNTHETIC OBSERVATION: " + report.Description(observedAt); + unit.PendingReport = report; unit.Uplink = route; + m_Journal.Write("FIXTURE REPORT", route.Payload, report.MessageId); + return report.MessageId; + } + return 0; + } + int ERR_QueueMortarSalvoReport(SCR_AIGroup source, IEntity target, vector position, float now) + { + if (!ERR_NativeMortarSalvoProbe.Enabled() || !target || !m_Contacts.IsEmpty()) return 0; + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != source || !unit.ReservedForSupport || !unit.Radio || unit.Uplink || unit.PendingReport) continue; + ERR_HQRoute route = m_Network.Route(unit.Radio); + if (!route || route.Nodes.IsEmpty()) return 0; + ERR_HQReport report = new ERR_HQReport(); + report.MessageId = m_Journal.Message(); report.Target = target; report.Source = source; + report.Position = position; report.ObservedAt = now; report.DetailsObservedAt = now; + report.HasVelocity = true; report.Velocity = vector.Zero; + report.TravelMode = "on foot"; report.SeenEscapists = 1; report.SeenWeapons = "fixture observation"; + route.MessageId = report.MessageId; route.Payload = "EXPLICIT SYNTHETIC OBSERVATION: " + report.Description(now); + unit.PendingReport = report; unit.Uplink = route; + m_Journal.Write("FIXTURE REPORT", route.Payload, report.MessageId); + return report.MessageId; + } + return 0; + } + void ERR_RemoveMortarSalvoReport(IEntity target) + { + if (!target) return; + for (int i = m_Contacts.Count() - 1; i >= 0; i--) + if (m_Contacts[i].Target == target) m_Contacts.Remove(i); + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.PendingReport && unit.PendingReport.Target == target) { unit.PendingReport = null; unit.Uplink = null; } + if ((unit.PendingOrder && unit.PendingOrder.Target == target) || (unit.Assignment && unit.Assignment.Target == target)) unit.Release(); + } + } +} + +// Production sets Released immediately before reserving shell airspace, then +// invokes native inventory transfer. Observe that existing commit boundary so +// even a synchronous native projectile has a prior recorded authorization. +modded class ERR_MortarBattery +{ + override void Audit(string kind, string detail) + { + super.Audit(kind, detail); + ERR_NativeMortarSalvoProbe probe = ERR_NativeMortarSalvoProbe.Active(); + if (probe) probe.NativeAudit(this, kind); + } + override void ReserveShellAirspace(float now) + { + super.ReserveShellAirspace(now); + ERR_NativeMortarSalvoProbe probe = ERR_NativeMortarSalvoProbe.Active(); + if (probe) probe.NativeCommit(this, now); + } + override void Cancel(string reason = "cancel requested") + { + ERR_NativeMortarSalvoProbe probe = ERR_NativeMortarSalvoProbe.Active(); + if (probe) probe.NativeClosing(this, reason, LastFailure); + super.Cancel(reason); + } +} + +// Exact completion is separate from native activity success or accepted loading. +class ERR_NativeMortarSalvoRules +{ + static bool Complete(int events, int commits, int total, int orderShots, int shells, bool pending) + { + return events == ERR_MortarSalvo.ROUNDS && commits == events && total == events && orderShots == events && shells == 27 - events && !pending; + } + static bool QueueUpdate(bool accepted, bool pending, int shots, float observedAt, float orderedAt, float now) + { + return accepted && !pending && shots < ERR_MortarSalvo.ROUNDS / 2 && now >= observedAt + 20000 && orderedAt >= 0 && now >= orderedAt && now - orderedAt < 90000; + } +} + +class ERR_NativeMortarRefreshRecord +{ + int MessageId; + float ObservedAt; + int DownlinkId; + bool Accepted; + ref ERR_HQReport Delivered; + + bool Matches(ERR_HQReport report, IEntity target, SCR_AIGroup group, vector position) + { + if (!report || report.MessageId != MessageId || report.ObservedAt != ObservedAt || report.Target != target || report.Source != group) return false; + return vector.Distance(report.Position, position) < 0.01 && report.HasVelocity && report.Velocity.Length() < 0.001 && !report.Distress; + } +} + +// Observe only the actual native event. Node SUCCESS, accepted inventory moves +// and committed shell loading are never counted as physical projectiles. +modded class SCR_MortarMuzzleComponent +{ + override void OnWeaponFired(IEntity effectEntity, BaseMuzzleComponent muzzle, IEntity projectileEntity) + { + ERR_NativeMortarSalvoProbe probe = ERR_NativeMortarSalvoProbe.Active(); + if (probe) probe.NativeProjectile(GetOwner(), projectileEntity); + super.OnWeaponFired(effectEntity, muzzle, projectileEntity); + } +} + +class ERR_NativeMortarSalvoProbe +{ + protected static ERR_NativeMortarSalvoProbe s_Active; + protected ERR_GameMode m_Mode; + protected ERR_MortarBattery m_Battery; + protected IEntity m_Gun; + protected SCR_AIGroup m_Group; + protected IEntity m_Target; + protected vector m_Impact; + protected ref array m_Crew = {}; + protected ref array m_InitialShells = {}; + protected ref array m_Projectiles = {}; + protected int m_Source; + protected int m_Order; + protected int m_Step; + protected int m_Events; + protected int m_StoppedShells; + protected float m_Deadline; + protected float m_NextDiagnostic; + protected float m_StopUntil; + protected float m_ObservedAt; + protected ref ERR_HQReport m_Delivered; + protected bool m_RefreshCase; + protected IEntity m_OriginalRTO; + protected SCR_AIStaticArtilleryActivity m_OriginalActivity; + protected ref array m_Observations = {}; + protected int m_UpdatesAccepted; + protected int m_UpdatedCommits; + protected int m_CommitSource; + protected float m_CommitObservedAt; + protected bool m_CommitPending; + protected float m_CommittedAt; + protected int m_CommitOrder; + protected int m_CommitShot; + protected int m_Commits; + protected bool m_ClosureSeen; + protected bool m_ClosureComplete; + protected bool m_Unsafe; + protected bool m_BadProjectile; + protected bool m_SawUplink; + protected bool m_SawDownlink; + protected bool m_SawActivity; + protected bool m_Stopped; + protected string m_BadReason; + + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && (outcome == "mortar-salvo" || outcome == "mortar-refresh"); + } + static bool RefreshEnabled() + { + string outcome; + return Enabled() && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "mortar-refresh"; + } + static ERR_NativeMortarSalvoProbe Active() { return s_Active; } + void ERR_NativeMortarSalvoProbe(ERR_GameMode mode) + { + m_Mode = mode; + m_RefreshCase = RefreshEnabled(); + m_Deadline = GetGame().GetWorld().GetWorldTime() + 180000; + if (Enabled() && !s_Active) s_Active = this; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: mortar salvo " + detail); return true; } + Print("ERR SMOKE FAIL: mortar salvo " + detail, LogLevel.ERROR); Stop(); return false; + } + protected void Shells(out array shells) + { + shells.Clear(); + foreach (IEntity actor : m_Crew) + { + if (!actor) continue; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(actor.FindComponent(InventoryStorageManagerComponent)); + array items = {}; ERR_Inventory.Items(inventory, items); + foreach (IEntity item : items) + if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == ERR_MortarBattery.SHELL && !shells.Contains(item)) shells.Insert(item); + } + } + protected bool CheckNoOccupants(IEntity entity) + { + if (ChimeraCharacter.Cast(entity) || Vehicle.Cast(entity)) { m_Unsafe = true; return false; } + return true; + } + protected bool EmptyImpact(vector position) + { + m_Unsafe = false; + GetGame().GetWorld().QueryEntitiesByAABB(position - "200 5000 200", position + "200 5000 200", CheckNoOccupants, null, EQueryEntitiesFlags.ALL); + return !m_Unsafe; + } + protected bool SelectImpact(ERR_MortarSystem system) + { + // Bounded candidate survey: no clearance assumption from coordinates alone. + array offsets = {"-800 0 -600", "-600 0 -800", "0 0 -1000", "600 0 -800", "-1000 0 0", "800 0 -600", "-800 0 600", "0 0 1000"}; + foreach (vector offset : offsets) + { + vector candidate = ERR_Actors.Ground(m_Battery.Position + offset); + if (candidate[1] < 1 || !EmptyImpact(candidate) || !system.Safe(m_Battery, candidate, 75)) continue; + bool clear = true; + for (int shot = 0; shot < ERR_MortarSalvo.ROUNDS; shot++) + { + vector spread = ERR_Actors.Ground(candidate + ERR_MortarSalvo.Offset(m_Battery.SiteId, m_Battery.OrderId + 1, shot)); + if (!system.Safe(m_Battery, spread, 75)) { clear = false; break; } + } + if (!clear) continue; + m_Impact = candidate; + PrintFormat("ERR MORTAR SALVO IMPACT: position=%1 batteryDistance=%2; no characters/vehicles in 400m square; production settlement/friendly exclusions passed", candidate, vector.DistanceXZ(candidate, m_Battery.Position)); + return true; + } + return false; + } + protected void Diagnose(float now) + { + if (now < m_NextDiagnostic) return; + m_NextDiagnostic = now + 5000; + if (!m_Battery) { Print("ERR MORTAR SALVO: waiting for one authored battery"); return; } + PrintFormat("ERR MORTAR SALVO: step=%1 startup=%2 source=M%3 observedEvents=%4 ready=%5 failure=%6", m_Step, m_Battery.StartupActivated, m_Source, m_Events, m_Battery.Operational(), m_Battery.SpawnFailure); + m_Battery.SiteStatus(now); + } + protected ERR_NativeMortarRefreshRecord FindObservation(int messageId) + { + foreach (ERR_NativeMortarRefreshRecord observation : m_Observations) + if (observation.MessageId == messageId) return observation; + return null; + } + protected bool AddObservation(int messageId, float observedAt) + { + if (messageId <= 0 || observedAt < 0 || FindObservation(messageId) || m_Observations.Count() >= 8) return false; + if (!m_Observations.IsEmpty() && observedAt <= m_Observations[m_Observations.Count() - 1].ObservedAt) return false; + ERR_NativeMortarRefreshRecord record = new ERR_NativeMortarRefreshRecord(); + record.MessageId = messageId; record.ObservedAt = observedAt; + m_Observations.Insert(record); + PrintFormat("ERR MORTAR REFRESH OBSERVATION: source=M%1 actualObservedAt=%2 originalRTO=%3 synthetic stationary inert target; awaiting actual uplink and HQ downlink", messageId, observedAt, m_OriginalRTO); + return true; + } + protected bool ReportKnown(ERR_HQReport report, bool accepted = true) + { + if (!report) return false; + if (!m_RefreshCase) return report.MessageId == m_Source && report.ObservedAt == m_ObservedAt; + ERR_NativeMortarRefreshRecord record = FindObservation(report.MessageId); + return record && (!accepted || record.Accepted) && record.Matches(report, m_Target, m_Group, m_Impact); + } + protected bool AllAccepted() + { + if (!m_RefreshCase) return true; + if (m_Observations.Count() < 2 || m_UpdatesAccepted != m_Observations.Count() - 1 || m_UpdatedCommits < 1) return false; + foreach (ERR_NativeMortarRefreshRecord record : m_Observations) + if (!record.Accepted || !record.Delivered || record.DownlinkId <= 0) return false; + return true; + } + protected bool NoReportReplay(float now) + { + if (!m_RefreshCase) return m_Delivered && !m_Battery.CanRequest(m_Delivered, now); + if (!AllAccepted()) return false; + foreach (ERR_NativeMortarRefreshRecord record : m_Observations) + if (m_Battery.CanRequest(record.Delivered, now)) return false; + return true; + } + // Observational only: never stop/cancel inside production's current call. + void NativeAudit(ERR_MortarBattery battery, string kind) + { + if (!m_RefreshCase || m_Stopped || battery != m_Battery || m_Source <= 0) return; + if (kind == "AIM") + { + if (m_OriginalActivity || !battery.Activity || !m_SawDownlink || battery.SourceId != m_Source || battery.OrderId != m_Order || !ReportKnown(battery.Report, false)) + { m_BadProjectile = true; m_BadReason = "initial native activity does not match recorded report/downlink or was recreated"; return; } + m_OriginalActivity = battery.Activity; m_SawActivity = true; + ERR_NativeMortarRefreshRecord initial = FindObservation(m_Source); + initial.Accepted = true; initial.Delivered = battery.Report.Snapshot(); + m_Delivered = initial.Delivered; + return; + } + if (kind != "UPDATE QUEUED" && kind != "UPDATE RECEIVED") return; + ERR_MortarRefresh update = battery.Refresh; + if (!update || !update.Owns(battery) || battery.OrderId != m_Order || battery.Activity != m_OriginalActivity || !ReportKnown(update.Report, false)) + { m_BadProjectile = true; m_BadReason = "update lost recorded observation or original gun/group/order/activity"; return; } + ERR_NativeMortarRefreshRecord record = FindObservation(update.Report.MessageId); + if (kind == "UPDATE QUEUED") + { + if (record.DownlinkId != 0 || record.Accepted || !update.Route || !update.Route.Downlink || update.Route.Nodes.IsEmpty() || update.Route.MessageId != update.RadioId) + { m_BadProjectile = true; m_BadReason = "refresh downlink was missing, duplicated or already accepted"; return; } + record.DownlinkId = update.RadioId; + return; + } + if (record.Accepted || record.DownlinkId != update.RadioId || update.Route || battery.Released || battery.Report != update.Report || !ReportKnown(battery.Report, false)) + { m_BadProjectile = true; m_BadReason = "refresh acceptance lacks its completed route or overwrites committed shell"; return; } + record.Accepted = true; record.Delivered = battery.Report.Snapshot(); m_UpdatesAccepted++; + m_Delivered = record.Delivered; + PrintFormat("ERR MORTAR REFRESH ACCEPTED: source=M%1 observedAt=%2 downlink=M%3 sameOrder=%4 originalActivity=%5", record.MessageId, record.ObservedAt, record.DownlinkId, battery.OrderId, battery.Activity == m_OriginalActivity); + } + void NativeCommit(ERR_MortarBattery battery, float now) + { + if (m_Stopped || battery != m_Battery) return; + if (m_RefreshCase && (!m_OriginalActivity || battery.Activity != m_OriginalActivity)) + { m_BadProjectile = true; m_BadReason = "refreshed commit requires the original unchanged native activity"; return; } + if (m_Commits >= ERR_MortarSalvo.ROUNDS || battery.OrderShots != m_Commits) + { m_BadProjectile = true; m_BadReason = "commit count or physical shot sequence exceeds configured finite salvo"; return; } + if (m_Step != 1 || m_CommitPending || !battery.CommandOpen || !battery.Released || battery.SourceId != m_Source || battery.OrderId != m_Order || !ReportKnown(battery.Report) || !ERR_NativeMortarEvidenceRules.CommitFresh(battery.Report.ObservedAt, battery.Report.ObservedAt, now) || !ERR_NativeMortarEvidenceRules.AimFresh(battery.AimedAt, battery.AimValidatedAt, now) || battery.FlightTime <= 0) + { m_BadProjectile = true; m_BadReason = "physical commit lacks immutable fresh report/current order/native aim, or duplicates pending commit"; return; } + m_CommitPending = true; m_CommittedAt = now; m_CommitOrder = battery.OrderId; m_CommitShot = battery.OrderShots; m_Commits++; + m_CommitSource = battery.Report.MessageId; m_CommitObservedAt = battery.Report.ObservedAt; + if (m_RefreshCase && m_CommitSource != m_Source) m_UpdatedCommits++; + PrintFormat("ERR MORTAR SALVO COMMIT: count=%1 order=%2 shot=%3 acceptedSource=M%4 observedAge=%5 commandAge=%6 validationAge=%7; recorded before native inventory transfer", m_Commits, m_CommitOrder, m_CommitShot, m_CommitSource, now - m_CommitObservedAt, now - battery.AimedAt, now - battery.AimValidatedAt); + } + void NativeClosing(ERR_MortarBattery battery, string reason, string failure) + { + if (m_Stopped || battery != m_Battery || !battery.CommandOpen || battery.SourceId != m_Source || m_Source <= 0) return; + m_ClosureSeen = true; + m_ClosureComplete = battery.OrderShots == ERR_MortarSalvo.ROUNDS && m_Events == ERR_MortarSalvo.ROUNDS && !m_CommitPending && m_Commits == m_Events; + PrintFormat("ERR MORTAR SALVO CLOSURE: order=%1 reason=%2 lastFailure=%3 events=%4 commits=%5 complete=%6", battery.OrderId, reason, failure, m_Events, m_Commits, m_ClosureComplete); + if (battery.Stopped() || battery.OrderId != m_Order || !m_ClosureComplete || !AllAccepted() || reason != "native artillery activity COMPLETED (shot count is separate)") + { m_BadProjectile = true; m_BadReason = "full salvo requires natural native completion; partial expiry, rejection, timeout or Stop is not success"; } + if (m_RefreshCase && (battery.Activity != m_OriginalActivity || battery.Refresh || battery.RefreshRejected)) + { m_BadProjectile = true; m_BadReason = "natural completion cannot leave a refresh pending or replace original activity"; } + } + void NativeProjectile(IEntity gun, IEntity projectile) + { + if (m_Stopped || !m_Battery || gun != m_Gun) return; + if (!projectile) { m_BadProjectile = true; m_BadReason = "native fired event has no physical projectile"; return; } + if (m_Projectiles.Contains(projectile)) { m_BadProjectile = true; m_BadReason = "same physical projectile observed twice"; return; } + m_Projectiles.Insert(projectile); m_Events++; + float now = GetGame().GetWorld().GetWorldTime(); + if (m_Step != 1 || !m_Battery.Released || m_Battery.SourceId != m_Source || !ERR_NativeMortarEvidenceRules.EventBound(m_CommitPending, m_CommitOrder, m_Battery.OrderId, m_CommitShot, m_Battery.OrderShots, m_CommittedAt, now)) + { m_BadProjectile = true; m_BadReason = "projectile lacks the recorded fresh physical commit for its current order/shot"; } + if (!m_Battery.Report || m_Battery.Report.MessageId != m_CommitSource || m_Battery.Report.ObservedAt != m_CommitObservedAt) + { m_BadProjectile = true; m_BadReason = "committed shell was relabelled with another report before native emission"; } + m_CommitPending = false; + PrintFormat("ERR MORTAR SALVO PROJECTILE: event=%1 entity=%2 origin=%3 order=%4 acceptedSource=M%5 aimAge=%6 flight=%7; impact is not measured", m_Events, projectile, projectile.GetOrigin(), m_Battery.OrderId, m_CommitSource, now - m_Battery.AimedAt, m_Battery.FlightTime); + } + int Tick(float now) + { + if (m_Stopped) return -1; + if (!Enabled() || s_Active != this || !m_Mode || !m_Mode.Active()) { Check(false, "explicit active fixture context retained"); return -1; } + ERR_HQ hq = ERR_HQ.Get(); + ERR_MortarSystem system; + if (hq) system = hq.Mortars(); + if (!system) { Check(false, "real HQ mortar service available"); return -1; } + if (!m_Battery) + { + array guns = {}; system.AppendGuns(guns); + if (guns.Count() == 1) { m_Gun = guns[0]; m_Battery = system.FindGun(m_Gun); if (m_Battery) m_Group = m_Battery.Group; } + } + Diagnose(now); + if (now >= m_Deadline) { Check(false, "bounded deadline; inspect readiness/route/activity/aim diagnostics"); return -1; } + if (m_BadProjectile) { Check(false, m_BadReason); return -1; } + if (!m_Battery) return 0; + if (!m_Battery.SpawnFailure.IsEmpty()) { Check(false, "battery startup failed: " + m_Battery.SpawnFailure); return -1; } + if (m_Step == 0) + { + if (!m_Battery.StartupActivated || !m_Battery.Operational() || !hq.MortarConnected(m_Battery.Group)) return 0; + m_Group = m_Battery.Group; + if (!Check(m_Group && m_Group.IsExpandComplete() && m_Group.GetAgentsCount() == 4 && m_Battery.TotalShots == 0 && m_Battery.OrderId == 0 && !m_Battery.CommandOpen && !m_Battery.Activity && !m_Battery.RadioOrder, "untasked original gun and complete four-person crew start without shots")) return -1; + array agents = {}; m_Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + IEntity actor; if (agent) actor = agent.GetControlledEntity(); + if (!Check(ERR_Actors.CanFight(actor) && !m_Crew.Contains(actor), "initial physical crew member is conscious and unique")) return -1; + m_Crew.Insert(actor); + } + if (!Check(m_Battery.RadioOperator && ERR_HQRadio.Capability(m_Battery.RadioOperator) == 2, "dedicated actual manpack supplies the radio route")) return -1; + m_OriginalRTO = m_Battery.RadioOperator; + Shells(m_InitialShells); + if (!Check(m_InitialShells.Count() == 27 && m_Battery.CountShells() == 27, "exactly 27 distinct physical initial HE shells")) return -1; + if (!Check(SelectImpact(system), "bounded candidate survey finds an unoccupied production-safe impact area")) return -1; + m_Target = ERR_Actors.Spawn(ERR_Resources.IntelFolder(), m_Impact); + if (!Check(m_Target != null, "fixture-owned inert report identity exists; no enemy perception is claimed")) return -1; + if (m_RefreshCase) m_Source = hq.ERR_QueueMortarRefreshReport(m_Group, m_OriginalRTO, m_Target, m_Impact, m_ObservedAt); + else { m_Source = hq.ERR_QueueMortarSalvoReport(m_Group, m_Target, m_Impact, now); m_ObservedAt = now; } + if (!Check(m_Source > 0, "synthetic observation enters actual existing radio uplink once")) return -1; + if (m_RefreshCase && !Check(AddObservation(m_Source, m_ObservedAt), "first actual-clock observation recorded without replacement")) return -1; + m_SawUplink = true; m_Deadline = now + ERR_MortarSalvo.TIMEOUT_MS + 35000; m_Step = 1; return 0; + } + if (m_Battery.Stopped()) { Check(false, "battery must remain running throughout full salvo and replay observation"); return -1; } + if (m_Battery.Report && !ReportKnown(m_Battery.Report)) { Check(false, "delivered report identity and original observation timestamp remain immutable and accepted"); return -1; } + if (m_Battery.Gun != m_Gun || m_Battery.Group != m_Group) { Check(false, "original gun and crew identity retained"); return -1; } + if (m_RefreshCase && (m_Battery.RadioOperator != m_OriginalRTO || (m_OriginalActivity && m_Battery.Activity && m_Battery.Activity != m_OriginalActivity))) + { Check(false, "refreshes preserve original RTO and native activity"); return -1; } + if (!EmptyImpact(m_Impact)) { Check(false, "impact exclusion stays unoccupied before native firing/cancellation"); return -1; } + array remaining = {}; Shells(remaining); + foreach (IEntity item : remaining) + if (!m_InitialShells.Contains(item)) { Check(false, "no replacement HE shell appears after initialization"); return -1; } + if (m_Battery.OrderId > 1 || (m_Battery.SourceId != 0 && m_Battery.SourceId != m_Source)) { Check(false, "one unchanged fixture source creates only one HQ order"); return -1; } + if (m_Events > ERR_MortarSalvo.ROUNDS || m_Battery.TotalShots > ERR_MortarSalvo.ROUNDS) { Check(false, "physical event count never exceeds configured salvo"); return -1; } + if (m_Step == 1) + { + if (m_Battery.RadioOrder && m_Battery.SourceId == m_Source) + { + m_SawDownlink = true; m_Order = m_Battery.OrderId; + if (m_RefreshCase) + { + ERR_NativeMortarRefreshRecord first = FindObservation(m_Source); + if (!first || first.DownlinkId == 0) + { + if (!Check(first && m_Battery.RadioOrder.Downlink && !m_Battery.RadioOrder.Nodes.IsEmpty(), "initial order traverses actual nonempty HQ downlink")) return -1; + first.DownlinkId = m_Battery.RadioOrder.MessageId; + } + } + } + if (m_Battery.Activity && m_Battery.Report && m_Battery.Report.MessageId == m_Source) + { + m_SawActivity = true; + if (!m_Delivered) m_Delivered = m_Battery.Report.Snapshot(); + } + if (m_RefreshCase && m_Battery.CommandOpen && m_Battery.Activity && !m_Observations.IsEmpty()) + { + ERR_NativeMortarRefreshRecord latest = m_Observations[m_Observations.Count() - 1]; + if (ERR_NativeMortarSalvoRules.QueueUpdate(latest.Accepted, m_Battery.Refresh != null, m_Battery.OrderShots, latest.ObservedAt, m_Battery.OrderedAt, now)) + { + float observed; + int messageId = hq.ERR_QueueMortarRefreshReport(m_Group, m_OriginalRTO, m_Target, m_Impact, observed); + if (!Check(messageId > 0 && AddObservation(messageId, observed), "next distinct actual-clock synthetic observation queued only after previous acceptance")) return -1; + } + } + if (m_Battery.CommandOpen || m_Battery.Activity) return 0; + if (!m_ClosureSeen) return 0; + if (!Check(m_ClosureComplete && m_SawUplink && m_SawDownlink && m_SawActivity && m_Order == 1, "one real uplink/downlink and native activity naturally complete the entire configured salvo")) return -1; + if (m_RefreshCase && !Check(AllAccepted(), "every queued update was accepted under the same order before closure and at least one updated report authorized a commit")) return -1; + if (!Check(ERR_NativeMortarSalvoRules.Complete(m_Events, m_Commits, m_Battery.TotalShots, m_Battery.OrderShots, remaining.Count(), m_CommitPending) && m_Battery.CountShells() == remaining.Count(), "exact configured native projectiles equal fresh commits and missing original inventory shells")) return -1; + if (!Check(NoReportReplay(now), "all delivered messages are ineligible for a second request after completion")) return -1; + if (!Check(!m_Battery.RadioOrder && !m_Battery.Report && !m_Battery.PendingRadioReport && !m_Battery.PendingSupplyReport && !m_Battery.SupplyPending() && !m_Battery.Released && !m_Battery.Refresh, "natural completion clears command, routes, loading and projectile reservation")) return -1; + // Keep the unchanged HQ contact, battery and scheduler alive. This exceeds + // the normal 20-second post-dispatch decision interval without forging time. + m_StoppedShells = remaining.Count(); m_StopUntil = now + 25000; m_Deadline = m_StopUntil + 2000; m_Step = 2; + return 0; + } + if (m_Battery.CommandOpen || m_Battery.Activity || m_Battery.RadioOrder || m_Battery.Report || m_Battery.PendingRadioReport || m_Battery.PendingSupplyReport || m_Battery.SupplyPending() || m_Battery.Released) + { Check(false, "completed observation must not reopen command, activity, route or physical loading"); return -1; } + if (!ERR_NativeMortarSalvoRules.Complete(m_Events, m_Commits, m_Battery.TotalShots, m_Battery.OrderShots, remaining.Count(), m_CommitPending) || m_Battery.OrderId != m_Order || remaining.Count() != m_StoppedShells) + { Check(false, "closed order cannot add shots, orders or replacement ammunition during replay window"); return -1; } + if (now < m_StopUntil) return 0; + if (!Check(NoReportReplay(now), "all claimed contacts produce no second request, projectile or replenishment over 25 seconds")) return -1; + array finalCrew = {}; m_Group.GetAgents(finalCrew); + if (!Check(finalCrew.Count() == 4 && m_Battery.Gun == m_Gun, "original group and gun retain four crew")) return -1; + foreach (AIAgent finalAgent : finalCrew) + if (!Check(finalAgent && m_Crew.Contains(finalAgent.GetControlledEntity()) && ERR_Actors.CanFight(finalAgent.GetControlledEntity()), "final conscious crew entity belongs to original physical roster")) return -1; + Stop(); return 1; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + ERR_HQ hq = ERR_HQ.Get(); + if (hq) hq.ERR_RemoveMortarSalvoReport(m_Target); + if (m_Battery && m_Battery.Gun == m_Gun && m_Battery.Group == m_Group) m_Battery.Stop(); + ERR_Actors.DeleteSpawned(m_Target); m_Target = null; + if (s_Active == this) s_Active = null; + } + void ~ERR_NativeMortarSalvoProbe() { Stop(); } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c new file mode 100644 index 0000000..c0d206a --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c @@ -0,0 +1,383 @@ +#ifdef WORKBENCH +// Mechanism-only fixture: radio delivery and automatic artillery scheduling are +// explicitly bypassed. All ammunition and inventory operations remain physical. +modded class ERR_MortarSystem +{ + protected ERR_NativeMortarTransferProbe m_ERRTransferFixture; + bool ERR_HoldForTransfer(ERR_NativeMortarTransferProbe owner) + { + if (!ERR_NativeMortarTransferProbe.Enabled() || m_Stopped || m_ERRTransferFixture || !owner) return false; + m_ERRTransferFixture = owner; return true; + } + void ERR_ReleaseTransferHold(ERR_NativeMortarTransferProbe owner) + { + if (m_ERRTransferFixture == owner) m_ERRTransferFixture = null; + } + override void Tick(float now) + { + if (m_ERRTransferFixture) return; + super.Tick(now); + } + ERR_MortarBattery ERR_TransferBattery() + { + if (m_Batteries.Count() != 1) return null; + return m_Batteries[0]; + } +} +modded class ERR_MortarBattery +{ + ERR_MortarSupplyTransfer ERR_TransferForProbe() { return m_Transfer; } + int ERR_TransferAttempts() { return m_AttemptedShells.Count(); } +} +modded class ERR_MortarSupplyTransfer +{ + int ERR_CallbackState() { return m_Acknowledgement; } + IEntity ERR_TransferredShell() { return m_Shell; } + IEntity ERR_TransferRecipient() { return m_Gunner; } + bool ERR_RequestAccepted() { return m_Accepted; } +} +class ERR_NativeMortarMoveCallback : ScriptedInventoryOperationCallback +{ + int Result; + protected override void OnComplete() { if (Result == 0) Result = 1; } + protected override void OnFailed() { if (Result == 0) Result = -1; } +} +class ERR_NativeMortarShellOwner +{ + IEntity Shell; + IEntity OriginalOwner; +} + +class ERR_NativeMortarTransferProbe +{ + protected ERR_GameMode m_Mode; + protected ERR_MortarSystem m_System; + protected ERR_MortarBattery m_Battery; + protected IEntity m_Gunner; + protected BaseCompartmentSlot m_Seat; + protected ref array m_Crew = {}; + protected ref array m_Boxes = {}; + protected ref array m_Stores = {}; + protected ref array m_Original = {}; + protected ref ERR_NativeMortarMoveCallback m_MoveCallback; + protected IEntity m_MoveShell; + protected BaseInventoryStorageComponent m_MoveDestination; + protected float m_MoveDeadline; + protected ref ERR_MortarSupplyTransfer m_ObservedTransfer; + protected IEntity m_FirstShell; + protected IEntity m_SecondShell; + protected int m_AttemptsAtStart; + protected int m_ShotsAtStart; + protected int m_CallbackAtCancel; + protected int m_CancelOrder; + protected int m_Step; + protected float m_Deadline; + protected float m_StepDeadline; + protected float m_Wait; + protected bool m_Held; + protected bool m_Stopped; + protected bool m_Complete; + static const ResourceName STORE = "{EBBC859CCD94D96D}Prefabs/Props/EmptyStorages/USSR_AmmoBox_empty.et"; + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "mortar-transfer"; + } + void ERR_NativeMortarTransferProbe(ERR_GameMode mode) + { + m_Mode = mode; m_Deadline = GetGame().GetWorld().GetWorldTime() + 180000; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: mortar transfer " + detail); return true; } + Print("ERR SMOKE FAIL: mortar transfer " + detail, LogLevel.ERROR); Stop(); return false; + } + protected bool IsShell(IEntity item) + { + return item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == ERR_MortarBattery.SHELL; + } + protected InventoryStorageManagerComponent Inventory(IEntity actor) + { + if (!actor) return null; + return InventoryStorageManagerComponent.Cast(actor.FindComponent(InventoryStorageManagerComponent)); + } + protected bool Has(IEntity actor, IEntity item) + { + array items = {}; ERR_Inventory.Items(Inventory(actor), items); + return item && items.Contains(item); + } + protected IEntity CrewOwner(IEntity item) + { + foreach (IEntity actor : m_Crew) if (Has(actor, item)) return actor; + return null; + } + protected IEntity OriginalOwner(IEntity item) + { + foreach (ERR_NativeMortarShellOwner entry : m_Original) if (entry.Shell == item) return entry.OriginalOwner; + return null; + } + protected bool InStore(IEntity item) + { + foreach (BaseInventoryStorageComponent storage : m_Stores) if (storage && storage.Contains(item)) return true; + return false; + } + static bool Conservation(int originals, int actual, bool allOriginal, bool singleOwner) + { + return originals == 27 && actual == originals && allOriginal && singleOwner; + } + protected bool Conserved() + { + array actual = {}; + foreach (IEntity actor : m_Crew) + { + array items = {}; ERR_Inventory.Items(Inventory(actor), items); + foreach (IEntity item : items) if (IsShell(item) && !actual.Contains(item)) actual.Insert(item); + } + foreach (BaseInventoryStorageComponent storage : m_Stores) + { + if (!storage) return false; + array items = {}; storage.GetAll(items); + foreach (IEntity item : items) if (IsShell(item) && !actual.Contains(item)) actual.Insert(item); + } + bool allOriginal = true; + bool singleOwner = true; + foreach (ERR_NativeMortarShellOwner entry : m_Original) + { + if (!entry.Shell || !actual.Contains(entry.Shell)) allOriginal = false; + int owners; + foreach (IEntity actor : m_Crew) if (Has(actor, entry.Shell)) owners++; + foreach (BaseInventoryStorageComponent storage : m_Stores) if (storage && storage.Contains(entry.Shell)) owners++; + if (owners != 1) singleOwner = false; + } + return Conservation(m_Original.Count(), actual.Count(), allOriginal, singleOwner); + } + protected IEntity FirstGunnerShell() + { + array items = {}; ERR_Inventory.Items(Inventory(m_Gunner), items); + foreach (IEntity item : items) if (IsShell(item)) return item; + return null; + } + protected bool BeginMove(IEntity shell, BaseInventoryStorageComponent destination, float now) + { + if (!shell || !destination || m_MoveCallback) return false; + IEntity current = CrewOwner(shell); + // A vanilla empty box has storage but no inventory manager. The original + // recipient manager performs its explicit pickup from the external storage. + if (!current) current = OriginalOwner(shell); + InventoryStorageManagerComponent manager = Inventory(current); + if (!manager) return false; + m_MoveShell = shell; m_MoveDestination = destination; + m_MoveCallback = new ERR_NativeMortarMoveCallback(); m_MoveDeadline = now + 8000; + if (!manager.TryMoveItemToStorage(shell, destination, -1, m_MoveCallback)) return false; + return true; + } + protected int MoveResult(float now) + { + if (!m_MoveCallback) return 1; + if (m_MoveCallback.Result < 0 || now >= m_MoveDeadline) return -1; + if (m_MoveCallback.Result == 0 || !m_MoveShell || !m_MoveDestination || !m_MoveDestination.Contains(m_MoveShell)) return 0; + InventoryItemComponent item = InventoryItemComponent.Cast(m_MoveShell.FindComponent(InventoryItemComponent)); + if (!item || !item.GetParentSlot() || item.GetParentSlot().GetStorage() != m_MoveDestination) return 0; + m_MoveCallback = null; m_MoveShell = null; m_MoveDestination = null; + return 1; + } + protected bool Stash(IEntity shell, float now) + { + foreach (BaseInventoryStorageComponent storage : m_Stores) + if (storage && storage.GetEstimatedCountFitForItem(shell) > 0) return BeginMove(shell, storage, now); + return false; + } + protected void StageOrder(float now) + { + ERR_HQReport report = new ERR_HQReport(); + report.Target = GetGame().GetPlayerController().GetControlledEntity(); + report.Source = m_Battery.Group; + report.Position = m_Battery.Gun.GetOrigin() + "700 0 0"; + report.ObservedAt = now; report.DetailsObservedAt = now; + report.TravelMode = "on foot"; report.MessageId = 900001 + m_Battery.OrderId; + m_Battery.BeginRequest(report, now); + m_Battery.PendingSupplyReport = report.Snapshot(); + PrintFormat("ERR MORTAR TRANSFER FIXTURE: synthetic supply order=%1; radio bypassed; scheduler held; no artillery activity authorized", m_Battery.OrderId); + } + protected bool NoFire() + { + return m_Battery && m_Battery.TotalShots == m_ShotsAtStart && !m_Battery.Activity && !m_Battery.RadioOrder && !m_Battery.Released; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_Battery) m_Battery.Cancel("native transfer fixture stopped"); + if (m_System) + { + m_System.Stop(); // do not resume automatic fire while test items may be stored + if (m_Held) m_System.ERR_ReleaseTransferHold(this); + } + m_Held = false; + // Never delete a box containing borrowed shells or an outstanding operation. + // Failure preserves it for diagnosis/normal round-owned cleanup. + if (!m_MoveCallback) + { + foreach (IEntity box : m_Boxes) + { + if (!box) continue; + BaseInventoryStorageComponent storage = BaseInventoryStorageComponent.Cast(box.FindComponent(BaseInventoryStorageComponent)); + array items = {}; if (storage) storage.GetAll(items); + if (storage && items.IsEmpty()) ERR_Actors.DeleteSpawned(box); + } + } + } + int Tick(float now) + { + if (m_Complete) return 1; + if (m_Stopped) return -1; + if (!Enabled() || now > m_Deadline) { Check(false, "enabled server fixture and bounded 180-second deadline"); return -1; } + if (now < m_Wait) return 0; + if (m_MoveCallback) + { + int moved = MoveResult(now); + if (moved < 0) { Check(false, "fixture inventory move completed with exact destination before deadline; borrowed shells retained"); return -1; } + if (moved == 0) return 0; + if (!Check(Conserved(), "all original 27 shell identities conserved after fixture move")) return -1; + } + if (m_Step == 0) + { + m_System = ERR_MortarSystem.Get(); + if (!m_System) return 0; + m_Battery = m_System.ERR_TransferBattery(); + if (!m_Battery || !m_Battery.StartupActivated) return 0; + if (!Check(m_Battery.Operational() && m_Battery.CountShells() == 27 && !m_Battery.Activity && !m_Battery.RadioOrder && !m_Battery.CommandOpen, "actual initialized idle battery has finite 27 shells")) return -1; + if (!Check(m_System.ERR_HoldForTransfer(this), "opt-in mechanism fixture holds automatic mortar scheduler")) return -1; + m_Held = true; m_AttemptsAtStart = m_Battery.ERR_TransferAttempts(); m_ShotsAtStart = m_Battery.TotalShots; + array agents = {}; m_Battery.Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + if (!agent || !ERR_Actors.CanFight(agent.GetControlledEntity())) continue; + IEntity actor = agent.GetControlledEntity(); if (m_Crew.Contains(actor)) continue; + m_Crew.Insert(actor); + array items = {}; ERR_Inventory.Items(Inventory(actor), items); + foreach (IEntity item : items) + { + if (!IsShell(item)) continue; + ERR_NativeMortarShellOwner entry = new ERR_NativeMortarShellOwner(); entry.Shell = item; entry.OriginalOwner = actor; m_Original.Insert(entry); + } + if (!m_Gunner && actor != m_Battery.RadioOperator) m_Gunner = actor; + } + if (!Check(m_Crew.Count() == 4 && m_Original.Count() == 27 && m_Gunner != null, "four real crew and original shell-owner identities captured")) return -1; + SCR_AIVehicleUsageComponent usage = SCR_AIVehicleUsageComponent.Cast(m_Battery.Gun.FindComponent(SCR_AIVehicleUsageComponent)); + if (usage) m_Seat = usage.GetTurretCompartmentSlot(); + if (m_Seat && m_Seat.GetOccupant()) + { + IEntity occupant = m_Seat.GetOccupant(); + if (!Check(m_Crew.Contains(occupant) && occupant != m_Battery.RadioOperator && ERR_Actors.CanFight(occupant), "existing native seat occupant is original fighting gunner")) return -1; + m_Gunner = occupant; + } + else + { + CompartmentAccessComponent access = CompartmentAccessComponent.Cast(m_Gunner.FindComponent(CompartmentAccessComponent)); + if (!Check(m_Seat && access && access.GetInVehicle(m_Battery.Gun, m_Seat, true, -1, ECloseDoorAfterActions.INVALID, false), "native seating request selects actual original crew gunner")) return -1; + } + if (!Check(m_Battery.InventoryShells(Inventory(m_Gunner)) == 9, "selected actual gunner owns its original nine physical shells")) return -1; + for (int i = 0; i < 2; i++) + { + IEntity box = ERR_Actors.Spawn(STORE, ERR_Actors.Ground(m_Battery.Gun.GetOrigin() + Vector(3 + i * 2, 0, 3))); + if (!Check(box != null, "fixture-owned empty vanilla storage created")) return -1; + m_Boxes.Insert(box); m_Mode.Own(box); + BaseInventoryStorageComponent storage = BaseInventoryStorageComponent.Cast(box.FindComponent(BaseInventoryStorageComponent)); + if (!Check(storage != null, "real vanilla storage component available without attaching it to gunner inventory")) return -1; + m_Stores.Insert(storage); + } + m_Step = 1; m_StepDeadline = now + 8000; m_Wait = now + 500; return 0; + } + if (!NoFire()) { Check(false, "no artillery activity, committed load or physical projectile during inventory mechanism test"); return -1; } + if (m_Step == 1) + { + if (m_Seat.GetOccupant() != m_Gunner) + { + if (now >= m_StepDeadline) { Check(false, "actual original gunner occupies native mortar seat"); return -1; } + return 0; + } + if (!Check(Conserved(), "27 original shells have exactly one observed owner each")) return -1; + m_Step = 2; + } + if (m_Step == 2 || m_Step == 5) + { + IEntity shell = FirstGunnerShell(); + if (shell) + { + if (!Check(Stash(shell, now), "one existing gunner shell move to vanilla store accepted; no shell minted")) return -1; + return 0; + } + if (!Check(m_Battery.InventoryShells(Inventory(m_Gunner)) == 0 && Conserved(), "actual gunner empty while all 27 original shells remain in crew or fixture storage")) return -1; + StageOrder(now); + ERR_MortarSupplyState started = m_Battery.SupplyState(now); + m_ObservedTransfer = m_Battery.ERR_TransferForProbe(); + if (!Check(started == ERR_MortarSupplyState.PENDING && m_ObservedTransfer && m_ObservedTransfer.ERR_RequestAccepted() && m_ObservedTransfer.ERR_TransferRecipient() == m_Gunner && m_ObservedTransfer.CapturedOrder() == m_Battery.OrderId, "production exact-shell request accepted once with captured current order and real gunner")) return -1; + if (m_Step == 2) + { + m_FirstShell = m_ObservedTransfer.ERR_TransferredShell(); + m_Step = 3; + } + else + { + m_SecondShell = m_ObservedTransfer.ERR_TransferredShell(); m_CallbackAtCancel = m_ObservedTransfer.ERR_CallbackState(); m_CancelOrder = m_Battery.OrderId; + m_Battery.Cancel("native fixture cancels authorization immediately after accepted inventory request"); + if (!Check(m_SecondShell && m_SecondShell != m_FirstShell && !m_Battery.CommandOpen && m_Battery.SupplyState(now) == ERR_MortarSupplyState.FAILED, "canceled current order cannot report supply READY or issue another request")) return -1; + PrintFormat("ERR MORTAR TRANSFER CANCEL: callbackBeforeCancel=%1 order=%2; accepted native move is not retracted", m_CallbackAtCancel, m_CancelOrder); + m_Step = 6; + } + m_StepDeadline = now + 8000; m_Wait = now + 250; return 0; + } + if (m_Step == 3) + { + ERR_MortarSupplyState state = m_Battery.SupplyState(now); + if (state == ERR_MortarSupplyState.FAILED || now >= m_StepDeadline) { Check(false, "production transfer completes within its bounded deadline"); return -1; } + if (state == ERR_MortarSupplyState.PENDING) return 0; + if (!Check(m_ObservedTransfer.ERR_CallbackState() == 1 && Has(m_Gunner, m_FirstShell) && !Has(OriginalOwner(m_FirstShell), m_FirstShell) && Conserved() && m_Battery.ERR_TransferAttempts() == m_AttemptsAtStart + 1, "successful native callback and exact donor-to-gunner ownership, one attempt, original 27 conserved")) return -1; + if (!Check(m_Battery.SupplyState(now) == ERR_MortarSupplyState.READY && m_Battery.ERR_TransferAttempts() == m_AttemptsAtStart + 1, "repeated supply check reuses actual inventory without another move")) return -1; + m_Battery.Cancel("native success subcase finished; no artillery activity requested"); + m_Step = 5; return 0; + } + if (m_Step == 6) + { + if (m_Battery.SupplyState(now) != ERR_MortarSupplyState.FAILED || m_Battery.OrderId != m_CancelOrder || m_Battery.ERR_TransferAttempts() != m_AttemptsAtStart + 2) { Check(false, "canceled order/generation remains failed with exactly two total move attempts"); return -1; } + if (m_ObservedTransfer.ERR_CallbackState() == 0 || m_ObservedTransfer.Unresolved()) + { + if (now >= m_StepDeadline) { Check(false, "accepted canceled operation reached definite native outcome; no ambiguous retry"); return -1; } + return 0; + } + if (!Check(m_ObservedTransfer.ERR_CallbackState() == 1 && Has(m_Gunner, m_SecondShell) && Conserved(), "canceled accepted native move has definite physical outcome with exactly two attempts and original 27 conserved")) return -1; + if (m_CallbackAtCancel == 0) Print("ERR SMOKE PASS: mortar transfer actual native completion observed after authorization cancellation"); + else Print("ERR MORTAR TRANSFER LIMIT: native callback completed synchronously before cancellation; late callback timing not exercised"); + m_Step = 7; return 0; + } + if (m_Step == 7) + { + // Return foreign shells first, leaving room for each original nine-round kit. + IEntity misplaced; + foreach (ERR_NativeMortarShellOwner entry : m_Original) + if (Has(m_Gunner, entry.Shell) && entry.OriginalOwner != m_Gunner) { misplaced = entry.Shell; break; } + if (!misplaced) + foreach (ERR_NativeMortarShellOwner entry : m_Original) if (InStore(entry.Shell)) { misplaced = entry.Shell; break; } + if (misplaced) + { + InventoryStorageManagerComponent recipient = Inventory(OriginalOwner(misplaced)); + BaseInventoryStorageComponent destination; + if (recipient) destination = recipient.FindStorageForItem(misplaced, EStoragePurpose.PURPOSE_DEPOSIT); + if (!Check(destination && BeginMove(misplaced, destination, now), "one borrowed shell return to its original crew owner accepted")) return -1; + return 0; + } + foreach (ERR_NativeMortarShellOwner entry : m_Original) + if (!Check(Has(entry.OriginalOwner, entry.Shell), "original shell identity returned to original crew inventory")) return -1; + if (!Check(Conserved() && m_Battery.CountShells() == 27 && NoFire(), "all original ammunition restored; no minted/deleted shell or shot")) return -1; + foreach (BaseInventoryStorageComponent storage : m_Stores) + { + array items = {}; storage.GetAll(items); + if (!Check(items.IsEmpty(), "borrowed-ammunition fixture storage empty before deletion")) return -1; + } + Stop(); m_Complete = true; return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c new file mode 100644 index 0000000..d93b082 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c @@ -0,0 +1,87 @@ +#ifdef WORKBENCH +// Test access only: trigger the real delivered-order method on an existing +// registered squad. Radio transit is intentionally not simulated by this test. +modded class ERR_HQ +{ + bool ERR_TestPatrolSearch(SCR_AIGroup group, out AIWaypoint search) + { + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != group) continue; + if (unit.Assignment || unit.PendingOrder || unit.Waypoint || !unit.Eligible(m_Mode)) return false; + ERR_HQReport order = new ERR_HQReport(); + order.Position = group.GetOrigin() + "40 0 0"; + order.ObservedAt = GetGame().GetWorld().GetWorldTime(); + order.MessageId = m_Journal.Message(); + unit.PendingOrder = order; + DeliverOrder(unit, order.ObservedAt); + search = unit.Waypoint; + return search && unit.Assignment == order; + } + return false; + } + bool ERR_TestPatrolRelease(SCR_AIGroup group, AIWaypoint search) + { + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != group || unit.Waypoint != search) continue; + unit.Release(); + return !unit.Assignment && !unit.PendingOrder && !unit.Waypoint; + } + return false; + } +} + +class ERR_NativePatrolHQProbe +{ + protected ERR_GameMode m_Mode; + protected ERR_SiteRuntime m_Site; + protected AIWaypoint m_Search; + protected ref array m_Baseline = {}; + protected int m_Step; + protected float m_Wait; + void ERR_NativePatrolHQProbe(ERR_GameMode mode) { m_Mode = mode; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: patrol HQ " + detail); return true; } + Print("ERR SMOKE FAIL: patrol HQ " + detail, LogLevel.ERROR); return false; + } + int Tick(float now) + { + if (now < m_Wait) return 0; + ERR_HQ hq = ERR_HQ.Get(); + if (!Check(hq != null, "real HQ available")) return -1; + if (m_Step == 0) + { + m_Site = m_Mode.Sites().Find("everon-outpost-1"); + if (!Check(m_Site && m_Site.Group && m_Site.PatrolCycle, "existing outpost route available")) return -1; + m_Site.Group.GetWaypoints(m_Baseline); + if (!Check(!m_Baseline.IsEmpty() && hq.ERR_TestPatrolSearch(m_Site.Group, m_Search), "real delivered-order method assigns existing squad")) return -1; + m_Step = 1; m_Wait = now + 750; return 0; + } + if (m_Step == 1) + { + array queue = {}; + m_Site.Group.GetWaypoints(queue); + if (!Check(m_Search && !queue.IsEmpty() && queue[0] == m_Search && m_Site.Group.GetCurrentWaypoint() == m_Search, "Search preempts native patrol")) return -1; + foreach (AIWaypoint waypoint : m_Baseline) + if (!Check(queue.Contains(waypoint), "preempted baseline route remains queued")) return -1; + if (!Check(hq.ERR_TestPatrolRelease(m_Site.Group, m_Search), "real HQ release removes only its assignment")) return -1; + m_Step = 2; m_Wait = now + 750; return 0; + } + if (m_Step == 2) + { + AIWaypoint current = m_Site.Group.GetCurrentWaypoint(); + if (!Check(current && (current == m_Site.PatrolCycle || m_Site.PatrolWaypoints.Contains(current)), "native patrol resumes after Search release")) return -1; + m_Step = 3; return 1; + } + return 1; + } + void Stop() + { + ERR_HQ hq = ERR_HQ.Get(); + if (hq && m_Site && m_Search) hq.ERR_TestPatrolRelease(m_Site.Group, m_Search); + } + void ~ERR_NativePatrolHQProbe() { Stop(); } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c new file mode 100644 index 0000000..f76d2ba --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c @@ -0,0 +1,63 @@ +// Vanilla named settlements supply exclusion areas; no original mission location system. +// Shared town/village exclusion for mortar impacts, roadblocks and mine sites. +// Fixed distance from mapped settlement centres, independent of mission +// activation radii. Scattered buildings and props are not settlements. +class ERR_SettlementSafety +{ + static const float RADIUS = 200; + string SettlementReason; + protected vector m_SafeImpact; + protected bool m_SettlementNear; + protected vector m_LastSettlementImpact; + protected float m_LastSettlementCheck = -1; + protected bool m_LastSettlementClear; + + bool OutsideSettlements(vector impact) + { + float now = GetGame().GetWorld().GetWorldTime(); + if (m_LastSettlementCheck >= 0 && now >= m_LastSettlementCheck && now - m_LastSettlementCheck < 1000 && vector.DistanceXZ(impact, m_LastSettlementImpact) == 0) + return m_LastSettlementClear; + m_LastSettlementCheck = now; + m_LastSettlementImpact = impact; + m_LastSettlementClear = false; + m_SafeImpact = impact; + m_SettlementNear = false; + SettlementReason = "clear"; + // Also cover named native map settlements, independent of whether the + // mission placed a garrison marker there. Generic building entities also + // include deer stands, bridge pillars, rubble and electrical cabinets. + // Broad vertical bounds keep the 200m distance horizontal on hills. + GetGame().GetWorld().QueryEntitiesByAABB(impact - Vector(RADIUS, 5000, RADIUS), impact + Vector(RADIUS, 5000, RADIUS), CheckSettlement, FilterSettlement, EQueryEntitiesFlags.ALL); + m_LastSettlementClear = !m_SettlementNear; + return m_LastSettlementClear; + } + + protected bool FilterSettlement(IEntity entity) + { + return entity && entity.FindComponent(MapDescriptorComponent); + } + + protected bool CheckSettlement(IEntity entity) + { + float radius; + MapDescriptorComponent descriptor = MapDescriptorComponent.Cast(entity.FindComponent(MapDescriptorComponent)); + if (descriptor) + { + int type = descriptor.GetBaseType(); + if (type == EMapDescriptorType.MDT_NAME_CITY) + radius = RADIUS; + else if (type == EMapDescriptorType.MDT_NAME_TOWN) + radius = RADIUS; + else if (type == EMapDescriptorType.MDT_NAME_VILLAGE || type == EMapDescriptorType.MDT_NAME_SETTLEMENT) + radius = RADIUS; + } + if (radius > 0 && vector.DistanceXZ(m_SafeImpact, entity.GetOrigin()) <= radius) + { + m_SettlementNear = true; + SettlementReason = string.Format("named map settlement entity=%1 position=%2 distance=%3m exclusion=%4m", entity, entity.GetOrigin(), vector.DistanceXZ(m_SafeImpact, entity.GetOrigin()), radius); + return false; + } + return true; + } + +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c new file mode 100644 index 0000000..1cb5412 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c @@ -0,0 +1,9 @@ +modded class ERR_ScenarioComponent +{ + protected override bool PrepareAdditionalForces() + { + if (!super.PrepareAdditionalForces()) return false; + ERR_HQ hq = ERR_HQ.Get(); + return hq && hq.PrepareSupport(); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/addon.gproj b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/addon.gproj new file mode 100644 index 0000000..ec3100b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/ai/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Ai" + GUID "5192138CB9D5B911" + TITLE "Escapists Rereintroduced - Ai" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Missions/ERR_Everon.conf b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Missions/ERR_Everon.conf new file mode 100644 index 0000000..d63df9d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Missions/ERR_Everon.conf @@ -0,0 +1,11 @@ +SCR_MissionHeader { + World "{B6C516F86302C679}Worlds/ERR_Everon.ent" + SystemsConfig "{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" + m_sName "Rereintroduced: Everon (development)" + m_sAuthor "Rereintroduced contributors" + m_sDescription "Independent escape prototype. Development scenario; runtime validation in progress." + m_sGameMode "Escape" + m_iPlayerCount 12 + m_eSaveTypes 0 + m_bShowInScenarioMenu 1 +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Missions/ERR_Everon.conf.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Missions/ERR_Everon.conf.meta new file mode 100644 index 0000000..4d75705 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Missions/ERR_Everon.conf.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{C1E20667DCE324ED}Missions/ERR_Everon.conf" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c new file mode 100644 index 0000000..f1b6593 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c @@ -0,0 +1,36 @@ +// Companion-specific commands extend Core's authenticated transport. +modded class ERR_AdminService +{ + protected override string Setting(string section, string option) + { + if (section == "hq") + { + if (option == "interval") return "reportIntervalSeconds"; + if (option == "squads") return "supportSquadLimit"; + if (option == "radius") return "responseRadiusMetres"; + } + if (section == "intel") + { + if (option == "carrying") return "aiIntelChancePercent"; + } + return super.Setting(section, option); + } + protected override bool Extension(ERR_GameMode mode, string arguments, array replies) + { + if (arguments != "status" && arguments != "hq show" && arguments != "hq log") return super.Extension(mode, arguments, replies); + ERR_HQ hq = ERR_HQ.Cast(mode.Command()); + if (!hq) { replies.Insert("HQ unavailable"); return true; } + if (arguments == "hq show" || arguments == "status") replies.Insert(hq.Status()); + else + { + int cursor; + hq.Journal().Read(Math.Max(0, hq.Journal().Sequence() - 8), replies, cursor); + if (replies.IsEmpty()) replies.Insert("HQ journal is empty."); + } + return true; + } + protected override string Help() + { + return super.Help() + " | hq show|log | hq interval|squads|radius show|set N | intel carrying show|set N"; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c new file mode 100644 index 0000000..442c72f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c @@ -0,0 +1,288 @@ +#ifdef WORKBENCH +// Read-only evidence hooks. Every production method delegates unchanged. +modded class ERR_HQ +{ + void ERR_ResponseUnits(out array units) + { + units.Clear(); + if (!ERR_NativeHQResponseProof.Enabled()) return; + foreach (ERR_HQUnit unit : m_Units) units.Insert(unit); + } + protected override void Observe(ERR_HQUnit unit, float now) + { + ERR_HQReport previous = unit.PendingReport; + super.Observe(unit, now); + ERR_NativeHQResponseProof proof = ERR_NativeHQResponseProof.Active(); + if (proof && unit.PendingReport && unit.PendingReport != previous) proof.Observed(this, unit, now); + } + protected override void Accept(ERR_HQReport report, float now) + { + super.Accept(report, now); + ERR_NativeHQResponseProof proof = ERR_NativeHQResponseProof.Active(); + if (!proof || !report) return; + foreach (ERR_HQReport accepted : m_Contacts) + if (accepted.MessageId == report.MessageId) { proof.Accepted(this, accepted, now); break; } + } + protected override void DeliverOrder(ERR_HQUnit unit, float now) + { + ERR_HQReport order = unit.PendingOrder; + ERR_HQRoute route = unit.Downlink; + super.DeliverOrder(unit, now); + ERR_NativeHQResponseProof proof = ERR_NativeHQResponseProof.Active(); + if (proof && order && route && unit.Assignment == order && unit.Waypoint) proof.Delivered(this, unit, route, now); + } +} +modded class ERR_HQJournal +{ + override void Write(string kind, string message, int messageId = 0) + { + super.Write(kind, message, messageId); + ERR_NativeHQResponseProof proof = ERR_NativeHQResponseProof.Active(); + if (proof) proof.JournalEvent(this, kind, message, messageId); + } +} +modded class SCR_AIGroupUtilityComponent +{ + IEntity ERR_ResponseVisualObserver(ERR_HQReport report, float now) + { + foreach (SCR_AIInfoComponent info : m_aInfoComponents) + { + if (!info || !info.m_Perception) continue; + AIAgent agent = AIAgent.Cast(info.GetOwner()); + if (!agent || !ERR_Actors.CanFight(agent.GetControlledEntity())) continue; + array targets = {}; info.m_Perception.GetTargetsList(targets, ETargetCategory.ENEMY); + foreach (BaseTarget target : targets) + { + ERR_HQVisualContact sample = ERR_HQObservation.Capture(target, now); + if (sample && sample.Entity == report.Target && sample.Escapist && Math.AbsFloat(sample.ObservedAt - report.ObservedAt) < 1 && vector.Distance(sample.Position, report.Position) < 0.1) return agent.GetControlledEntity(); + } + } + return null; + } +} +class ERR_NativeResponseUnit +{ + ERR_HQUnit Unit; + SCR_AIGroup Group; + IEntity Radio; + ref array Actors = {}; +} +class ERR_NativeResponseJournal +{ + bool Report; + bool Transmit; + bool HQReceive; + bool HQTransmit; + bool UnitReceive; + bool Delivered; +} +class ERR_NativeResponseLineage +{ + ref ERR_HQReport Report; + ERR_HQUnit Source; + IEntity Observer; + IEntity SourceRadio; + ref ERR_HQRoute Uplink; + bool Accepted; + float AcceptedAt; + ERR_HQUnit Recipient; + IEntity RecipientRadio; + int DeliveryId; + AIWaypoint Waypoint; + IEntity MovingActor; + vector DeliveredOrigin; + float DeliveredAt; +} +class ERR_NativeHQResponseProof +{ + protected static ERR_NativeHQResponseProof s_Active; + protected ERR_GameMode m_Mode; + protected ERR_HQ m_HQ; + protected IEntity m_Player; + protected SCR_PlayerController m_Controller; + protected ERR_PlayerLife m_Life; + protected ERR_HQUnit m_Source; + protected DamageManagerComponent m_Damage; + protected bool m_DamageWasEnabled; + protected bool m_Protected; + protected bool m_Started; + protected bool m_Stopped; + protected bool m_Failed; + protected string m_Failure; + protected float m_Deadline; + protected float m_NextDiagnostic; + protected ref array m_Units = {}; + protected ref array m_Forces = {}; + protected ref array m_Reports = {}; + protected ref map m_Journal = new map(); + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "hq-response"; + } + static ERR_NativeHQResponseProof Active() { return s_Active; } + void ERR_NativeHQResponseProof(ERR_GameMode mode, IEntity player) + { + m_Mode = mode; m_Player = player; m_HQ = ERR_HQ.Get(); m_Deadline = GetGame().GetWorld().GetWorldTime() + 140000; + if (Enabled() && !s_Active) s_Active = this; + } + protected bool Fail(string reason) { m_Failed = true; m_Failure = reason; return false; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: HQ response " + detail); return true; } + Print("ERR SMOKE FAIL: HQ response " + detail, LogLevel.ERROR); Stop(); return false; + } + protected ERR_NativeResponseUnit Original(ERR_HQUnit unit) + { + foreach (ERR_NativeResponseUnit original : m_Units) if (original.Unit == unit && original.Group == unit.Group) return original; + return null; + } + protected ERR_NativeResponseLineage Report(int id) + { + foreach (ERR_NativeResponseLineage report : m_Reports) if (report.Report.MessageId == id) return report; + return null; + } + protected bool Canonical() + { + return m_Player && m_Controller && m_Life && m_Mode.Players().CurrentActor(m_Player) == m_Life && m_Controller == GetGame().GetPlayerController() && m_Controller.GetControlledEntity() == m_Player && m_Life.Actor == m_Player && m_Life.Connected && m_Life.UsedLife; + } + protected bool UnchangedForces() + { + array current = {}; m_HQ.ERR_ResponseUnits(current); + if (current.Count() != m_Units.Count()) return false; + foreach (ERR_HQUnit unit : current) + { + ERR_NativeResponseUnit original = Original(unit); + if (!original) return false; + array agents = {}; unit.Group.GetAgents(agents); + if (agents.Count() != original.Actors.Count()) return false; + foreach (AIAgent agent : agents) if (!agent || !original.Actors.Contains(agent.GetControlledEntity())) return false; + } + array forces = {}; m_HQ.PhysicalForces(forces); + if (forces.Count() != m_Forces.Count()) return false; + foreach (IEntity entity : forces) if (!m_Forces.Contains(entity)) return false; + return true; + } + protected bool Arrange() + { + array units = {}; m_HQ.ERR_ResponseUnits(units); + foreach (ERR_HQUnit unit : units) + { + if (!unit.Group || !unit.Utility || !unit.Radio || ERR_HQRadio.Capability(unit.Radio) != 2) return false; + array agents = {}; unit.Group.GetAgents(agents); + if (agents.IsEmpty() || !unit.Group.IsExpandComplete()) return false; + ERR_NativeResponseUnit original = new ERR_NativeResponseUnit(); original.Unit = unit; original.Group = unit.Group; original.Radio = unit.Radio; + foreach (AIAgent agent : agents) + { + if (!agent || !ERR_Actors.CanFight(agent.GetControlledEntity())) return false; + original.Actors.Insert(agent.GetControlledEntity()); + } + m_Units.Insert(original); + if (!m_Source && !unit.ReservedForSupport) m_Source = unit; + } + if (!m_Source || m_Units.Count() < 2) return false; + m_HQ.PhysicalForces(m_Forces); + m_Controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); m_Life = m_Mode.Players().CurrentActor(m_Player); + if (!Canonical()) return false; + m_Damage = DamageManagerComponent.Cast(m_Player.FindComponent(DamageManagerComponent)); + if (!m_Damage) return false; + m_DamageWasEnabled = m_Damage.IsDamageHandlingEnabled(); m_Damage.EnableDamageHandling(false); m_Protected = true; + // Preserve the established fixture arrangement: move only the real prisoner. + // Native perception must discover him; neither targets nor reports are seeded. + vector position = ERR_Actors.Ground(m_Source.Group.GetOrigin() + "0 0 20"); + vector transform[4]; m_Player.GetWorldTransform(transform); transform[3] = position; + ChimeraCharacter.Cast(m_Player).Teleport(transform); + m_Started = true; + PrintFormat("ERR HQ RESPONSE ARRANGEMENT: canonical prisoner moved to=%1 near original source group=%2; temporary player damage protection=%3; no AI/report/radio cadence changes", position, m_Source.Id, m_Protected); + return true; + } + void JournalEvent(ERR_HQJournal journal, string kind, string message, int messageId) + { + if (!m_Started || m_Stopped || !m_HQ || journal != m_HQ.Journal() || messageId <= 0) return; + ERR_NativeResponseJournal entry = m_Journal.Get(messageId); + if (!entry) + { + if (m_Journal.Count() >= 128) { Fail("bounded journal evidence map exhausted"); return; } + entry = new ERR_NativeResponseJournal(); m_Journal.Insert(messageId, entry); + } + if (kind == "REPORT") entry.Report = true; + if (kind == "TRANSMIT") { entry.Transmit = true; if (message.StartsWith("HQ -> ")) entry.HQTransmit = true; } + if (kind == "RECEIVE") { if (message.StartsWith("HQ received from ")) entry.HQReceive = true; else if (message.StartsWith("unit ")) entry.UnitReceive = true; } + if (kind == "ORDER DELIVERED") entry.Delivered = true; + } + void Observed(ERR_HQ hq, ERR_HQUnit unit, float now) + { + if (!m_Started || m_Stopped || hq != m_HQ || unit != m_Source || unit.PendingReport.Target != m_Player) return; + ERR_HQReport report = unit.PendingReport; + ERR_NativeResponseUnit original = Original(unit); + IEntity observer = unit.Utility.ERR_ResponseVisualObserver(report, now); + if (!Canonical() || !original || !original.Actors.Contains(observer) || !unit.Uplink || unit.Uplink.Nodes.IsEmpty() || unit.Uplink.Nodes[0].Carrier != unit.Radio || unit.Uplink.MessageId != report.MessageId || unit.Radio != original.Radio || !original.Actors.Contains(unit.Radio) || report.Source != original.Group || report.ObservedAt > now || Report(report.MessageId)) { Fail("real observed report lacks canonical original observer/radio/source lineage"); return; } + if (m_Reports.Count() >= 32) { Fail("bounded report evidence exhausted"); return; } + ERR_NativeResponseLineage proof = new ERR_NativeResponseLineage(); proof.Report = report.Snapshot(); proof.Source = unit; proof.Observer = observer; proof.SourceRadio = unit.Radio; proof.Uplink = unit.Uplink; m_Reports.Insert(proof); + PrintFormat("ERR HQ RESPONSE SIGHTING: source=%1 report=M%2 observer=%3 radio=%4 target=%5 observedAt=%6; actual native visual sample", unit.Id, report.MessageId, observer, unit.Radio, m_Player, report.ObservedAt); + } + void Accepted(ERR_HQ hq, ERR_HQReport report, float now) + { + if (!m_Started || m_Stopped || hq != m_HQ) return; + ERR_NativeResponseLineage proof = Report(report.MessageId); if (!proof) return; + if (report.Target != m_Player || report.Source != proof.Report.Source || report.ObservedAt != proof.Report.ObservedAt || vector.Distance(report.Position, proof.Report.Position) > 0.01 || !proof.Uplink || proof.Uplink.Failed || proof.Uplink.Sending || proof.Uplink.Cursor < proof.Uplink.Nodes.Count()) { Fail("accepted report lacks completed actual uplink or immutable observed time"); return; } + proof.Accepted = true; proof.AcceptedAt = now; + } + void Delivered(ERR_HQ hq, ERR_HQUnit unit, ERR_HQRoute route, float now) + { + if (!m_Started || m_Stopped || hq != m_HQ || !unit.Assignment) return; + ERR_NativeResponseLineage proof = Report(unit.Assignment.MessageId); if (!proof || proof.Recipient) return; + ERR_NativeResponseUnit original = Original(unit); + if (!proof.Accepted || !original || unit == proof.Source || !unit.Assignment || !unit.Waypoint) { Fail("delivered response lacks accepted original recipient/order"); return; } + if (unit.Assignment.Target != m_Player || unit.Assignment.Source != proof.Report.Source || unit.Assignment.ObservedAt != proof.Report.ObservedAt || vector.Distance(unit.Assignment.Position, proof.Report.Position) > 0.01) { Fail("delivered response changed immutable report"); return; } + if (unit.Radio != original.Radio || !original.Actors.Contains(unit.Radio) || !route.Downlink || route.Nodes.IsEmpty()) { Fail("delivered response lacks original radio/downlink"); return; } + ERR_HQRadioNode recipientNode = route.Nodes[route.Nodes.Count() - 1]; + if (recipientNode.Carrier != unit.Radio || route.Failed || route.Sending || route.Cursor != route.Nodes.Count() - 1) { Fail("delivered response lacks completed actual recipient downlink"); return; } + proof.Recipient = unit; proof.RecipientRadio = unit.Radio; proof.DeliveryId = route.MessageId; proof.Waypoint = unit.Waypoint; proof.DeliveredAt = now; + foreach (IEntity actor : original.Actors) if (ERR_Actors.CanFight(actor)) { proof.MovingActor = actor; break; } + if (proof.MovingActor) proof.DeliveredOrigin = proof.MovingActor.GetOrigin(); + PrintFormat("ERR HQ RESPONSE DELIVERED: report=M%1 downlink=M%2 source=%3 recipient=%4 radio=%5 waypoint=%6 observedAt=%7", proof.Report.MessageId, route.MessageId, proof.Source.Id, unit.Id, unit.Radio, unit.Waypoint, unit.Assignment.ObservedAt); + } + int Tick(float now) + { + if (m_Stopped) return -1; + if (!Enabled() || s_Active != this || !m_Mode || !m_Mode.Active() || !m_HQ || now > m_Deadline || m_Failed) { Check(false, "bounded active evidence context: " + m_Failure); return -1; } + if (!m_Started) + { + if (!m_HQ.ERR_ProbeSquadsReady()) return 0; + array guns = {}; m_HQ.Mortars().AppendGuns(guns); + foreach (IEntity gun : guns) { ERR_MortarBattery battery = m_HQ.Mortars().FindGun(gun); if (!battery || !battery.StartupActivated || !battery.Operational() || !m_HQ.MortarConnected(battery.Group)) return 0; } + if (!Check(Arrange(), "original physical force, RTOs and canonical prisoner captured before arranged sighting")) return -1; + return 0; + } + if (!Canonical() || !UnchangedForces()) { Check(false, "canonical player and all original physical group/actor identities retained without added force"); return -1; } + if (now >= m_NextDiagnostic) + { + PrintFormat("ERR HQ RESPONSE PROOF: observed source reports=%1; %2", m_Reports.Count(), m_HQ.ERR_ProbePerception()); m_NextDiagnostic = now + 10000; + } + foreach (ERR_NativeResponseLineage proof : m_Reports) + { + if (!proof.Recipient || !proof.MovingActor) continue; + if (proof.Recipient.Waypoint != proof.Waypoint || !proof.Recipient.Assignment || proof.Recipient.Assignment.MessageId != proof.Report.MessageId) continue; + ERR_NativeResponseJournal uplink = m_Journal.Get(proof.Report.MessageId); + ERR_NativeResponseJournal downlink = m_Journal.Get(proof.DeliveryId); + if (!uplink || !downlink || !uplink.Report || !uplink.Transmit || !uplink.HQReceive || !downlink.HQTransmit || !downlink.UnitReceive || !downlink.Delivered) continue; + if (proof.Recipient.Group.GetCurrentWaypoint() != proof.Waypoint || vector.DistanceXZ(proof.MovingActor.GetOrigin(), proof.DeliveredOrigin) < 3) continue; + if (vector.DistanceXZ(proof.MovingActor.GetOrigin(), proof.Report.Position) >= vector.DistanceXZ(proof.DeliveredOrigin, proof.Report.Position) - 1) continue; + if (!Check(proof.SourceRadio && proof.RecipientRadio && m_HQ.ERR_ProbeUniqueAssignments(), "actual sighting/report/uplink/HQ receipt/downlink journal lineage reaches distinct original infantry with bounded unique waypoints")) return -1; + if (!Check(UnchangedForces(), "original recipient physically moves toward its native Search waypoint with no replacement or additional force")) return -1; + Stop(); return 1; + } + return 0; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_Protected && m_Damage) m_Damage.EnableDamageHandling(m_DamageWasEnabled); + m_Protected = false; + if (s_Active == this) s_Active = null; + } + void ~ERR_NativeHQResponseProof() { Stop(); } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c new file mode 100644 index 0000000..74516fd --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c @@ -0,0 +1,10 @@ +#ifdef WORKBENCH +modded class ERR_MortarSystem +{ + ERR_MortarBattery ERR_ProbeBattery() + { + if (m_Batteries.Count() != 1) return null; + return m_Batteries[0]; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c new file mode 100644 index 0000000..c237258 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c @@ -0,0 +1,114 @@ +// Opt-in engine fixture: physical radios and production delivery routes only. +#ifdef WORKBENCH +modded class ERR_HQ +{ + vector ERR_ProbeResponseOrigin() + { + foreach (ERR_HQUnit unit : m_Units) + if (!unit.ReservedForSupport && unit.Group) return unit.Group.GetOrigin() + "0 0 20"; + return vector.Zero; + } + bool ERR_ProbeDeliveredResponse() + { + foreach (ERR_HQUnit unit : m_Units) + if (unit.Assignment && unit.Waypoint && unit.Group != unit.Assignment.Source) return true; + return false; + } + bool ERR_ProbeUniqueAssignments() + { + array waypoints = {}; + foreach (ERR_HQUnit unit : m_Units) + { + if (!unit.Waypoint) continue; + if (!unit.Assignment || waypoints.Contains(unit.Waypoint)) return false; + waypoints.Insert(unit.Waypoint); + } + return waypoints.Count() > 0 && Assigned() <= m_Mode.Settings().Get("supportSquadLimit"); + } + string ERR_ProbePerception() + { + int targets, sightings, radios; + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Radio) radios++; + if (!unit.Utility) continue; + array samples = {}; + ERR_HQObservation.Gather(unit.Utility, GetGame().GetWorld().GetWorldTime(), samples); + sightings += samples.Count(); + if (unit.Utility.m_Perception) targets += unit.Utility.m_Perception.m_aTargets.Count(); + } + return string.Format("%1; radios=%2 targets=%3 fresh visual samples=%4", Status(), radios, targets, sightings); + } + ERR_HQRoute ERR_ProbeRoute(IEntity carrier = null, bool downlink = false) + { + if (carrier) return m_Network.Route(carrier, downlink); + foreach (ERR_HQUnit unit : m_Units) + if (unit.Radio) return m_Network.Route(unit.Radio, downlink); + return null; + } + bool ERR_ProbeSquadsReady() + { + int infantry; + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.ReservedForSupport) continue; + infantry++; + if (!unit.Group || ERR_HQRadio.Capability(unit.Radio) != 2) return false; + array agents = {}; + unit.Group.GetAgents(agents); + if (agents.Count() != 6) return false; + } + return infantry == 6; + } +} + +class ERR_NativeRadioProbe +{ + protected ref ERR_HQRoute m_Route; + protected IEntity m_Carrier; + protected int m_Step; + + int Tick(ERR_HQ hq, float now) + { + if (!hq) return -1; + if (m_Step == 0) + { + if (!hq.ERR_ProbeSquadsReady()) return 0; + Print("ERR SMOKE PASS: six physical six-person squads each have a manpack operator"); + m_Route = hq.ERR_ProbeRoute(); + if (!m_Route || m_Route.Nodes.IsEmpty()) return -1; + m_Carrier = m_Route.Nodes[0].Carrier; + m_Route.MessageId = hq.Journal().Message(); + m_Step = 1; + } + int result = m_Route.Advance(now, hq.Journal()); + if (result == 0) return 0; + if (m_Step == 3) + { + if (result >= 0) return -1; + Print("ERR SMOKE PASS: removing receiving manpack interrupts an in-flight HQ order"); + return 1; + } + if (result < 0) return -1; + if (m_Step == 1) Print("ERR SMOKE PASS: physical manpack uplink delivers to HQ"); + if (m_Step == 2) Print("ERR SMOKE PASS: HQ downlink delivers to a physical receiver"); + m_Route = hq.ERR_ProbeRoute(m_Carrier, true); + if (!m_Route || m_Route.Nodes.IsEmpty()) return -1; + m_Route.MessageId = hq.Journal().Message(); + m_Step++; + if (m_Step == 3) + { + // Start HQ transmission, then remove the actual receiving equipment. + if (m_Route.Advance(now, hq.Journal()) != 0) return -1; + IEntity receiver = m_Route.Nodes[0].Carrier; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(receiver.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) return -1; + array items = {}; + inventory.GetItems(items); + foreach (IEntity item : items) + if (item && item.FindComponent(BaseRadioComponent)) SCR_EntityHelper.DeleteEntityAndChildren(item); + } + return 0; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c new file mode 100644 index 0000000..933dd7f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c @@ -0,0 +1,579 @@ +// Explicit, local Workbench diagnostic only. Never compiled into game/server builds. +#ifdef WORKBENCH +modded class ERR_GameMode +{ + protected bool m_ERRTestPatrolHQ; + protected ref ERR_NativePatrolProbe m_ERRHQPatrolMovement; + protected ref ERR_NativePatrolHQProbe m_ERRHQPatrolOrder; + protected int m_ERRSmokeStep; + protected float m_ERRSmokeDeadline; + protected float m_ERRSmokeWait; + protected IEntity m_ERRSmokePlayer; + protected BaseDoorComponent m_ERRGate; + protected ERR_LocationComponent m_ERRSmokeRadio; + protected bool m_ERRSmokeDone; + protected bool m_ERRTestLostHelicopter; + protected bool m_ERRTestPlayerDeath; + protected bool m_ERRTestRadioNetwork; + protected bool m_ERRTestHQResponse; + protected bool m_ERRTestMortar; + protected bool m_ERRTestMortarFire; + protected bool m_ERRTestMapOwnership; + protected bool m_ERRTestAircraftControl; + protected bool m_ERRTestAircraftCancel; + protected bool m_ERRTestAircraftTranslate; + protected ref ERR_NativeAircraftControlProbe m_ERRAircraftControl; + protected ref ERRM_NativeMapOwnershipProbe m_ERRMapOwnership; + protected bool m_ERRTestMortarSalvo; + protected ref ERR_NativeMortarSalvoProbe m_ERRMortarSalvo; + protected bool m_ERRTestMortarCourier; + protected ref ERR_NativeMortarCourierProbe m_ERRMortarCourier; + protected bool m_ERRTestMortarTransfer; + protected ref ERR_NativeMortarTransferProbe m_ERRMortarTransfer; + protected ref ERR_NativeMortarFiringProbe m_ERRMortarFire; + protected float m_ERRNextProbeLog; + protected ref ERR_NativeRadioProbe m_ERRRadioProbe; + protected ref ERR_NativeHQResponseProof m_ERRHQResponseProof; + protected ref array m_ERRCacheFolders = {}; + + protected override void EOnInit(IEntity owner) + { + super.EOnInit(owner); + string enabled; + if (SCR_Global.IsEditMode() || !Replication.IsServer() || !System.GetCLIParam("errSmoke", enabled) || enabled != "1") return; + string outcome; + m_ERRTestLostHelicopter = System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "lost-helicopter"; + m_ERRTestRadioNetwork = outcome == "radio-network"; + m_ERRTestHQResponse = outcome == "hq-response"; + m_ERRTestMortar = outcome == "mortar-inventory"; + m_ERRTestMapOwnership = outcome == "map-ownership"; + m_ERRTestAircraftCancel = outcome == "aircraft-cancel"; + m_ERRTestAircraftTranslate = outcome == "aircraft-translate"; + m_ERRTestAircraftControl = outcome == "aircraft-control" || m_ERRTestAircraftCancel || m_ERRTestAircraftTranslate; + m_ERRTestMortarFire = outcome == "mortar-fire" || outcome == "mortar-expiry"; + m_ERRTestMortarCourier = outcome == "mortar-courier"; + m_ERRTestMortarSalvo = outcome == "mortar-salvo" || outcome == "mortar-refresh"; + m_ERRTestMortarTransfer = outcome == "mortar-transfer"; + m_ERRTestPatrolHQ = outcome == "patrol-hq"; + m_ERRTestPlayerDeath = outcome == "player-death" || m_ERRTestRadioNetwork || m_ERRTestHQResponse || m_ERRTestMortar; + m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 150000; + if (m_ERRTestAircraftControl) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 330000; + if (m_ERRTestMortarCourier) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 450000; + if (m_ERRTestMortarTransfer) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 330000; + if (m_ERRTestMortarSalvo) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 330000; + if (m_ERRTestMortarFire) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 330000; + if (m_ERRTestPatrolHQ) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 420000; + OnStop().Insert(ERR_StopHQPatrol); + OnPhaseChanged().Insert(ERR_SmokePhase); + GetGame().GetCallqueue().CallLater(ERR_SmokeTick, 500, true); + Print("ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate"); + } + + protected bool ERR_Check(bool condition, string name) + { + if (condition) { Print("ERR SMOKE PASS: " + name); return true; } + ERR_StopHQPatrol(); + Print("ERR SMOKE FAIL: " + name, LogLevel.ERROR); + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + return false; + } + protected void ERR_StopHQPatrol() + { + if (m_ERRMapOwnership) m_ERRMapOwnership.Stop(); + if (m_ERRAircraftControl) m_ERRAircraftControl.Stop(); + if (m_ERRHQResponseProof) m_ERRHQResponseProof.Stop(); + if (m_ERRMortarSalvo) m_ERRMortarSalvo.Stop(); + if (m_ERRMortarCourier) m_ERRMortarCourier.Stop(); + if (m_ERRMortarTransfer) m_ERRMortarTransfer.Stop(); + if (m_ERRMortarFire) m_ERRMortarFire.Stop(); + if (m_ERRHQPatrolMovement) m_ERRHQPatrolMovement.Stop(); + if (m_ERRHQPatrolOrder) m_ERRHQPatrolOrder.Stop(); + } + protected void ERR_MovePlayer(vector position) + { + vector transform[4]; + m_ERRSmokePlayer.GetWorldTransform(transform); + transform[3] = ERR_Actors.Ground(position); + ChimeraCharacter.Cast(m_ERRSmokePlayer).Teleport(transform); + } + protected ERR_UnlockPrisonAction ERR_FindLock(IEntity entity) + { + BaseActionsManagerComponent manager = BaseActionsManagerComponent.Cast(entity.FindComponent(BaseActionsManagerComponent)); + if (manager) + { + array actions = {}; + manager.GetActionsList(actions); + foreach (BaseUserAction action : actions) + { + ERR_UnlockPrisonAction lock = ERR_UnlockPrisonAction.Cast(action); + if (lock) return lock; + } + } + IEntity child = entity.GetChildren(); + while (child) + { + ERR_UnlockPrisonAction lock = ERR_FindLock(child); + if (lock) return lock; + child = child.GetSibling(); + } + return null; + } + protected void ERR_SmokePhase(ERR_Phase previous, ERR_Phase current) + { + if (m_ERRSmokeDone || !ERR_MissionRules.Terminal(current)) return; + if (m_ERRTestAircraftControl) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 221, "actual aircraft controller completed before explicit fixture reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + ERR_StopHQPatrol(); + if (m_ERRTestAircraftCancel) + Print("ERR SMOKE COMPLETE: actual airborne aircraft cancellation retains inputs through settled contact landing and engine-off; isolated mechanism, not HQ dispatch"); + else if (m_ERRTestAircraftTranslate) + Print("ERR SMOKE COMPLETE: actual aircraft controller immutable target translation, observed target hold and contact landing; bounded mechanism, not route support or HQ dispatch"); + else Print("ERR SMOKE COMPLETE: actual aircraft controller and post-spawn qualification, powered hover and contact landing; isolated physical mechanism, not HQ dispatch"); + return; + } + if (m_ERRTestMapOwnership) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 201, "native map ownership probe cleaned up before explicit reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + ERR_StopHQPatrol(); + Print("ERR SMOKE COMPLETE: native replacement map/config/root ownership and spare deletion; camera authorization observed, render flag not measured"); + return; + } + if (m_ERRTestMortarSalvo) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 191, "native configured salvo and unchanged-report replay observation complete before reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + ERR_StopHQPatrol(); + Print("ERR SMOKE COMPLETE: native full configured mortar salvo, exact original ammunition and unchanged-report replay refusal; fixture reset requested"); + return; + } + if (m_ERRTestMortarCourier) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 181, "native finite courier reached an exhausted battery before explicit reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + ERR_StopHQPatrol(); + Print("ERR SMOKE COMPLETE: native finite courier, real supply uplink/downlink, original patrol walking and exact physical shell delivery; original 27 shells sequestered in fixture boxes; reset requested"); + return; + } + if (m_ERRTestMortarTransfer) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 161, "native exact shell transfers and original-owner restoration complete before explicit reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + ERR_StopHQPatrol(); + Print("ERR SMOKE COMPLETE: native exact mortar inventory transfer, accepted-operation cancellation and original-owner restoration; radio bypassed; fixture reset requested"); + return; + } + if (m_ERRTestMortarFire) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 151, "native mortar first shot and stop complete before explicit reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + ERR_StopHQPatrol(); + Print("ERR SMOKE COMPLETE: native HQ radio mortar projectile and configured cancellation/expiry; fixture reset requested"); + return; + } + if (m_ERRTestPatrolHQ) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 133, "HQ patrol preemption and physical resumption before explicit reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + Print("ERR SMOKE COMPLETE: native HQ patrol preemption and physical resumption"); + return; + } + if (m_ERRTestPlayerDeath) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 91, "death exhausts round life and reaches defeat after spectator grace")) return; + } + else if (m_ERRTestLostHelicopter) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 8, "lost extraction helicopter causes defeat")) return; + } + else if (!ERR_Check(current == ERR_Phase.VICTORY && m_ERRSmokeStep == 7, "scripted escape reaches victory after physical vehicle occupancy")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + PrintFormat("ERR SMOKE COMPLETE: terminal=%1 lostHelicopterCase=%2 playerDeathCase=%3", current, m_ERRTestLostHelicopter, m_ERRTestPlayerDeath); + GetGame().GetCallqueue().CallLater(ERR_EndScreenshot, 4000); + } + protected bool ERR_CheckRoster() + { + ERR_PlayerRoster roster = new ERR_PlayerRoster(); + UUID first = "00e77100-0000-0000-0000-000000000101"; + UUID second = "00e77100-0000-0000-0000-000000000202"; + if (!ERR_Check(roster.Bind(101, first) && roster.CanEnter(101, ERR_Phase.PRISON), "new identity may enter prison")) return false; + roster.Spawned(101, m_ERRSmokePlayer); + if (!ERR_Check(!roster.CanEnter(101, ERR_Phase.PRISON), "spawn consumes identity life")) return false; + roster.Disconnect(101); + if (!ERR_Check(roster.HasSurvivor() && !roster.Get(101), "disconnect retains living actor and clears connection")) return false; + if (!ERR_Check(roster.Bind(202, first) && !roster.CanEnter(202, ERR_Phase.PRISON), "reconnected identity retains spent life")) return false; + if (!ERR_Check(!roster.Bind(303, first), "duplicate active identity rejected")) return false; + if (!ERR_Check(roster.Bind(101, second) && roster.CanEnter(101, ERR_Phase.RADIO_DEFENCE) && !roster.CanEnter(101, ERR_Phase.EXTRACTION), "recycled connection receives independent life and extraction admission policy")) return false; + return true; + } + protected bool ERR_CheckCompanionCommands() + { + array replies = {}; + array commands = {"hq interval show", "hq squads show", "hq radius show", "intel carrying show", "intel reveal show"}; + array keys = {"reportIntervalSeconds", "supportSquadLimit", "responseRadiusMetres", "aiIntelChancePercent", "intelRevealChancePercent"}; + for (int i = 0; i < commands.Count(); i++) + { + Admin().Execute(this, true, commands[i], replies); + if (!ERR_Check(replies.Count() == 1 && replies[0] == keys[i] + "=" + Settings().Get(keys[i]).ToString(), "companion command retained: " + commands[i])) return false; + } + Admin().Execute(this, false, "hq log", replies); + if (!ERR_Check(replies.Count() == 1 && replies[0] == "Administrator access required.", "companion journal is behind Core admin authorization")) return false; + Admin().Execute(this, true, "hq show", replies); + ERR_HQ hq = ERR_HQ.Cast(Command()); + if (!ERR_Check(hq && replies.Count() == 1 && replies[0] == hq.Status(), "companion HQ status uses the shared command service")) return false; + return true; + } + protected void ERR_PrisonScreenshot() { System.MakeScreenshot("$logs:err-prison"); } + protected void ERR_EndScreenshot() { System.MakeScreenshot("$logs:err-result"); } + protected void ERR_SmokeTick() + { + float now = GetWorld().GetWorldTime(); + if (m_ERRSmokeDone) return; + if (now > m_ERRSmokeDeadline) { ERR_Check(false, "timeout at step " + m_ERRSmokeStep.ToString()); return; } + if (now < m_ERRSmokeWait) return; + if (m_ERRSmokeStep == 220) + { + int result = m_ERRAircraftControl.Tick(now); + if (result < 0) { ERR_Check(false, "native actual aircraft controller fixture"); return; } + if (result == 1) { m_ERRSmokeStep = 221; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRSmokeStep == 200) + { + int result = m_ERRMapOwnership.Tick(now); + if (result < 0) { ERR_Check(false, "native map ownership fixture"); return; } + if (result == 1) { m_ERRSmokeStep = 201; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRSmokeStep == 190) + { + int result = m_ERRMortarSalvo.Tick(now); + if (result < 0) { ERR_Check(false, "native complete mortar salvo fixture; inspect source diagnostics"); return; } + if (result == 1) { m_ERRSmokeStep = 191; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRSmokeStep == 180) + { + int result = m_ERRMortarCourier.Tick(now); + if (result < 0) { ERR_Check(false, "native finite courier fixture"); return; } + if (result == 1) { m_ERRSmokeStep = 181; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRSmokeStep == 160) + { + int result = m_ERRMortarTransfer.Tick(now); + if (result < 0) { ERR_Check(false, "native mortar exact-shell transfer fixture"); return; } + if (result == 1) { m_ERRSmokeStep = 161; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRSmokeStep == 150) + { + int result = m_ERRMortarFire.Tick(now); + if (result < 0) { ERR_Check(false, "native mortar firing probe failed; see diagnostics"); return; } + if (result == 1) { m_ERRSmokeStep = 151; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRSmokeStep == 130 || m_ERRSmokeStep == 132) + { + int result = m_ERRHQPatrolMovement.Tick(now); + if (result < 0) { ERR_StopHQPatrol(); GetGame().GetCallqueue().Remove(ERR_SmokeTick); return; } + if (result == 1) + { + if (m_ERRSmokeStep == 130) { m_ERRHQPatrolOrder = new ERR_NativePatrolHQProbe(this); m_ERRSmokeStep = 131; } + else { m_ERRSmokeStep = 133; Transition(ERR_Phase.DEFEAT); } + } + return; + } + if (m_ERRSmokeStep == 131) + { + int result = m_ERRHQPatrolOrder.Tick(now); + if (result < 0) { ERR_StopHQPatrol(); GetGame().GetCallqueue().Remove(ERR_SmokeTick); return; } + if (result == 1) { m_ERRHQPatrolMovement = new ERR_NativePatrolProbe(this); m_ERRSmokeStep = 132; } + return; + } + if (m_ERRSmokeStep == 0) + { + array players = {}; + ERR_Actors.Players(players, true); + if (players.Count() != 1 || Phase() != ERR_Phase.PRISON) return; + m_ERRSmokePlayer = players[0]; + if (!ERR_CheckRoster() || !ERR_NativeContractsProbe.Run(this, m_ERRSmokePlayer) || !ERR_CheckCompanionCommands()) return; + if (m_ERRTestAircraftControl) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRAircraftControl = new ERR_NativeAircraftControlProbe(this); + m_ERRSmokeStep = 220; + return; + } + if (m_ERRTestPatrolHQ) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRHQPatrolMovement = new ERR_NativePatrolProbe(this); + m_ERRSmokeStep = 130; + return; + } + if (m_ERRTestMapOwnership) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRMapOwnership = new ERRM_NativeMapOwnershipProbe(); + m_ERRSmokeStep = 200; + return; + } + if (m_ERRTestMortarSalvo) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRMortarSalvo = new ERR_NativeMortarSalvoProbe(this); + m_ERRSmokeStep = 190; + return; + } + if (m_ERRTestMortarCourier) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRMortarCourier = new ERR_NativeMortarCourierProbe(this); + m_ERRSmokeStep = 180; + return; + } + if (m_ERRTestMortarTransfer) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRMortarTransfer = new ERR_NativeMortarTransferProbe(this); + m_ERRSmokeStep = 160; + return; + } + if (m_ERRTestMortarFire) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRMortarFire = new ERR_NativeMortarFiringProbe(this); + m_ERRSmokeStep = 150; + return; + } + if (m_ERRTestMortar) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRSmokeStep = 120; + return; + } + if (m_ERRTestHQResponse) + { + m_ERRHQResponseProof = new ERR_NativeHQResponseProof(this, m_ERRSmokePlayer); + m_ERRSmokeStep = 110; + return; + } + if (m_ERRTestRadioNetwork) + { + m_ERRRadioProbe = new ERR_NativeRadioProbe(); + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRSmokeStep = 100; + return; + } + if (m_ERRTestPlayerDeath) + { + m_ERRSmokeStep = 9; + SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent)).Kill(Instigator.CreateInstigator(m_ERRSmokePlayer)); + m_ERRSmokeWait = now + 4000; + return; + } + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + if (!ERR_Check(vector.DistanceXZ(m_ERRSmokePlayer.GetOrigin(), PrisonPosition()) < 5, "initial prisoner position")) return; + foreach (ERR_LocationComponent location : m_Locations) + if (location.Kind() == ERR_LocationKind.RADIO) m_ERRSmokeRadio = location; + if (!ERR_Check(m_ERRSmokeRadio && ERR_Actors.Alive(ExtractionVehicle()), "radio and extraction vehicle exist")) return; + ERR_UnlockPrisonAction lock; + foreach (IEntity tracked : m_OwnedEntities) + { + if (tracked) lock = ERR_FindLock(tracked); + if (lock) break; + } + if (!ERR_Check(lock != null, "authored gate exposes lock action")) return; + ERR_MovePlayer(lock.GetOwner().GetOrigin() + "1 0 1"); + vector gateLow, gateHigh; + lock.GetOwner().GetWorldBounds(gateLow, gateHigh); + PrintFormat("ERR GEOMETRY: gate low=%1 high=%2", gateLow, gateHigh); + IEntity wall = lock.GetOwner().GetParent().GetChildren(); + while (wall) + { + vector wallLow, wallHigh; + wall.GetWorldBounds(wallLow, wallHigh); + PrintFormat("ERR GEOMETRY: child origin=%1 low=%2 high=%3", wall.GetOrigin(), wallLow, wallHigh); + wall = wall.GetSibling(); + } + GetGame().GetCallqueue().CallLater(ERR_PrisonScreenshot, 2000); + if (!ERR_Check(lock.CanBePerformedScript(m_ERRSmokePlayer), "lock permits prisoner")) return; + m_ERRGate = BaseDoorComponent.Cast(lock.GetOwner().FindComponent(BaseDoorComponent)); + lock.PerformAction(lock.GetOwner(), m_ERRSmokePlayer); + if (!ERR_Check(Phase() == ERR_Phase.RADIO_SEARCH, "lock action advances mission")) return; + array cacheStock = {}; + ERR_Inventory.Items(InventoryStorageManagerComponent.Cast(Sites().Find("everon-supply-1").Container.FindComponent(InventoryStorageManagerComponent)), cacheStock); + foreach (IEntity tracked : cacheStock) + { + if (tracked && tracked.GetPrefabData() && tracked.GetPrefabData().GetPrefabName() == ERR_Resources.ObjectiveDocument()) m_ERRCacheFolders.Insert(tracked); + } + if (!ERR_Check(m_ERRCacheFolders.Count() == 2, "two guaranteed physical cache documents")) return; + if (!ERR_Check(m_Settings.Set("aiIntelChancePercent", 0), "test does not rely on random intel")) return; + if (!ERR_Check(m_Settings.Set("radioDefenceSeconds", 30), "isolated test profile defence duration")) return; + m_ERRSmokeStep = 1; + } + else if (m_ERRSmokeStep == 1 || m_ERRSmokeStep == 2) + { + if (m_ERRSmokeStep == 2 && !ERR_Check(m_ERRGate && m_ERRGate.IsOpen() && m_ERRGate.CanCharacterPass(0.6), "unlocked gate physically permits passage")) return; + ERR_MovePlayer(Sites().Find("everon-supply-1").Container.GetOrigin() + "0 0 2"); + SCR_InventoryStorageManagerComponent inventory = SCR_InventoryStorageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_InventoryStorageManagerComponent)); + InventoryStorageManagerComponent source = InventoryStorageManagerComponent.Cast(Sites().Find("everon-supply-1").Container.FindComponent(InventoryStorageManagerComponent)); + BaseInventoryStorageComponent destination = inventory.FindStorageForItem(m_ERRCacheFolders[m_ERRSmokeStep - 1]); + if (!ERR_Check(destination && source.TryMoveItemToStorage(m_ERRCacheFolders[m_ERRSmokeStep - 1], destination), "authored cache document recovered into inventory")) return; + m_ERRSmokeStep++; + m_ERRSmokeWait = now + 2500; + } + else if (m_ERRSmokeStep == 3) + { + if (!ERR_Check(m_ERRSmokeRadio.Knowledge() == 2, "carried intel identifies radio through intel service")) return; + if (!ERR_Check(!TuneRadio(m_ERRSmokePlayer, m_ERRSmokeRadio), "radio rejects distant player")) return; + ERR_MovePlayer(m_ERRSmokeRadio.Position() + "2 0 0"); + m_ERRSmokeStep = 30; + m_ERRSmokeWait = now + 1000; + } + else if (m_ERRSmokeStep == 30) + { + PrintFormat("ERR SMOKE: radio=%1 player=%2", m_ERRSmokeRadio.Position(), m_ERRSmokePlayer.GetOrigin()); + if (!ERR_Check(TuneRadio(m_ERRSmokePlayer, m_ERRSmokeRadio), "identified radio starts defence")) return; + m_ERRSmokeStep = 4; + m_ERRSmokeWait = now + 3000; + } + else if (m_ERRSmokeStep == 4) + { + if (!ERR_Check(DefenceOccupied(), "occupied defence timer running")) return; + ERR_MovePlayer(m_ERRSmokeRadio.Position() + "90 0 0"); + m_ERRSmokeStep = 5; + m_ERRSmokeWait = now + 2500; + } + else if (m_ERRSmokeStep == 5) + { + if (!ERR_Check(!DefenceOccupied() && Phase() == ERR_Phase.RADIO_DEFENCE, "leaving area resets defence")) return; + ERR_MovePlayer(m_ERRSmokeRadio.Position() + "2 0 0"); + m_ERRSmokeStep = 6; + m_ERRSmokeWait = now + 33000; + } + else if (m_ERRSmokeStep == 6) + { + if (!ERR_Check(Phase() == ERR_Phase.EXTRACTION, "continuous occupied defence completes")) return; + if (m_ERRTestLostHelicopter) + { + m_ERRSmokeStep = 8; + ERR_Actors.DeleteSpawned(ExtractionVehicle()); + return; + } + CompartmentAccessComponent access = CompartmentAccessComponent.Cast(m_ERRSmokePlayer.FindComponent(CompartmentAccessComponent)); + BaseCompartmentSlot slot = access.FindFreeCompartment(ExtractionVehicle(), ECompartmentType.PILOT); + if (!ERR_Check(slot && access.GetInVehicle(ExtractionVehicle(), slot, true, -1, ECloseDoorAfterActions.INVALID, false), "boarding extraction vehicle")) return; + m_ERRSmokeStep = 7; + m_ERRSmokeWait = now + 3000; + } + else if (m_ERRSmokeStep == 120) + { + ERR_MortarBattery battery = ERR_MortarSystem.Get().ERR_ProbeBattery(); + if (!battery || !battery.StartupActivated) return; + if (!ERR_Check(battery.Operational() && battery.Group.GetAgentsCount() == 4, "authored physical mortar and four-person crew initialize")) return; + if (!ERR_Check(ERR_HQRadio.Capability(battery.RadioOperator) == 2, "mortar has a dedicated physical manpack operator")) return; + if (!ERR_Check(battery.CountShells() == 27, "mortar starts with exactly 27 physical HE shells")) return; + array agents = {}; + battery.Group.GetAgents(agents); + array intelCrew = {}; + foreach (AIAgent intelAgent : agents) + { + IEntity intelActor; + if (intelAgent) intelActor = intelAgent.GetControlledEntity(); + if (!ERR_Check(intelActor && !intelCrew.Contains(intelActor), "mortar Intel observation uses distinct actual crew actors")) return; + if (!ERR_Check(m_Intel && m_Intel.ERR_ProbeWasRolled(intelActor), "ready mortar crew actor reached its one optional Intel carrying roll")) return; + intelCrew.Insert(intelActor); + } + if (!ERR_Check(intelCrew.Count() == 4, "all four original ready physical crew reached Intel without forcing documents or changing carrying chance")) return; + foreach (AIAgent agent : agents) + { + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(agent.GetControlledEntity().FindComponent(InventoryStorageManagerComponent)); + array items = {}; + ERR_Inventory.Items(inventory, items); + foreach (IEntity item : items) + if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == ERR_MortarBattery.SHELL) SCR_EntityHelper.DeleteEntityAndChildren(item); + } + m_ERRSmokeStep = 121; + m_ERRSmokeWait = now + 15000; + } + else if (m_ERRSmokeStep == 121) + { + ERR_MortarBattery battery = ERR_MortarSystem.Get().ERR_ProbeBattery(); + if (!ERR_Check(battery.CountShells() == 0 && battery.TotalShots == 0, "depleted mortar inventory stays empty without fabricated ammunition")) return; + ERR_Actors.DeleteSpawned(battery.Gun); + ERR_Actors.DeleteSpawned(battery.Group); + m_ERRSmokeStep = 122; + m_ERRSmokeWait = now + 12000; + } + else if (m_ERRSmokeStep == 122) + { + ERR_MortarBattery battery = ERR_MortarSystem.Get().ERR_ProbeBattery(); + if (!ERR_Check(battery && !battery.Gun && !battery.Group && !battery.Operational(), "lost mortar and crew remain lost without replacement spawning")) return; + m_ERRSmokeStep = 9; + SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent)); + damage.EnableDamageHandling(true); + damage.Kill(Instigator.CreateInstigator(m_ERRSmokePlayer)); + m_ERRSmokeWait = now + 4000; + } + else if (m_ERRSmokeStep == 110) + { + int result = m_ERRHQResponseProof.Tick(now); + if (result < 0) { ERR_Check(false, "native HQ response evidence failed; inspect report lineage diagnostics"); return; } + if (result == 0) return; + m_ERRSmokeStep = 9; + SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent)); + damage.EnableDamageHandling(true); + damage.Kill(Instigator.CreateInstigator(m_ERRSmokePlayer)); + m_ERRSmokeWait = now + 4000; + } + else if (m_ERRSmokeStep == 100) + { + int result = m_ERRRadioProbe.Tick(ERR_HQ.Cast(Command()), now); + if (result == 0) return; + if (!ERR_Check(result == 1, "native radio delivery and interruption sequence")) return; + m_ERRSmokeStep = 9; + SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent)); + damage.EnableDamageHandling(true); + damage.Kill(Instigator.CreateInstigator(m_ERRSmokePlayer)); + m_ERRSmokeWait = now + 4000; + } + else if (m_ERRSmokeStep == 9) + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + if (!ERR_Check(!ERR_Actors.Alive(m_ERRSmokePlayer), "native damage kills prisoner")) return; + if (!ERR_Check(controller && controller.ERR_ObserverState() == ERR_ObserverReason.SPENT_LIFE, "death selects spectator without another life")) return; + if (!ERR_Check(controller.ERR_HasObserverCamera() && SCR_ManualCamera.Cast(GetGame().GetCameraManager().CurrentCamera()), "spectator camera activates after native death")) return; + m_ERRSmokeStep = 91; + } + else if (m_ERRSmokeStep == 7) + { + if (!ERR_Check(CompartmentAccessComponent.GetVehicleIn(m_ERRSmokePlayer) == ExtractionVehicle(), "physical extraction occupancy")) return; + // Controlled transport tests the boundary detector, not piloting skill. + ExtractionVehicle().SetOrigin(m_EscapeCenter + Vector(m_EscapeRadius + 100, 300, 0)); + m_ERRSmokeWait = now + 5000; + } + } + void ~ERR_GameMode() + { + if (GetGame()) + { + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + GetGame().GetCallqueue().Remove(ERR_PrisonScreenshot); + GetGame().GetCallqueue().Remove(ERR_EndScreenshot); + } + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c new file mode 100644 index 0000000..bc6fb76 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c @@ -0,0 +1,16 @@ +#ifndef WORKBENCH +modded class ArmaReforgerScripted +{ + override protected ResourceName ERR_DiagnosticHeader(string project) + { + if (project == "chat") return "{C1E20667DCE324ED}Missions/ERR_Everon.conf"; + return super.ERR_DiagnosticHeader(project); + } + + override protected string ERR_DiagnosticAddon(string project) + { + if (project == "chat") return "FA804F411BDDF2C6"; + return super.ERR_DiagnosticAddon(project); + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c new file mode 100644 index 0000000..2702220 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c @@ -0,0 +1,51 @@ +[WorkbenchPluginAttribute(name: "Validate Rereintroduced scenario", wbModules: {"WorldEditor"})] +class ERR_ValidateWorldPlugin : WorldEditorPlugin +{ + protected bool m_Obstructed; + protected bool CheckClearance(IEntity entity) + { + if (entity && entity.GetVObject()) m_Obstructed = true; + return !m_Obstructed; + } + override void Run() { Validate(); } + override void RunCommandline() { Validate(); } + protected void Validate() + { + WorldEditor editor = Workbench.GetModule(WorldEditor); + if (!editor) { Print("ERR VALIDATION: World Editor missing", LogLevel.ERROR); return; } + WorldEditorAPI api = editor.GetApi(); + if (!api) { Print("ERR VALIDATION: world API missing", LogLevel.ERROR); return; } + PrintFormat("ERR VALIDATION: prison terrain=%1, radio terrain=%2, extraction terrain=%3", api.GetTerrainSurfaceY(6090,7160), api.GetTerrainSurfaceY(6500,7200), api.GetTerrainSurfaceY(7000,7500)); + for (int dx = -6; dx <= 6; dx += 3) + for (int dz = -6; dz <= 6; dz += 3) + PrintFormat("ERR TERRAIN: x=%1 z=%2 y=%3", 6090 + dx, 7160 + dz, api.GetTerrainSurfaceY(6090 + dx, 7160 + dz)); + float bestSlope = 1000; + vector bestPosition; + for (int x = 5800; x <= 6200; x += 10) + { + for (int z = 6800; z <= 7200; z += 10) + { + float low = 10000; + float high = -10000; + for (int sx = -9; sx <= 9; sx += 3) + for (int sz = -15; sz <= 9; sz += 3) + { + float height = api.GetTerrainSurfaceY(x + sx, z + sz); + low = Math.Min(low, height); + high = Math.Max(high, height); + } + if (low > 5 && high - low < bestSlope) + { + m_Obstructed = false; + api.GetWorld().QueryEntitiesByAABB(Vector(x - 10, low + 0.1, z - 16), Vector(x + 10, high + 5, z + 10), CheckClearance); + if (m_Obstructed) continue; + bestSlope = high - low; + bestPosition = Vector(x, api.GetTerrainSurfaceY(x, z), z); + } + } + } + PrintFormat("ERR SITE CANDIDATE: position=%1 elevationRange=%2", bestPosition, bestSlope); + string play; + if (System.GetCLIParam("errPlay", play) && play == "1") editor.SwitchToGameMode(); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/addon.gproj b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/addon.gproj new file mode 100644 index 0000000..d2e277c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/chat/addon.gproj @@ -0,0 +1,12 @@ +GameProject { + ID "ERR_Chat" + GUID "FA804F411BDDF2C6" + TITLE "Escapists Rereintroduced - Chat" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + "5192138CB9D5B911" + "D31039C7C53E348A" + "9AAEE9041D79809E" + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/EveronSites.conf b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/EveronSites.conf new file mode 100644 index 0000000..e15dc4b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/EveronSites.conf @@ -0,0 +1,136 @@ +ERR_ScenarioDefinition { + MinimumRadioSources 2 + Sites { + ERR_SiteDefinition { + Id "everon-prison-1" + Label "Prison" + Kind 0 + Prefab "{BE6B8D56349038A6}Prefabs/ERR/Prison.et" + Position 6090 0 7160 + Guarded 1 + GuardOffset 35 0 0 + Container "{40986810D0B1F4AE}Prefabs/ERR/SupplyCache.et" + ContainerOffset -4 0 0 + Stock { + ERR_SiteStock { Prefab "{C0F7DD85A86B2900}Prefabs/Weapons/Handguns/PM/Handgun_PM.et" Count 5 } + ERR_SiteStock { Prefab "{8B853CDD11BA916E}Prefabs/Weapons/Magazines/Magazine_9x18_PM_8rnd_Ball.et" Count 8 } + ERR_SiteStock { Prefab "{13772C903CB5E4F7}Prefabs/Items/Equipment/Maps/Map_Paper_01/PaperMap_01_folded.et" Count 1 } + } + } + ERR_SiteDefinition { + Id "everon-supply-1" + Label "Southern supply cache" + Kind 4 + Prefab "{7C3D16C17C24D351}Prefabs/ERR/SupplySite.et" + Position 6150 0 7050 + Guarded 1 + GuardOffset 18 0 0 + Container "{40986810D0B1F4AE}Prefabs/ERR/SupplyCache.et" + ContainerOffset 0 0 0 + Stock { + ERR_SiteStock { Prefab "{FA5C25BF66A53DCF}Prefabs/Weapons/Rifles/AK74/Rifle_AK74.et" Count 8 } + ERR_SiteStock { Prefab "{BBB50A815A2F916B}Prefabs/Weapons/Magazines/Magazine_545x39_AK_30rnd_Ball.et" Count 16 } + ERR_SiteStock { Prefab "{C3F1FA1E2EC2B345}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et" Count 12 } + ERR_SiteStock { Prefab "{554159A6740C3F3E}Prefabs/ERR/ObjectiveDocument.et" Count 2 TargetId "everon-radio-1" } + } + RevealOnEscape 1 + } + ERR_SiteDefinition { + Id "everon-radio-1" + Label "Radio station" + DiscoverRadius 8 + Kind 1 + Prefab "{F7E7E3D6ACF0C860}Prefabs/ERR/Radio.et" + Position 6500 0 7200 + Guarded 1 + GuardOffset 30 0 0 + } + ERR_SiteDefinition { + Id "everon-extraction-1" + Label "Initial helicopter pickup site" + Kind 2 + Prefab "{033503110AC34EAC}Prefabs/ERR/Extraction.et" + Position 7000 0 7500 + Guarded 1 + GuardOffset 30 0 0 + } + ERR_SiteDefinition { + Id "everon-supply-2" + Label "Western supply cache" + Kind 4 + Prefab "{7C3D16C17C24D351}Prefabs/ERR/SupplySite.et" + Position 5960 0 7220 + Guarded 1 + GuardOffset 16 0 0 + Patrol { + ERR_SitePatrolPoint { Offset 18 0 0 } + ERR_SitePatrolPoint { Offset 18 0 24 } + ERR_SitePatrolPoint { Offset -6 0 24 } + ERR_SitePatrolPoint { Offset -6 0 0 } + } + Container "{40986810D0B1F4AE}Prefabs/ERR/SupplyCache.et" + DiscoverRadius 25 + RevealOnEscape 1 + Transport ERR_SiteTransport { + Prefab "{259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et" + Offset 0 0 -8 + Heading 180 + ClearanceRadius 4 + MaximumTerrainRange 1 + } + Stock { + ERR_SiteStock { Prefab "{FA5C25BF66A53DCF}Prefabs/Weapons/Rifles/AK74/Rifle_AK74.et" Count 4 } + ERR_SiteStock { Prefab "{BBB50A815A2F916B}Prefabs/Weapons/Magazines/Magazine_545x39_AK_30rnd_Ball.et" Count 8 } + ERR_SiteStock { Prefab "{C3F1FA1E2EC2B345}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et" Count 6 } + ERR_SiteStock { Prefab "{554159A6740C3F3E}Prefabs/ERR/ObjectiveDocument.et" Count 2 TargetId "everon-radio-1" } + } + } + ERR_SiteDefinition { + Id "everon-medical-1" + Label "Medical stash" + Kind 4 + Prefab "{7C3D16C17C24D351}Prefabs/ERR/SupplySite.et" + Position 6340 0 7400 + Guarded 0 + GuardOffset 16 0 0 + Container "{40986810D0B1F4AE}Prefabs/ERR/SupplyCache.et" + DiscoverRadius 25 + RevealOnEscape 0 + Stock { + ERR_SiteStock { Prefab "{C3F1FA1E2EC2B345}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et" Count 12 } + ERR_SiteStock { Prefab "{527D7C5D2E476BDC}Prefabs/Items/Medicine/SalineBag_01/SalineBag_USSR_01.et" Count 6 } + ERR_SiteStock { Prefab "{0D9A5DCF89AE7AA9}Prefabs/Items/Medicine/MorphineInjection_01/MorphineInjection_01.et" Count 6 } + ERR_SiteStock { Prefab "{13772C903CB5E4F7}Prefabs/Items/Equipment/Maps/Map_Paper_01/PaperMap_01_folded.et" Count 3 } + } + } + ERR_SiteDefinition { + Id "everon-outpost-1" + Label "Eastern guard outpost" + Kind 3 + Prefab "{7C3D16C17C24D351}Prefabs/ERR/SupplySite.et" + Position 6740 0 7300 + Guarded 1 + GuardOffset 16 0 0 + Patrol { + ERR_SitePatrolPoint { Offset 18 0 0 } + ERR_SitePatrolPoint { Offset 18 0 24 } + ERR_SitePatrolPoint { Offset -6 0 24 } + ERR_SitePatrolPoint { Offset -6 0 0 } + } + Container "{40986810D0B1F4AE}Prefabs/ERR/SupplyCache.et" + DiscoverRadius 35 + RevealOnEscape 0 + Stock { + ERR_SiteStock { Prefab "{FA5C25BF66A53DCF}Prefabs/Weapons/Rifles/AK74/Rifle_AK74.et" Count 2 } + ERR_SiteStock { Prefab "{BBB50A815A2F916B}Prefabs/Weapons/Magazines/Magazine_545x39_AK_30rnd_Ball.et" Count 10 } + ERR_SiteStock { Prefab "{243948B23D90BECB}Prefabs/Items/Equipment/Binoculars/Binoculars_B8/Binoculars_B8.et" Count 2 } + ERR_SiteStock { Prefab "{C3F1FA1E2EC2B345}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et" Count 4 } + } + Props { + ERR_SiteProp { Prefab "{4B6AC1D8701C35A1}Prefabs/ERR/FieldCover.et" Offset 0 0 -4 } + ERR_SiteProp { Prefab "{4B6AC1D8701C35A1}Prefabs/ERR/FieldCover.et" Offset -4 0 0 Angles 90 0 0 } + ERR_SiteProp { Prefab "{4B6AC1D8701C35A1}Prefabs/ERR/FieldCover.et" Offset 4 0 0 Angles 90 0 0 } + } + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/EveronSites.conf.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/EveronSites.conf.meta new file mode 100644 index 0000000..98c7363 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/EveronSites.conf.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{BC310DC0CD27F523}Configs/ERR/EveronSites.conf" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf new file mode 100644 index 0000000..bb80989 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf @@ -0,0 +1,24 @@ +SCR_EntityCatalogMultiList { + m_eEntityCatalogType VEHICLE + m_aMultiLists { + SCR_EntityCatalogMultiListEntry { + m_sIdentifier "Mission transport" + m_aEntities { + SCR_EntityCatalogEntry { + m_sEntityPrefab "{259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et" + m_aEntityDataList { + SCR_EntityCatalogEditorData { m_eValidEditorModes 33 } + SCR_EntityCatalogSpawnerData { m_eSlotTypes 24 } + } + } + SCR_EntityCatalogEntry { + m_sEntityPrefab "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et" + m_aEntityDataList { + SCR_EntityCatalogEditorData { m_eValidEditorModes 33 } + SCR_EntityCatalogSpawnerData { m_eSlotTypes VEHICLE_LARGE } + } + } + } + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta new file mode 100644 index 0000000..eeeb160 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{E4785D3AF1D043C2}Configs/ERR/Factions/MissionVehicles.conf" + Configurations { + ResourceClass PC {} + ResourceClass HEADLESS : PC {} + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/US.conf b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/US.conf new file mode 100644 index 0000000..8d454a0 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/US.conf @@ -0,0 +1,277 @@ +SCR_Faction : "{E7B7EA4823DD81F0}Configs/Factions/BLUFOR.conf" { + FactionKey "US" + UIInfo SCR_FactionUIInfo "{528C961236B7DCD3}" { + Name "#AR-Faction_US" + Icon "{EB7F65DBC9392557}UI/Textures/Editor/EditableEntities/Factions/EditableEntity_Faction_USA.edds" + m_sNameUpper "#AR-Faction_US-UC" + } + "Identity of soldiers" FactionIdentity "{570D128F4022EF5A}" : "{B600946E9ACC17C2}Configs/Identities/FactionIdentity_US.conf" { + } + "Radio encryption key" "chickenNuggets" + m_sFactionFlag "{46FB2FB2C2125A3C}UI/Textures/Flags/US-flag-base-3it.edds" + m_FactionFlagMaterial "{610803CC3F3D6649}Assets/Props/Fabric/Flags/Data/Flag_1_2_USA.emat" + m_FactionLabel FACTION_US + m_CallsignInfo SCR_FactionCallsignInfo "{5DA0F2A6677ADA9E}" : "{CB7824D572DD0D5C}Configs/Callsigns/Callsigns_US.conf" { + } + m_iFactionRadioFrequency 48000 + m_aEntityCatalogs { + SCR_EntityCatalogMultiList "{5C68A0EE815FA292}" : "{B56E8B4D4B195559}Configs/EntityCatalog/US/Characters_EntityCatalog_US.conf" { + } + SCR_EntityCatalogMultiList "{5C9E82F29B327997}" : "{E4785D3AF1D043C2}Configs/ERR/Factions/MissionVehicles.conf" { + } + SCR_EntityCatalogMultiList "{5C68A0EE8B97CA50}" : "{4E70E7C4C2C17D4A}Configs/EntityCatalog/US/Groups_EntityCatalog_US.conf" { + } + SCR_EntityCatalog "{5C68A0EEB7DB3E84}" : "{0E4B62F186F97C43}Configs/EntityCatalog/US/WeaponTripod_EntityCatalog_US.conf" { + } + SCR_EntityCatalogMultiList "{5C68A0EEB3F124F9}" : "{5F7EC52FC40A03E2}Configs/EntityCatalog/US/InventoryItems_EntityCatalog_US.conf" { + } + SCR_EntityCatalog "{5C9EDDD37394AD40}" : "{0BF36EFF9FFAF92B}Configs/EntityCatalog/US/SupplyContainerItems_EntityCatalog_US.conf" { + } + } + m_aFlagNames +{ + } + m_aBaseCallsigns { + SCR_MilitaryBaseCallsign "{5C90D92F493E764B}" { + m_sCallsign "#AR-Campaign_PointAlabama" + m_sCallsignShort "#AR-Comm_Variable_Base_Alabama_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Alabama_US_UC" + m_iSignalIndex 0 + } + SCR_MilitaryBaseCallsign "{5C90D92F49F79967}" { + m_sCallsign "#AR-Campaign_PointAlaska" + m_sCallsignShort "#AR-Comm_Variable_Base_Alaska_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Alaska_US_UC" + m_iSignalIndex 1 + } + SCR_MilitaryBaseCallsign "{5C90D92F482DA59B}" { + m_sCallsign "#AR-Campaign_PointArizona" + m_sCallsignShort "#AR-Comm_Variable_Base_Arizona_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Arizona_US_UC" + m_iSignalIndex 2 + } + SCR_MilitaryBaseCallsign "{5C90D92F483330D2}" { + m_sCallsign "#AR-Campaign_PointArkansas" + m_sCallsignShort "#AR-Comm_Variable_Base_Arkansas_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Arkansas_US_UC" + m_iSignalIndex 3 + } + SCR_MilitaryBaseCallsign "{5C90D92F48170DA8}" { + m_sCallsign "#AR-Campaign_PointCalifornia" + m_sCallsignShort "#AR-Comm_Variable_Base_California_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_California_US_UC" + m_iSignalIndex 4 + } + SCR_MilitaryBaseCallsign "{5C90D92F487834E8}" { + m_sCallsign "#AR-Campaign_PointColorado" + m_sCallsignShort "#AR-Comm_Variable_Base_Colorado_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Colorado_US_UC" + m_iSignalIndex 5 + } + SCR_MilitaryBaseCallsign "{5C90D92F48410A86}" { + m_sCallsign "#AR-Campaign_PointConnecticut" + m_sCallsignShort "#AR-Comm_Variable_Base_Connecticut_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Connecticut_US_UC" + m_iSignalIndex 6 + } + SCR_MilitaryBaseCallsign "{5C90D92F48A4E31F}" { + m_sCallsign "#AR-Campaign_PointDelaware" + m_sCallsignShort "#AR-Comm_Variable_Base_Delaware_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Delaware_US_UC" + m_iSignalIndex 7 + } + SCR_MilitaryBaseCallsign "{5C90D92F488C6B57}" { + m_sCallsign "#AR-Campaign_PointFlorida" + m_sCallsignShort "#AR-Comm_Variable_Base_Florida_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Florida_US_UC" + m_iSignalIndex 8 + } + SCR_MilitaryBaseCallsign "{5C90D92F4896F764}" { + m_sCallsign "#AR-Campaign_PointGeorgia" + m_sCallsignShort "#AR-Comm_Variable_Base_Georgia_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Georgia_US_UC" + m_iSignalIndex 9 + } + SCR_MilitaryBaseCallsign "{5C90D92F48FBD90E}" { + m_sCallsign "#AR-Campaign_PointHawaii" + m_sCallsignShort "#AR-Comm_Variable_Base_Hawaii_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Hawaii_US_UC" + m_iSignalIndex 10 + } + SCR_MilitaryBaseCallsign "{5C90D92F48DFF562}" { + m_sCallsign "#AR-Campaign_PointIdaho" + m_sCallsignShort "#AR-Comm_Variable_Base_Idaho_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Idaho_US_UC" + m_iSignalIndex 11 + } + SCR_MilitaryBaseCallsign "{5C90D92F7724C851}" { + m_sCallsign "#AR-Campaign_PointIllinois" + m_sCallsignShort "#AR-Comm_Variable_Base_Illinois_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Illinois_US_UC" + m_iSignalIndex 12 + } + SCR_MilitaryBaseCallsign "{5C90D92F77097F3F}" { + m_sCallsign "#AR-Campaign_PointIndiana" + m_sCallsignShort "#AR-Comm_Variable_Base_Indiana_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Indiana_US_UC" + m_iSignalIndex 13 + } + SCR_MilitaryBaseCallsign "{5C90D92F77102B55}" { + m_sCallsign "#AR-Campaign_PointIowa" + m_sCallsignShort "#AR-Comm_Variable_Base_Iowa_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Iowa_US_UC" + m_iSignalIndex 14 + } + SCR_MilitaryBaseCallsign "{5C90D92F777ABD04}" { + m_sCallsign "#AR-Campaign_PointKansas" + m_sCallsignShort "#AR-Comm_Variable_Base_Kansas_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Kansas_US_UC" + m_iSignalIndex 15 + } + SCR_MilitaryBaseCallsign "{5C90D92F775EBBC1}" { + m_sCallsign "#AR-Campaign_PointKentucky" + m_sCallsignShort "#AR-Comm_Variable_Base_Kentucky_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Kentucky_US_UC" + m_iSignalIndex 16 + } + SCR_MilitaryBaseCallsign "{5C90D92F77A28EB6}" { + m_sCallsign "#AR-Campaign_PointLouisiana" + m_sCallsignShort "#AR-Comm_Variable_Base_Louisiana_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Louisiana_US_UC" + m_iSignalIndex 17 + } + SCR_MilitaryBaseCallsign "{5C90D92F77871C23}" { + m_sCallsign "#AR-Campaign_PointMaine" + m_sCallsignShort "#AR-Comm_Variable_Base_Maine_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Maine_US_UC" + m_iSignalIndex 18 + } + SCR_MilitaryBaseCallsign "{5C90D92F77EB96A0}" { + m_sCallsign "#AR-Campaign_PointMaryland" + m_sCallsignShort "#AR-Comm_Variable_Base_Maryland_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Maryland_US_UC" + m_iSignalIndex 19 + } + SCR_MilitaryBaseCallsign "{5C90D92F77CC2518}" { + m_sCallsign "#AR-Campaign_PointMassachusetts" + m_sCallsignShort "#AR-Comm_Variable_Base_Massachusetts_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Massachusetts_US_UC" + m_iSignalIndex 20 + } + SCR_MilitaryBaseCallsign "{5C90D92F77D3715B}" { + m_sCallsign "#AR-Campaign_PointMichigan" + m_sCallsignShort "#AR-Comm_Variable_Base_Michigan_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Michigan_US_UC" + m_iSignalIndex 21 + } + SCR_MilitaryBaseCallsign "{5C90D92F7635D418}" { + m_sCallsign "#AR-Campaign_PointMinnesota" + m_sCallsignShort "#AR-Comm_Variable_Base_Minnesota_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Minnesota_US_UC" + m_iSignalIndex 22 + } + SCR_MilitaryBaseCallsign "{5C90D92F761C3FF2}" { + m_sCallsign "#AR-Campaign_PointMississippi" + m_sCallsignShort "#AR-Comm_Variable_Base_Mississippi_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Mississippi_US_UC" + m_iSignalIndex 23 + } + SCR_MilitaryBaseCallsign "{5C90D92F7660CFAA}" { + m_sCallsign "#AR-Campaign_PointMissouri" + m_sCallsignShort "#AR-Comm_Variable_Base_Missouri_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Missouri_US_UC" + m_iSignalIndex 24 + } + SCR_MilitaryBaseCallsign "{5C90D92F764A6E6B}" { + m_sCallsign "#AR-Campaign_PointMontana" + m_sCallsignShort "#AR-Comm_Variable_Base_Montana_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Montana_US_UC" + m_iSignalIndex 25 + } + SCR_MilitaryBaseCallsign "{5C90D92F76AD4D35}" { + m_sCallsign "#AR-Campaign_PointNebraska" + m_sCallsignShort "#AR-Comm_Variable_Base_Nebraska_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Nebraska_US_UC" + m_iSignalIndex 26 + } + SCR_MilitaryBaseCallsign "{5C90D92F76B1EF3A}" { + m_sCallsign "#AR-Campaign_PointNevada" + m_sCallsignShort "#AR-Comm_Variable_Base_Nevada_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Nevada_US_UC" + m_iSignalIndex 27 + } + SCR_MilitaryBaseCallsign "{5C90D92F7695FF2F}" { + m_sCallsign "#AR-Campaign_PointNewYork" + m_sCallsignShort "#AR-Comm_Variable_Base_NewYork_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_NewYork_US_UC" + m_iSignalIndex 28 + } + SCR_MilitaryBaseCallsign "{5C90D92F76FF94B1}" { + m_sCallsign "#AR-Campaign_PointOhio" + m_sCallsignShort "#AR-Comm_Variable_Base_Ohio_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Ohio_US_UC" + m_iSignalIndex 29 + } + SCR_MilitaryBaseCallsign "{5C90D92F76C68EED}" { + m_sCallsign "#AR-Campaign_PointOklahoma" + m_sCallsignShort "#AR-Comm_Variable_Base_Oklahoma_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Oklahoma_US_UC" + m_iSignalIndex 30 + } + SCR_MilitaryBaseCallsign "{5C90D92F752A9F29}" { + m_sCallsign "#AR-Campaign_PointOregon" + m_sCallsignShort "#AR-Comm_Variable_Base_Oregon_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Oregon_US_UC" + m_iSignalIndex 31 + } + SCR_MilitaryBaseCallsign "{5C90D92F750E6FB9}" { + m_sCallsign "#AR-Campaign_PointPennsylvania" + m_sCallsignShort "#AR-Comm_Variable_Base_Pennsylvania_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Pennsylvania_US_UC" + m_iSignalIndex 32 + } + SCR_MilitaryBaseCallsign "{5C90D92F7517240F}" { + m_sCallsign "#AR-Campaign_PointTexas" + m_sCallsignShort "#AR-Comm_Variable_Base_Texas_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Texas_US_UC" + m_iSignalIndex 33 + } + SCR_MilitaryBaseCallsign "{5C90D92F7574D867}" { + m_sCallsign "#AR-Campaign_PointUtah" + m_sCallsignShort "#AR-Comm_Variable_Base_Utah_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Utah_US_UC" + m_iSignalIndex 34 + } + SCR_MilitaryBaseCallsign "{5C90D92F755C4871}" { + m_sCallsign "#AR-Campaign_PointVermont" + m_sCallsignShort "#AR-Comm_Variable_Base_Vermont_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Vermont_US_UC" + m_iSignalIndex 35 + } + SCR_MilitaryBaseCallsign "{5C90D92F75A0502B}" { + m_sCallsign "#AR-Campaign_PointVirginia" + m_sCallsignShort "#AR-Comm_Variable_Base_Virginia_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Virginia_US_UC" + m_iSignalIndex 36 + } + SCR_MilitaryBaseCallsign "{5C90D92F758ABFD3}" { + m_sCallsign "#AR-Campaign_PointWashington" + m_sCallsignShort "#AR-Comm_Variable_Base_Washington_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Washington_US_UC" + m_iSignalIndex 37 + } + SCR_MilitaryBaseCallsign "{5C90D92F75EF8263}" { + m_sCallsign "#AR-Campaign_PointWisconsin" + m_sCallsignShort "#AR-Comm_Variable_Base_Wisconsin_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Wisconsin_US_UC" + m_iSignalIndex 38 + } + SCR_MilitaryBaseCallsign "{5C90D92F75F0F224}" { + m_sCallsign "#AR-Campaign_PointWyoming" + m_sCallsignShort "#AR-Comm_Variable_Base_Wyoming_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Wyoming_US_UC" + m_iSignalIndex 39 + } + } + m_FactionHomeTerritoryConfig SCR_FactionHomeTerritoryConfig "{5AEE94D54FB58C33}" : "{B548A5B264939A98}Configs/Identities/Territories/FactionHomeTerritory_US.conf" { + } +} \ No newline at end of file diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/US.conf.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/US.conf.meta new file mode 100644 index 0000000..340f26d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/US.conf.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{5C67A1DDE0044806}Configs/ERR/Factions/US.conf" + Configurations { + ResourceClass PC {} + ResourceClass HEADLESS : PC {} + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/USSR.conf b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/USSR.conf new file mode 100644 index 0000000..53e7886 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/USSR.conf @@ -0,0 +1,276 @@ +SCR_Faction : "{B122E3B10BB3404B}Configs/Factions/OPFOR.conf" { + FactionKey "USSR" + UIInfo SCR_FactionUIInfo "{528C96127F8B6B08}" { + Name "#AR-Faction_USSR" + Icon "{40B12B0DF911B856}UI/Textures/Editor/EditableEntities/Factions/EditableEntity_Faction_USSR.edds" + m_sNameUpper "#AR-Faction_USSR-UC" + } + "Identity of soldiers" FactionIdentity "{570CFDC6685B6B25}" : "{FBBCD73926989580}Configs/Identities/FactionIdentity_USSR.conf" { + } + "Radio encryption key" "coldBorscht" + m_sFactionFlag "{50824EB9F2C215AB}UI/Textures/Flags/USSR-flag-base-3it.edds" + m_FactionFlagMaterial "{B47B52D9DA68905D}Assets/Props/Fabric/Flags/Data/Flag_1_2_SovietArmy.emat" + m_FactionLabel FACTION_USSR + m_CallsignInfo SCR_FactionCallsignInfo "{5DA0F2A67DFB8809}" : "{958043CE1648EC43}Configs/Callsigns/Callsigns_USSR.conf" { + } + m_iFactionRadioFrequency 42000 + m_aEntityCatalogs { + SCR_EntityCatalogMultiList "{5C68A0E9BD5E5DD9}" : "{3B679F1799D55F6F}Configs/EntityCatalog/USSR/Characters_EntityCatalog_USSR.conf" { + } + SCR_EntityCatalogMultiList "{5C9E82F285C09E24}" : "{E4785D3AF1D043C2}Configs/ERR/Factions/MissionVehicles.conf" { + } + SCR_EntityCatalogMultiList "{5C68A0E9B9AA3C2D}" : "{37D5B75AAC3E72EA}Configs/EntityCatalog/USSR/Groups_EntityCatalog_USSR.conf" { + } + SCR_EntityCatalog "{5C68A0E9A51460AB}" : "{DDF17C8C140BD1F2}Configs/EntityCatalog/USSR/WeaponTripod_EntityCatalog_USSR.conf" { + } + SCR_EntityCatalogMultiList "{5C68A0E9AFE1E631}" : "{C53421647C3D0D2E}Configs/EntityCatalog/USSR/InventoryItems_EntityCatalog_USSR.conf" { + } + SCR_EntityCatalog "{5C9EDDD378BA3298}" : "{B4CA6761AC935808}Configs/EntityCatalog/USSR/SupplyContainerItems_EntityCatalog_USSR.conf" { + } + } + m_iIdentityVoiceSignal 100 + m_aBaseCallsigns { + SCR_MilitaryBaseCallsign "{5C9108F95F3FB520}" { + m_sCallsign "#AR-Campaign_PointArena" + m_sCallsignShort "#AR-Comm_Variable_Base_Arena_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Arena_RU_UC" + m_iSignalIndex 0 + } + SCR_MilitaryBaseCallsign "{5C9108F95F0034DB}" { + m_sCallsign "#AR-Campaign_PointAvrora" + m_sCallsignShort "#AR-Comm_Variable_Base_Avrora_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Avrora_RU_UC" + m_iSignalIndex 1 + } + SCR_MilitaryBaseCallsign "{5C9108F95F6514E7}" { + m_sCallsign "#AR-Campaign_PointBekas" + m_sCallsignShort "#AR-Comm_Variable_Base_Bekas_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Bekas_RU_UC" + m_iSignalIndex 2 + } + SCR_MilitaryBaseCallsign "{5C9108F95F4EE8BF}" { + m_sCallsign "#AR-Campaign_PointBizon" + m_sCallsignShort "#AR-Comm_Variable_Base_Bizon_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Bizon_RU_UC" + m_iSignalIndex 3 + } + SCR_MilitaryBaseCallsign "{5C9108F95F5021F9}" { + m_sCallsign "#AR-Campaign_PointBolero" + m_sCallsignShort "#AR-Comm_Variable_Base_Bolero_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Bolero_RU_UC" + m_iSignalIndex 4 + } + SCR_MilitaryBaseCallsign "{5C9108F95FBA4C89}" { + m_sCallsign "#AR-Campaign_PointCafftan" + m_sCallsignShort "#AR-Comm_Variable_Base_Cafftan_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Cafftan_RU_UC" + m_iSignalIndex 5 + } + SCR_MilitaryBaseCallsign "{5C9108F95F9C00A9}" { + m_sCallsign "#AR-Campaign_PointKaban" + m_sCallsignShort "#AR-Comm_Variable_Base_Kaban_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Kaban_RU_UC" + m_iSignalIndex 6 + } + SCR_MilitaryBaseCallsign "{5C9108F95FE17E10}" { + m_sCallsign "#AR-Campaign_PointConsul" + m_sCallsignShort "#AR-Comm_Variable_Base_Consul_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Consul_RU_UC" + m_iSignalIndex 7 + } + SCR_MilitaryBaseCallsign "{5C9108F95FCBA475}" { + m_sCallsign "#AR-Campaign_PointDimok" + m_sCallsignShort "#AR-Comm_Variable_Base_Dimok_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Dimok_RU_UC" + m_iSignalIndex 8 + } + SCR_MilitaryBaseCallsign "{5C9108F95E2B2963}" { + m_sCallsign "#AR-Campaign_PointEffir" + m_sCallsignShort "#AR-Comm_Variable_Base_Effir_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Effir_RU_UC" + m_iSignalIndex 9 + } + SCR_MilitaryBaseCallsign "{5C9108F95E3040F5}" { + m_sCallsign "#AR-Campaign_PointFakir" + m_sCallsignShort "#AR-Comm_Variable_Base_Fakir_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Fakir_RU_UC" + m_iSignalIndex 10 + } + SCR_MilitaryBaseCallsign "{5C9108F95E17C67D}" { + m_sCallsign "#AR-Campaign_PointGips" + m_sCallsignShort "#AR-Comm_Variable_Base_Gips_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Gips_RU_UC" + m_iSignalIndex 11 + } + SCR_MilitaryBaseCallsign "{5C9108F95E797F8A}" { + m_sCallsign "#AR-Campaign_PointGussar" + m_sCallsignShort "#AR-Comm_Variable_Base_Gussar_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Gussar_RU_UC" + m_iSignalIndex 12 + } + SCR_MilitaryBaseCallsign "{5C9108F95E431F83}" { + m_sCallsign "#AR-Campaign_PointIgla" + m_sCallsignShort "#AR-Comm_Variable_Base_Igla_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Igla_RU_UC" + m_iSignalIndex 13 + } + SCR_MilitaryBaseCallsign "{5C9108F95EA7F87E}" { + m_sCallsign "#AR-Campaign_PointKhek" + m_sCallsignShort "#AR-Comm_Variable_Base_Khek_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Khek_RU_UC" + m_iSignalIndex 14 + } + SCR_MilitaryBaseCallsign "{5C9108F95E88C6B9}" { + m_sCallsign "#AR-Campaign_PointLednik" + m_sCallsignShort "#AR-Comm_Variable_Base_Lednik_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Lednik_RU_UC" + m_iSignalIndex 15 + } + SCR_MilitaryBaseCallsign "{5C9108F95EEDE322}" { + m_sCallsign "#AR-Campaign_PointMatros" + m_sCallsignShort "#AR-Comm_Variable_Base_Matros_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Matros_RU_UC" + m_iSignalIndex 16 + } + SCR_MilitaryBaseCallsign "{5C9108F95EF6244A}" { + m_sCallsign "#AR-Campaign_PointMuskat" + m_sCallsignShort "#AR-Comm_Variable_Base_Muskat_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Muskat_RU_UC" + m_iSignalIndex 17 + } + SCR_MilitaryBaseCallsign "{5C9108F95EDAF04A}" { + m_sCallsign "#AR-Campaign_PointNagan" + m_sCallsignShort "#AR-Comm_Variable_Base_Nagan_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Nagan_RU_UC" + m_iSignalIndex 18 + } + SCR_MilitaryBaseCallsign "{5C9108F95D3CCF27}" { + m_sCallsign "#AR-Campaign_PointNitka" + m_sCallsignShort "#AR-Comm_Variable_Base_Nitka_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Nitka_RU_UC" + m_iSignalIndex 19 + } + SCR_MilitaryBaseCallsign "{5C9108F95D076483}" { + m_sCallsign "#AR-Campaign_PointOmega" + m_sCallsignShort "#AR-Comm_Variable_Base_Omega_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Omega_RU_UC" + m_iSignalIndex 20 + } + SCR_MilitaryBaseCallsign "{5C9108F95D68D0F3}" { + m_sCallsign "#AR-Campaign_PointPlazma" + m_sCallsignShort "#AR-Comm_Variable_Base_Plazma_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Plazma_RU_UC" + m_iSignalIndex 21 + } + SCR_MilitaryBaseCallsign "{5C9108F95D4C0F8E}" { + m_sCallsign "#AR-Campaign_PointPolyn" + m_sCallsignShort "#AR-Comm_Variable_Base_Polyn_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Polyn_RU_UC" + m_iSignalIndex 22 + } + SCR_MilitaryBaseCallsign "{5C9108F95D56EEEE}" { + m_sCallsign "#AR-Campaign_PointProlog" + m_sCallsignShort "#AR-Comm_Variable_Base_Prolog_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Prolog_RU_UC" + m_iSignalIndex 23 + } + SCR_MilitaryBaseCallsign "{5C9108F95DBA92EE}" { + m_sCallsign "#AR-Campaign_PointRabkor" + m_sCallsignShort "#AR-Comm_Variable_Base_Rabkor_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Rabkor_RU_UC" + m_iSignalIndex 24 + } + SCR_MilitaryBaseCallsign "{5C9108F95C69680D}" { + m_sCallsign "#AR-Campaign_PointRadon" + m_sCallsignShort "#AR-Comm_Variable_Base_Radon_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Radon_RU_UC" + m_iSignalIndex 25 + } + SCR_MilitaryBaseCallsign "{5C9108F95C4FD930}" { + m_sCallsign "#AR-Campaign_PointSadko" + m_sCallsignShort "#AR-Comm_Variable_Base_Sadko_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Sadko_RU_UC" + m_iSignalIndex 26 + } + SCR_MilitaryBaseCallsign "{5C9108F95C5255FD}" { + m_sCallsign "#AR-Campaign_PointSekret" + m_sCallsignShort "#AR-Comm_Variable_Base_Sekret_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Sekret_RU_UC" + m_iSignalIndex 27 + } + SCR_MilitaryBaseCallsign "{5C9108F95CB621AE}" { + m_sCallsign "#AR-Campaign_PointShtanga" + m_sCallsignShort "#AR-Comm_Variable_Base_Shtanga_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Shtanga_RU_UC" + m_iSignalIndex 28 + } + SCR_MilitaryBaseCallsign "{5C9108F95C9545BC}" { + m_sCallsign "#AR-Campaign_PointShuka" + m_sCallsignShort "#AR-Comm_Variable_Base_Shuka_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Shuka_RU_UC" + m_iSignalIndex 29 + } + SCR_MilitaryBaseCallsign "{5C9108F95CFE26C3}" { + m_sCallsign "#AR-Campaign_PointTabor" + m_sCallsignShort "#AR-Comm_Variable_Base_Tabor_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Tabor_RU_UC" + m_iSignalIndex 30 + } + SCR_MilitaryBaseCallsign "{5C9108F95CDD263C}" { + m_sCallsign "#AR-Campaign_PointTenor" + m_sCallsignShort "#AR-Comm_Variable_Base_Tenor_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Tenor_RU_UC" + m_iSignalIndex 31 + } + SCR_MilitaryBaseCallsign "{5C9108F95B27128C}" { + m_sCallsign "#AR-Campaign_PointTsikson" + m_sCallsignShort "#AR-Comm_Variable_Base_Tsikson_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Tsikson_RU_UC" + m_iSignalIndex 32 + } + SCR_MilitaryBaseCallsign "{5C9108F95B08D83D}" { + m_sCallsign "#AR-Campaign_PointUlan" + m_sCallsignShort "#AR-Comm_Variable_Base_Ulan_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Ulan_RU_UC" + m_iSignalIndex 33 + } + SCR_MilitaryBaseCallsign "{5C9108F95B6D3FC2}" { + m_sCallsign "#AR-Campaign_PointVermout" + m_sCallsignShort "#AR-Comm_Variable_Base_Vermout_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Vermout_RU_UC" + m_iSignalIndex 34 + } + SCR_MilitaryBaseCallsign "{5C9108F95B712949}" { + m_sCallsign "#AR-Campaign_PointViympel" + m_sCallsignShort "#AR-Comm_Variable_Base_Viympel_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Viympel_RU_UC" + m_iSignalIndex 35 + } + SCR_MilitaryBaseCallsign "{5C9108F95B57D185}" { + m_sCallsign "#AR-Campaign_PointYantar" + m_sCallsignShort "#AR-Comm_Variable_Base_Yantar_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Yantar_RU_UC" + m_iSignalIndex 36 + } + SCR_MilitaryBaseCallsign "{5C9108F95BB17114}" { + m_sCallsign "#AR-Campaign_PointYolka" + m_sCallsignShort "#AR-Comm_Variable_Base_Yolka_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Yolka_RU_UC" + m_iSignalIndex 37 + } + SCR_MilitaryBaseCallsign "{5C9108F95B97C054}" { + m_sCallsign "#AR-Campaign_PointZheton" + m_sCallsignShort "#AR-Comm_Variable_Base_Zheton_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Zheton_RU_UC" + m_iSignalIndex 38 + } + SCR_MilitaryBaseCallsign "{5C9108F95BFC33E5}" { + m_sCallsign "#AR-Campaign_PointZurna" + m_sCallsignShort "#AR-Comm_Variable_Base_Zurna_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Zurna_RU_UC" + m_iSignalIndex 39 + } + } + m_FactionHomeTerritoryConfig SCR_FactionHomeTerritoryConfig "{5AEE94D5517C30BD}" : "{31FC78AF00523A99}Configs/Identities/Territories/FactionHomeTerritory_USSR.conf" { + } +} \ No newline at end of file diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/USSR.conf.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/USSR.conf.meta new file mode 100644 index 0000000..f60822c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/Factions/USSR.conf.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{D7A5CFA62A36480D}Configs/ERR/Factions/USSR.conf" + Configurations { + ResourceClass PC {} + ResourceClass HEADLESS : PC {} + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/GameOverScreens.conf b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/GameOverScreens.conf new file mode 100644 index 0000000..a7eafe8 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/GameOverScreens.conf @@ -0,0 +1,21 @@ +SCR_GameOverScreenConfig : "{651583FFFB7FC765}Configs/GameOverScreen/BaseGameOverScreensConfig.conf" { + m_aGameOverScreens { + ERR_EscapeGameOverScreenInfo "{6B193DC8DDC63507}" { + m_GameOverScreenId VICTORY + m_GameOverContentLayout "{C4507D07F3C54831}UI/layouts/HUD/GameOver/EndScreen/EndScreenContent_NoImage.layout" + m_OptionalParams SCR_BaseGameOverScreenInfoOptional "{4984A5C1BFEFC04E}" { + m_sTitle "Escape complete" + m_sAudioOneShot "SOUND_ONVICTORY" + } + } + ERR_FailureGameOverScreenInfo "{E66F29A7A8AD7438}" { + m_GameOverScreenId LOOSE + m_GameOverContentLayout "{C4507D07F3C54831}UI/layouts/HUD/GameOver/EndScreen/EndScreenContent_NoImage.layout" + m_OptionalParams SCR_BaseGameOverScreenInfoOptional "{3DBF0BDE715945FA}" { + m_sTitle "Escape failed" + m_sDebriefing "No surviving prisoners can complete the escape, or the extraction helicopter has been lost." + m_sAudioOneShot "SOUND_ONDEFEAT" + } + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/GameOverScreens.conf.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/GameOverScreens.conf.meta new file mode 100644 index 0000000..8f032b0 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/GameOverScreens.conf.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{F6633922A25F9441}Configs/ERR/GameOverScreens.conf" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/VanillaFactions.conf b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/VanillaFactions.conf new file mode 100644 index 0000000..ca1abae --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/VanillaFactions.conf @@ -0,0 +1,7 @@ +ERR_FactionCatalog { + PlayerFactionKey "US" + EnemyFactionKey "USSR" + PrisonerPrefab "{3FF693715C9F8928}Prefabs/ERR/Prisoner.et" + GuardGroupPrefab "{D5A4D0D3AE1A3E26}Prefabs/ERR/Patrol.et" + ExtractionPrefab "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et" +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/VanillaFactions.conf.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/VanillaFactions.conf.meta new file mode 100644 index 0000000..47f3162 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Configs/ERR/VanillaFactions.conf.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{BE50B97B8E2B36E6}Configs/ERR/VanillaFactions.conf" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Missions/ERR_Everon_Base.conf b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Missions/ERR_Everon_Base.conf new file mode 100644 index 0000000..b44da89 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Missions/ERR_Everon_Base.conf @@ -0,0 +1,11 @@ +SCR_MissionHeader { + World "{B6C516F86302C679}Worlds/ERR_Everon.ent" + SystemsConfig "{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" + m_sName "Rereintroduced: Everon Base (development)" + m_sAuthor "Rereintroduced contributors" + m_sDescription "Independent base escape mission using vanilla Reforger. Companion addons optional. Development scenario." + m_sGameMode "Escape" + m_iPlayerCount 12 + m_eSaveTypes 0 + m_bShowInScenarioMenu 1 +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Missions/ERR_Everon_Base.conf.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Missions/ERR_Everon_Base.conf.meta new file mode 100644 index 0000000..566e857 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Missions/ERR_Everon_Base.conf.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{AD62322D5213C440}Missions/ERR_Everon_Base.conf" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Extraction.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Extraction.et new file mode 100644 index 0000000..2ad6dc1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Extraction.et @@ -0,0 +1,6 @@ +GenericEntity { + components { + ERR_LocationComponent "{C17CA14398A1CD7E}" { m_Kind 2 } + RplComponent "{0BF5BAAA5FBFEECE}" { Streamable Disabled } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Extraction.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Extraction.et.meta new file mode 100644 index 0000000..742075d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Extraction.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{033503110AC34EAC}Prefabs/ERR/Extraction.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/FactionManager.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/FactionManager.et new file mode 100644 index 0000000..b2c8f02 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/FactionManager.et @@ -0,0 +1,10 @@ +SCR_FactionManager : "{A242612865F2A48E}Prefabs/MP/Managers/Factions/FactionManager_Base.et" { + Factions { + SCR_Faction : "{5C67A1DDE0044806}Configs/ERR/Factions/US.conf" { + m_sFactionBackground "{F8AC305446D5D480}UI/Textures/DeployMenu/Loadout-BG/Loadout_US_BG.imageset" + } + SCR_Faction : "{D7A5CFA62A36480D}Configs/ERR/Factions/USSR.conf" { + m_sFactionBackground "{21533F2089005056}UI/Textures/DeployMenu/Loadout-BG/Loadout_BG_USSR.imageset" + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/FactionManager.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/FactionManager.et.meta new file mode 100644 index 0000000..170d8da --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/FactionManager.et.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" + Configurations { + EntityTemplateResourceClass PC {} + EntityTemplateResourceClass HEADLESS : PC {} + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/FieldCover.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/FieldCover.et new file mode 100644 index 0000000..ec18f1f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/FieldCover.et @@ -0,0 +1,13 @@ +GenericEntity { + components { + MeshObject "{A557F6DC012E5101}" { + Object "{268DBDABB3C94AD7}Assets/Props/Military/Sandbags/Sandbag_01_short.xob" + Materials { + MaterialAssignClass "{A557F6DC012E5102}" { SourceMaterial "Sandbags_01_Short" AssignedMaterial "{31529E064AA7C917}Assets/Props/Military/Sandbags/Data/Sandbags_01_short_Burlap.emat" } + MaterialAssignClass "{A557F6DC012E5103}" { SourceMaterial "Sandbags_01_MLOD" AssignedMaterial "{2169E8EB73E1C127}Assets/Props/Military/Sandbags/Data/Sandbags_01_Burlap_MLOD.emat" } + } + } + RigidBody "{A557F6DC012E5104}" { ModelGeometry 1 Static 1 } + RplComponent "{A557F6DC012E5105}" {} + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/FieldCover.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/FieldCover.et.meta new file mode 100644 index 0000000..c8c4e70 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/FieldCover.et.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{4B6AC1D8701C35A1}Prefabs/ERR/FieldCover.et" + Configurations { + ResourceClass PC {} + ResourceClass HEADLESS : PC {} + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/GameMode.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/GameMode.et new file mode 100644 index 0000000..41a9d62 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/GameMode.et @@ -0,0 +1,14 @@ +ERR_GameMode : "{0F307326459A1395}Prefabs/MP/Modes/GameMode_Base.et" { + components { + SCR_GameOverScreenManagerComponent "{56DEC646298AD219}" { + m_GameOverScreenConfig SCR_GameOverScreenConfig "{56DEC6462FFDD82D}" : "{F6633922A25F9441}Configs/ERR/GameOverScreens.conf" {} + } + ERR_ScenarioComponent "{B78E910E88DE30D2}" { + m_Definition "{BC310DC0CD27F523}Configs/ERR/EveronSites.conf" + } + SCR_RespawnSystemComponent "{56B2B4793051E7C9}" { + m_SpawnLogic ERR_SpawnLogic "{79AD722B2EFD595F}" {} + } + } + m_bUseSpawnPreload 0 +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/GameMode.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/GameMode.et.meta new file mode 100644 index 0000000..f8dfb87 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/GameMode.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{978E045E53EF36C8}Prefabs/ERR/GameMode.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/ObjectiveDocument.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/ObjectiveDocument.et new file mode 100644 index 0000000..850c6c1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/ObjectiveDocument.et @@ -0,0 +1,5 @@ +GenericEntity : "{6D56FED1E55A8F84}Prefabs/Items/Misc/IntelligenceFolder_E_01/IntelligenceFolder_E_01.et" { + components { + ERR_DocumentComponent "{E4598D0BE2C251A3}" {} + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/ObjectiveDocument.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/ObjectiveDocument.et.meta new file mode 100644 index 0000000..68f2b8a --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/ObjectiveDocument.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{554159A6740C3F3E}Prefabs/ERR/ObjectiveDocument.et" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Patrol.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Patrol.et new file mode 100644 index 0000000..7295625 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Patrol.et @@ -0,0 +1,10 @@ +SCR_AIGroup : "{E552DABF3636C2AD}Prefabs/Groups/OPFOR/Group_USSR_RifleSquad.et" { + m_aUnitPrefabSlots { + "{5436629450D8387A}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_SL.et" + "{612F43A4D5AE765F}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_RTO.et" + "{23ADBBC31B6A3DC6}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_AR.et" + "{1C78331E156A3D65}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_AT.et" + "{333DA6244C7DA34C}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_SR.et" + "{BF643BE4ADBDFDD3}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_LAT.et" + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Patrol.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Patrol.et.meta new file mode 100644 index 0000000..6eef9b5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Patrol.et.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{D5A4D0D3AE1A3E26}Prefabs/ERR/Patrol.et" + Configurations { + EntityTemplateResourceClass PC {} + EntityTemplateResourceClass HEADLESS {} + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Prison.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Prison.et new file mode 100644 index 0000000..047a5ed --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Prison.et @@ -0,0 +1,100 @@ +GenericEntity { + components { + ERR_LocationComponent "{3B60CBEB3C04333C}" { m_Kind 0 } + Hierarchy "{30ADADE77D1EC3B8}" {} + RplComponent "{7FA5168C6FBD0C22}" {} + } + { + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "2879356FFFBE36E0" + coords -6 0 6 + angles 0 0 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "C99EF9AFCEBA863D" + coords -3 0 6 + angles 0 0 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "91048277F04ACA61" + coords 0 0 6 + angles 0 0 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "8F2200A922FB0A6E" + coords 3 0 6 + angles 0 0 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "3C442429BBCF5D2F" + coords -6 0 -6 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "9E855CC802C592CA" + coords 6 0 -6 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "778DAC42C9208F67" + coords -6 0 -3 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "7E350EB9053673C4" + coords 6 0 -3 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "AD17884D5EA37D37" + coords -6 0 0 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "1A157E23E1A995D8" + coords 6 0 0 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "3A78A6F3ACB7ACB1" + coords -6 0 3 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "275B472B565FFF6C" + coords 6 0 3 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "1B20E11B3FC7B59A" + coords -6 0 -6 + angles 0 0 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "2735B52246DD6213" + coords -3 0 -6 + angles 0 0 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "28101A0E33470B38" + coords 3 0 -6 + angles 0 0 0 + } + GenericEntity : "{C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et" { + ID "54D8F96ECC743335" + scale 1.5 + coords 0 -0.1 -6 + angles 0 0 0 + } + DecalEntity : "{4AD6EB80A8B1FA3A}Prefabs/Decals/Dirt/Decal_Dirt_Patch_03.et" { + ID "FCFBA935CC13E016" + components { + Hierarchy "{EF4B704D646D1759}" {} + } + coords 0 0 0 + angles -90 0 0 + scale 10 + FarPlane 1.5 + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Prison.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Prison.et.meta new file mode 100644 index 0000000..3341905 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Prison.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{BE6B8D56349038A6}Prefabs/ERR/Prison.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/PrisonDoor.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/PrisonDoor.et new file mode 100644 index 0000000..2725dd5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/PrisonDoor.et @@ -0,0 +1,19 @@ +GenericEntity : "{34B08027DBDE322A}Prefabs/Structures/BuildingParts/Doors/Door_MetalGate_01_Short_LEFT_EXT_ST_B.et" { + components { + DoorComponent "{221C667A9F7D4B69}" { + DoorAction ERR_PrisonDoorAction "{50888D3646A61640}" { + ParentContextList { "SCR_DoorUserAction" } + } + } + ActionsManagerComponent "{F32B667C3C823800}" { + ActionContexts { UserActionContext "{50888D37F529F720}" { ContextName "SCR_DoorUserAction" Radius 2 } } + additionalActions { + ERR_UnlockPrisonAction "{CA7918FEA177BFB8}" { + ParentContextList { "SCR_DoorUserAction" } + UIInfo SCR_ActionUIInfo "{F734C81E11AA6BEF}" { Name "Pick prison lock" } + Duration 4 + } + } + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/PrisonDoor.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/PrisonDoor.et.meta new file mode 100644 index 0000000..018cdc5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/PrisonDoor.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/PrisonWall.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/PrisonWall.et new file mode 100644 index 0000000..90d2735 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/PrisonWall.et @@ -0,0 +1,8 @@ +GenericEntity { + components { + Hierarchy "{4F20A90EDBD625A4}" {} + MeshObject "{4F20A90EDBD625A1}" { Object "{0B96D139FEBCA006}Assets/Structures/Walls/Concrete/ConcreteWall_01_3m.xob" } + RigidBody "{4F20A90EDBD625A2}" { ModelGeometry 1 Static 1 } + RplComponent "{4F20A90EDBD625A3}" {} + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/PrisonWall.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/PrisonWall.et.meta new file mode 100644 index 0000000..a0183ef --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/PrisonWall.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Prisoner.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Prisoner.et new file mode 100644 index 0000000..8b8d49f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Prisoner.et @@ -0,0 +1,55 @@ +SCR_ChimeraCharacter : "{836E7E39AAC5888B}Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Base.et" { + components { + ActionsManagerComponent "{520EA1D2F659CE02}" { + additionalActions { + ERR_LoadCasualtyAction "{E7016B8C499EC8A3}" { + ParentContextList { "Chest" "LowerTorso" } + UIInfo SCR_ActionUIInfo "{E7016B8C499EC8A4}" { Name "Load casualty into extraction helicopter" } + Duration 5 + } + } + } + SCR_EditableCharacterComponent "{520EA1D2F659C85C}" { + m_UIInfo SCR_EditableEntityUIInfo "{5298E609432D192D}" { + Name "Prisoner" + } + } + SCR_CharacterInventoryStorageComponent "{520EA1D2DB118DAC}" { + components { + SCR_EquipmentStorageComponent "{56B49DA9722B635D}" { + InitialStorageSlots { + SCR_EquipmentStorageSlot BinocularSlot { Prefab "" } + SCR_EquipmentStorageSlot WristwatchSlot { + Prefab "{78ED4FEF62BBA728}Prefabs/Items/Equipment/Watches/Watch_SandY184A.et" + } + } + } + } + } + BaseLoadoutManagerComponent "{520EA1D2DB11821E}" { + Slots { + LoadoutSlotInfo Hat { Prefab "{F545C1BE7C99954A}Prefabs/Characters/HeadGear/Hat_Patrol_US_01/Hat_Patrol_US_01.et" } + LoadoutSlotInfo Jacket { Prefab "{3CCA7A9BB4FD3197}Prefabs/Characters/Uniforms/Jacket_US_BDU_rolledup.et" } + LoadoutSlotInfo Pants { Prefab "{604BB72BE8E023C2}Prefabs/Characters/Uniforms/Pants_US_BDU.et" } + SCR_FeetLoadoutSlotInfo Boots { Prefab "{DAAFD15478BDE1C3}Prefabs/Characters/Footwear/CombatBoots_US_01.et" } + LoadoutSlotInfo ArmoredVest { Prefab "" } + LoadoutSlotInfo Back { Prefab "" } + LoadoutSlotInfo Vest { Prefab "" } + LoadoutSlotInfo HandWear { Prefab "" } + } + } + SCR_InventoryStorageManagerComponent "{520EA1D2DB118DE5}" { + InitialInventoryItems { + ItemsInitConfigurationItem "{EA7AC3C2078B68C1}" { + TargetStorage "Prefabs/Characters/Uniforms/Pants_US_BDU.et" + PrefabsToSpawn { + "{A81F501D3EF6F38E}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_US_01.et" + "{A81F501D3EF6F38E}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_US_01.et" + "{D70216B1B2889129}Prefabs/Items/Medicine/Tourniquet_01/Tourniquet_US_01.et" + "{0D9A5DCF89AE7AA9}Prefabs/Items/Medicine/MorphineInjection_01/MorphineInjection_01.et" + } + } + } + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Prisoner.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Prisoner.et.meta new file mode 100644 index 0000000..edf4d1e --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Prisoner.et.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{3FF693715C9F8928}Prefabs/ERR/Prisoner.et" + Configurations { + EntityTemplateResourceClass PC {} + EntityTemplateResourceClass HEADLESS : PC {} + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Radio.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Radio.et new file mode 100644 index 0000000..8fd6e6b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Radio.et @@ -0,0 +1,16 @@ +GenericEntity { + components { + MeshObject "{111C06CB740ED195}" { Object "{77C9FCF3FB1246E9}Assets/Items/Equipment/Radios/Radio_R107M/Radio_R107M_01_item.xob" } + RigidBody "{4C174A44D07B91BA}" { ModelGeometry 1 Static 1 } + ERR_LocationComponent "{C19CA6CC83470879}" { m_Kind 1 } + RplComponent "{54ED7463161A5622}" { Streamable Disabled } + ActionsManagerComponent "{B081EC0768636EAB}" { + ActionContexts { UserActionContext "{C1A75A5D8B7EF1E4}" { ContextName "ERR_Radio" Radius 2 } } + additionalActions { ERR_TuneRadioAction "{7ABBB6B5D73DDD95}" { + ParentContextList { "ERR_Radio" } + UIInfo SCR_ActionUIInfo "{1B42BB7CEDECB994}" { Name "Contact extraction HQ" } + Duration 8 + } } + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Radio.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Radio.et.meta new file mode 100644 index 0000000..9b57d02 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/Radio.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{F7E7E3D6ACF0C860}Prefabs/ERR/Radio.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SpectatorCamera.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SpectatorCamera.et new file mode 100644 index 0000000..db6fbed --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SpectatorCamera.et @@ -0,0 +1,7 @@ +SCR_ManualCamera { + m_bInputEnabled 0 + m_bStartAtEntity 1 + m_aComponents { + ERR_FollowSurvivorCameraComponent "{965C2E8B2339B926}" {} + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SpectatorCamera.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SpectatorCamera.et.meta new file mode 100644 index 0000000..c192bbd --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SpectatorCamera.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{EB1210AAE1BB8F54}Prefabs/ERR/SpectatorCamera.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SupplyCache.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SupplyCache.et new file mode 100644 index 0000000..de68b39 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SupplyCache.et @@ -0,0 +1,28 @@ +GenericEntity : "{EBBC859CCD94D96D}Prefabs/Props/EmptyStorages/USSR_AmmoBox_empty.et" { + components { + MeshObject "{6530845A09309E37}" { + Object "{819ED3266EE5113B}Assets/Props/Military/AmmoBox/EquipmentBoxWooden_01/EquipmentBoxWooden_Weapon_01.xob" + Materials { + MaterialAssignClass "{6530845A093091BB}" { + SourceMaterial "EquipmentBoxWooden_Weapon_01" + AssignedMaterial "{7D2E831AFA5CF50D}Assets/Props/Military/AmmoBox/EquipmentBoxWooden_01/Data/EquipmentBoxWooden_Weapon_01_USSR.emat" + } + MaterialAssignClass "{6530845A093091B2}" { + SourceMaterial "EquipmentBoxWooden_Weapon_01_Decal" + } + } + } + SCR_UniversalInventoryStorageComponent "{6530845A09302DE0}" { + MaxCumulativeVolume 120000 + MaxItemSize 120 40 40 + m_fMaxWeight 80 + Attributes SCR_ItemAttributeCollection "{6530845A09302DFF}" { + ItemDisplayName SCR_InventoryUIInfo "{6530845A09302D03}" { + Name "Supply cache" + Description "Limited equipment shared between prisoners." + } + } + } + InventoryStorageManagerComponent "{18A1D42A468F584F}" {} + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SupplyCache.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SupplyCache.et.meta new file mode 100644 index 0000000..3ecec02 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SupplyCache.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{40986810D0B1F4AE}Prefabs/ERR/SupplyCache.et" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SupplySite.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SupplySite.et new file mode 100644 index 0000000..118178f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SupplySite.et @@ -0,0 +1,6 @@ +GenericEntity { + components { + ERR_LocationComponent "{8E7CFEA92C1811F0}" { m_Kind 4 } + RplComponent "{98A4A31435A9CA04}" { Streamable Disabled } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SupplySite.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SupplySite.et.meta new file mode 100644 index 0000000..f511bfd --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Prefabs/ERR/SupplySite.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{7C3D16C17C24D351}Prefabs/ERR/SupplySite.et" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Actions.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Actions.c new file mode 100644 index 0000000..57e4d2f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Actions.c @@ -0,0 +1,74 @@ +class ERR_UnlockPrisonAction : ScriptedUserAction +{ + override bool CanBePerformedScript(IEntity user) + { + ERR_GameMode mode = ERR_GameMode.Get(); + SetCannotPerformReason(string.Empty); + if (!mode) { SetCannotPerformReason("Mission is not ready"); return false; } + if (mode.Phase() != ERR_Phase.PRISON) { SetCannotPerformReason("Prison lock is not available in this mission phase"); return false; } + if (!ERR_Actors.CanFight(user)) { SetCannotPerformReason("You must be alive and conscious"); return false; } + return true; + } + override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode || !mode.UnlockPrison(pUserEntity)) return; + BaseDoorComponent door = BaseDoorComponent.Cast(pOwnerEntity.FindComponent(BaseDoorComponent)); + if (door) door.UseDoorAction(pUserEntity); + } +} + +class ERR_PrisonDoorAction : SCR_DoorUserAction +{ + // Native AI calls PerformAction directly, bypassing the UI availability query. + // Recheck the same permission here; preserve vanilla execution/broadcasting + // on both server and clients once the replicated prison phase is unlocked. + override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) + { + if (!CanBePerformedScript(pUserEntity)) return; + super.PerformAction(pOwnerEntity, pUserEntity); + } + + override bool CanBePerformedScript(IEntity user) + { + ERR_GameMode mode = ERR_GameMode.Get(); + SetCannotPerformReason(string.Empty); + if (!mode) { SetCannotPerformReason("Mission is not ready"); return false; } + if (mode.Phase() <= ERR_Phase.PRISON) + { + SetCannotPerformReason("Pick the prison lock before opening the gate"); + return false; + } + // Vanilla owns any obstruction/door-specific reason after unlocking. + return super.CanBePerformedScript(user); + } +} + +class ERR_TuneRadioAction : ScriptedUserAction +{ + override bool CanBePerformedScript(IEntity user) + { + ERR_GameMode mode = ERR_GameMode.Get(); + ERR_LocationComponent location = ERR_LocationComponent.Cast(GetOwner().FindComponent(ERR_LocationComponent)); + SetCannotPerformReason(string.Empty); + if (!mode) { SetCannotPerformReason("Mission is not ready"); return false; } + if (mode.Phase() != ERR_Phase.RADIO_SEARCH) + { + string reason = "Radio is not available in this mission phase"; + if (mode.Phase() == ERR_Phase.PRISON) reason = "Escape the prison first"; + if (mode.Phase() == ERR_Phase.RADIO_DEFENCE) reason = "Transmission is already in progress; defend the radio"; + if (mode.Phase() == ERR_Phase.EXTRACTION) reason = "Transmission is complete; reach the extraction helicopter"; + SetCannotPerformReason(reason); + return false; + } + if (!location) { SetCannotPerformReason("Radio location is unavailable"); return false; } + if (location.Knowledge() != 2) { SetCannotPerformReason("Identify this radio through recovered intel or close reconnaissance first"); return false; } + if (!ERR_Actors.CanFight(user)) { SetCannotPerformReason("You must be alive and conscious"); return false; } + return true; + } + override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode) mode.TuneRadio(pUserEntity, ERR_LocationComponent.Cast(pOwnerEntity.FindComponent(ERR_LocationComponent))); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Actors.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Actors.c new file mode 100644 index 0000000..4a58ce1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Actors.c @@ -0,0 +1,81 @@ +class ERR_Actors +{ + static bool Alive(IEntity actor) + { + if (!actor) return false; + DamageManagerComponent damage = DamageManagerComponent.Cast(actor.FindComponent(DamageManagerComponent)); + return damage && !damage.IsDestroyed(); + } + + static bool CanFight(IEntity actor) + { + if (!Alive(actor)) return false; + CharacterControllerComponent controller = CharacterControllerComponent.Cast(actor.FindComponent(CharacterControllerComponent)); + return controller && !controller.IsUnconscious(); + } + + static SCR_AIGroup Group(IEntity actor) + { + if (!actor) return null; + AIControlComponent control = AIControlComponent.Cast(actor.FindComponent(AIControlComponent)); + if (!control || !control.GetAIAgent()) return null; + return SCR_AIGroup.Cast(control.GetAIAgent().GetParentGroup()); + } + + static bool Player(IEntity actor) + { + return actor && GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(actor) > 0; + } + + static IEntity Spawn(ResourceName prefab, vector position, vector angles = "0 0 0") + { + if (!Replication.IsServer() || prefab.IsEmpty()) return null; + Resource resource = Resource.Load(prefab); + if (!resource || !resource.IsValid()) return null; + EntitySpawnParams params = new EntitySpawnParams(); + params.TransformMode = ETransformMode.WORLD; + Math3D.AnglesToMatrix(angles, params.Transform); + params.Transform[3] = position; + return GetGame().SpawnEntityPrefab(resource, GetGame().GetWorld(), params); + } + + static void DeleteSpawned(IEntity entity) + { + if (!Replication.IsServer() || !entity || Player(entity)) return; + SCR_AIGroup group = SCR_AIGroup.Cast(entity); + if (group) + { + // Never remove a group that has acquired a player since mission creation. + if (group.GetPlayerCount(true) > 0) return; + group.DespawnMembers(); + } + SCR_EntityHelper.DeleteEntityAndChildren(entity); + } + + static vector Ground(vector position) + { + position[1] = GetGame().GetWorld().GetSurfaceY(position[0], position[2]) + 0.1; + return position; + } + + static void Players(out array players, bool conscious = false) + { + players.Clear(); + array ids = {}; + GetGame().GetPlayerManager().GetPlayers(ids); + foreach (int id : ids) + { + IEntity actor = GetGame().GetPlayerManager().GetPlayerControlledEntity(id); + if (Alive(actor) && (!conscious || CanFight(actor))) players.Insert(actor); + } + } +} + +// One server-owned implementation is installed by the AI addon. +class ERR_CommandService +{ + void Tick(float now) {} + void Stop() {} + void RegisterGroup(SCR_AIGroup group) {} + void UnregisterGroup(SCR_AIGroup group) {} +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_AdminService.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_AdminService.c new file mode 100644 index 0000000..da57255 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_AdminService.c @@ -0,0 +1,111 @@ +// Transport-independent administration. Only the owning controller supplies +// authorization, derived on the server from its authenticated player ID. +class ERR_CommandArguments +{ + static string CoreSetting(string section, string option) + { + if (section == "mission" && option == "radio") return "radioDefenceSeconds"; + if (section == "intel" && option == "reveal") return "intelRevealChancePercent"; + return ""; + } + static bool Integer(string text, out int value) + { + if (text.IsEmpty() || text.Length() > 6) return false; + for (int i = 0; i < text.Length(); i++) + if ("0123456789".IndexOf(text.Substring(i, 1)) < 0) return false; + value = text.ToInt(); + return true; + } +} +class ERR_AdminService +{ + protected string Setting(string section, string option) + { + return ERR_CommandArguments.CoreSetting(section, option); + } + protected bool Extension(ERR_GameMode mode, string arguments, array replies) { return false; } + protected bool TimeCommand(ERR_GameMode mode, array parts, array replies) + { + if (parts.Count() < 2 || parts[0] != "mission" || (parts[1] != "time" && parts[1] != "speed")) return false; + string key = "startTimeMinutes"; + if (parts[1] == "speed") key = "timeMultiplier"; + if (parts.Count() == 3 && parts[2] == "show") + { + if (mode.Time()) replies.Insert(mode.Time().Status()); + replies.Insert("Next round: " + ERR_TimeService.Clock(mode.Settings().Get("startTimeMinutes")) + ", " + mode.Settings().Get("timeMultiplier").ToString() + "x progression."); + return true; + } + int value; + bool valid; + if (parts.Count() == 4 && parts[2] == "set") + { + if (key == "startTimeMinutes") valid = ERR_TimeService.ParseClock(parts[3], value); + else valid = ERR_CommandArguments.Integer(parts[3], value); + } + if (valid && mode.Settings().Set(key, value)) + replies.Insert("Saved for next round: " + ERR_TimeService.Clock(mode.Settings().Get("startTimeMinutes")) + ", " + mode.Settings().Get("timeMultiplier").ToString() + "x progression. Current round clock unchanged."); + else replies.Insert("Invalid time or settings could not be saved. Use mission time set HH:MM (00:00-23:59) or mission speed set N (1-24). Previous setting retained."); + return true; + } + protected string SettingHelp(string key) + { + if (key == "intelRevealChancePercent") + return "Use /esc intel reveal set N (0-100). This is the chance that a first document identifies its location exactly; otherwise it gives a rough location. A second document for that location always identifies it. Changes affect newly recovered documents immediately; known locations and spent documents remain unchanged."; + return ""; + } + protected void SettingCommand(ERR_Settings settings, string key, array parts, array replies) + { + if (parts.Count() == 3 && parts[2] == "show") { replies.Insert(key + "=" + settings.Get(key).ToString()); return; } + string help = SettingHelp(key); + if (parts.Count() == 3 && parts[2] == "help" && !help.IsEmpty()) { replies.Insert(help); return; } + int value; + if (parts.Count() == 4 && parts[2] == "set" && ERR_CommandArguments.Integer(parts[3], value) && settings.Set(key, value)) + replies.Insert(key + "=" + value.ToString() + " saved"); + else + { + string failure = "Invalid value or settings could not be saved; previous setting retained."; + if (!help.IsEmpty()) failure += " " + help; + replies.Insert(failure); + } + } + protected string Help() + { + return "/esc status | settings | mission abandon | mission radio show|set N | mission date show|set YYYY-MM-DD|authored | mission weather show|set authored|clear|overcast|rain | mission time show|set HH:MM | mission speed show|set N | intel reveal show|set N|help | spectate next|previous"; + } + void Execute(ERR_GameMode mode, bool authorized, string arguments, array replies) + { + replies.Clear(); + if (!Replication.IsServer() || !mode) return; + if (!authorized) { replies.Insert("Administrator access required."); return; } + if (arguments.Length() > 160) { replies.Insert("Command is too long."); return; } + arguments = arguments.Trim(); arguments.ToLower(); + if (arguments == "status") { replies.Insert(mode.Status()); Extension(mode, arguments, replies); return; } + if (arguments == "mission abandon") + { + if (mode.AbandonRound()) replies.Insert("Round abandoned. The normal defeat and restart sequence has begun."); + else replies.Insert("Only an active round can be abandoned."); + return; + } + if (!mode.Settings()) { replies.Insert("Mission settings are not ready."); return; } + if (arguments == "settings") + { + foreach (string key : ERR_Settings.Keys()) replies.Insert(key + "=" + mode.Settings().Get(key).ToString()); + return; + } + if (Extension(mode, arguments, replies)) return; + array parts = {}; + arguments.Split(" ", parts, true); + if (ERR_EnvironmentCommands.Execute(mode.Settings(), mode.Environment(), parts, replies)) return; + if (TimeCommand(mode, parts, replies)) return; + if (parts.Count() == 3 || parts.Count() == 4) + { + string key = Setting(parts[0], parts[1]); + if (!key.IsEmpty()) + { + SettingCommand(mode.Settings(), key, parts, replies); + return; + } + } + replies.Insert(Help()); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c new file mode 100644 index 0000000..f3703aa --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c @@ -0,0 +1,82 @@ +// Conservative fallback for a sleeping, engine-off Mi8 whose native simulation +// has not yet populated contact flags. Reads physical support; never wakes it. +class ERR_CasualtyGroundSupport +{ + static bool SupportHit(float fraction, float normalY, bool selfHit, bool dynamicHit) + { + return fraction >= 0 && fraction < 1 && normalY >= 0.85 && !selfHit && !dynamicHit; + } + static bool BelongsTo(IEntity entity, IEntity root) + { + while (entity) + { + if (entity == root) return true; + entity = entity.GetParent(); + } + return false; + } + static bool WheelCenter(Vehicle aircraft, string bone, out vector center, bool diagnostics = false) + { + if (!aircraft) return false; + if (aircraft.GetBoneIndex(bone) == -1) + { + if (diagnostics) Print("ERR GEAR PIVOT MISSING: " + bone); + return false; + } + vector identity[4]; Math3D.MatrixIdentity4(identity); + PointInfo pivot = new PointInfo(); + pivot.Set(aircraft, bone, identity); + vector world[4]; pivot.GetWorldTransform(world); + center = world[3]; + if (diagnostics) PrintFormat("ERR GEAR PIVOT: bone=%1 node=%2 center=%3", bone, pivot.GetNodeId(), center); + return pivot.GetNodeId() != -1; + } + static bool WheelSupported(Vehicle aircraft, vector center, float radius, bool diagnostics = false) + { + vector bottom = center - Vector(0, radius, 0); + TraceParam trace = new TraceParam(); + trace.Start = bottom + "0 0.10 0"; + trace.End = bottom - "0 0.12 0"; + trace.Flags = TraceFlags.WORLD | TraceFlags.ENTS; + trace.LayerMask = TRACE_LAYER_CAMERA; + trace.Exclude = aircraft; + float fraction = aircraft.GetWorld().TraceMove(trace, null); + bool selfHit = trace.TraceEnt && BelongsTo(trace.TraceEnt, aircraft); + bool dynamicHit; + if (trace.TraceEnt) + { + Physics surface = trace.TraceEnt.GetPhysics(); + // Unknown/entity-only support and moving actors/vehicles are not parking. + dynamicHit = !surface || surface.IsDynamic(); + } + bool supported = SupportHit(fraction, trace.TraceNorm[1], selfHit, dynamicHit); + if (diagnostics) + { + vector contact = vector.Lerp(trace.Start, trace.End, fraction); + float terrainY = aircraft.GetWorld().GetSurfaceY(bottom[0], bottom[2]); + PrintFormat("ERR GEAR TERRAIN: bottom=%1 terrainY=%2 tireTerrainGap=%3", bottom, terrainY, bottom[1] - terrainY); + PrintFormat("ERR GEAR SUPPORT: center=%1 radius=%2 bottom=%3 fraction=%4 normal=%5 self=%6 dynamic=%7 supported=%8 gap=%9", center, radius, bottom, fraction, trace.TraceNorm, selfHit, dynamicHit, supported, bottom[1] - contact[1]); + } + return supported; + } + static bool Parked(Vehicle aircraft, bool diagnostics = false) + { + if (!aircraft || !aircraft.GetPrefabData() || !aircraft.GetPrefabData().GetPrefabName().Contains("/Mi8MT/")) return false; + Physics physics = aircraft.GetPhysics(); + HelicopterControllerComponent controller = HelicopterControllerComponent.Cast(aircraft.FindComponent(HelicopterControllerComponent)); + if (!physics || !controller || !controller.GetSimulation()) return false; + if (diagnostics) PrintFormat("ERR PARKED SUPPORT: physicsAwake=%1 engineOn=%2 nativeContact=%3", physics.IsActive(), controller.GetSimulation().EngineIsOn(), controller.GetSimulation().HasAnyGroundContact()); + if (physics.IsActive() || controller.GetSimulation().EngineIsOn()) return false; + vector front, left, right; + if (!WheelCenter(aircraft, "v_wheel_F", front, diagnostics) || !WheelCenter(aircraft, "v_wheel_bL", left, diagnostics) || !WheelCenter(aircraft, "v_wheel_bR", right, diagnostics)) return false; + // Fail closed if native pivot resolution collapses to an owner origin or + // otherwise cannot represent the authored three-point landing footprint. + if (vector.DistanceXZ(front, left) < 1 || vector.DistanceXZ(front, right) < 1 || vector.DistanceXZ(left, right) < 1) return false; + // Radii come from installed Mi8_base.et's authored landing-gear configuration. + // Every wheel needs a short, upward-facing static collision directly below. + bool a = WheelSupported(aircraft, front, 0.30, diagnostics); + bool b = WheelSupported(aircraft, left, 0.45, diagnostics); + bool c = WheelSupported(aircraft, right, 0.45, diagnostics); + return a && b && c; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c new file mode 100644 index 0000000..a732a63 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c @@ -0,0 +1,48 @@ +// Round-owned server service; only the aircraft reference is replicated for action visibility. +modded class ERR_GameMode +{ + protected ref ERR_CasualtyLoadingService m_ERRCasualtyLoading; + [RplProp()] + protected RplId m_ERRCasualtyAircraftId = RplId.Invalid(); + ERR_CasualtyLoadingService CasualtyLoading() { return m_ERRCasualtyLoading; } + Vehicle CasualtyLoadingAircraft() + { + if (Replication.IsServer()) return ExtractionVehicle(); + RplComponent component = RplComponent.Cast(Replication.FindItem(m_ERRCasualtyAircraftId)); + if (!component) return null; + return Vehicle.Cast(component.GetEntity()); + } + protected void ERR_UpdateCasualtyAircraft(float now) + { + Vehicle aircraft = ExtractionVehicle(); + if (!aircraft) + { + if (m_ERRCasualtyAircraftId != RplId.Invalid()) { m_ERRCasualtyAircraftId = RplId.Invalid(); Replication.BumpMe(); } + return; + } + RplComponent component = RplComponent.Cast(aircraft.FindComponent(RplComponent)); + if (!component || m_ERRCasualtyAircraftId == component.Id()) return; + m_ERRCasualtyAircraftId = component.Id(); + Replication.BumpMe(); + } + protected void ERR_StopCasualtyLoading() + { + if (m_ERRCasualtyLoading) + { + Players().OnChanged().Remove(m_ERRCasualtyLoading.RosterChanged); + OnTick().Remove(m_ERRCasualtyLoading.Tick); + m_ERRCasualtyLoading.Stop(); + } + OnTick().Remove(ERR_UpdateCasualtyAircraft); + } + protected override void EOnInit(IEntity owner) + { + super.EOnInit(owner); + if (!Replication.IsServer() || SCR_Global.IsEditMode()) return; + m_ERRCasualtyLoading = new ERR_CasualtyLoadingService(this); + OnTick().Insert(ERR_UpdateCasualtyAircraft); + OnTick().Insert(m_ERRCasualtyLoading.Tick); + Players().OnChanged().Insert(m_ERRCasualtyLoading.RosterChanged); + OnStop().Insert(ERR_StopCasualtyLoading); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c new file mode 100644 index 0000000..c6fa983 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c @@ -0,0 +1,75 @@ +// Only successor service methods initiate this controller-owned handshake. +// No caller-supplied entity/seat RPC can ask the server to load another player. +modded class SCR_PlayerController +{ + protected RplId m_ERRPreparedLoadMode = RplId.Invalid(); + protected int m_ERRPreparedLoadNonce; + protected int m_ERRPreparedLoadClock; + protected int m_ERRLastLoadNonce; + + void ERR_PrepareCasualtyLoad(RplId modeId, int nonce) + { + if (!Replication.IsServer()) return; + if (this == GetGame().GetPlayerController()) ERR_PrepareCasualtyLoadOwner(modeId, nonce); + else Rpc(ERR_PrepareCasualtyLoadOwner, modeId, nonce); + } + [RplRpc(RplChannel.Reliable, RplRcver.Owner)] + protected void ERR_PrepareCasualtyLoadOwner(RplId modeId, int nonce) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (this != GetGame().GetPlayerController() || !mode || !mode.Active() || mode.Phase() != ERR_Phase.EXTRACTION || ERR_CasualtyLoadingRules.EntityId(mode) != modeId || !ERR_CasualtyLoadingRules.GroundSettled(GetControlledEntity())) return; + if (m_ERRPreparedLoadMode == modeId && nonce <= m_ERRLastLoadNonce) return; + if (nonce <= 0) return; + m_ERRPreparedLoadMode = modeId; + m_ERRPreparedLoadNonce = nonce; + m_ERRLastLoadNonce = nonce; + m_ERRPreparedLoadClock = System.GetTickCount(); + if (Replication.IsServer()) ERR_CasualtyLoadReady(modeId, nonce); + else Rpc(ERR_CasualtyLoadReady, modeId, nonce); + } + [RplRpc(RplChannel.Reliable, RplRcver.Server)] + protected void ERR_CasualtyLoadReady(RplId modeId, int nonce) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!Replication.IsServer() || !mode || ERR_CasualtyLoadingRules.EntityId(mode) != modeId || !mode.CasualtyLoading()) return; + mode.CasualtyLoading().OwnerReady(this, nonce); + } + void ERR_CommitCasualtyLoad(RplId modeId, int nonce, RplId callerId, RplId actorId, RplId vehicleId, RplId ownerId, int slotId) + { + if (!Replication.IsServer()) return; + if (this == GetGame().GetPlayerController()) ERR_CommitCasualtyLoadOwner(modeId, nonce, callerId, actorId, vehicleId, ownerId, slotId); + else Rpc(ERR_CommitCasualtyLoadOwner, modeId, nonce, callerId, actorId, vehicleId, ownerId, slotId); + } + [RplRpc(RplChannel.Reliable, RplRcver.Owner)] + protected void ERR_CommitCasualtyLoadOwner(RplId modeId, int nonce, RplId callerId, RplId actorId, RplId vehicleId, RplId ownerId, int slotId) + { + bool lease = this == GetGame().GetPlayerController() && m_ERRPreparedLoadMode == modeId && m_ERRPreparedLoadNonce == nonce && ERR_CasualtyLoadingRules.Within(m_ERRPreparedLoadClock, System.GetTickCount(), 3000); + if (m_ERRPreparedLoadMode == modeId && m_ERRPreparedLoadNonce == nonce) m_ERRPreparedLoadNonce = 0; + // Consume the local lease before the native call so duplicates cannot act. + bool accepted; + ERR_GameMode mode = ERR_GameMode.Get(); + IEntity actor = GetControlledEntity(); + IEntity caller = ERR_CasualtyLoadingRules.Entity(callerId); + Vehicle vehicle = Vehicle.Cast(ERR_CasualtyLoadingRules.Entity(vehicleId)); + IEntity owner = ERR_CasualtyLoadingRules.Entity(ownerId); + if (lease && mode && ERR_CasualtyLoadingRules.EntityId(mode) == modeId && ERR_CasualtyLoadingRules.EntityId(actor) == actorId && vehicle == mode.CasualtyLoadingAircraft() && ERR_CasualtyLoadingRules.Nearby(mode, caller, actor) && owner) + { + BaseCompartmentManagerComponent manager = BaseCompartmentManagerComponent.Cast(owner.FindComponent(BaseCompartmentManagerComponent)); + SCR_CompartmentAccessComponent access = SCR_CompartmentAccessComponent.Cast(actor.FindComponent(SCR_CompartmentAccessComponent)); + BaseCompartmentSlot seat; + if (manager) seat = manager.FindCompartment(slotId); + if (access && ERR_CasualtyLoadingRules.TransportBench(seat, vehicle) && seat.GetOwner() == owner && !seat.GetOccupant() && seat.IsCompartmentAccessible() && !seat.IsGetInLockedFor(actor) && (!seat.IsReserved() || seat.IsReservedBy(actor))) + accepted = access.GetInVehicle(owner, seat, true, -1, ECloseDoorAfterActions.INVALID, false); + } + // Missing replicated entities or rejected native entry fail once; never retry. + if (Replication.IsServer()) ERR_CasualtyLoadResult(modeId, nonce, accepted); + else Rpc(ERR_CasualtyLoadResult, modeId, nonce, accepted); + } + [RplRpc(RplChannel.Reliable, RplRcver.Server)] + protected void ERR_CasualtyLoadResult(RplId modeId, int nonce, bool accepted) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!Replication.IsServer() || !mode || ERR_CasualtyLoadingRules.EntityId(mode) != modeId || !mode.CasualtyLoading()) return; + mode.CasualtyLoading().OwnerResult(this, nonce, accepted); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c new file mode 100644 index 0000000..5b5091a --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c @@ -0,0 +1,331 @@ +// First release supports only the registered Mi8 extraction aircraft's physical +// child transport benches. Nothing changes health, ownership, or seat classes. +class ERR_CasualtyLoadingRules +{ + static int RoundAction(int phase) + { + if (phase == ERR_Phase.PREPARING) return 0; + if (ERR_MissionRules.Terminal(phase)) return 2; + return 1; + } + static bool ObserveTicket(bool committed, bool physical, bool authorized) + { + return physical && (committed || authorized); + } + static bool Within(int started, int now, int limit) { return now >= started && now - started < limit; } + static bool SettledFor(int started, int observed, int now) + { + return started >= 0 && now >= started && now - started >= 5000 && Within(observed, now, 2000); + } + static bool Ranges(float callerToCasualty, float callerToAircraft, float casualtyToAircraft) + { + return callerToCasualty >= 0 && callerToCasualty <= 3 && callerToAircraft >= 0 && callerToAircraft <= 12 && casualtyToAircraft >= 0 && casualtyToAircraft <= 12; + } + static bool AircraftMotion(bool groundContact, float up, float speed, float angularSpeed) + { + return groundContact && up >= 0.85 && speed >= 0 && speed <= 0.5 && angularSpeed >= 0 && angularSpeed <= 0.1; + } + static RplId EntityId(IEntity entity) + { + if (!entity) return RplId.Invalid(); + RplComponent component = RplComponent.Cast(entity.FindComponent(RplComponent)); + if (!component) return RplId.Invalid(); + return component.Id(); + } + static IEntity Entity(RplId id) + { + if (id == RplId.Invalid()) return null; + RplComponent component = RplComponent.Cast(Replication.FindItem(id)); + if (!component) return null; + return component.GetEntity(); + } + static bool Down(IEntity actor) + { + if (!ERR_Actors.Alive(actor)) return false; + CharacterControllerComponent controller = CharacterControllerComponent.Cast(actor.FindComponent(CharacterControllerComponent)); + return controller && controller.GetLifeState() == ECharacterLifeState.INCAPACITATED; + } + static bool GroundSettled(IEntity actor) + { + if (!Down(actor) || CompartmentAccessComponent.GetVehicleIn(actor)) return false; + CharacterAnimationComponent animation = CharacterAnimationComponent.Cast(actor.FindComponent(CharacterAnimationComponent)); + SCR_CompartmentAccessComponent access = SCR_CompartmentAccessComponent.Cast(actor.FindComponent(SCR_CompartmentAccessComponent)); + Physics physics = actor.GetPhysics(); + return animation && !animation.PhysicsIsFalling() && physics && physics.GetVelocity().Length() <= 0.5 && access && !access.IsGettingIn() && !access.IsGettingOut(); + } + static bool AircraftReady(Vehicle aircraft) + { + if (!ERR_Actors.Alive(aircraft)) return false; + HelicopterControllerComponent controller = HelicopterControllerComponent.Cast(aircraft.FindComponent(HelicopterControllerComponent)); + Physics physics = aircraft.GetPhysics(); + if (!controller || !controller.GetSimulation() || !physics) return false; + vector transform[4]; aircraft.GetWorldTransform(transform); + if (!AircraftMotion(true, transform[1][1], physics.GetVelocity().Length(), physics.GetAngularVelocity().Length())) return false; + if (controller.GetSimulation().HasAnyGroundContact()) return true; + return ERR_CasualtyGroundSupport.Parked(aircraft); + } + static bool LineOfSight(IEntity caller, IEntity casualty) + { + ChimeraCharacter rescuer = ChimeraCharacter.Cast(caller); + ChimeraCharacter patient = ChimeraCharacter.Cast(casualty); + if (!rescuer || !patient || !GetGame()) return false; + TraceParam trace = new TraceParam(); + trace.Start = rescuer.AimingPosition(); + trace.End = patient.AimingPosition(); + trace.Flags = TraceFlags.WORLD | TraceFlags.ENTS; + trace.LayerMask = TRACE_LAYER_CAMERA; + trace.Exclude = caller; + if (GetGame().GetWorld().TraceMove(trace, null) >= 1) return true; + // Hitting the intended body's clothing/attachment is still sight of that body. + IEntity hit = trace.TraceEnt; + while (hit) + { + if (hit == casualty) return true; + hit = hit.GetParent(); + } + return false; + } + static bool Nearby(ERR_GameMode mode, IEntity caller, IEntity casualty) + { + if (!mode || !mode.Active() || mode.Phase() != ERR_Phase.EXTRACTION || !caller || caller == casualty) return false; + CharacterControllerComponent rescuer = CharacterControllerComponent.Cast(caller.FindComponent(CharacterControllerComponent)); + if (!ERR_Actors.CanFight(caller) || !rescuer || rescuer.GetLifeState() != ECharacterLifeState.ALIVE || !GroundSettled(casualty) || CompartmentAccessComponent.GetVehicleIn(caller)) return false; + Vehicle aircraft = mode.CasualtyLoadingAircraft(); + if (!aircraft || !Ranges(vector.Distance(caller.GetOrigin(), casualty.GetOrigin()), vector.Distance(caller.GetOrigin(), aircraft.GetOrigin()), vector.Distance(casualty.GetOrigin(), aircraft.GetOrigin())) || !AircraftReady(aircraft)) return false; + Faction faction = mode.PlayerFaction(); + return faction && SCR_FactionManager.SGetFaction(caller) == faction && SCR_FactionManager.SGetFaction(casualty) == faction && LineOfSight(caller, casualty); + } + static bool TransportBench(BaseCompartmentSlot seat, Vehicle aircraft) + { + if (!seat || !aircraft || seat.GetType() != ECompartmentType.CARGO || SCR_PatientCompartmentSlot.Cast(seat)) return false; + IEntity owner = seat.GetOwner(); + if (!owner || owner == aircraft || !owner.GetPrefabData() || !owner.GetPrefabData().GetPrefabName().Contains("VehPart_MI8_seats")) return false; + while (owner) + { + if (owner == aircraft) return true; + owner = owner.GetParent(); + } + return false; + } +} +class ERR_CasualtySettling +{ + IEntity Actor; + UUID Account; + int Connection; + int Since; + int Observed; +} +class ERR_CasualtyLoadTicket +{ + IEntity Caller; + IEntity Casualty; + Vehicle Aircraft; + BaseCompartmentSlot Seat; + UUID CallerAccount; + UUID CasualtyAccount; + int CallerConnection; + int CasualtyConnection; + int Nonce; + int Started; + int CommittedAt; + bool Committed; + bool OwnerReported; +} +class ERR_CasualtyLoadingService +{ + protected ERR_GameMode m_Mode; + protected bool m_Stopped; + protected int m_NextNonce; + protected bool m_MaintenanceQueued; + protected ref array m_Settling = {}; + protected ref array m_Pending = {}; + protected ref ScriptInvoker m_OnResolved = new ScriptInvoker(); + void ERR_CasualtyLoadingService(ERR_GameMode mode) { m_Mode = mode; } + ScriptInvoker OnResolved() { return m_OnResolved; } // (IEntity casualty, bool physicallyLoaded) + int PendingCount() { return m_Pending.Count(); } + protected ERR_PlayerLife CurrentLife(IEntity actor) + { + if (!m_Mode || !m_Mode.Players()) return null; + return m_Mode.Players().CurrentActor(actor); + } + protected bool SameLife(IEntity actor, UUID account, int connection) + { + ERR_PlayerLife life = CurrentLife(actor); + return life && life.AccountId == account && life.ConnectionId == connection; + } + protected bool Settled(IEntity actor, int now) + { + foreach (ERR_CasualtySettling sample : m_Settling) + if (sample.Actor == actor && SameLife(actor, sample.Account, sample.Connection)) return ERR_CasualtyLoadingRules.GroundSettled(actor) && ERR_CasualtyLoadingRules.SettledFor(sample.Since, sample.Observed, now); + return false; + } + protected void Observe(int now) + { + for (int index = m_Settling.Count() - 1; index >= 0; index--) + { + ERR_CasualtySettling sample = m_Settling[index]; + if (!SameLife(sample.Actor, sample.Account, sample.Connection) || !ERR_CasualtyLoadingRules.GroundSettled(sample.Actor) || !ERR_CasualtyLoadingRules.Within(sample.Observed, now, 2000)) m_Settling.Remove(index); + else sample.Observed = now; + } + array lives = {}; m_Mode.Players().Participants(lives); + foreach (ERR_PlayerLife life : lives) + { + if (!CurrentLife(life.Actor) || !ERR_CasualtyLoadingRules.GroundSettled(life.Actor)) continue; + bool found; + foreach (ERR_CasualtySettling tracked : m_Settling) if (tracked.Actor == life.Actor) { found = true; break; } + if (found) continue; + ERR_CasualtySettling added = new ERR_CasualtySettling(); + added.Actor = life.Actor; added.Account = life.AccountId; added.Connection = life.ConnectionId; added.Since = now; added.Observed = now; + m_Settling.Insert(added); + } + } + protected bool PendingActor(IEntity caller, IEntity casualty) + { + foreach (ERR_CasualtyLoadTicket pending : m_Pending) + if (pending.Caller == caller || pending.Casualty == casualty) return true; + return false; + } + protected BaseCompartmentSlot AvailableSeat(IEntity casualty, Vehicle aircraft) + { + array seats = {}; m_Mode.Extraction().Seats(seats); + foreach (BaseCompartmentSlot seat : seats) + { + if (!ERR_CasualtyLoadingRules.TransportBench(seat, aircraft) || seat.GetOccupant() || seat.IsReserved() || !seat.IsCompartmentAccessible() || seat.IsGetInLockedFor(casualty)) continue; + bool pendingSeat; + foreach (ERR_CasualtyLoadTicket pending : m_Pending) if (pending.Seat == seat) { pendingSeat = true; break; } + if (!pendingSeat) return seat; + } + return null; + } + bool CanLoad(IEntity caller, IEntity casualty) + { + if (!Replication.IsServer() || m_Stopped || !ERR_CasualtyLoadingRules.Nearby(m_Mode, caller, casualty)) return false; + if (!CurrentLife(caller) || !CurrentLife(casualty) || !Settled(casualty, System.GetTickCount()) || PendingActor(caller, casualty)) return false; + return AvailableSeat(casualty, m_Mode.ExtractionVehicle()) != null; + } + bool Begin(IEntity caller, IEntity casualty) + { + if (!CanLoad(caller, casualty) || m_NextNonce >= 2147483646) return false; + ERR_PlayerLife callerLife = CurrentLife(caller); + ERR_PlayerLife casualtyLife = CurrentLife(casualty); + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(casualtyLife.ConnectionId)); + if (!controller || ERR_CasualtyLoadingRules.EntityId(m_Mode) == RplId.Invalid() || ERR_CasualtyLoadingRules.EntityId(caller) == RplId.Invalid() || ERR_CasualtyLoadingRules.EntityId(casualty) == RplId.Invalid() || ERR_CasualtyLoadingRules.EntityId(m_Mode.ExtractionVehicle()) == RplId.Invalid()) return false; + ERR_CasualtyLoadTicket ticket = new ERR_CasualtyLoadTicket(); + ticket.Caller = caller; ticket.Casualty = casualty; ticket.Aircraft = m_Mode.ExtractionVehicle(); + ticket.Seat = AvailableSeat(casualty, ticket.Aircraft); + if (!ticket.Seat || ERR_CasualtyLoadingRules.EntityId(ticket.Seat.GetOwner()) == RplId.Invalid()) return false; + ticket.CallerAccount = callerLife.AccountId; ticket.CasualtyAccount = casualtyLife.AccountId; + ticket.CallerConnection = callerLife.ConnectionId; ticket.CasualtyConnection = casualtyLife.ConnectionId; + ticket.Started = System.GetTickCount(); ticket.Nonce = ++m_NextNonce; + m_Pending.Insert(ticket); + ticket.Seat.SetReserved(casualty); + if (!ticket.Seat.IsReservedBy(casualty)) { Resolve(ticket, false); return false; } + ScheduleMaintenance(); + // Preparation never moves the actor. Its owner starts a local real-time lease. + controller.ERR_PrepareCasualtyLoad(ERR_CasualtyLoadingRules.EntityId(m_Mode), ticket.Nonce); + return true; + } + protected ERR_CasualtyLoadTicket Ticket(SCR_PlayerController controller, int nonce) + { + if (!controller || !GetGame() || !GetGame().GetPlayerManager() || GetGame().GetPlayerManager().GetPlayerController(controller.GetPlayerId()) != controller) return null; + foreach (ERR_CasualtyLoadTicket ticket : m_Pending) + if (ticket.Nonce == nonce && ticket.CasualtyConnection == controller.GetPlayerId() && ticket.Casualty == controller.GetControlledEntity()) return ticket; + return null; + } + void OwnerReady(SCR_PlayerController controller, int nonce) + { + if (!Replication.IsServer() || m_Stopped) return; + ERR_CasualtyLoadTicket ticket = Ticket(controller, nonce); + if (!ticket || ticket.Committed) return; + int now = System.GetTickCount(); + if (!ValidTicket(ticket) || !ERR_CasualtyLoadingRules.Within(ticket.Started, now, 5000) || !Settled(ticket.Casualty, now) || !ERR_CasualtyLoadingRules.Nearby(m_Mode, ticket.Caller, ticket.Casualty) || ticket.Seat.GetOccupant() || !ticket.Seat.IsCompartmentAccessible() || ticket.Seat.IsGetInLockedFor(ticket.Casualty) || !ticket.Seat.IsReservedBy(ticket.Casualty)) { Resolve(ticket, false); return; } + ticket.Committed = true; ticket.CommittedAt = now; + // Final authority/physical validation is the commit boundary. No retries. + controller.ERR_CommitCasualtyLoad(ERR_CasualtyLoadingRules.EntityId(m_Mode), nonce, ERR_CasualtyLoadingRules.EntityId(ticket.Caller), ERR_CasualtyLoadingRules.EntityId(ticket.Casualty), ERR_CasualtyLoadingRules.EntityId(ticket.Aircraft), ERR_CasualtyLoadingRules.EntityId(ticket.Seat.GetOwner()), ticket.Seat.GetCompartmentSlotID()); + } + void OwnerResult(SCR_PlayerController controller, int nonce, bool accepted) + { + if (!Replication.IsServer() || m_Stopped) return; + ERR_CasualtyLoadTicket ticket = Ticket(controller, nonce); + if (!ticket || !ticket.Committed || ticket.OwnerReported) return; + ticket.OwnerReported = true; + if (!accepted) Print("Rereintroduced [casualty]: owner declined loading; observing physical outcome until expiry."); + // Neither positive nor negative client acknowledgements release a reserved + // seat while an authorized owner command could still be in flight. + } + protected bool PhysicalTicket(ERR_CasualtyLoadTicket ticket) + { + // Death cannot revoke an in-flight commit. Keep the vacant seat reserved + // while the captured body exists; its owner may still see the prior state. + return m_Mode && m_Mode.Active() && m_Mode.Phase() == ERR_Phase.EXTRACTION && ticket.Aircraft == m_Mode.ExtractionVehicle() && ERR_Actors.Alive(ticket.Aircraft) && ticket.Casualty != null && ERR_CasualtyLoadingRules.TransportBench(ticket.Seat, ticket.Aircraft); + } + protected bool ValidTicket(ERR_CasualtyLoadTicket ticket) + { + return m_Mode && m_Mode.Active() && m_Mode.Phase() == ERR_Phase.EXTRACTION && ticket.Aircraft == m_Mode.ExtractionVehicle() && ERR_Actors.Alive(ticket.Aircraft) && ERR_Actors.Alive(ticket.Casualty) && SameLife(ticket.Caller, ticket.CallerAccount, ticket.CallerConnection) && SameLife(ticket.Casualty, ticket.CasualtyAccount, ticket.CasualtyConnection) && ERR_CasualtyLoadingRules.TransportBench(ticket.Seat, ticket.Aircraft); + } + protected void Resolve(ERR_CasualtyLoadTicket ticket, bool success) + { + int index = m_Pending.Find(ticket); if (index < 0) return; + m_Pending.Remove(index); + if (ticket.Seat && ticket.Casualty && ticket.Seat.IsReservedBy(ticket.Casualty)) ticket.Seat.SetReserved(null); + if (m_Pending.IsEmpty()) CancelMaintenance(); + m_OnResolved.Invoke(ticket.Casualty, success); + } + void Tick(float worldNow) + { + if (!Replication.IsServer() || m_Stopped || !m_Mode) return; + int roundAction = ERR_CasualtyLoadingRules.RoundAction(m_Mode.Phase()); + if (roundAction == 0) return; + if (roundAction == 2) { Stop(); return; } + int now = System.GetTickCount(); + Observe(now); + MaintainPending(); + } + protected void ScheduleMaintenance() + { + if (m_MaintenanceQueued || m_Stopped || m_Pending.IsEmpty() || !GetGame()) return; + // Only ticket observation runs independently of player population. No owner + // request is retried and neither local nor server leases are refreshed. + m_MaintenanceQueued = true; + GetGame().GetCallqueue().CallLater(MaintainPending, 250, true); + } + protected void CancelMaintenance() + { + if (!m_MaintenanceQueued) return; + m_MaintenanceQueued = false; + if (GetGame()) GetGame().GetCallqueue().Remove(MaintainPending); + } + protected void MaintainPending() + { + if (!Replication.IsServer() || m_Stopped) { CancelMaintenance(); return; } + if (!m_Mode || ERR_MissionRules.Terminal(m_Mode.Phase())) { Stop(); return; } + if (m_Pending.IsEmpty()) { CancelMaintenance(); return; } + int now = System.GetTickCount(); + array snapshot = {}; foreach (ERR_CasualtyLoadTicket item : m_Pending) snapshot.Insert(item); + foreach (ERR_CasualtyLoadTicket ticket : snapshot) + { + if (m_Stopped) return; + // Commit authorizes one move of the captured body; a later caller/target + // disconnect cannot revoke that command or release its seat prematurely. + if (!ERR_CasualtyLoadingRules.ObserveTicket(ticket.Committed, PhysicalTicket(ticket), ValidTicket(ticket))) { Resolve(ticket, false); continue; } + bool aboard = CompartmentAccessComponent.GetVehicleIn(ticket.Casualty) == ticket.Aircraft && ticket.Seat.GetOccupant() == ticket.Casualty; + if (aboard && ticket.Committed) { Resolve(ticket, ERR_Actors.Alive(ticket.Casualty)); continue; } + if (ticket.Committed) + { + // Owner's prepare-to-commit lease is only 3s; this 8s observation budget + // leaves room for replication. Timeouts do not issue compensating teleports. + if (!ERR_CasualtyLoadingRules.Within(ticket.CommittedAt, now, 8000)) Resolve(ticket, false); + } + else if (!ERR_CasualtyLoadingRules.Within(ticket.Started, now, 5000) || !ERR_CasualtyLoadingRules.Nearby(m_Mode, ticket.Caller, ticket.Casualty)) Resolve(ticket, false); + } + } + void RosterChanged(int connection) { if (GetGame()) Tick(GetGame().GetWorld().GetWorldTime()); } + void Stop() + { + if (!Replication.IsServer() || m_Stopped) return; + m_Stopped = true; m_Settling.Clear(); + CancelMaintenance(); + while (!m_Pending.IsEmpty()) Resolve(m_Pending[m_Pending.Count() - 1], false); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c new file mode 100644 index 0000000..18344bd --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c @@ -0,0 +1,119 @@ +// A first clue identifies a stable search square, not the exact objective. +// Stable grid centers prevent repeated updates from triangulating the site. +class ERR_DiscoveryMapRules +{ + static int Coordinate(float coordinate, int knowledge) + { + if (knowledge >= 2) return Math.Round(coordinate); + return Math.Floor(coordinate / 500.0) * 500 + 250; + } +} + +// Discovery markers are authored objective information, not player annotations. +// Native local insertion overwrites owner ID before OnCreateMarker; clear it at +// that boundary so native edit/drag cannot move a discovered objective. +class ERR_DiscoveryMarker : SCR_MapMarkerBase +{ + void ERR_DiscoveryMarker() { SetCanBeRemovedByOwner(false); } + void SetDiscoveryPosition(vector position, int knowledge) + { + SetWorldPos(ERR_DiscoveryMapRules.Coordinate(position[0], knowledge), ERR_DiscoveryMapRules.Coordinate(position[2], knowledge)); + } + override void OnCreateMarker(bool skipProfanityFilter = false) + { + SetMarkerOwnerID(-1); + // Text is scenario-authored, never user input. Avoid delayed UGC callbacks + // overwriting a newer discovery label after the location becomes identified. + super.OnCreateMarker(true); + } + override void OnDelete() + { + SCR_MapEntity.GetOnMapClose().Remove(OnMapClosed); + SCR_MapEntity.GetOnLayerChanged().Remove(OnMapLayerChanged); + super.OnDelete(); + m_wRoot = null; + m_MarkerWidgetComp = null; + } + override void SetCustomText(string text) + { + super.SetCustomText(text); + // Native SetCustomText updates data only; an already-open map needs its + // existing widget updated too. Closed maps use the saved text on creation. + SCR_MapMarkerWidgetComponent widget = GetMarkerComponent(); + if (GetRootWidget() && widget) widget.SetText(text, true); + } +} + +// Vanilla local deletion removes only its active list. A culled local objective +// must also leave the disabled list or map movement can resurrect it later. +modded class SCR_MapMarkerManagerComponent +{ + void ERR_RemoveDiscoveryMarker(ERR_DiscoveryMarker marker) + { + if (!marker || marker.GetMarkerID() != -1) return; + m_aStaticMarkers.RemoveItem(marker); + m_aDisabledMarkers.RemoveItem(marker); + marker.OnDelete(); + } +} + +// Read replicated discovery locally. A server-wide marker list never leaks +// locations which have not been recovered through gameplay. +modded class ERR_LocationComponent +{ + protected ref ERR_DiscoveryMarker m_ERRMarker; + protected int m_ERRShown; + protected string m_ERRShownLabel; + + protected override void EOnInit(IEntity owner) + { + super.EOnInit(owner); + if (RplSession.Mode() != RplMode.Dedicated && !SCR_Global.IsEditMode()) + GetGame().GetCallqueue().CallLater(ERR_UpdateMarker, 1500, true); + } + protected void ERR_UpdateMarker() + { + if (!GetGame().GetPlayerController() || Knowledge() <= 0 || (Knowledge() == m_ERRShown && Label() == m_ERRShownLabel)) return; + SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance(); + if (!manager || !manager.GetMarkerConfig()) return; + string label = "Search area (500 m square)"; + if (Knowledge() == 2) + { + if (!Label().IsEmpty()) label = Label(); + else if (Kind() == ERR_LocationKind.RADIO) label = "Radio station"; + else if (Kind() == ERR_LocationKind.EXTRACTION) label = "Initial helicopter pickup site"; + else if (Kind() == ERR_LocationKind.DEPOT) label = "Supply cache"; + else if (Kind() == ERR_LocationKind.PRISON) label = "Prison"; + else label = Id(); + } + if (!m_ERRMarker) + { + m_ERRMarker = new ERR_DiscoveryMarker(); + m_ERRMarker.SetType(SCR_EMapMarkerType.PLACED_CUSTOM); + m_ERRMarker.SetDiscoveryPosition(Position(), Knowledge()); + m_ERRMarker.SetMarkerConfigID(0); + m_ERRMarker.SetCustomText(label); + manager.InsertStaticMarker(m_ERRMarker, true); + } + m_ERRMarker.SetDiscoveryPosition(Position(), Knowledge()); + m_ERRMarker.SetCustomText(label); + // Reactivate a previously culled rough marker if the exact point moves + // into the open map's view. Native update performs normal visibility checks. + SCR_MapEntity mapEntity = SCR_MapEntity.GetMapInstance(); + if (mapEntity && mapEntity.IsOpen()) manager.SetStaticMarkerDisabled(m_ERRMarker, false); + m_ERRShown = Knowledge(); + m_ERRShownLabel = Label(); + } + protected override void OnDelete(IEntity owner) + { + if (GetGame()) GetGame().GetCallqueue().Remove(ERR_UpdateMarker); + SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance(); + if (m_ERRMarker) + { + if (manager) manager.ERR_RemoveDiscoveryMarker(m_ERRMarker); + else m_ERRMarker.OnDelete(); + } + m_ERRMarker = null; + super.OnDelete(owner); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c new file mode 100644 index 0000000..d513413 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c @@ -0,0 +1,64 @@ +// Base mission discovery: recovering physical documents works without companions. +// The Intel addon optionally assigns extra documents to enemy inventories. +class ERR_DiscoveryService +{ + protected ERR_GameMode m_Mode; + protected ref set m_Spent = new set(); + void ERR_DiscoveryService(ERR_GameMode mode) { m_Mode = mode; } + static void Folders(InventoryStorageManagerComponent inventory, out array folders) + { + folders.Clear(); + SCR_PrefabNamePredicate predicate = new SCR_PrefabNamePredicate(); + predicate.prefabName = ERR_Resources.IntelFolder(); + array intel = {}; + inventory.FindItems(intel, predicate, EStoragePurpose.PURPOSE_ANY); + foreach (IEntity folder : intel) + if (folder && !folders.Contains(folder)) folders.Insert(folder); + array objectives = {}; + predicate.prefabName = ERR_Resources.ObjectiveDocument(); + inventory.FindItems(objectives, predicate, EStoragePurpose.PURPOSE_ANY); + foreach (IEntity objective : objectives) + if (objective && !folders.Contains(objective)) folders.Insert(objective); + } + + void Tick(float now) + { + if (!Replication.IsServer()) return; + array players = {}; + ERR_Actors.Players(players); + foreach (IEntity player : players) Recover(player); + } + protected void Recover(IEntity player) + { + if (!Replication.IsServer() || !m_Mode || !m_Mode.Players() || !m_Mode.Players().CurrentActor(player) || !ERR_Actors.Alive(player)) return; + if (!m_Mode.PlayerFaction() || SCR_FactionManager.SGetFaction(player) != m_Mode.PlayerFaction()) return; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(player.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) return; + array folders = {}; + Folders(inventory, folders); + foreach (IEntity folder : folders) + { + if (!folder || m_Spent.Contains(folder) || m_Spent.Count() >= 4096) continue; + array locations = {}; + m_Mode.Locations(locations); + array eligible = {}; + ERR_DocumentComponent document = ERR_DocumentComponent.Cast(folder.FindComponent(ERR_DocumentComponent)); + foreach (ERR_LocationComponent location : locations) + { + if (!location || location.Knowledge() >= 2) continue; + if (document) + { + if (location.Id() == document.TargetId()) eligible.Insert(location); + } + else if (location.Kind() != ERR_LocationKind.PRISON && location.Kind() != ERR_LocationKind.EXTRACTION) eligible.Insert(location); + } + if (eligible.IsEmpty()) continue; + ERR_LocationComponent chosen = eligible.GetRandomElement(); + if (!chosen.Discover(Math.RandomInt(0, 100), m_Mode.Settings().Get("intelRevealChancePercent"))) continue; + m_Spent.Insert(folder); + PrintFormat("Rereintroduced [intel]: player %1 recovered folder; location=%2 knowledge=%3", GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(player), chosen.Id(), chosen.Knowledge()); + } + } + + void Stop() { m_Spent.Clear(); } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c new file mode 100644 index 0000000..4572814 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c @@ -0,0 +1,8 @@ +[ComponentEditorProps(category: "Rereintroduced", description: "Physical document identifying one authored objective")] +class ERR_DocumentComponentClass : ScriptComponentClass {} +class ERR_DocumentComponent : ScriptComponent +{ + protected string m_TargetId; + void SetTarget(string id) { if (Replication.IsServer()) m_TargetId = id; } + string TargetId() { return m_TargetId; } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c new file mode 100644 index 0000000..440a7b9 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c @@ -0,0 +1,164 @@ +// The server applies optional date/weather choices once at round preparation. +// Zero values preserve the world's authored environment and existing defaults. +class ERR_EnvironmentService +{ + protected TimeAndWeatherManagerEntity m_Manager; + protected bool m_Started; + protected bool m_Stopped; + protected int m_DateCode; + protected int m_Profile; + + static string Pad2(int value) + { + if (value < 10) return "0" + value.ToString(); + return value.ToString(); + } + static string Date(int code) + { + if (code == 0) return "authored"; + if (!ERR_Settings.Valid("startDateCode", code)) return "unavailable"; + int year = 1900 + code / 10000; + int month = (code % 10000) / 100; + int day = code % 100; + return year.ToString() + "-" + Pad2(month) + "-" + Pad2(day); + } + static bool ParseDate(string text, out int code) + { + if (text == "authored") { code = 0; return true; } + if (text.Length() != 10 || text.Substring(4, 1) != "-" || text.Substring(7, 1) != "-") return false; + int year, month, day; + if (!ERR_CommandArguments.Integer(text.Substring(0, 4), year) || !ERR_CommandArguments.Integer(text.Substring(5, 2), month) || !ERR_CommandArguments.Integer(text.Substring(8, 2), day)) return false; + if (year < 1900 || year > 2050 || month < 1 || month > 12 || day < 1 || day > 31) return false; + int parsed = (year - 1900) * 10000 + month * 100 + day; + if (!ERR_Settings.Valid("startDateCode", parsed)) return false; + code = parsed; + return true; + } + static string ProfileName(int profile) + { + if (profile == 0) return "authored"; + if (profile == 1) return "clear"; + if (profile == 2) return "overcast"; + if (profile == 3) return "rain"; + return "unavailable"; + } + static string WeatherStateName(int profile) + { + if (profile == 1) return "Clear"; + if (profile == 2) return "Overcast"; + if (profile == 3) return "Rainy"; + return ""; + } + static bool ParseProfile(string text, out int profile) + { + if (text == "authored") { profile = 0; return true; } + if (text == "clear") { profile = 1; return true; } + if (text == "overcast") { profile = 2; return true; } + if (text == "rain" || text == "rainy") { profile = 3; return true; } + return false; + } + static bool HasWeatherState(TimeAndWeatherManagerEntity manager, string name) + { + if (!manager || name.IsEmpty()) return false; + array states = {}; + manager.GetWeatherStatesList(states); + foreach (WeatherState state : states) + if (state && state.GetStateName() == name) return true; + return false; + } + bool Start(ERR_GameMode mode) + { + if (!Replication.IsServer() || !mode || !mode.Settings()) return false; + ChimeraWorld world = ChimeraWorld.CastFrom(mode.GetWorld()); + if (!world) return false; + return StartOn(world.GetTimeAndWeatherManager(), mode.Settings().Get("startDateCode"), mode.Settings().Get("weatherProfile")); + } + protected bool StartOn(TimeAndWeatherManagerEntity manager, int dateCode, int profile) + { + if (!Replication.IsServer() || m_Stopped) return false; + if (m_Started) return true; + if (!manager || !ERR_Settings.Valid("startDateCode", dateCode) || !ERR_Settings.Valid("weatherProfile", profile)) return false; + int year = 1900 + dateCode / 10000; + int month = (dateCode % 10000) / 100; + int day = dateCode % 100; + if (dateCode != 0 && !manager.CheckValidDate(year, month, day)) return false; + string weather = WeatherStateName(profile); + BaseWeatherStateTransitionManager transitions = manager.GetTransitionManager(); + if (profile != 0 && (!transitions || !manager.GetCurrentWeatherState() || !HasWeatherState(manager, weather))) return false; + int previousYear, previousMonth, previousDay; + manager.GetDate(previousYear, previousMonth, previousDay); + if (dateCode != 0 && !manager.SetDate(year, month, day, true)) return false; + if (profile != 0) + { + string previousWeather = manager.GetCurrentWeatherState().GetStateName(); + bool previousLooping = manager.IsWeatherLooping(); + // Use the native replicated weather route, never local editor previews. + // Loop the selected family; native variants/wind still follow vanilla rules. + manager.ForceWeatherTo(true, weather, 0, 24); + WeatherState current = manager.GetCurrentWeatherState(); + WeatherState next = transitions.GetNextState(); + if (!manager.IsWeatherLooping() || ((!current || current.GetStateName() != weather) && (!next || next.GetStateName() != weather))) + { + manager.ForceWeatherTo(previousLooping, previousWeather, 0, 24); + if (dateCode != 0) manager.SetDate(previousYear, previousMonth, previousDay, true); + return false; + } + } + m_Manager = manager; + m_DateCode = dateCode; + m_Profile = profile; + m_Started = true; + PrintFormat("Rereintroduced [environment]: date=%1 weather=%2", Date(dateCode), ProfileName(profile)); + return true; + } + bool Started() { return m_Started && !m_Stopped; } + int DateCode() { return m_DateCode; } + int Profile() { return m_Profile; } + int CurrentDateCode() + { + if (!Started() || !m_Manager) return -1; + return (m_Manager.GetYear() - 1900) * 10000 + m_Manager.GetMonth() * 100 + m_Manager.GetDay(); + } + string CurrentWeather() + { + if (!Started() || !m_Manager) return "unavailable"; + WeatherState weather = m_Manager.GetCurrentWeatherState(); + if (!weather) return "unavailable"; + return weather.GetStateName(); + } + string Status() + { + if (!Started()) return "Environment not started."; + return "Current date " + Date(CurrentDateCode()) + ", weather " + CurrentWeather() + " (round profile " + ProfileName(m_Profile) + ")."; + } + void Stop() { m_Stopped = true; m_Manager = null; } +} + +// Called after the server-owned admin authorization gate. Saving cannot change +// the active service; accepted changes are consumed by the next mission instance. +class ERR_EnvironmentCommands +{ + static bool Execute(ERR_Settings settings, ERR_EnvironmentService environment, array parts, array replies) + { + if (!Replication.IsServer() || !settings || parts.Count() < 2 || parts[0] != "mission" || (parts[1] != "date" && parts[1] != "weather")) return false; + if (parts.Count() == 3 && parts[2] == "show") + { + if (environment) replies.Insert(environment.Status()); + replies.Insert("Next round: date " + ERR_EnvironmentService.Date(settings.Get("startDateCode")) + ", weather " + ERR_EnvironmentService.ProfileName(settings.Get("weatherProfile")) + "."); + return true; + } + int value; + bool valid; + string key = "startDateCode"; + if (parts[1] == "weather") key = "weatherProfile"; + if (parts.Count() == 4 && parts[2] == "set") + { + if (key == "startDateCode") valid = ERR_EnvironmentService.ParseDate(parts[3], value); + else valid = ERR_EnvironmentService.ParseProfile(parts[3], value); + } + if (valid && settings.Set(key, value)) + replies.Insert("Saved for next round: date " + ERR_EnvironmentService.Date(settings.Get("startDateCode")) + ", weather " + ERR_EnvironmentService.ProfileName(settings.Get("weatherProfile")) + ". Current round unchanged."); + else replies.Insert("Invalid environment or settings could not be saved. Use mission date set YYYY-MM-DD (1900-2050) or authored; mission weather set authored|clear|overcast|rain. Previous setting retained."); + return true; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c new file mode 100644 index 0000000..3dedc73 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c @@ -0,0 +1,72 @@ +[BaseContainerProps()] +class ERR_EscapeGameOverScreenInfo : SCR_BaseGameOverScreenInfo +{ + protected ERR_PersonalEscapeResult PersonalResult(int playerId) + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + if (!controller || controller.GetPlayerId() != playerId) return ERR_PersonalEscapeResult.UNKNOWN; + return controller.ERR_EscapeResult(); + } + override string GetTitle(int playerId, array otherPlayerIds) + { + string title = "The helicopter escaped"; + if (PersonalResult(playerId) == ERR_PersonalEscapeResult.ESCAPED) title = "You escaped Everon"; + #ifdef WORKBENCH + PrintFormat("ERR RESULT UI: player=%1 title=%2", playerId, title); + #endif + return title; + } + override string GetDebriefing(int playerId, array otherPlayerIds) + { + ERR_PersonalEscapeResult result = PersonalResult(playerId); + if (result == ERR_PersonalEscapeResult.ESCAPED) + return "You crossed the extraction boundary aboard the helicopter."; + if (result == ERR_PersonalEscapeResult.MISSED) return "You did not escape with the helicopter."; + return "Your personal escape result is not available."; + } +} + +// End data and the controller replicate independently. Refresh an already-open +// native result screen when the identity-derived controller result arrives. +modded class SCR_GameOverScreenContentUIComponent +{ + protected bool m_ERREscapeContent; + override void InitContent(SCR_GameOverScreenUIContentData endScreenUIContent) + { + SCR_PlayerController.ERR_OnEscapeResultChanged().Remove(ERR_RefreshEscapeContent); + super.InitContent(endScreenUIContent); + m_ERREscapeContent = ERR_EscapeGameOverScreenInfo.Cast(endScreenUIContent.m_GameOverInfo) != null; + if (!m_ERREscapeContent) return; + SCR_PlayerController.ERR_OnEscapeResultChanged().Insert(ERR_RefreshEscapeContent); + ERR_RefreshEscapeContent(); + } + protected void ERR_RefreshEscapeContent() + { + if (!m_ERREscapeContent || !m_wRoot) return; + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + int playerId = -1; + if (controller) playerId = controller.GetPlayerId(); + ERR_EscapeGameOverScreenInfo info = new ERR_EscapeGameOverScreenInfo(); + TextWidget title = TextWidget.Cast(m_wRoot.FindAnyWidget(m_sTileName)); + TextWidget debrief = TextWidget.Cast(m_wRoot.FindAnyWidget(m_sDebriefingName)); + if (title) title.SetText(info.GetTitle(playerId, null)); + if (debrief) debrief.SetText(info.GetDebriefing(playerId, null)); + } + override void HandlerDeattached(Widget w) + { + SCR_PlayerController.ERR_OnEscapeResultChanged().Remove(ERR_RefreshEscapeContent); + m_ERREscapeContent = false; + super.HandlerDeattached(w); + } +} + +[BaseContainerProps()] +class ERR_FailureGameOverScreenInfo : SCR_BaseGameOverScreenInfo +{ + override string GetDebriefing(int playerId, array otherPlayerIds) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode && !mode.EndReason().IsEmpty()) return mode.EndReason(); + return "No surviving prisoners can complete the escape, or the extraction helicopter has been lost."; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c new file mode 100644 index 0000000..5d70758 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c @@ -0,0 +1,112 @@ +// Initial preparation only. A newly spawned vehicle may start asleep above its +// landing gear contact plane. Wake once, then observe native gravity/contact; +// never correct its transform, apply an impulse, or replenish its supplies. +class ERR_ExtractionPlacement +{ + protected ERR_GameMode m_Mode; + protected Vehicle m_Aircraft; + protected bool m_Stopped; + protected int m_WakeCount; + protected float m_Deadline; + protected float m_StableSince = -1; + protected float m_LastObservation = -1; + protected float m_NextDiagnostic; + protected ERR_PrepareResult m_Result = ERR_PrepareResult.PENDING; + protected string m_Failure; + void ERR_ExtractionPlacement(ERR_GameMode mode, Vehicle aircraft) + { + m_Mode = mode; m_Aircraft = aircraft; + m_Deadline = GetGame().GetWorld().GetWorldTime() + 30000; + } + static bool CanWake(bool initialized, int count, float now, float deadline) + { + return initialized && count == 0 && now < deadline; + } + static bool Fresh(float previous, float now) + { + return previous >= 0 && now >= previous && now - previous <= 1500; + } + static bool QualificationAllowed(bool previouslyReady, float now, float deadline) + { + return previouslyReady || now < deadline; + } + static bool Stable(float since, float previous, float now) + { + return since >= 0 && previous >= since && now >= previous && now - previous <= 1500 && now - since >= 1000; + } + int WakeCount() { return m_WakeCount; } + bool Ready() { return !m_Stopped && m_Result == ERR_PrepareResult.READY; } + string FailureReason() { return m_Failure; } + void Stop() { m_Stopped = true; } + protected ERR_PrepareResult Fail(string reason) + { + m_Failure = reason; m_Result = ERR_PrepareResult.FAILED; + Print("Rereintroduced [extraction placement]: " + reason, LogLevel.ERROR); + return m_Result; + } + protected void Diagnostic(bool ready) + { + if (!m_Aircraft) return; + Physics physics = m_Aircraft.GetPhysics(); + HelicopterControllerComponent controller = HelicopterControllerComponent.Cast(m_Aircraft.FindComponent(HelicopterControllerComponent)); + vector entity[4]; m_Aircraft.GetWorldTransform(entity); + PrintFormat("ERR EXTRACTION PLACEMENT: wakes=%1 alive=%2 ready=%3 origin=%4 up=%5", m_WakeCount, ERR_Actors.Alive(m_Aircraft), ready, entity[3], entity[1][1]); + if (physics) PrintFormat("ERR EXTRACTION PHYSICS: dynamic=%1 awake=%2 speed=%3 angularSpeed=%4", physics.IsDynamic(), physics.IsActive(), physics.GetVelocity().Length(), physics.GetAngularVelocity().Length()); + if (controller && controller.GetSimulation()) + { + vector nativeTransform[4]; controller.GetSimulation().GetWorldTransform(nativeTransform); + PrintFormat("ERR EXTRACTION NATIVE: valid=%1 contact=%2 engine=%3 origin=%4 up=%5 entityDifference=%6", controller.GetSimulation().IsValid(), controller.GetSimulation().HasAnyGroundContact(), controller.GetSimulation().EngineIsOn(), nativeTransform[3], nativeTransform[1][1], vector.Distance(nativeTransform[3], entity[3])); + } + // Diagnostics read every wheel even while physics is awake. The strict parked + // fallback itself still requires sleep and never alters the vehicle. + vector front, left, right; + if (ERR_CasualtyGroundSupport.WheelCenter(m_Aircraft, "v_wheel_F", front, true)) ERR_CasualtyGroundSupport.WheelSupported(m_Aircraft, front, 0.30, true); + if (ERR_CasualtyGroundSupport.WheelCenter(m_Aircraft, "v_wheel_bL", left, true)) ERR_CasualtyGroundSupport.WheelSupported(m_Aircraft, left, 0.45, true); + if (ERR_CasualtyGroundSupport.WheelCenter(m_Aircraft, "v_wheel_bR", right, true)) ERR_CasualtyGroundSupport.WheelSupported(m_Aircraft, right, 0.45, true); + } + ERR_PrepareResult Poll(float now) + { + if (m_Stopped || m_Result == ERR_PrepareResult.FAILED) return ERR_PrepareResult.FAILED; + if (!Replication.IsServer() || !m_Mode || m_Mode.Phase() != ERR_Phase.PREPARING || m_Mode.ExtractionVehicle() != m_Aircraft) return Fail("initial aircraft ownership/phase changed"); + if (!ERR_Actors.Alive(m_Aircraft) || !m_Aircraft.GetPrefabData() || !m_Aircraft.GetPrefabData().GetPrefabName().Contains("/Mi8MT/")) return Fail("registered initial Mi8 is missing, destroyed or unsupported"); + Physics physics = m_Aircraft.GetPhysics(); + HelicopterControllerComponent controller = HelicopterControllerComponent.Cast(m_Aircraft.FindComponent(HelicopterControllerComponent)); + bool initialized = physics && physics.IsDynamic() && controller && controller.GetSimulation() && controller.GetSimulation().IsValid(); + if (CanWake(initialized, m_WakeCount, now, m_Deadline)) + { + // Production preparation owns the empty registered aircraft. The count is + // latched BEFORE the native call, preventing repeated wakes on any callback. + m_WakeCount = 1; + physics.SetActive(ActiveState.ACTIVE); + m_LastObservation = now; + Diagnostic(false); + m_NextDiagnostic = now + 1000; + return ERR_PrepareResult.PENDING; // never accept in the mutation frame + } + FuelManagerComponent fuel = FuelManagerComponent.Cast(m_Aircraft.FindComponent(FuelManagerComponent)); + bool ready = initialized && m_WakeCount == 1 && fuel && fuel.HasFuel() && ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft); + if (now >= m_NextDiagnostic) + { + Diagnostic(ready); + PrintFormat("ERR EXTRACTION FUEL: manager=%1 hasFuel=%2", fuel != null, fuel && fuel.HasFuel()); + m_NextDiagnostic = now + 1000; + } + if (!ready || !Fresh(m_LastObservation, now)) m_StableSince = -1; + if (ready) + { + if (m_StableSince < 0) m_StableSince = now; + if (Stable(m_StableSince, m_LastObservation, now)) + { + if (!QualificationAllowed(m_Result == ERR_PrepareResult.READY, now, m_Deadline)) return Fail("initial aircraft stable qualification missed the 30-second preparation deadline"); + if (m_Result != ERR_PrepareResult.READY) Print("Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake"); + m_Result = ERR_PrepareResult.READY; + m_LastObservation = now; + return m_Result; + } + } + m_Result = ERR_PrepareResult.PENDING; + m_LastObservation = now; + if (now >= m_Deadline) return Fail("initial aircraft did not become alive, fueled and physically supported/stable within 30 seconds; no replacement or repositioning requested"); + return m_Result; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ExtractionService.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ExtractionService.c new file mode 100644 index 0000000..e9a9082 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ExtractionService.c @@ -0,0 +1,101 @@ +enum ERR_ExtractionState { WAITING, ESCAPED, LOST } + +// Mission progression consumes the result; this service never spawns a vehicle. +class ERR_ExtractionService +{ + static const int REQUIRED_SEATS = 12; + protected ref ERR_PlayerRoster m_Roster; + protected Vehicle m_Vehicle; + protected bool m_Assigned; + protected bool m_Begun; + protected bool m_Stopped; + protected vector m_Center; + protected float m_Radius; + protected ERR_ExtractionState m_State; + protected ref set m_Escapees = new set(); + protected int m_ParticipantCount; + protected ref ScriptInvoker m_OnResolved = new ScriptInvoker(); + + void ERR_ExtractionService(ERR_PlayerRoster roster) { m_Roster = roster; } + Vehicle VehicleEntity() { return m_Vehicle; } + ERR_ExtractionState State() { return m_State; } + ScriptInvoker OnResolved() { return m_OnResolved; } + int EscapedCount() { return m_Escapees.Count(); } + int LeftBehindCount() { return m_ParticipantCount - m_Escapees.Count(); } + bool DidEscape(UUID identity) { return m_Escapees.Contains(identity); } + + bool Assign(Vehicle vehicle) + { + if (!Replication.IsServer() || m_Assigned || m_Stopped || !ERR_Actors.Alive(vehicle)) return false; + m_Vehicle = vehicle; + m_Assigned = true; + return true; + } + int Seats(out array seats) + { + seats.Clear(); + if (!m_Vehicle) return 0; + BaseCompartmentManagerComponent manager = BaseCompartmentManagerComponent.Cast(m_Vehicle.FindComponent(BaseCompartmentManagerComponent)); + if (!manager) return 0; + array all = {}; + manager.GetCompartments(all); + foreach (BaseCompartmentSlot slot : all) + { + if (!slot) continue; + ECompartmentType type = SCR_CompartmentAccessComponent.GetCompartmentType(slot); + if (type == ECompartmentType.PILOT || type == ECompartmentType.CARGO) seats.Insert(slot); + } + return seats.Count(); + } + bool Ready() + { + if (!m_Assigned || !ERR_Actors.Alive(m_Vehicle) || !m_Vehicle.FindComponent(HelicopterControllerComponent)) return false; + array seats = {}; + if (Seats(seats) < REQUIRED_SEATS) return false; + foreach (BaseCompartmentSlot slot : seats) + if (SCR_CompartmentAccessComponent.GetCompartmentType(slot) == ECompartmentType.PILOT) return true; + return false; + } + bool Begin(vector center, float radius) + { + if (!Replication.IsServer() || m_Begun || m_Stopped || !m_Roster || radius <= 0 || !Ready()) return false; + m_Center = center; + m_Radius = radius; + m_Begun = true; + return true; + } + void Tick(ERR_Phase phase) + { + if (!Replication.IsServer() || !m_Begun || m_Stopped || m_State != ERR_ExtractionState.WAITING) return; + if (phase < ERR_Phase.PRISON || ERR_MissionRules.Terminal(phase)) return; + if (!ERR_Actors.Alive(m_Vehicle)) { Resolve(ERR_ExtractionState.LOST); return; } + if (phase != ERR_Phase.EXTRACTION || vector.DistanceXZ(m_Vehicle.GetOrigin(), m_Center) <= m_Radius) return; + array lives = {}; + m_Roster.Participants(lives); + foreach (ERR_PlayerLife life : lives) + { + if (!ERR_Actors.Alive(life.Actor) || CompartmentAccessComponent.GetVehicleIn(life.Actor) != m_Vehicle) continue; + // Reserved disconnected characters and unconscious passengers remain alive. + // A recycled connection ID is never an identity for the escape snapshot. + m_Escapees.Insert(life.AccountId); + } + if (m_Escapees.IsEmpty()) return; + m_ParticipantCount = lives.Count(); + Resolve(ERR_ExtractionState.ESCAPED); + } + protected void Resolve(ERR_ExtractionState result) + { + m_State = result; + m_OnResolved.Invoke(result); + } + void ConnectedWinners(out array winners) + { + winners.Clear(); + if (m_State != ERR_ExtractionState.ESCAPED || !m_Roster) return; + array lives = {}; + m_Roster.Participants(lives); + foreach (ERR_PlayerLife life : lives) + if (life.Connected && m_Roster.Get(life.ConnectionId) == life && m_Escapees.Contains(life.AccountId)) winners.Insert(life.ConnectionId); + } + void Stop() { m_Stopped = true; } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c new file mode 100644 index 0000000..d2c8e9b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c @@ -0,0 +1,42 @@ +// One authored faction/asset contract, supplied by the game mode resource. +[BaseContainerProps()] +class ERR_FactionCatalog +{ + [Attribute()] string PlayerFactionKey; + [Attribute()] string EnemyFactionKey; + [Attribute("", UIWidgets.ResourceNamePicker, "Unarmed prisoner character", "et")] + ResourceName PrisonerPrefab; + [Attribute("", UIWidgets.ResourceNamePicker, "Initial physical guard squad", "et")] + ResourceName GuardGroupPrefab; + [Attribute("", UIWidgets.ResourceNamePicker, "Extraction helicopter", "et")] + ResourceName ExtractionPrefab; + + bool Valid() + { + return !PlayerFactionKey.IsEmpty() && !EnemyFactionKey.IsEmpty() && PlayerFactionKey != EnemyFactionKey && !PrisonerPrefab.IsEmpty() && !GuardGroupPrefab.IsEmpty() && !ExtractionPrefab.IsEmpty(); + } + Faction PlayerFaction() + { + if (!GetGame().GetFactionManager()) return null; + return GetGame().GetFactionManager().GetFactionByKey(PlayerFactionKey); + } + Faction EnemyFaction() + { + if (!GetGame().GetFactionManager()) return null; + return GetGame().GetFactionManager().GetFactionByKey(EnemyFactionKey); + } + bool WorldReady() + { + if (!Valid()) return false; + Faction player = PlayerFaction(); + Faction enemy = EnemyFaction(); + if (!player || !enemy || !player.IsFactionEnemy(enemy) || !enemy.IsFactionEnemy(player)) return false; + array required = {PrisonerPrefab, GuardGroupPrefab, ExtractionPrefab}; + foreach (ResourceName prefab : required) + { + Resource resource = Resource.Load(prefab); + if (!resource || !resource.IsValid()) return false; + } + return true; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_GameMode.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_GameMode.c new file mode 100644 index 0000000..9eee930 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_GameMode.c @@ -0,0 +1,427 @@ +class ERR_GameModeClass : SCR_BaseGameModeClass {} +class ERR_GameMode : SCR_BaseGameMode +{ + [RplProp(), Attribute("6090 0 7160", UIWidgets.Coords, "Prison position; configured from authored scenario")] + protected vector m_PrisonPosition; + [Attribute("6090 0 7160", UIWidgets.Coords, "Centre of extraction boundary")] + protected vector m_EscapeCenter; + [RplProp(), Attribute("9000", UIWidgets.EditBox, "Helicopter must cross this radius to escape")] + protected float m_EscapeRadius; + [RplProp()] + protected ERR_Phase m_Phase; + [Attribute("{BE50B97B8E2B36E6}Configs/ERR/VanillaFactions.conf", UIWidgets.ResourceNamePicker, "Faction and asset catalog", "conf")] + protected ResourceName m_FactionDefinition; + [RplProp()] + protected string m_PreparationError; + protected ref ERR_FactionCatalog m_Factions; + protected ref ERR_Settings m_Settings; + protected ref ERR_TimeService m_Time = new ERR_TimeService(); + protected ref ERR_EnvironmentService m_Environment = new ERR_EnvironmentService(); + protected ref ERR_DiscoveryService m_Discovery; + protected ref ERR_Objectives m_Objectives; + protected ref ERR_PlayerRoster m_Roster = new ERR_PlayerRoster(); + protected ref ERR_AdminService m_Admin = new ERR_AdminService(); + protected ref ERR_CommandService m_Command; + protected ref array m_Locations = {}; + protected ref array m_OwnedEntities = {}; + protected ref ERR_ExtractionService m_Extraction; + [RplProp()] + protected string m_EndReason; + protected ref ERR_RadioDefenceService m_RadioDefence; + [RplProp()] + protected ERR_RadioFeedback m_RadioFeedback; + protected ref ERR_RecoveryService m_Recovery; + protected ref ERR_PrisonEscapeService m_PrisonEscape; + [RplProp()] + protected string m_RecoveryStatus; + protected bool m_StartedPlayers; + protected bool m_Stopped; + protected float m_NoSurvivorsSince = -1; + protected ref ScriptInvoker m_OnPhaseChanged = new ScriptInvoker(); + protected ref ScriptInvoker m_OnTick = new ScriptInvoker(); + protected ref ScriptInvoker m_OnStop = new ScriptInvoker(); + protected ref ScriptInvoker m_OnLocationDiscovered = new ScriptInvoker(); + protected ref ScriptInvoker m_OnGroup = new ScriptInvoker(); + + static ERR_GameMode Get() + { + if (!GetGame()) return null; + return ERR_GameMode.Cast(GetGame().GetGameMode()); + } + ERR_Phase Phase() { return m_Phase; } + ERR_PlayerRoster Players() { return m_Roster; } + ERR_AdminService Admin() { return m_Admin; } + ERR_Settings Settings() { return m_Settings; } + ERR_TimeService Time() { return m_Time; } + ERR_EnvironmentService Environment() { return m_Environment; } + ERR_RadioDefenceService RadioDefence() { return m_RadioDefence; } + ERR_RecoveryService Recovery() { return m_Recovery; } + ERR_PrisonEscapeService PrisonEscape() { return m_PrisonEscape; } + string RecoveryStatus() { return m_RecoveryStatus; } + ERR_CommandService Command() { return m_Command; } + ERR_Objectives Objectives() { return m_Objectives; } + ERR_ExtractionService Extraction() { return m_Extraction; } + string EndReason() { return m_EndReason; } + Vehicle ExtractionVehicle() + { + if (!m_Extraction) return null; + return m_Extraction.VehicleEntity(); + } + float EscapeRadius() { return m_EscapeRadius; } + ERR_RadioFeedback RadioFeedback() { return m_RadioFeedback; } + // Called only from existing authority transition/tick paths; no extra timer. + protected bool RefreshRadioFeedback() + { + if (!Replication.IsServer()) return false; + bool defending = m_Phase == ERR_Phase.RADIO_DEFENCE && m_RadioDefence != null && m_RadioDefence.State() == ERR_RadioDefenceState.DEFENDING; + bool occupied = defending && m_RadioDefence.Occupied(); + ERR_RadioFeedback next = ERR_RadioFeedbackRules.Next(m_RadioFeedback, defending, occupied); + if (next == m_RadioFeedback) return false; + m_RadioFeedback = next; + return true; + } + bool DefenceOccupied() { return m_RadioDefence && m_RadioDefence.Occupied(); } + int DefenceSecondsRemaining() + { + if (!m_RadioDefence) return 0; + return m_RadioDefence.SecondsRemaining(GetWorld().GetWorldTime()); + } + ScriptInvoker OnPhaseChanged() { return m_OnPhaseChanged; } + ScriptInvoker OnTick() { return m_OnTick; } + ScriptInvoker OnStop() { return m_OnStop; } + ScriptInvoker OnGroup() { return m_OnGroup; } + ScriptInvoker OnLocationDiscovered() { return m_OnLocationDiscovered; } + void LocationDiscovered(ERR_LocationComponent location, int previous, int current) + { + if (!Replication.IsServer() || !m_Locations.Contains(location) || current <= previous) return; + m_OnLocationDiscovered.Invoke(location, previous, current); + } + ERR_FactionCatalog Factions() { return m_Factions; } + Faction PlayerFaction() + { + if (!m_Factions) return null; + return m_Factions.PlayerFaction(); + } + Faction EnemyFaction() + { + if (!m_Factions) return null; + return m_Factions.EnemyFaction(); + } + string PreparationError() { return m_PreparationError; } + string Status() + { + if (!m_PreparationError.IsEmpty()) return "Mission startup failed: " + m_PreparationError; + if (!m_EndReason.IsEmpty()) return m_EndReason; + if (m_Phase == ERR_Phase.PREPARING) return "Preparing mission sites and physical supplies."; + string phase; + if (m_Phase == ERR_Phase.PRISON) phase = "Escape the prison"; + else if (m_Phase == ERR_Phase.RADIO_SEARCH) phase = "Locate the radio station"; + else if (m_Phase == ERR_Phase.RADIO_DEFENCE) phase = "Defend the radio transmission"; + else if (m_Phase == ERR_Phase.EXTRACTION) phase = "Helicopter extraction"; + else if (m_Phase == ERR_Phase.VICTORY) phase = "Escape complete"; + else phase = "Mission lost"; + if (!m_RecoveryStatus.IsEmpty()) phase += " " + m_RecoveryStatus; + return phase; + } + protected void RecoveryChanged(string message) + { + if (!Replication.IsServer() || m_RecoveryStatus == message) return; + m_RecoveryStatus = message; + Replication.BumpMe(); + } + bool AbandonRound() + { + if (!Replication.IsServer() || !Active() || m_Stopped || !m_PreparationError.IsEmpty()) return false; + if (!ERR_MissionRules.CanTransition(m_Phase, ERR_Phase.DEFEAT)) return false; + m_EndReason = "An administrator abandoned this round."; + return Transition(ERR_Phase.DEFEAT); + } + protected void FailPreparation(string detail) + { + if (!Replication.IsServer() || m_Phase != ERR_Phase.PREPARING || !m_PreparationError.IsEmpty()) return; + m_PreparationError = detail; + Replication.BumpMe(); + Print("Rereintroduced: scenario preparation failed; spawning remains disabled: " + detail, LogLevel.ERROR); + StopServices(); + ERR_SiteService sites = Sites(); + if (sites) sites.Rollback(); + for (int i = m_OwnedEntities.Count() - 1; i >= 0; i--) ERR_Actors.DeleteSpawned(m_OwnedEntities[i]); + m_OwnedEntities.Clear(); + } + vector PrisonPosition() { return ERR_Actors.Ground(m_PrisonPosition); } + bool Active() { return m_Phase >= ERR_Phase.PRISON && !ERR_MissionRules.Terminal(m_Phase); } + protected ERR_CommandService CreateCommandService() { return null; } + + void ConfigureStart(vector position) + { + if (!Replication.IsServer() || m_Phase != ERR_Phase.PREPARING) return; + m_PrisonPosition = position; + m_EscapeCenter = position; + Replication.BumpMe(); + } + ERR_SiteService Sites() + { + ERR_ScenarioComponent scenario = ERR_ScenarioComponent.Cast(FindComponent(ERR_ScenarioComponent)); + if (!scenario) return null; + return scenario.Sites(); + } + void RegisterLocation(ERR_LocationComponent location) + { + if (!location || location.Id().IsEmpty() || m_Locations.Contains(location)) return; + foreach (ERR_LocationComponent existing : m_Locations) + { + if (existing.Id() == location.Id()) + { + Print("Rereintroduced: duplicate location ID " + location.Id(), LogLevel.ERROR); + return; + } + } + m_Locations.Insert(location); + } + bool HasLocation(ERR_LocationComponent location) { return location && m_Locations.Contains(location); } + void UnregisterLocation(ERR_LocationComponent location) { m_Locations.RemoveItem(location); } + void Locations(out array locations) { locations.Copy(m_Locations); } + void Own(IEntity entity) { if (entity && !m_OwnedEntities.Contains(entity)) m_OwnedEntities.Insert(entity); } + bool SetExtractionVehicle(Vehicle vehicle) + { + return Replication.IsServer() && m_Phase == ERR_Phase.PREPARING && m_Extraction && m_Extraction.Assign(vehicle); + } + void PublishEscapeResults(bool reset = false) + { + if (!Replication.IsServer()) return; + array connected = {}; + GetGame().GetPlayerManager().GetPlayers(connected); + foreach (int id : connected) + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(id)); + if (!controller) continue; + if (reset) controller.ERR_ResetEscapeResult(); + else controller.ERR_PublishEscapeResult(m_Roster, m_Extraction); + } + } + void RegisterGroup(SCR_AIGroup group) + { + if (!Replication.IsServer() || !group) return; + Own(group); + if (m_Command) m_Command.RegisterGroup(group); + m_OnGroup.Invoke(group); + } + + bool Transition(ERR_Phase phase) + { + if (!Replication.IsServer() || !m_PreparationError.IsEmpty() || !ERR_MissionRules.CanTransition(m_Phase, phase)) return false; + ERR_Phase previous = m_Phase; + m_Phase = phase; + RefreshRadioFeedback(); + if (ERR_MissionRules.Terminal(phase)) PublishEscapeResults(); + Replication.BumpMe(); + PrintFormat("Rereintroduced [mission]: phase %1 -> %2", previous, phase); + m_OnPhaseChanged.Invoke(previous, phase); + if (ERR_MissionRules.Terminal(phase)) + { + StopServices(); + array winners = {}; + if (phase == ERR_Phase.VICTORY && m_Extraction) m_Extraction.ConnectedWinners(winners); + EGameOverTypes reason = EGameOverTypes.LOOSE; + if (phase == ERR_Phase.VICTORY) reason = EGameOverTypes.VICTORY; + EndGameMode(SCR_GameModeEndData.Create(reason, winners)); + } + return true; + } + + bool UnlockPrison(IEntity player) + { + if (!Replication.IsServer() || !m_Roster || !m_Roster.CurrentActor(player) || !ERR_Actors.CanFight(player)) return false; + if (!PlayerFaction() || SCR_FactionManager.SGetFaction(player) != PlayerFaction()) return false; + if (vector.DistanceXZ(player.GetOrigin(), PrisonPosition()) > 15) return false; + return m_Phase == ERR_Phase.PRISON && Transition(ERR_Phase.RADIO_SEARCH); + } + + bool TuneRadio(IEntity player, ERR_LocationComponent location) + { + return m_RadioDefence && m_RadioDefence.Begin(player, location); + } + protected void RadioStarted(ERR_LocationComponent location) + { + if (!Replication.IsServer() || !m_RadioDefence || location != m_RadioDefence.Location()) return; + if (!Transition(ERR_Phase.RADIO_DEFENCE)) m_RadioDefence.Stop(); + } + protected void RadioCompleted(ERR_LocationComponent location) + { + if (!Replication.IsServer() || m_Phase != ERR_Phase.RADIO_DEFENCE || !m_RadioDefence || m_RadioDefence.State() != ERR_RadioDefenceState.COMPLETED || location != m_RadioDefence.Location()) return; + foreach (ERR_LocationComponent candidate : m_Locations) + if (candidate.Kind() == ERR_LocationKind.EXTRACTION) candidate.Discover(0, 100); + Transition(ERR_Phase.EXTRACTION); + } + + void PlayerSpawned(int id, IEntity actor) + { + if (!Replication.IsServer() || !actor || ERR_MissionRules.Terminal(m_Phase)) return; + m_Roster.Spawned(id, actor); + m_StartedPlayers = true; + m_NoSurvivorsSince = -1; + } + + protected string SettingsPath() { return ERR_Settings.PATH; } + + protected override void EOnInit(IEntity owner) + { + super.EOnInit(owner); + if (SCR_Global.IsEditMode()) return; + m_Factions = ERR_FactionCatalog.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab(m_FactionDefinition)); + if (!System.IsConsoleApp()) GetGame().GetCallqueue().CallLater(BindLocalObserver, 250, true); + if (!Replication.IsServer()) return; + m_Settings = new ERR_Settings(SettingsPath()); + OnStop().Insert(m_Environment.Stop); + m_Recovery = new ERR_RecoveryService(this); + m_Recovery.OnChanged().Insert(RecoveryChanged); + OnStop().Insert(m_Recovery.Stop); + m_RadioDefence = new ERR_RadioDefenceService(this); + m_RadioDefence.OnStarted().Insert(RadioStarted); + m_RadioDefence.OnCompleted().Insert(RadioCompleted); + OnPhaseChanged().Insert(m_RadioDefence.PhaseChanged); + OnStop().Insert(m_RadioDefence.Stop); + m_Extraction = new ERR_ExtractionService(m_Roster); + PublishEscapeResults(true); + m_Extraction.OnResolved().Insert(ExtractionResolved); + OnStop().Insert(m_Extraction.Stop); + m_PrisonEscape = new ERR_PrisonEscapeService(this); + OnPhaseChanged().Insert(m_PrisonEscape.PhaseChanged); + OnTick().Insert(m_PrisonEscape.Tick); + OnStop().Insert(m_PrisonEscape.Stop); + m_Roster.OnChanged().Insert(m_PrisonEscape.RosterChanged); + m_Discovery = new ERR_DiscoveryService(this); + OnTick().Insert(m_Discovery.Tick); + OnStop().Insert(m_Discovery.Stop); + m_Objectives = new ERR_Objectives(this); + OnPhaseChanged().Insert(m_Objectives.PhaseChanged); + OnTick().Insert(m_Objectives.Tick); + OnStop().Insert(m_Objectives.Stop); + m_Command = CreateCommandService(); + GetGame().GetCallqueue().CallLater(ServerTick, 1000, true); + GetGame().GetCallqueue().CallLater(StartScenario, 1500, false); + } + + protected void BindLocalObserver() + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + if (!controller) return; + controller.ERR_StartObserverMonitor(); + GetGame().GetCallqueue().Remove(BindLocalObserver); + } + + protected void StartScenario() + { + if (m_Phase != ERR_Phase.PREPARING || !m_PreparationError.IsEmpty()) return; + if (!m_Factions || !m_Factions.WorldReady()) { FailPreparation("The configured player and enemy factions or required assets are missing, invalid or not hostile."); return; } + // Scenario content is created through a separate authoring component. + ERR_ScenarioComponent scenario = ERR_ScenarioComponent.Cast(FindComponent(ERR_ScenarioComponent)); + ERR_PrepareResult prepared = ERR_PrepareResult.FAILED; + if (scenario) prepared = scenario.Prepare(); + if (prepared == ERR_PrepareResult.PENDING) + { + GetGame().GetCallqueue().CallLater(StartScenario, 250, false); + return; + } + if (prepared == ERR_PrepareResult.FAILED) + { + string detail = "Scenario component is missing."; + if (scenario) detail = scenario.FailureReason(); + FailPreparation(detail); + return; + } + if (!m_Extraction || !m_Extraction.Begin(m_EscapeCenter, m_EscapeRadius)) + { + FailPreparation("The extraction vehicle must be a helicopter with a pilot position and at least twelve pilot/passenger seats, with a valid escape boundary."); + return; + } + if (!m_Environment.Start(this)) { FailPreparation("The selected date or vanilla weather profile could not be initialized."); return; } + if (!m_Time.Start(this)) { FailPreparation("The world clock could not be initialized."); return; } + Transition(ERR_Phase.PRISON); + } + + protected void ExtractionResolved(ERR_ExtractionState result) + { + if (!Replication.IsServer() || !Active()) return; + if (result == ERR_ExtractionState.LOST) + { + m_EndReason = "The extraction helicopter was lost. No replacement is available."; + Transition(ERR_Phase.DEFEAT); + } + else if (result == ERR_ExtractionState.ESCAPED) + { + m_EndReason = string.Format("Escape complete: %1 escaped; %2 did not escape.", m_Extraction.EscapedCount(), m_Extraction.LeftBehindCount()); + Transition(ERR_Phase.VICTORY); + } + } + + protected void ServerTick() + { + if (!Replication.IsServer() || !Active()) return; + float now = GetWorld().GetWorldTime(); + m_Extraction.Tick(m_Phase); + if (!Active()) return; + m_RadioDefence.Tick(now); + if (RefreshRadioFeedback()) Replication.BumpMe(); + m_Recovery.Tick(); + if (!Active()) return; + if (GetGame().GetPlayerManager().GetPlayerCount() == 0) + { + m_NoSurvivorsSince = -1; + return; + } + if (m_StartedPlayers && !m_Roster.HasSurvivor()) + { + if (m_NoSurvivorsSince < 0) m_NoSurvivorsSince = now; + if (now - m_NoSurvivorsSince >= 30000) + { + m_EndReason = "No surviving prisoners remain."; + Transition(ERR_Phase.DEFEAT); + return; + } + } + else m_NoSurvivorsSince = -1; + array connected = {}; + GetGame().GetPlayerManager().GetPlayers(connected); + foreach (int id : connected) + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(id)); + if (controller) controller.ERR_UpdateObserverServer(); + } + if (m_Command) m_Command.Tick(now); + m_OnTick.Invoke(now); + } + + protected void StopServices() + { + if (m_Stopped) return; + m_Stopped = true; + GetGame().GetCallqueue().Remove(ServerTick); + if (m_Command) m_Command.Stop(); + m_OnStop.Invoke(); + if (Replication.IsServer()) + { + array connected = {}; + GetGame().GetPlayerManager().GetPlayers(connected); + foreach (int id : connected) + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(id)); + if (controller) controller.ERR_SetObserver(ERR_ObserverReason.NONE); + } + foreach (IEntity entity : m_OwnedEntities) + if (SCR_AIGroup.Cast(entity)) ERR_Actors.DeleteSpawned(entity); + } + } + + void ~ERR_GameMode() + { + if (GetGame()) + { + GetGame().GetCallqueue().Remove(StartScenario); + GetGame().GetCallqueue().Remove(BindLocalObserver); + StopServices(); + } + m_Locations.Clear(); + m_OwnedEntities.Clear(); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c new file mode 100644 index 0000000..5ec5d04 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c @@ -0,0 +1,12 @@ +// Initial preparation only. A READY site service never consults this rule again. +class ERR_InitialGuardRules +{ + static float TimeoutMilliseconds() { return 90000; } + static ERR_PrepareResult State(int requested, int physical, int conscious, bool queueComplete, bool expired) + { + if (requested <= 0 || physical > requested || conscious > physical || conscious < 0 || physical < 0) return ERR_PrepareResult.FAILED; + if (expired) return ERR_PrepareResult.FAILED; + if (physical == requested && conscious == requested && queueComplete) return ERR_PrepareResult.READY; + return ERR_PrepareResult.PENDING; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Inventory.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Inventory.c new file mode 100644 index 0000000..844ad95 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Inventory.c @@ -0,0 +1,19 @@ +// GetItems may enumerate the same physical entity through multiple storages. +// Identity is the entity reference, never its prefab: distinct rounds still count. +class ERR_Inventory +{ + static int AppendUnique(InventoryStorageManagerComponent inventory, notnull array items) + { + if (!inventory) return items.Count(); + array raw = {}; + inventory.GetItems(raw); + foreach (IEntity item : raw) + if (item && !items.Contains(item)) items.Insert(item); + return items.Count(); + } + static int Items(InventoryStorageManagerComponent inventory, out array items) + { + items.Clear(); + return AppendUnique(inventory, items); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c new file mode 100644 index 0000000..6868b2d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c @@ -0,0 +1,62 @@ +// A previously initialized off-world medical kit can outlive its weak catalog. +// Runtime/startup validation remains vanilla. Only owned teardown bypasses the +// unrelated initialization gate; no catalog is kept alive or fabricated. +class ERR_ItemStationTeardownRules +{ + static bool Recover(bool initialized, bool scoped, bool offWorld, bool catalogPresent, bool editMode) + { + return initialized && scoped && offWorld && !catalogPresent && !editMode; + } +} + +modded class SCR_ResupplyMedicalGadgetSupportStationComponent +{ + protected bool m_ERRTeardownScope; + protected bool m_ERRTeardownInitializing; + protected bool m_ERRTeardownInitialized; + protected bool m_ERRTeardownDone; + protected SCR_ResourceComponent m_ERRTeardownResource; + + protected bool ERR_KnownOffWorldKit(IEntity owner) + { + if (!GetGame() || !owner || owner.GetWorld() == GetGame().GetWorld() || !owner.GetPrefabData()) return false; + ResourceName prefab = owner.GetPrefabData().GetPrefabName(); + return prefab == "{AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et" || prefab == "{21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et"; + } + + protected override void DelayedInit(IEntity owner) + { + m_ERRTeardownInitializing = ERR_GameMode.Get() && ERR_KnownOffWorldKit(owner); + super.DelayedInit(owner); + m_ERRTeardownInitializing = false; + } + + protected override void AddRemoveOnDamageStateChanged(IEntity owner, bool subscribe) + { + super.AddRemoveOnDamageStateChanged(owner, subscribe); + // Vanilla reaches this only after the complete virtual InitValidSetup passed. + if (!subscribe || !m_ERRTeardownInitializing) return; + m_ERRTeardownScope = true; + m_ERRTeardownInitialized = true; + if (m_ResourceConsumer || m_ResourceGenerator) m_ERRTeardownResource = GetResourceComponent(); + } + + override void OnDelete(IEntity owner) + { + bool offWorld = owner && (!GetGame() || owner.GetWorld() != GetGame().GetWorld()); + if (!ERR_ItemStationTeardownRules.Recover(m_ERRTeardownInitialized, m_ERRTeardownScope, offWorld, m_EntityCatalogManager != null, SCR_Global.IsEditMode())) + { + super.OnDelete(owner); + return; + } + if (m_ERRTeardownDone) return; + m_ERRTeardownDone = true; + if (GetGame()) GetGame().GetCallqueue().Remove(DelayedInit); + AddRemoveOnDamageStateChanged(owner, false); + // These exact stations reject UsesRange at initialization and were never + // registered with the range manager. Native resource subscription is separate + // from range, and still needs removing when its component remains alive. + if (m_ERRTeardownResource) m_ERRTeardownResource.TEMP_GetOnInteractorReplicated().Remove(TEMP_OnInteractorReplicated); + m_ERRTeardownResource = null; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c new file mode 100644 index 0000000..c997b3f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c @@ -0,0 +1,23 @@ +// Attach only to a successor-owned prisoner prefab, with a native action duration. +class ERR_LoadCasualtyAction : ScriptedUserAction +{ + override bool CanBeShownScript(IEntity user) + { + return ERR_CasualtyLoadingRules.Nearby(ERR_GameMode.Get(), user, GetOwner()); + } + override bool CanBePerformedScript(IEntity user) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!ERR_CasualtyLoadingRules.Nearby(mode, user, GetOwner())) return false; + // Clients do not own the authoritative roster. Server always checks again. + if (!Replication.IsServer()) return true; + return mode.CasualtyLoading() && mode.CasualtyLoading().CanLoad(user, GetOwner()); + } + override bool HasLocalEffectOnlyScript() { return false; } + override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) + { + if (!Replication.IsServer() || pOwnerEntity != GetOwner()) return; + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode && mode.CasualtyLoading()) mode.CasualtyLoading().Begin(pUserEntity, pOwnerEntity); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c new file mode 100644 index 0000000..55bd09f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c @@ -0,0 +1,107 @@ +// A round-local roster identity is not a Bohemia/platform identity. Only the +// real native admission callback may select it for the sole offline controller. +class ERR_LocalAdmissionRules +{ + static bool Context(bool server, int sessionMode, int count, bool connected, bool sameLocal, bool sameManager, int connection, int controllerId) + { + return server && sessionMode == RplMode.None && count == 1 && connected && sameLocal && sameManager && connection > 0 && controllerId == connection; + } +} +class ERR_LocalAdmission +{ + protected ERR_GameMode m_Mode; + protected SCR_PlayerController m_Controller; + protected int m_Connection; + protected UUID m_Key; + protected bool m_Selected; + protected bool m_OfflineMode; + protected bool m_LocalKey; + protected bool m_Failed; + protected bool m_Stopped; + protected bool m_RefusalLogged; + void ERR_LocalAdmission(ERR_GameMode mode) { m_Mode = mode; m_OfflineMode = RplSession.Mode() == RplMode.None; } + bool OfflineMode() { return m_OfflineMode; } + bool Selected() { return m_Selected; } + bool LocalKey() { return m_LocalKey; } + protected bool Context(ERR_GameMode mode, int connection, SCR_PlayerController controller) + { + if (!GetGame()) return false; + PlayerManager manager = GetGame().GetPlayerManager(); + bool ownedMode = mode && mode == m_Mode && mode == ERR_GameMode.Get(); + int count = -1; + bool connected, sameManager; + if (manager) + { + count = manager.GetPlayerCount(); + connected = manager.IsPlayerConnected(connection); + sameManager = controller && manager.GetPlayerController(connection) == controller; + } + bool sameLocal = controller && controller == GetGame().GetPlayerController(); + int controllerId; + if (controller) controllerId = controller.GetPlayerId(); + bool valid = ownedMode && manager && controller && ERR_LocalAdmissionRules.Context(Replication.IsServer(), RplSession.Mode(), count, connected, sameLocal, sameManager, connection, controllerId); + if (!valid && !m_RefusalLogged) + { + string project; + if (System.GetCLIParam("errOrdinaryScenario", project) && (project == "core" || project == "chat")) + { + m_RefusalLogged = true; + PrintFormat("ERR ORDINARY LOCAL CONTEXT: server=%1 sessionMode=%2 count=%3 connected=%4 sameLocal=%5 sameManager=%6 positiveMatchingId=%7 ownedMode=%8 controllerPresent=%9", Replication.IsServer(), RplSession.Mode(), count, connected, sameLocal, sameManager, connection > 0 && controllerId == connection, ownedMode, controller != null); + } + } + return valid; + } + UUID Resolve(ERR_GameMode mode, int connection, SCR_PlayerController controller, UUID nativeIdentity) + { + // This helper is inert for modes created as Listen/Dedicated, even after Stop. + if (!m_OfflineMode) return nativeIdentity; + if (m_Failed || m_Stopped) return UUID.NULL_UUID; + if (m_Selected) + { + // A late backend value or name change never grants another local life. + if (mode != m_Mode || connection != m_Connection || controller != m_Controller || !Validate()) { m_Failed = true; return UUID.NULL_UUID; } + return m_Key; + } + if (!Context(mode, connection, controller)) { m_Failed = true; return UUID.NULL_UUID; } + m_Controller = controller; m_Connection = connection; m_Key = nativeIdentity; + m_Selected = true; + if (m_Key.IsNull()) { m_Key = UUID.GenV4(); m_LocalKey = true; } + if (m_Key.IsNull()) { m_Failed = true; return UUID.NULL_UUID; } + if (m_LocalKey) Print("Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged."); + return m_Key; + } + bool Validate() + { + if (!m_OfflineMode) return true; + if (m_Failed || m_Stopped) return false; + if (!m_Selected) return true; + if (!Context(m_Mode, m_Connection, m_Controller)) m_Failed = true; + return !m_Failed; + } + bool Disconnected(int connection) + { + if (!m_Selected || m_Stopped || connection != m_Connection) return false; + m_Failed = true; + return true; + } + void Stop() + { + m_Stopped = true; + m_Controller = null; + m_Key = UUID.NULL_UUID; + // Keep selection/failure latched: this object cannot admit a replacement. + } +} + +modded class ERR_GameMode +{ + void ERR_FailLocalAdmission() + { + if (!Replication.IsServer()) return; + string reason = "The offline player context changed. Start a new scenario to establish a fresh session."; + if (Phase() == ERR_Phase.PREPARING) { FailPreparation(reason); return; } + if (!Active()) return; + m_EndReason = reason; + Transition(ERR_Phase.DEFEAT); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Location.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Location.c new file mode 100644 index 0000000..bff1193 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Location.c @@ -0,0 +1,69 @@ +enum ERR_LocationKind { PRISON, RADIO, EXTRACTION, OUTPOST, DEPOT } + +[ComponentEditorProps(category: "Rereintroduced", description: "Server-owned location with replicated discovery state")] +class ERR_LocationComponentClass : ScriptComponentClass {} +class ERR_LocationComponent : ScriptComponent +{ + [RplProp(onRplName: "IdentityChanged"), Attribute("", UIWidgets.EditBox, "Stable scenario location ID")] + protected string m_Id; + [RplProp()] + protected string m_Label; + [RplProp(), Attribute("0", UIWidgets.ComboBox, "Location kind", enums: ParamEnumArray.FromEnum(ERR_LocationKind))] + protected ERR_LocationKind m_Kind; + [RplProp()] + protected int m_Knowledge; + + string Id() { return m_Id; } + string Label() { return m_Label; } + ERR_LocationKind Kind() { return m_Kind; } + int Knowledge() { return m_Knowledge; } + vector Position() { return GetOwner().GetOrigin(); } + + bool Configure(string id, ERR_LocationKind kind, string label = "") + { + if (!Replication.IsServer() || id.IsEmpty()) return false; + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode || mode.Phase() != ERR_Phase.PREPARING) return false; + mode.UnregisterLocation(this); + m_Id = id; + m_Label = label; + m_Kind = kind; + mode.RegisterLocation(this); + Replication.BumpMe(); + return true; + } + protected void IdentityChanged() + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode) return; + mode.UnregisterLocation(this); + mode.RegisterLocation(this); + } + bool Discover(int roll, int chance) + { + if (!Replication.IsServer() || m_Knowledge >= 2) return false; + int previous = m_Knowledge; + m_Knowledge = ERR_MissionRules.Discovery(m_Knowledge, roll, chance); + Replication.BumpMe(); + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode) mode.LocationDiscovered(this, previous, m_Knowledge); + return true; + } + + override void OnPostInit(IEntity owner) + { + super.OnPostInit(owner); + if (!SCR_Global.IsEditMode()) SetEventMask(owner, EntityEvent.INIT); + } + protected override void EOnInit(IEntity owner) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode) mode.RegisterLocation(this); + } + protected override void OnDelete(IEntity owner) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode) mode.UnregisterLocation(this); + super.OnDelete(owner); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_MissionRules.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_MissionRules.c new file mode 100644 index 0000000..1a2b2f7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_MissionRules.c @@ -0,0 +1,46 @@ +enum ERR_Phase +{ + PREPARING, + PRISON, + RADIO_SEARCH, + RADIO_DEFENCE, + EXTRACTION, + VICTORY, + DEFEAT +} + +// Pure mission policy. Entity queries and authority checks belong to the owner. +class ERR_MissionRules +{ + static bool Terminal(int phase) + { + return phase == ERR_Phase.VICTORY || phase == ERR_Phase.DEFEAT; + } + + static bool CanTransition(int from, int to) + { + if (Terminal(from) || from == to) return false; + if (to == ERR_Phase.DEFEAT) return from >= ERR_Phase.PRISON && from <= ERR_Phase.EXTRACTION; + if (from == ERR_Phase.PREPARING) return to == ERR_Phase.PRISON; + if (from == ERR_Phase.PRISON) return to == ERR_Phase.RADIO_SEARCH; + if (from == ERR_Phase.RADIO_SEARCH) return to == ERR_Phase.RADIO_DEFENCE; + if (from == ERR_Phase.RADIO_DEFENCE) return to == ERR_Phase.EXTRACTION; + return from == ERR_Phase.EXTRACTION && to == ERR_Phase.VICTORY; + } + + static bool DefenceComplete(float now, float since, float duration, bool occupied) + { + return occupied && since >= 0 && duration > 0 && now >= since && now - since >= duration; + } + + static bool ContactFresh(float observed, float now) + { + return observed >= 0 && now >= observed && now - observed <= 120000; + } + + static int Discovery(int knowledge, int roll, int identifyPercent) + { + if (knowledge >= 1 || roll < identifyPercent) return 2; + return 1; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c new file mode 100644 index 0000000..c17a68d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c @@ -0,0 +1,76 @@ +#ifdef WORKBENCH +// Test adapter exercises the production setting handler with a disposable file. +// Actual mode.Admin below still tests its server authorization and alias dispatch. +class ERR_NativeAdminSettingsAdapter : ERR_AdminService +{ + void Probe(ERR_Settings settings, string arguments, array replies) + { + replies.Clear(); + arguments = arguments.Trim(); arguments.ToLower(); + array parts = {}; + arguments.Split(" ", parts, true); + if (parts.Count() != 3 && parts.Count() != 4) return; + string key = Setting(parts[0], parts[1]); + if (!key.IsEmpty()) SettingCommand(settings, key, parts, replies); + } +} + +class ERR_NativeAdminSettingsProbe +{ + protected static bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: admin settings " + detail); return true; } + Print("ERR SMOKE FAIL: admin settings " + detail, LogLevel.ERROR); + return false; + } + protected static bool Storage(string path) + { + ERR_Settings settings = new ERR_Settings(path); + ERR_NativeAdminSettingsAdapter adapter = new ERR_NativeAdminSettingsAdapter(); + array replies = {}; + map initial = new map(); + foreach (string key : ERR_Settings.Keys()) initial.Set(key, settings.Get(key)); + array values = {0, 100, 15}; + foreach (int value : values) + { + adapter.Probe(settings, " INTEL REVEAL SET " + value.ToString() + " ", replies); + if (!Check(replies.Count() == 1 && replies[0] == "intelRevealChancePercent=" + value.ToString() + " saved" && settings.Get("intelRevealChancePercent") == value, "authorized setting handler accepts normalized value " + value.ToString())) return false; + ERR_Settings reloaded = new ERR_Settings(path); + if (!Check(reloaded.Get("intelRevealChancePercent") == value, "discovery probability survives native JSON reload")) return false; + foreach (string key, int original : initial) + if (key != "intelRevealChancePercent" && !Check(reloaded.Get(key) == original, "unrelated setting preserved: " + key)) return false; + } + array invalid = {"-1", "101", "1.5", "100junk", "999999"}; + foreach (string argument : invalid) + { + adapter.Probe(settings, "intel reveal set " + argument, replies); + ERR_Settings reloaded = new ERR_Settings(path); + if (!Check(replies.Count() == 1 && replies[0].Contains("Invalid") && replies[0].Contains("0-100") && settings.Get("intelRevealChancePercent") == 15 && reloaded.Get("intelRevealChancePercent") == 15, "invalid input preserves live and stored value: " + argument)) return false; + } + adapter.Probe(settings, "intel reveal help", replies); + if (!Check(replies.Count() == 1 && replies[0].Contains("second document") && replies[0].Contains("newly recovered") && replies[0].Contains("remain unchanged"), "help explains exact versus rough discovery and apply timing")) return false; + adapter.Probe(settings, "mission radio show", replies); + return Check(replies.Count() == 1 && replies[0] == "radioDefenceSeconds=" + initial.Get("radioDefenceSeconds").ToString(), "existing radio alias and response remain intact"); + } + static bool Run(ERR_GameMode mode) + { + if (!Check(Replication.IsServer() && mode && mode.Admin() && mode.Settings(), "native Core command service and settings ready")) return false; + int original = mode.Settings().Get("intelRevealChancePercent"); + array replies = {}; + mode.Admin().Execute(mode, false, "intel reveal set 100", replies); + if (!Check(replies.Count() == 1 && replies[0] == "Administrator access required." && mode.Settings().Get("intelRevealChancePercent") == original, "actual unauthorized command cannot mutate discovery")) return false; + mode.Admin().Execute(mode, true, " INTEL REVEAL SHOW ", replies); + if (!Check(replies.Count() == 1 && replies[0] == "intelRevealChancePercent=" + original.ToString(), "actual Core alias dispatches without Chat")) return false; + mode.Admin().Execute(mode, true, "intel reveal set 101", replies); + if (!Check(replies.Count() == 1 && replies[0].Contains("0-100") && mode.Settings().Get("intelRevealChancePercent") == original, "actual dispatch rejects out-of-range value with guidance")) return false; + mode.Admin().Execute(mode, true, "intel reveal help", replies); + if (!Check(replies.Count() == 1 && replies[0].Contains("second document"), "actual Core help describes physical document progression")) return false; + string path = "$profile:erri-native-admin-settings-probe.json"; + if (!Check(!FileIO.FileExists(path) && !FileIO.FileExists(path + ".bak") && !FileIO.FileExists(path + ".tmp"), "disposable fixture filenames are unused")) return false; + bool result = Storage(path); + FileIO.DeleteFile(path); FileIO.DeleteFile(path + ".bak"); FileIO.DeleteFile(path + ".tmp"); + if (!result) return false; + return Check(mode.Settings().Get("intelRevealChancePercent") == original && !FileIO.FileExists(path) && !FileIO.FileExists(path + ".bak") && !FileIO.FileExists(path + ".tmp"), "fixture removed its files and never changed actual mission settings"); + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c new file mode 100644 index 0000000..8b16858 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c @@ -0,0 +1,851 @@ +// Explicit local engine fixture, excluded from game/server builds. +#ifdef WORKBENCH +modded class ERR_GameMode +{ + protected ref ERR_NativeEnvironmentRestartProbe m_ERRBaseEnvironmentRestartProbe; + protected override string SettingsPath() + { + string enabled, outcome; + if (System.GetCLIParam("errBaseSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "environment-restart") + { + m_ERRBaseEnvironmentRestartProbe = new ERR_NativeEnvironmentRestartProbe(this); + return ERR_NativeEnvironmentRestartProbe.PATH; + } + return super.SettingsPath(); + } + + protected ref ERR_NativeCasualtyServiceProbe m_ERRCasualtyServiceProbe; + protected ref ERR_NativePrisonerProbe m_ERRPrisonerProbe; + protected ref ERR_NativeGuardCancelProbe m_ERRGuardCancelProbe; + protected ref ERR_NativeLocalAdmissionProbe m_ERRLocalAdmissionProbe; + protected ref ERR_NativePoweredFlightProbe m_ERRPoweredFlightProbe; + protected ref ERR_NativePrisonBreachProbe m_ERRPrisonBreachProbe; + protected ref ERR_NativeItemStationTeardownProbe m_ERRItemStationTeardownProbe; + protected ref ERR_NativeObjectiveLossProbe m_ERRObjectiveLossProbe; + protected ref ERR_NativeMedicalProbe m_ERRBaseMedicalProbe; + protected ref ERR_NativeCasualtyLoadProbe m_ERRCasualtyLoadProbe; + protected ref ERR_NativeEnvironmentProbe m_ERRBaseEnvironmentProbe; + protected bool m_ERRCatalogChecked; + protected bool m_ERRDiscoveryMapChecked; + protected ref ERR_NativePatrolProbe m_ERRPatrolEast; + protected ref ERR_NativePatrolProbe m_ERRPatrolWest; + protected int m_ERRBaseStep; + protected bool m_ERRObjectiveCloseChecked; + protected bool m_ERRStartupFailure; + protected bool m_ERRCacheLoss; + protected string m_ERRExtractionCase; + protected ref ERR_NativeExtractionProbe m_ERRExtractionProbe; + protected ref ERR_NativeTransportProbe m_ERRTransportProbe; + protected ref ERR_NativeLifecycleProbe m_ERRLifecycleProbe; + protected ref ERR_NativeRecoveryProbe m_ERRRecoveryProbe; + protected ref ERR_NativeRadioDefenceProbe m_ERRBaseRadioProbe; + protected string m_ERRActiveCacheId = "everon-supply-1"; + protected int m_ERRMedicalDiscoveries; + protected IEntity m_ERRSightBlocker; + protected float m_ERRBaseDeadline; + protected float m_ERRBaseWait; + protected IEntity m_ERRBasePlayer; + protected ERR_LocationComponent m_ERRBaseRadio; + protected ref array m_ERRBaseDocuments = {}; + + protected override void EOnInit(IEntity owner) + { + super.EOnInit(owner); + string enabled; + if (SCR_Global.IsEditMode() || !Replication.IsServer() || !System.GetCLIParam("errBaseSmoke", enabled) || enabled != "1") return; + ERR_NativeObjectiveProbe.BeginRound(); + ERR_NativeProgressionIdentityProbe.BeginRound(); + string outcome; + m_ERRStartupFailure = System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "startup-failure"; + m_ERRExtractionCase = outcome; + if (outcome == "extraction-startup-failure" && m_Factions) m_Factions.ExtractionPrefab = "{259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et"; + if (outcome == "extraction-boundary-failure") m_EscapeRadius = 0; + m_ERRCacheLoss = outcome == "cache-loss"; + if (m_ERRCacheLoss) m_ERRActiveCacheId = "everon-supply-2"; + OnLocationDiscovered().Insert(ERR_BaseDiscovered); + OnStop().Insert(ERR_NativeObjectiveProbe.Stop); + OnStop().Insert(ERR_StopRadioProbe); + OnStop().Insert(ERR_StopHealthProbes); + if (m_ERRStartupFailure && m_Factions) m_Factions.EnemyFactionKey = m_Factions.PlayerFactionKey; + m_ERRBaseDeadline = GetWorld().GetWorldTime() + 210000; + if (outcome == "patrols") m_ERRBaseDeadline = GetWorld().GetWorldTime() + 330000; + OnPhaseChanged().Insert(ERR_BaseResult); + GetGame().GetCallqueue().CallLater(ERR_BaseTick, 500, true); + Print("ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance"); + } + protected bool ERR_BaseCheck(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: base " + detail); return true; } + ERR_NativeObjectiveProbe.Stop(); + ERR_StopRadioProbe(); + ERR_StopHealthProbes(); + Print("ERR SMOKE FAIL: base " + detail, LogLevel.ERROR); + GetGame().GetCallqueue().Remove(ERR_BaseTick); + return false; + } + protected void ERR_StopHealthProbes() + { + ERR_NativeDiscoveryMapProbe.Stop(); + ERR_NativeProgressionIdentityProbe.Stop(); + if (m_ERRPatrolEast) m_ERRPatrolEast.Stop(); + if (m_ERRPatrolWest) m_ERRPatrolWest.Stop(); + if (m_ERRBaseEnvironmentRestartProbe) m_ERRBaseEnvironmentRestartProbe.Stop(); + if (m_ERRBaseEnvironmentProbe) m_ERRBaseEnvironmentProbe.Stop(); + if (m_ERRPrisonerProbe) m_ERRPrisonerProbe.Stop(); + if (m_ERRGuardCancelProbe) m_ERRGuardCancelProbe.Stop(); + if (m_ERRLocalAdmissionProbe) m_ERRLocalAdmissionProbe.Stop(); + if (m_ERRPoweredFlightProbe) m_ERRPoweredFlightProbe.Stop(); + if (m_ERRPrisonBreachProbe) m_ERRPrisonBreachProbe.Stop(); + if (m_ERRItemStationTeardownProbe) m_ERRItemStationTeardownProbe.Stop(); + if (m_ERRCasualtyServiceProbe) m_ERRCasualtyServiceProbe.Stop(); + if (m_ERRObjectiveLossProbe) m_ERRObjectiveLossProbe.Stop(); + if (m_ERRBaseMedicalProbe) m_ERRBaseMedicalProbe.Stop(); + if (m_ERRCasualtyLoadProbe) m_ERRCasualtyLoadProbe.Cleanup(); + if (m_ERRRecoveryProbe) m_ERRRecoveryProbe.Stop(); + } + protected void ERR_StopRadioProbe() { if (m_ERRBaseRadioProbe) m_ERRBaseRadioProbe.Stop(); } + protected void ERR_BaseMove(vector position) + { + vector transform[4]; + m_ERRBasePlayer.GetWorldTransform(transform); + transform[3] = ERR_Actors.Ground(position); + ChimeraCharacter.Cast(m_ERRBasePlayer).Teleport(transform); + } + protected ERR_UnlockPrisonAction ERR_BaseLock(IEntity entity) + { + BaseActionsManagerComponent manager = BaseActionsManagerComponent.Cast(entity.FindComponent(BaseActionsManagerComponent)); + if (manager) + { + array actions = {}; + manager.GetActionsList(actions); + foreach (BaseUserAction action : actions) + { + ERR_UnlockPrisonAction lock = ERR_UnlockPrisonAction.Cast(action); + if (lock) return lock; + } + } + IEntity child = entity.GetChildren(); + while (child) + { + ERR_UnlockPrisonAction lock = ERR_BaseLock(child); + if (lock) return lock; + child = child.GetSibling(); + } + return null; + } + protected bool ERR_BaseCover() + { + int count; + foreach (IEntity entity : m_OwnedEntities) + { + if (!entity || !entity.GetPrefabData() || entity.GetPrefabData().GetPrefabName() != "{4B6AC1D8701C35A1}Prefabs/ERR/FieldCover.et") continue; + vector transform[4]; + entity.GetWorldTransform(transform); + vector up = transform[1]; + if (!ERR_BaseCheck(up[1] > 0.99, "outpost barrier is upright")) return false; + vector low, high; + entity.GetWorldBounds(low, high); + vector center = (low + high) * 0.5; + vector across = "0 0 2"; + if (high[0] - low[0] < high[2] - low[2]) across = "2 0 0"; + TraceParam trace = new TraceParam(); + trace.Start = center + across; + trace.End = center - across; + trace.Flags = TraceFlags.ENTS; + trace.LayerMask = TRACE_LAYER_CAMERA; + float fraction = GetWorld().TraceMove(trace, null); + PrintFormat("ERR COVER GEOMETRY: low=%1 high=%2 trace=%3", low, high, fraction); + if (!ERR_BaseCheck(fraction < 1 && trace.TraceEnt == entity, "outpost barrier has physical collision")) return false; + count++; + } + return ERR_BaseCheck(count == 3, "exactly three authored outpost barriers exist"); + } + protected void ERR_BaseDiscovered(ERR_LocationComponent location, int previous, int current) + { + if (location.Id() == "everon-medical-1" && previous == 0 && current == 2) m_ERRMedicalDiscoveries++; + } + protected void ERR_BaseResult(ERR_Phase previous, ERR_Phase current) + { + if (!ERR_MissionRules.Terminal(current)) return; + GetGame().GetCallqueue().Remove(ERR_BaseTick); + if (m_ERRExtractionCase == "station-teardown") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 2002, "native station teardown fixture finished before explicit reset")) return; + ERR_StopHealthProbes(); + Print("ERR SMOKE COMPLETE: isolated off-world station catalog-expiry injection and native callback teardown; not restart reproduction"); + return; + } + if (m_ERRExtractionCase == "prison-breach") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1902, "native destroyed-gate crossing finished before explicit reset")) return; + ERR_StopHealthProbes(); + Print("ERR SMOKE COMPLETE: actual gate destruction and sampled prison crossing; repositioned fixture, not walking or multiplayer"); + return; + } + if (m_ERRExtractionCase == "powered-flight" || m_ERRExtractionCase == "powered-translate") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1802, "native powered-flight fixture finished before explicit test reset")) return; + ERR_StopHealthProbes(); + if (m_ERRExtractionCase == "powered-translate") + Print("ERR SMOKE COMPLETE: native powered takeoff, bounded four-metre translation, target hold, contact landing and engine-off; isolated mechanism fixture reset"); + else Print("ERR SMOKE COMPLETE: native pilot-input powered takeoff, hover, contact landing and shutdown; isolated mechanism fixture reset"); + return; + } + if (m_ERRExtractionCase == "local-admission") + { + // Completion is emitted by the calling tick after synchronous teardown and + // its post-transition invariants; a terminal event alone is insufficient. + ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1700, "local admission fixture received its production fail-closed transition"); + return; + } + if (m_ERRExtractionCase == "early-helicopter-loss") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 201 && Players().HasSurvivor() && Extraction().State() == ERR_ExtractionState.LOST, "lost helicopter ends prison phase despite a living prisoner")) return; + ERR_FailureGameOverScreenInfo result = new ERR_FailureGameOverScreenInfo(); + if (!ERR_BaseCheck(EndReason().Contains("helicopter was lost") && result.GetDebriefing(0, null) == EndReason(), "early loss has a specific replicated and debriefing reason")) return; + Print("ERR SMOKE COMPLETE: early extraction vehicle loss"); + return; + } + if (m_ERRExtractionCase == "casualty-service") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1402, "casualty service fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native casualty service with helper-only identity adapter; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "radio-document-loss" || m_ERRExtractionCase == "radio-document-loss-partial") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1302, "radio document-loss fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native " + m_ERRExtractionCase + "; reset requested by fixture"); + return; + } + + if (m_ERRExtractionCase == "guard-cancel") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1502, "guard cancellation fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native guard-cancel; reset requested by fixture"); + return; + } + + if (m_ERRExtractionCase == "prisoner-kit") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 702, "prisoner-kit fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native prisoner-kit; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "medical") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 602, "medical fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native medical; reset requested by fixture"); + return; + } + if ((m_ERRExtractionCase == "casualty-load" || m_ERRExtractionCase == "casualty-direct" || m_ERRExtractionCase == "casualty-bench" || m_ERRExtractionCase == "casualty-remove")) + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 802, "casualty-load fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native " + m_ERRExtractionCase + "; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "environment-restart") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1202, "environment restart round finished before explicit test reset")) return; + PrintFormat("ERR SMOKE COMPLETE: environment restart round %1; reset requested by fixture", m_ERRBaseEnvironmentRestartProbe.Round()); + return; + } + if (m_ERRExtractionCase == "environment") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1002, "environment fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native environment; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "patrols") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1102, "both patrol routes finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native finite patrol routes and cleanup; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "recovery") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 502 && EndReason().Contains("administrator abandoned"), "explicit authorized abandonment uses normal defeat result")) return; + if (!ERR_BaseCheck(!RecoveryStatus().IsEmpty() && !AbandonRound(), "terminal event observes active warning and rejects repeated abandonment")) return; + Print("ERR SMOKE COMPLETE: recovery status and explicit administrator abandonment"); + return; + } + if (m_ERRExtractionCase == "objective-ui") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 902, "objective UI fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native objective UI close, reopen and deleted-task cleanup; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "lifecycle") + { + if (!ERR_BaseCheck(m_ERRBaseStep == 402, "lifecycle fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native lifecycle admission guards; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "transport-loss") + { + if (!ERR_BaseCheck(m_ERRBaseStep == 302, "transport fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: finite native ground transport; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "extraction-capacity") + { + if (!ERR_BaseCheck(m_ERRBaseStep == 202, "capacity fixture finished before its explicit test reset")) return; + Print("ERR SMOKE COMPLETE: physical capacity and isolated extraction results; reset requested by fixture"); + return; + } + if (!ERR_BaseCheck(current == ERR_Phase.VICTORY && m_ERRBaseStep == 5, "escape and restart reached without companion services")) return; + Print("ERR SMOKE COMPLETE: core-only escape"); + } + protected void ERR_BaseTick() + { + float now = GetWorld().GetWorldTime(); + if (ERR_NativeProgressionIdentityProbe.Failed()) { ERR_BaseCheck(false, "native progression identity rejection fixture"); return; } + if (now > m_ERRBaseDeadline) { ERR_BaseCheck(false, "timeout at " + m_ERRBaseStep.ToString()); return; } + if (m_ERRExtractionCase == "extraction-startup-failure" || m_ERRExtractionCase == "extraction-boundary-failure") + { + if (PreparationError().IsEmpty()) return; + if (!ERR_BaseCheck(Phase() == ERR_Phase.PREPARING && !Active() && m_Stopped, "invalid extraction setup never starts gameplay")) return; + array players = {}; + ERR_Actors.Players(players); + if (!ERR_BaseCheck(players.IsEmpty() && Sites() && Sites().Count() == 0 && m_OwnedEntities.IsEmpty() && !ExtractionVehicle(), "late startup failure rolls back all authored stock, scenery, groups and vehicle")) return; + if (!ERR_BaseCheck(PreparationError().Contains("twelve") && !Transition(ERR_Phase.PRISON), "invalid extraction retains actionable diagnosis and blocks progression")) return; + GetGame().GetCallqueue().Remove(ERR_BaseTick); + Print("ERR SMOKE COMPLETE: expected late extraction startup failure"); + return; + } + if (m_ERRStartupFailure) + { + if (PreparationError().IsEmpty()) return; + if (!ERR_BaseCheck(Phase() == ERR_Phase.PREPARING && !Active() && m_Stopped, "invalid faction setup stops services without starting the mission")) return; + array players = {}; + ERR_Actors.Players(players); + if (!ERR_BaseCheck(players.IsEmpty() && !Sites() && m_OwnedEntities.IsEmpty(), "failed setup spawns no players, sites or supplies")) return; + array replies = {}; + Admin().Execute(this, true, "status", replies); + if (!ERR_BaseCheck(replies.Count() == 1 && replies[0].Contains("configured player and enemy factions"), "administrator receives retained startup failure cause")) return; + if (!ERR_BaseCheck(!Transition(ERR_Phase.PRISON) && !Transition(ERR_Phase.EXTRACTION), "failed preparation cannot be advanced into gameplay")) return; + GetGame().GetCallqueue().Remove(ERR_BaseTick); + Print("ERR SMOKE COMPLETE: expected startup-failure"); + return; + } + if (m_ERRBaseStep == 2000) + { + int result = m_ERRItemStationTeardownProbe.Tick(now); + if (result < 0) { ERR_BaseCheck(false, "native isolated station teardown fixture"); return; } + if (result == 1) { m_ERRBaseStep = 2002; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 1900) + { + int result = m_ERRPrisonBreachProbe.Tick(now); + if (result < 0) { ERR_BaseCheck(false, "native destroyed-gate progression fixture"); return; } + if (result == 1) { m_ERRBaseStep = 1902; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 1800) + { + int result = m_ERRPoweredFlightProbe.Tick(now); + if (result < 0) { ERR_BaseCheck(false, "native powered-flight feasibility fixture"); return; } + if (result == 1) { m_ERRBaseStep = 1802; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 1700) + { + int result = m_ERRLocalAdmissionProbe.Tick(now); + if (result < 0) { ERR_StopHealthProbes(); GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) + { + m_ERRBaseStep = 1702; + GetGame().GetCallqueue().Remove(ERR_BaseTick); + Print("ERR SMOKE COMPLETE: native local admission callback replay and fail-closed method injection; not multiplayer evidence"); + } + return; + } + if (m_ERRBaseStep == 1400) + { + int result = m_ERRCasualtyServiceProbe.Tick(now); + if (result < 0) { ERR_BaseCheck(false, "casualty service fixture failed"); return; } + if (result == 1) { m_ERRBaseStep = 1402; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 1300) + { + int result = m_ERRObjectiveLossProbe.Tick(now); + if (result < 0) { ERR_StopHealthProbes(); GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 1302; Transition(ERR_Phase.DEFEAT); } + return; + } + + if (m_ERRBaseStep == 1500) + { + int result = m_ERRGuardCancelProbe.Tick(now); + if (result < 0) { ERR_StopHealthProbes(); GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 1502; Transition(ERR_Phase.DEFEAT); } + return; + } + + if (m_ERRBaseStep == 700) + { + int result = m_ERRPrisonerProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 702; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 600) + { + int result = m_ERRBaseMedicalProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 602; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 800) + { + int result = m_ERRCasualtyLoadProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 802; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 1200) + { + int result = m_ERRBaseEnvironmentRestartProbe.Tick(now); + if (result < 0) { ERR_BaseCheck(false, "environment restart fixture failed"); return; } + if (result == 1) { m_ERRBaseStep = 1202; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 1000) + { + int result = m_ERRBaseEnvironmentProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 1002; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 1100) + { + int east = m_ERRPatrolEast.Tick(now); + int west = m_ERRPatrolWest.Tick(now); + if (east < 0 || west < 0) { ERR_StopHealthProbes(); GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (east == 1 && west == 1) + { + if (!ERR_NativePatrolProbe.StopChecks(this)) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + m_ERRBaseStep = 1102; Transition(ERR_Phase.DEFEAT); + } + return; + } + if (m_ERRBaseStep == 500) + { + int result = m_ERRRecoveryProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) + { + m_ERRBaseStep = 502; + array replies = {}; + Admin().Execute(this, true, "mission abandon", replies); + ERR_BaseCheck(Phase() == ERR_Phase.DEFEAT && replies.Count() == 1 && replies[0].Contains("Round abandoned") && RecoveryStatus().IsEmpty() && Recovery().Conscious() == 0 && Recovery().Incapacitated() == 0, "administrator command returns accepted outcome after recovery cleanup"); + } + return; + } + if (m_ERRBaseStep == 400) + { + int result = m_ERRLifecycleProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 402; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 300) + { + int result = m_ERRTransportProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 302; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 200) + { + int result = m_ERRExtractionProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 202; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 901) + { + int result = ERR_NativeObjectiveProbe.TickCloseReopen(this, now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) + { + if (m_ERRExtractionCase == "objective-ui") + { + if (!ERR_NativeObjectiveProbe.BeginDeletedTaskClose(this, now)) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + m_ERRBaseStep = 903; + } + else { m_ERRObjectiveCloseChecked = true; m_ERRBaseStep = 0; } + } + return; + } + if (m_ERRBaseStep == 903) + { + int result = ERR_NativeObjectiveProbe.TickDeletedTaskClose(this, now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 902; Transition(ERR_Phase.DEFEAT); } + return; + } + if (now < m_ERRBaseWait) return; + if (m_ERRBaseStep == 0) + { + array players = {}; + ERR_Actors.Players(players, true); + if (players.Count() != 1 || Phase() != ERR_Phase.PRISON) return; + m_ERRBasePlayer = players[0]; + if (!m_ERRCatalogChecked) + { + if (!ERR_NativeFactionCatalogProbe.Run(this)) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + m_ERRCatalogChecked = true; + } + if (!m_ERRDiscoveryMapChecked) + { + if (!ERR_NativeDiscoveryMapProbe.Run()) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + m_ERRDiscoveryMapChecked = true; + } + if (m_ERRExtractionCase == "station-teardown") + { + m_ERRItemStationTeardownProbe = new ERR_NativeItemStationTeardownProbe(); + m_ERRBaseStep = 2000; + return; + } + if (m_ERRExtractionCase == "prison-breach") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRPrisonBreachProbe = new ERR_NativePrisonBreachProbe(this, m_ERRBasePlayer); + m_ERRBaseStep = 1900; + return; + } + if (m_ERRExtractionCase == "powered-flight" || m_ERRExtractionCase == "powered-translate") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRPoweredFlightProbe = new ERR_NativePoweredFlightProbe(this); + string autohoverMode; + if (System.GetCLIParam("errFlightAutohover", autohoverMode) && autohoverMode == "1") + if (!ERR_BaseCheck(m_ERRPoweredFlightProbe.SetAutohoverMode(true), "owned native autohover experiment selected before allocation")) return; + m_ERRBaseDeadline = now + 250000; + m_ERRBaseStep = 1800; + return; + } + if (m_ERRExtractionCase == "local-admission") + { + m_ERRLocalAdmissionProbe = new ERR_NativeLocalAdmissionProbe(this); + m_ERRBaseStep = 1700; + return; + } + if (m_ERRExtractionCase == "casualty-service") + { + m_ERRCasualtyServiceProbe = new ERR_NativeCasualtyServiceProbe(this); + m_ERRBaseStep = 1400; + return; + } + if (m_ERRExtractionCase == "radio-document-loss" || m_ERRExtractionCase == "radio-document-loss-partial") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRObjectiveLossProbe = new ERR_NativeObjectiveLossProbe(this, m_ERRBasePlayer, m_ERRExtractionCase == "radio-document-loss-partial"); + m_ERRBaseStep = 1300; + return; + } + + if (m_ERRExtractionCase == "guard-cancel") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRGuardCancelProbe = new ERR_NativeGuardCancelProbe(this); + m_ERRBaseStep = 1500; + return; + } + + if (m_ERRExtractionCase == "prisoner-kit") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRPrisonerProbe = new ERR_NativePrisonerProbe(this, m_ERRBasePlayer); + m_ERRBaseStep = 700; + return; + } + if (m_ERRExtractionCase == "medical") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRBaseMedicalProbe = new ERR_NativeMedicalProbe(this); + m_ERRBaseStep = 600; + return; + } + if ((m_ERRExtractionCase == "casualty-load" || m_ERRExtractionCase == "casualty-direct" || m_ERRExtractionCase == "casualty-bench" || m_ERRExtractionCase == "casualty-remove")) + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + if (m_ERRExtractionCase == "casualty-remove") m_ERRCasualtyLoadProbe = new ERR_NativeCasualtyRemoveProbe(this); + else m_ERRCasualtyLoadProbe = new ERR_NativeCasualtyLoadProbe(this, m_ERRExtractionCase != "casualty-load", m_ERRExtractionCase == "casualty-bench"); + m_ERRBaseStep = 800; + return; + } + if (m_ERRExtractionCase == "environment-restart") + { + if (!ERR_BaseCheck(m_ERRBaseEnvironmentRestartProbe != null, "environment restart selected isolated settings before mode initialization")) return; + m_ERRBaseStep = 1200; + return; + } + if (m_ERRExtractionCase == "environment") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRBaseEnvironmentProbe = new ERR_NativeEnvironmentProbe(this); + m_ERRBaseStep = 1000; + return; + } + if (m_ERRExtractionCase == "patrols") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRPatrolEast = new ERR_NativePatrolProbe(this, "everon-outpost-1"); + m_ERRPatrolWest = new ERR_NativePatrolProbe(this, "everon-supply-2"); + m_ERRBaseStep = 1100; + return; + } + if (m_ERRExtractionCase == "recovery") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRRecoveryProbe = new ERR_NativeRecoveryProbe(this, m_ERRBasePlayer); + m_ERRBaseStep = 500; + return; + } + if (m_ERRExtractionCase == "lifecycle") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRLifecycleProbe = new ERR_NativeLifecycleProbe(this, m_ERRBasePlayer); + m_ERRBaseStep = 400; + return; + } + if (m_ERRExtractionCase == "transport-survey") + { + ERR_NativeTransportSurvey.Run(this); + GetGame().GetCallqueue().Remove(ERR_BaseTick); + return; + } + if (m_ERRExtractionCase == "transport-loss") + { + m_ERRTransportProbe = new ERR_NativeTransportProbe(this); + m_ERRBaseStep = 300; + return; + } + if (m_ERRExtractionCase == "early-helicopter-loss") + { + if (!ERR_BaseCheck(Extraction().Ready() && Players().HasSurvivor(), "ready helicopter and living prisoner before deliberate loss")) return; + m_ERRBaseStep = 201; + ERR_Actors.DeleteSpawned(ExtractionVehicle()); + return; + } + if (m_ERRExtractionCase == "extraction-capacity") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRExtractionProbe = new ERR_NativeExtractionProbe(this); + m_ERRBaseStep = 200; + return; + } + string survey; + if (System.GetCLIParam("errSmokeOutcome", survey) && survey == "site-survey") + { + ERR_NativeSiteSurvey probe = new ERR_NativeSiteSurvey(); + probe.Run(); + GetGame().GetCallqueue().Remove(ERR_BaseTick); + return; + } + if (!m_ERRObjectiveCloseChecked) + { + if (!ERR_NativeObjectiveProbe.BeginCloseReopen(this, now)) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + m_ERRBaseStep = 901; + return; + } + if (!ERR_NativeAdminSettingsProbe.Run(this) || !ERR_NativeDefinitionProbe.Run() || !ERR_NativeContractsProbe.Run(this, m_ERRBasePlayer) || !ERR_BaseCover() || !ERR_NativeTimeProbe.Run(this)) return; + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + if (!ERR_BaseCheck(Objectives() && Objectives().Current() && Objectives().Current().GetTaskName() == "Escape the prison", "native prison objective exists")) return; + if (!ERR_NativeObjectiveProbe.Observe(this)) return; + ERR_SiteRuntime cache = Sites().Find(m_ERRActiveCacheId); + if (!ERR_BaseCheck(Sites().Count() == 7 && cache && cache.Container && vector.DistanceXZ(cache.Container.GetOrigin(), PrisonPosition()) > 100, "authored supply cache is a separate scavenging location")) return; + array stock = {}; + ERR_Inventory.Items(InventoryStorageManagerComponent.Cast(cache.Container.FindComponent(InventoryStorageManagerComponent)), stock); + PrintFormat("ERR BASE STOCK: cache items=%1", stock.Count()); + int expectedStock; + foreach (ERR_SiteStock entry : cache.Definition.Stock) expectedStock += entry.Count; + if (!ERR_BaseCheck(stock.Count() >= expectedStock, "cache holds finite physical equipment and objective documents")) return; + if (!ERR_BaseCheck(Command() == null, "no companion HQ or support controller loaded")) return; + if (!ERR_BaseCheck(vector.DistanceXZ(m_ERRBasePlayer.GetOrigin(), PrisonPosition()) < 5, "prisoner spawned in authored prison")) return; + foreach (ERR_LocationComponent location : m_Locations) + if (location.Kind() == ERR_LocationKind.RADIO) m_ERRBaseRadio = location; + ERR_UnlockPrisonAction lock; + foreach (IEntity entity : m_OwnedEntities) + { + if (!entity) continue; + if (!lock) lock = ERR_BaseLock(entity); + } + foreach (IEntity item : stock) + if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == ERR_Resources.ObjectiveDocument()) m_ERRBaseDocuments.Insert(item); + if (m_ERRCacheLoss) + { + ERR_Actors.DeleteSpawned(Sites().Find("everon-supply-1").Container); + if (!ERR_BaseCheck(!Sites().Find("everon-supply-1").Container, "primary cache lost before any clues are recovered")) return; + } + if (!ERR_BaseCheck(lock && m_ERRBaseRadio && m_ERRBaseDocuments.Count() == 2 && ERR_Actors.Alive(ExtractionVehicle()), "gate, clues, radio and helicopter created by core")) return; + if (!ERR_NativeProgressionIdentityProbe.Begin(this, m_ERRBasePlayer)) { ERR_BaseCheck(false, "native progression identity gate baseline"); return; } + ERR_BaseMove(lock.GetOwner().GetOrigin() + "1 0 1"); + lock.PerformAction(lock.GetOwner(), m_ERRBasePlayer); + if (!ERR_BaseCheck(Phase() == ERR_Phase.RADIO_SEARCH, "gate action begins escape")) return; + if (!ERR_BaseCheck(m_Settings.Set("radioDefenceSeconds", 30), "test defence duration accepted")) return; + SCR_Task prisonTask = SCR_TaskSystem.GetTaskFromTaskID(ERR_Objectives.Id(ERR_Phase.PRISON), false); + if (!ERR_BaseCheck(prisonTask && prisonTask.GetTaskState() == SCR_ETaskState.COMPLETED, "previous native objective completes on phase change")) return; + if (!ERR_BaseCheck(Objectives().Current().GetTaskUIVisibility() == SCR_ETaskUIVisibility.LIST_ONLY, "search objective does not expose a hidden site")) return; + if (!ERR_NativeObjectiveProbe.Observe(this)) return; + if (!ERR_BaseCheck(Sites().Find("everon-supply-1").Location.Knowledge() == 2 && Sites().Find("everon-supply-2").Location.Knowledge() == 2, "both named supply routes revealed after escape")) return; + ERR_SiteRuntime medical = Sites().Find("everon-medical-1"); + if (!ERR_BaseCheck(medical.Location.Knowledge() == 0 && Sites().Find("everon-outpost-1").Location.Knowledge() == 0, "optional sites remain hidden until approached")) return; + ERR_BaseMove(medical.Location.Position() + "0 0 8"); + CharacterControllerComponent.Cast(m_ERRBasePlayer.FindComponent(CharacterControllerComponent)).SetUnconscious(true); + m_ERRBaseStep = 10; + m_ERRBaseWait = now + 6000; + } + else if (m_ERRBaseStep == 10) + { + ERR_SiteRuntime medical = Sites().Find("everon-medical-1"); + if (!ERR_BaseCheck(medical.Location.Knowledge() == 0 && !Sites().CanObserve(m_ERRBasePlayer, medical), "unconscious player cannot discover optional sites")) return; + CharacterControllerComponent.Cast(m_ERRBasePlayer.FindComponent(CharacterControllerComponent)).SetUnconscious(false); + ERR_BaseMove(medical.Location.Position() + "0 0 65"); + m_ERRBaseStep = 11; + m_ERRBaseWait = now + 6000; + } + else if (m_ERRBaseStep == 11) + { + ERR_SiteRuntime medical = Sites().Find("everon-medical-1"); + if (!ERR_BaseCheck(medical.Location.Knowledge() == 0 && !Sites().CanObserve(m_ERRBasePlayer, medical), "distant player cannot discover optional sites")) return; + ERR_BaseMove(medical.Location.Position() + "0 0 8"); + m_ERRSightBlocker = ERR_Actors.Spawn("{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et", ERR_Actors.Ground(medical.Location.Position() + "-1.5 0 4")); + if (!ERR_BaseCheck(m_ERRSightBlocker != null, "isolated visibility obstacle created")) return; + Own(m_ERRSightBlocker); + vector low, high; + m_ERRSightBlocker.GetWorldBounds(low, high); + PrintFormat("ERR VISIBILITY OBSTACLE: low=%1 high=%2 observer=%3 target=%4", low, high, m_ERRBasePlayer.GetOrigin(), medical.Location.Position()); + m_ERRBaseStep = 115; + m_ERRBaseWait = now + 6000; + } + else if (m_ERRBaseStep == 115) + { + ERR_SiteRuntime medical = Sites().Find("everon-medical-1"); + if (!ERR_BaseCheck(medical.Location.Knowledge() == 0 && !Sites().CanObserve(m_ERRBasePlayer, medical), "physical wall prevents nearby site discovery")) return; + ERR_Actors.DeleteSpawned(m_ERRSightBlocker); + m_ERRBaseStep = 12; + m_ERRBaseWait = now + 6000; + } + else if (m_ERRBaseStep == 12) + { + ERR_SiteRuntime medical = Sites().Find("everon-medical-1"); + if (!ERR_BaseCheck(medical.Location.Knowledge() == 2 && medical.Location.Label() == "Medical stash" && m_ERRMedicalDiscoveries == 1, "conscious nearby player visually discovers named medical stash once")) return; + if (!ERR_BaseCheck(!Sites().CanObserve(m_ERRBasePlayer, Sites().Find("everon-radio-1")), "distant medical-site discovery does not reveal the radio")) return; + m_ERRBaseStep = 1; + } + else if (m_ERRBaseStep == 1 || m_ERRBaseStep == 2) + { + ERR_BaseMove(Sites().Find(m_ERRActiveCacheId).Container.GetOrigin() + "0 0 2"); + SCR_InventoryStorageManagerComponent inventory = SCR_InventoryStorageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(SCR_InventoryStorageManagerComponent)); + InventoryStorageManagerComponent source = InventoryStorageManagerComponent.Cast(Sites().Find(m_ERRActiveCacheId).Container.FindComponent(InventoryStorageManagerComponent)); + BaseInventoryStorageComponent destination = inventory.FindStorageForItem(m_ERRBaseDocuments[m_ERRBaseStep - 1]); + if (!ERR_BaseCheck(destination && source.TryMoveItemToStorage(m_ERRBaseDocuments[m_ERRBaseStep - 1], destination), "physical clue recovered")) return; + m_ERRBaseStep++; + m_ERRBaseWait = now + 2500; + } + else if (m_ERRBaseStep == 3) + { + if (!ERR_BaseCheck(Objectives().Current().GetTaskDescription().Contains("The radio station is identified on your map. Reach"), "objective guidance reacts to discovered radio")) return; + if (!ERR_NativeObjectiveProbe.Observe(this)) return; + ERR_SiteRuntime cache = Sites().Find(m_ERRActiveCacheId); + array stock = {}; + ERR_Inventory.Items(InventoryStorageManagerComponent.Cast(cache.Container.FindComponent(InventoryStorageManagerComponent)), stock); + foreach (IEntity item : stock) if (item) SCR_EntityHelper.DeleteEntityAndChildren(item); + if (!ERR_BaseCheck(m_ERRMedicalDiscoveries == 1, "discovery ticks do not repeat the location event")) return; + if (m_ERRCacheLoss && !ERR_BaseCheck(!Sites().Find("everon-supply-1").Container, "lost primary cache stays absent while alternate documents identify the radio")) return; + if (!ERR_BaseCheck(ERR_NativeProgressionIdentityProbe.DocumentPassed(), "actual held-document rejection and restored recovery were exercised this round")) return; + if (!ERR_BaseCheck(m_ERRBaseRadio.Knowledge() == 2, "documents identify radio without Intel addon")) return; + ERR_BaseMove(m_ERRBaseRadio.Position() + "2 0 0"); + m_ERRBaseStep = 30; + m_ERRBaseWait = now + 1000; + } + else if (m_ERRBaseStep == 30) + { + m_ERRBaseRadioProbe = new ERR_NativeRadioDefenceProbe(this, m_ERRBasePlayer, m_ERRBaseRadio); + m_ERRBaseStep = 301; + } + else if (m_ERRBaseStep == 301) + { + int result = m_ERRBaseRadioProbe.Tick(now); + if (result < 0) { ERR_StopRadioProbe(); GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 0) return; + if (!ERR_BaseCheck(RadioFeedback() == ERR_RadioFeedback.INACTIVE, "radio feedback remains inactive before tuning")) return; + if (!ERR_BaseCheck(TuneRadio(m_ERRBasePlayer, m_ERRBaseRadio), "identified radio accepts transmission")) return; + if (!ERR_BaseCheck(RadioFeedback() == ERR_RadioFeedback.WAITING && ERR_ObjectiveText.Description(this, false).Contains("Waiting for"), "radio feedback publishes waiting before first occupancy sample")) return; + m_ERRBaseStep = 31; + m_ERRBaseWait = now + 5000; + } + else if (m_ERRBaseStep == 31) + { + ERR_SiteRuntime cache = Sites().Find(m_ERRActiveCacheId); + array stock = {}; + ERR_Inventory.Items(InventoryStorageManagerComponent.Cast(cache.Container.FindComponent(InventoryStorageManagerComponent)), stock); + if (!ERR_BaseCheck(stock.IsEmpty() && Sites().Prepare() == ERR_PrepareResult.READY, "depleted stock stays empty when preparation is queried again")) return; + ERR_Actors.DeleteSpawned(cache.Container); + if (!ERR_BaseCheck(DefenceOccupied() && DefenceSecondsRemaining() > 0 && DefenceSecondsRemaining() < 30 && Objectives().Current().GetTaskDescription().Contains("seconds remaining"), "native objective reports advancing radio progress")) return; + if (!ERR_BaseCheck(RadioFeedback() == ERR_RadioFeedback.TRANSMITTING && ERR_ObjectiveText.Description(this, false).Contains("Transmission in progress"), "radio guide reports transmitting without querying a countdown")) return; + if (!ERR_NativeObjectiveProbe.Observe(this)) return; + CharacterControllerComponent.Cast(m_ERRBasePlayer.FindComponent(CharacterControllerComponent)).SetUnconscious(true); + m_ERRBaseStep = 310; + m_ERRBaseWait = now + 35000; + } + else if (m_ERRBaseStep == 310) + { + CharacterControllerComponent controller = CharacterControllerComponent.Cast(m_ERRBasePlayer.FindComponent(CharacterControllerComponent)); + if (!ERR_BaseCheck(controller.IsUnconscious() && ERR_Actors.Alive(m_ERRBasePlayer) && Players().HasSurvivor() && Phase() == ERR_Phase.RADIO_DEFENCE, "unconscious survivor does not trigger defeat after the full grace period")) return; + if (!ERR_BaseCheck(!DefenceOccupied() && DefenceSecondsRemaining() == 30, "unconscious radio defender cannot advance transmission")) return; + if (!ERR_BaseCheck(RadioFeedback() == ERR_RadioFeedback.INTERRUPTED && ERR_ObjectiveText.Description(this, false).Contains("Progress has reset"), "radio guide reports interruption after unconsciousness")) return; + SCR_PlayerController playerController = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + if (!ERR_BaseCheck(playerController.GetControlledEntity() == m_ERRBasePlayer && playerController.ERR_ObserverState() == ERR_ObserverReason.NONE && !playerController.ERR_HasObserverCamera(), "unconscious player retains their body and camera")) return; + controller.SetUnconscious(false); + m_ERRBaseStep = 311; + m_ERRBaseWait = now + 6000; + } + else if (m_ERRBaseStep == 311) + { + if (!ERR_BaseCheck(ERR_Actors.CanFight(m_ERRBasePlayer) && DefenceOccupied() && DefenceSecondsRemaining() < 30, "regaining consciousness resumes transmission from zero")) return; + if (!ERR_BaseCheck(RadioFeedback() == ERR_RadioFeedback.TRANSMITTING && ERR_ObjectiveText.Description(this, false).Contains("Transmission in progress"), "radio guide returns to transmitting after recovery")) return; + int playerId = GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(m_ERRBasePlayer); + if (!ERR_BaseCheck(!Players().CanEnter(playerId, Phase()), "regaining consciousness does not grant another life")) return; + ERR_BaseMove(m_ERRBaseRadio.Position() + "90 0 0"); + m_ERRBaseStep = 32; + m_ERRBaseWait = now + 2500; + } + else if (m_ERRBaseStep == 32) + { + if (!ERR_BaseCheck(!Sites().Find(m_ERRActiveCacheId).Container, "lost supply cache is not replaced")) return; + if (!ERR_BaseCheck(!DefenceOccupied() && DefenceSecondsRemaining() == 30 && Objectives().Current().GetTaskDescription().Contains("interrupted"), "objective reports interruption and reset")) return; + if (!ERR_BaseCheck(RadioFeedback() == ERR_RadioFeedback.INTERRUPTED && ERR_ObjectiveText.Description(this, false).Contains("Return a conscious survivor"), "radio guide reports interruption after leaving the area")) return; + if (!ERR_NativeObjectiveProbe.Observe(this)) return; + ERR_BaseMove(m_ERRBaseRadio.Position() + "2 0 0"); + m_ERRBaseStep = 4; + m_ERRBaseWait = now + 33000; + } + else if (m_ERRBaseStep == 4) + { + if (!ERR_BaseCheck(Phase() == ERR_Phase.EXTRACTION, "radio defence reveals extraction") || !ERR_NativeTimeProbe.VerifyProgression(this)) return; + if (!ERR_BaseCheck(RadioFeedback() == ERR_RadioFeedback.INACTIVE, "radio feedback clears after completion")) return; + if (!ERR_NativeObjectiveProbe.Observe(this)) return; + CompartmentAccessComponent access = CompartmentAccessComponent.Cast(m_ERRBasePlayer.FindComponent(CompartmentAccessComponent)); + BaseCompartmentSlot slot = access.FindFreeCompartment(ExtractionVehicle(), ECompartmentType.PILOT); + if (!ERR_BaseCheck(slot && access.GetInVehicle(ExtractionVehicle(), slot, true, -1, ECloseDoorAfterActions.INVALID, false), "player physically boards extraction helicopter")) return; + m_ERRBaseStep = 5; + m_ERRBaseWait = now + 3000; + } + else if (m_ERRBaseStep == 5) + { + if (!ERR_BaseCheck(CompartmentAccessComponent.GetVehicleIn(m_ERRBasePlayer) == ExtractionVehicle(), "extraction requires real occupancy")) return; + vector transform[4]; + ExtractionVehicle().GetWorldTransform(transform); + transform[3] = m_EscapeCenter + Vector(m_EscapeRadius + 100, 150, 0); + ExtractionVehicle().SetWorldTransform(transform); + m_ERRBaseWait = now + 4000; + } + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c new file mode 100644 index 0000000..5320e4c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c @@ -0,0 +1,80 @@ +#ifdef WORKBENCH +// Positive check observes production initial placement; the fixture never wakes +// the mission helicopter. Negative transforms +// and velocity are applied only to an independent, disposable empty aircraft. +class ERR_NativeCasualtyGroundProbe +{ + protected ERR_GameMode m_Mode; + protected Vehicle m_Negative; + protected float m_Wait; + protected float m_Deadline; + protected int m_Step; + protected bool m_Stopped; + void ERR_NativeCasualtyGroundProbe(ERR_GameMode mode) { m_Mode = mode; } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + ERR_Actors.DeleteSpawned(m_Negative); m_Negative = null; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: casualty ground " + detail); return true; } + Print("ERR SMOKE FAIL: casualty ground " + detail, LogLevel.ERROR); Stop(); return false; + } + int Tick(float now) + { + if (m_Stopped) return -1; + if (m_Deadline > 0 && now > m_Deadline) { Check(false, "bounded ground-support probe deadline"); return -1; } + if (now < m_Wait) return 0; + if (m_Step == 0) + { + Vehicle parked = m_Mode.ExtractionVehicle(); + ERR_SiteService sites = m_Mode.Sites(); + ERR_ExtractionPlacement placement; + if (sites) placement = sites.ExtractionPlacement(); + if (!Check(placement && placement.Ready() && placement.WakeCount() == 1, "production initial placement completed with exactly one wake before player spawn")) return -1; + bool support = ERR_CasualtyGroundSupport.Parked(parked, true); + HelicopterControllerComponent controller = HelicopterControllerComponent.Cast(parked.FindComponent(HelicopterControllerComponent)); + bool nativeContact = controller && controller.GetSimulation() && controller.GetSimulation().HasAnyGroundContact(); + if (!Check((nativeContact || support) && ERR_CasualtyLoadingRules.AircraftReady(parked), "naturally settled mission aircraft has native landing contact or three strict wheel supports")) return -1; + vector raised = parked.GetOrigin() + "0 20 0"; + m_Negative = Vehicle.Cast(ERR_Actors.Spawn(m_Mode.Factions().ExtractionPrefab, raised)); + if (!Check(m_Negative != null, "separate empty airborne aircraft created for rejection checks")) return -1; + m_Mode.Own(m_Negative); + DamageManagerComponent damage = DamageManagerComponent.Cast(m_Negative.FindComponent(DamageManagerComponent)); + if (!Check(damage != null, "negative aircraft damage manager available")) return -1; + damage.EnableDamageHandling(false); + m_Deadline = now + 10000; m_Wait = now + 500; m_Step = 1; return 0; + } + if (m_Step == 1) + { + vector position = m_Negative.GetOrigin(); + float height = position[1] - GetGame().GetWorld().GetSurfaceY(position[0], position[2]); + bool support = ERR_CasualtyGroundSupport.Parked(m_Negative, true); + PrintFormat("ERR GROUND NEGATIVE: raisedPosition=%1 terrainClearance=%2", position, height); + if (!Check(ERR_Actors.Alive(m_Negative) && height > 5 && !support && !ERR_CasualtyLoadingRules.AircraftReady(m_Negative), "living aircraft above terrain is rejected even if stationary or sleeping")) return -1; + vector tilted[4]; Math3D.AnglesToMatrix("0 0 90", tilted); tilted[3] = position; + m_Negative.SetWorldTransform(tilted); + m_Wait = now + 500; m_Step = 2; return 0; + } + if (m_Step == 2) + { + vector actual[4]; m_Negative.GetWorldTransform(actual); + Physics physics = m_Negative.GetPhysics(); + if (!Check(physics != null, "negative aircraft has actual native physics")) return -1; + PrintFormat("ERR GROUND NEGATIVE: tiltedUp=%1 position=%2", actual[1][1], actual[3]); + if (!Check(ERR_Actors.Alive(m_Negative) && actual[1][1] < 0.85 && !ERR_CasualtyLoadingRules.AircraftMotion(true, actual[1][1], 0, 0) && !ERR_CasualtyLoadingRules.AircraftReady(m_Negative), "actual tilted aircraft is rejected independently by upright policy")) return -1; + // Read back an actual native velocity on the disposable clone. No mission + // aircraft activation, simulation state, engine or velocity is changed. + physics.SetVelocity("2 0 0"); + float speed = physics.GetVelocity().Length(); + PrintFormat("ERR GROUND NEGATIVE: nativeSpeed=%1", speed); + if (!Check(speed > 0.5 && !ERR_CasualtyLoadingRules.AircraftMotion(true, 1, speed, 0) && !ERR_CasualtyLoadingRules.AircraftReady(m_Negative), "actual native velocity is rejected independently by movement policy")) return -1; + if (!Check(ERR_Actors.Alive(m_Mode.ExtractionVehicle()) && ERR_CasualtyLoadingRules.AircraftReady(m_Mode.ExtractionVehicle()), "mission aircraft remains untouched and eligible after negative checks")) return -1; + Stop(); return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c new file mode 100644 index 0000000..11882a2 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c @@ -0,0 +1,255 @@ +#ifdef WORKBENCH +// Native mechanism experiment, NOT proof of an available player load/drag action. +// Caller must explicitly opt in and tick this independently of medical fixtures. +class ERR_NativeCasualtyLoadProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Caller; + protected IEntity m_Casualty; + protected Vehicle m_Vehicle; + protected SCR_CompartmentAccessComponent m_Access; + protected SCR_CharacterDamageManagerComponent m_Damage; + protected BaseCompartmentSlot m_Seat; + protected vector m_CallerTransform[4]; + protected vector m_GroundPosition; + protected bool m_CallerMoved; + protected bool m_Direct; + protected bool m_Bench; + protected float m_DownSettledAt; + protected float m_NextDiagnostic; + protected int m_Entered; + protected int m_Left; + protected int m_Step; + protected float m_Deadline; + protected float m_Wait; + + void ERR_NativeCasualtyLoadProbe(ERR_GameMode mode, bool direct = false, bool bench = false) { m_Mode = mode; m_Direct = direct; m_Bench = bench; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: casualty-load " + detail); return true; } + Print("ERR SMOKE FAIL: casualty-load " + detail, LogLevel.ERROR); + Cleanup(); + return false; + } + void Cleanup() + { + if (m_Access) + { + if (m_Access.GetOnCompartmentEntered(false)) m_Access.GetOnCompartmentEntered(false).Remove(Entered); + if (m_Access.GetOnCompartmentLeft(false)) m_Access.GetOnCompartmentLeft(false).Remove(Left); + } + // Restore only the same living local body, never a replacement/reconnected actor. + PlayerController controller = GetGame().GetPlayerController(); + if (m_CallerMoved && m_Caller && controller && controller.GetControlledEntity() == m_Caller && ERR_Actors.Alive(m_Caller) && !CompartmentAccessComponent.GetVehicleIn(m_Caller)) + ChimeraCharacter.Cast(m_Caller).Teleport(m_CallerTransform); + m_CallerMoved = false; + ERR_Actors.DeleteSpawned(m_Casualty); + m_Casualty = null; + } + protected void Entered(IEntity target, BaseCompartmentManagerComponent manager, int managerId, int slotId, bool move) + { + m_Entered++; + PrintFormat("ERR CASUALTY ENTER EVENT: manager=%1 slot=%2 move=%3 targetRoot=%4 count=%5", managerId, slotId, move, target == m_Vehicle, m_Entered); + } + protected void Left(IEntity target, BaseCompartmentManagerComponent manager, int managerId, int slotId, bool move) + { + m_Left++; + PrintFormat("ERR CASUALTY EXIT EVENT: manager=%1 slot=%2 move=%3 targetRoot=%4 count=%5", managerId, slotId, move, target == m_Vehicle, m_Left); + } + protected bool BelongsToAircraft(IEntity entity) + { + while (entity) + { + if (entity == m_Vehicle) return true; + entity = entity.GetParent(); + } + return false; + } + protected BaseCompartmentSlot FindTransportBench() + { + array seats = {}; + m_Mode.Extraction().Seats(seats); + foreach (BaseCompartmentSlot seat : seats) + { + if (!seat || seat.GetType() != ECompartmentType.CARGO || SCR_PatientCompartmentSlot.Cast(seat)) continue; + IEntity owner = seat.GetOwner(); + if (!owner || owner == m_Vehicle || !BelongsToAircraft(owner) || !owner.GetPrefabData()) continue; + ResourceName prefab = owner.GetPrefabData().GetPrefabName(); + // These installed Mi8 seat-part prefabs own the real transport benches. + // No compartment class, animation, accessibility or health setting is changed. + if (!prefab.Contains("VehPart_MI8_seats")) continue; + if (!seat.IsCompartmentAccessible() || seat.IsGetInLockedFor(m_Casualty) || seat.GetOccupant()) continue; + return seat; + } + return null; + } + protected void Trace(string stage) + { + if (!m_Casualty || !m_Access) return; + CharacterControllerComponent controller = CharacterControllerComponent.Cast(m_Casualty.FindComponent(CharacterControllerComponent)); + CharacterAnimationComponent animation = CharacterAnimationComponent.Cast(m_Casualty.FindComponent(CharacterAnimationComponent)); + if (controller && animation) + PrintFormat("ERR CASUALTY STATE: stage=%1 life=%2 ragdoll=%3 falling=%4 physicsLinked=%5 gettingIn=%6 gettingOut=%7", stage, controller.GetLifeState(), animation.IsRagdollActive(), animation.PhysicsIsFalling(), animation.PhysicsIsLinked(), m_Access.IsGettingIn(), m_Access.IsGettingOut()); + if (m_Seat) + { + IEntity owner = m_Seat.GetOwner(); + string prefab; + if (owner && owner.GetPrefabData()) prefab = owner.GetPrefabData().GetPrefabName(); + PrintFormat("ERR CASUALTY SEAT: stage=%1 name=%2 ownerPrefab=%3 rootOwner=%4 hierarchyValid=%5 slotId=%6 managerId=%7", stage, m_Seat.GetCompartmentUniqueName(), prefab, owner == m_Vehicle, BelongsToAircraft(owner), m_Seat.GetCompartmentSlotID(), m_Seat.GetCompartmentMgrID()); + PrintFormat("ERR CASUALTY OCCUPANCY: stage=%1 inCompartment=%2 actualSlot=%3 targetOccupant=%4 vehicleRoot=%5 enterEvents=%6 exitEvents=%7", stage, m_Access.IsInCompartment(), m_Access.GetCompartment() == m_Seat, m_Seat.GetOccupant() == m_Casualty, CompartmentAccessComponent.GetVehicleIn(m_Casualty) == m_Vehicle, m_Entered, m_Left); + } + } + protected bool DownOnGround() + { + CharacterControllerComponent controller = CharacterControllerComponent.Cast(m_Casualty.FindComponent(CharacterControllerComponent)); + return ERR_Actors.Alive(m_Casualty) && controller && controller.GetLifeState() == ECharacterLifeState.INCAPACITATED && !CompartmentAccessComponent.GetVehicleIn(m_Casualty); + } + protected bool IncapacitateGroundCasualty() + { + if (!Check(m_Damage && ERR_Actors.Alive(m_Casualty), "living fixture casualty has native damage manager before incapacitation")) return false; + HitZone resilience = m_Damage.GetResilienceHitZone(); + if (!Check(resilience != null, "fixture casualty has actual native resilience hit zone")) return false; + float beforeResilience = resilience.GetHealth(); + bool damageWasEnabled = m_Damage.IsDamageHandlingEnabled(); + // ForceUnconsciousness uses HandleDamage(TRUE), which damage protection can + // suppress. Permit only this synchronous operation, then restore the flag + // before any assertion/cleanup path. Never restore health or life state. + m_Damage.EnableDamageHandling(true); + m_Damage.ForceUnconsciousness(); + float afterResilience = resilience.GetHealth(); + m_Damage.EnableDamageHandling(damageWasEnabled); + PrintFormat("ERR CASUALTY INCAPACITATION: resilienceBefore=%1 resilienceAfter=%2 damageOriginallyEnabled=%3 restored=%4", beforeResilience, afterResilience, damageWasEnabled, m_Damage.IsDamageHandlingEnabled() == damageWasEnabled); + return Check(afterResilience < beforeResilience && ERR_Actors.Alive(m_Casualty) && m_Damage.IsDamageHandlingEnabled() == damageWasEnabled, "single native incapacitation reduces actual resilience, preserves life and restores damage-protection flag"); + } + protected bool BeginExit() + { + // Native unloading is a separate mechanism check, not a user-action claim. + vector exitTransform[4]; + m_Casualty.GetWorldTransform(exitTransform); + exitTransform[3] = m_GroundPosition; + return Check(m_Access.GetOutVehicle_NoDoor(exitTransform, true, false), "unconscious cargo occupant accepts native ground exit"); + } + protected bool ExitSettled() + { + return ERR_Actors.Alive(m_Casualty) && vector.Distance(m_Casualty.GetOrigin(), m_GroundPosition) < 4 && m_Seat.IsCompartmentAccessible(); + } + protected vector ExpectedExit() { return m_GroundPosition; } + protected string ExitResultDetail() { return "unloaded survivor on ground and seat accessible"; } + // now is world milliseconds, matching the other native probes. Returns -1/0/1. + int Tick(float now) + { + if (now < m_Wait) return 0; + if (m_Step == 0) + { + PlayerController controller = GetGame().GetPlayerController(); + if (!Check(Replication.IsServer() && controller && m_Mode, "server and local real caller available")) return -1; + m_Caller = controller.GetControlledEntity(); + m_Vehicle = m_Mode.ExtractionVehicle(); + if (!Check(ERR_Actors.CanFight(m_Caller) && !CompartmentAccessComponent.GetVehicleIn(m_Caller) && ERR_Actors.Alive(m_Vehicle), "caller on foot and authored helicopter intact")) return -1; + m_GroundPosition = ERR_Actors.Ground(m_Vehicle.GetOrigin() + "6 0 6"); + m_Casualty = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, m_GroundPosition); + if (!Check(m_Casualty != null, "independent casualty spawned on ground")) return -1; + m_Mode.Own(m_Casualty); + m_Access = SCR_CompartmentAccessComponent.Cast(m_Casualty.FindComponent(SCR_CompartmentAccessComponent)); + m_Damage = SCR_CharacterDamageManagerComponent.Cast(m_Casualty.FindComponent(SCR_CharacterDamageManagerComponent)); + if (!Check(m_Access && m_Damage, "native casualty components present")) return -1; + m_Access.GetOnCompartmentEntered().Insert(Entered); + m_Access.GetOnCompartmentLeft().Insert(Left); + m_Caller.GetWorldTransform(m_CallerTransform); + vector helperTransform[4]; + m_Caller.GetWorldTransform(helperTransform); + helperTransform[3] = ERR_Actors.Ground(m_GroundPosition + "2 0 0"); + ChimeraCharacter.Cast(m_Caller).Teleport(helperTransform); + m_CallerMoved = true; + m_Step = 1; + m_Wait = now + 1000; + return 0; + } + if (m_Step == 1) + { + if (!IncapacitateGroundCasualty()) return -1; + m_Deadline = now + 8000; + m_Step = 2; + return 0; + } + if (m_Step == 2) + { + if (!DownOnGround()) + { + if (now >= m_Deadline) { Check(false, "native health-driven ground incapacitation before boarding deadline"); return -1; } + return 0; + } + if (m_Bench) + { + if (m_DownSettledAt == 0) + { + m_DownSettledAt = now + 5000; + m_Deadline = now + 13000; + Trace("incapacitated; begin five-second bench settling interval"); + return 0; + } + if (now < m_DownSettledAt) return 0; + } + PrintFormat("ERR CASUALTY POSITIONS: caller=%1 casualty=%2 helicopter=%3", m_Caller.GetOrigin(), m_Casualty.GetOrigin(), m_Vehicle.GetOrigin()); + if (!Check(ERR_Actors.CanFight(m_Caller) && vector.Distance(m_Caller.GetOrigin(), m_Casualty.GetOrigin()) < 4, "conscious real caller physically beside ground casualty")) return -1; + if (m_Bench) m_Seat = FindTransportBench(); + else m_Seat = m_Access.FindFreeAndAccessibleCompartment(m_Vehicle, ECompartmentType.CARGO); + if (!Check(m_Seat && !SCR_PatientCompartmentSlot.Cast(m_Seat) && !m_Seat.GetOccupant(), "ordinary free cargo seat selected without patient-seat substitution")) return -1; + if (m_Bench) Print("ERR CASUALTY BENCH SOURCE: VehPart_MI8_seats_base.et sha256=1b9a2e55a9a1cb884886488b6e170f437b6c1a615b584449819b96a6c78ad973"); + Trace("before selected boarding request"); + PrintFormat("ERR CASUALTY LOAD: CanGetInVehicle=%1 state=%2 targetType=%3", m_Access.CanGetInVehicle(m_Seat.GetOwner()), CharacterControllerComponent.Cast(m_Casualty.FindComponent(CharacterControllerComponent)).GetLifeState(), m_Seat.GetType()); + // Exactly the public server-to-owner primitive used by vanilla ambulance loading. + bool accepted; + if (m_Direct) accepted = m_Access.GetInVehicle(m_Seat.GetOwner(), m_Seat, true, -1, ECloseDoorAfterActions.INVALID, false); + else accepted = m_Access.MoveInVehicle(m_Vehicle, ECompartmentType.CARGO, false, m_Seat); + PrintFormat("ERR CASUALTY MECHANISM: direct=%1 bench=%2 accepted=%3", m_Direct, m_Bench, accepted); + Trace("immediately after selected boarding request"); + m_NextDiagnostic = now + 1000; + if (!Check(accepted, "selected loading request accepted while already unconscious")) return -1; + m_Deadline = now + 8000; + m_Step = 3; + return 0; + } + if (m_Step == 3) + { + if (now >= m_NextDiagnostic) { Trace("awaiting physical occupancy"); m_NextDiagnostic = now + 1000; } + if (CompartmentAccessComponent.GetVehicleIn(m_Casualty) != m_Vehicle || m_Seat.GetOccupant() != m_Casualty) + { + if (now >= m_Deadline) { Check(false, "physical cargo occupancy after selected mechanism before deadline"); return -1; } + return 0; + } + if (!Check(ERR_Actors.Alive(m_Casualty) && !ERR_Actors.CanFight(m_Casualty), "living unconscious ground casualty now physically aboard")) return -1; + if (!Check(!m_Access.MoveInVehicle(m_Vehicle, ECompartmentType.CARGO, false, m_Seat), "occupied target seat rejects repeated request")) return -1; + ERR_PlayerRoster roster = new ERR_PlayerRoster(); + UUID account = "00e77200-0000-0000-0000-000000000201"; + if (!Check(roster.Bind(10201, account), "isolated casualty identity registered")) return -1; + roster.Spawned(10201, m_Casualty); + ERR_ExtractionService service = new ERR_ExtractionService(roster); + if (!Check(service.Assign(m_Vehicle) && service.Begin(m_Vehicle.GetOrigin() + "100 0 0", 50), "isolated boundary service initialized without moving mission helicopter")) return -1; + service.Tick(ERR_Phase.EXTRACTION); + if (!Check(service.DidEscape(account) && service.EscapedCount() == 1, "loaded unconscious identity satisfies physical extraction rule")) return -1; + if (!BeginExit()) return -1; + m_Deadline = now + 8000; + m_Step = 4; + return 0; + } + if (m_Step == 4) + { + if (now >= m_NextDiagnostic) { Trace("awaiting ground exit"); m_NextDiagnostic = now + 1000; } + if (CompartmentAccessComponent.GetVehicleIn(m_Casualty) || m_Seat.GetOccupant()) + { + if (now >= m_Deadline) { Check(false, "native exit clears physical vehicle and seat before deadline"); return -1; } + return 0; + } + bool settled = ExitSettled(); + if (!settled && now < m_Deadline) return 0; + PrintFormat("ERR CASUALTY EXIT POSITION: actual=%1 requested=%2 alive=%3 accessible=%4", m_Casualty.GetOrigin(), ExpectedExit(), ERR_Actors.Alive(m_Casualty), m_Seat.IsCompartmentAccessible()); + if (!Check(settled, ExitResultDetail())) return -1; + Cleanup(); + m_Step = 5; + return 1; + } + return 1; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c new file mode 100644 index 0000000..2b25c41 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c @@ -0,0 +1,160 @@ +#ifdef WORKBENCH +// Opt-in completion-boundary test of the REAL inherited stock remove action. +// It does not simulate held input, replace the action, or prove remote ownership. +class ERR_NativeCasualtyRemoveProbe : ERR_NativeCasualtyLoadProbe +{ + protected SCR_RemoveCasualtyUserAction m_Remove; + protected UserActionContext m_Context; + protected int m_SavedDoor; + protected int m_SelectedDoor; + protected bool m_DoorChanged; + protected bool m_PendingAction; + protected bool m_TestBodyProtected; + protected bool m_RemoveStopped; + protected bool m_RemoveComplete; + protected vector m_AuthoredExit; + protected vector m_SeatedPosition; + protected vector m_HelperPosition; + protected float m_RemoveDeadline; + protected float m_RemoveDiagnostic; + void ERR_NativeCasualtyRemoveProbe(ERR_GameMode mode, bool direct = false, bool bench = false) + { + m_Mode = mode; m_Direct = true; m_Bench = true; + } + override void Cleanup() + { + if (m_Remove && m_DoorChanged) m_Remove.SetCompartmentDoorInfoIndex(m_SavedDoor); + m_DoorChanged = false; m_PendingAction = false; m_RemoveStopped = true; + super.Cleanup(); + } + protected void FindAction(IEntity entity) + { + if (!entity || m_Remove) return; + BaseActionsManagerComponent manager = BaseActionsManagerComponent.Cast(entity.FindComponent(BaseActionsManagerComponent)); + if (manager) + { + array actions = {}; manager.GetActionsList(actions); + foreach (BaseUserAction action : actions) + { + SCR_RemoveCasualtyUserAction remove = SCR_RemoveCasualtyUserAction.Cast(action); + if (remove && remove.GetCompartmentSlot() == m_Seat && remove.GetContextIndex("door_l01_door") >= 0) + { + m_Remove = remove; return; + } + } + } + for (IEntity child = entity.GetChildren(); child; child = child.GetSibling()) FindAction(child); + } + protected void FindContext(IEntity entity) + { + if (!entity || m_Context) return; + BaseActionsManagerComponent manager = BaseActionsManagerComponent.Cast(entity.FindComponent(BaseActionsManagerComponent)); + if (manager) + { + UserActionContext context = manager.GetContext("door_l01_door"); + if (context) + { + array actions = {}; context.GetActionsList(actions); + if (actions.Contains(m_Remove)) { m_Context = context; return; } + } + } + for (IEntity child = entity.GetChildren(); child; child = child.GetSibling()) FindContext(child); + } + protected CompartmentDoorInfo ResolveDoor() + { + BaseCompartmentManagerComponent manager = m_Seat.GetManager(); + if (!manager) return null; + CompartmentDoorInfo info = manager.GetDoorInfo(m_SelectedDoor); + if (info) return info; + CompartmentDoorReference doorReference = manager.GetDoorReference(m_SelectedDoor); + if (!doorReference) return null; + BaseCompartmentManagerComponent referenced = doorReference.GetReferencedDoorCompartmentManager(); + int referencedIndex = doorReference.GetAnimDoorIndex(); + PrintFormat("ERR CASUALTY REMOVE DOOR REFERENCE: selected=%1 referencedIndex=%2 manager=%3", m_SelectedDoor, referencedIndex, referenced != null); + if (!referenced || referencedIndex < 0) return null; + return referenced.GetDoorInfo(referencedIndex); + } + protected override bool BeginExit() + { + FindAction(m_Vehicle); + if (!Check(m_Remove && BelongsToAircraft(m_Remove.GetOwner()) && m_Remove.GetActionDuration() == 1 && !m_Remove.HasLocalEffectOnly(), "stock bench RemoveCasualty action exists, duration one second, nonlocal effect")) return false; + FindContext(m_Vehicle); + if (!Check(m_Context && m_Context.GetContextName() == "door_l01_door", "actual exterior context contains selected stock seat action")) return false; + // Same native point-to-door selection used by SCR_CompartmentUserAction. + // Explicit cached index substitutes only for selecting a UI context, not input. + m_SelectedDoor = m_Seat.PickDoorIndexForPoint(m_Context.GetOrigin()); + if (!Check(m_SelectedDoor >= 0, "actual action context resolves a relevant native compartment door")) return false; + CompartmentDoorInfo door = ResolveDoor(); + if (!Check(door && door.GetExitTeleportPointInfo(), "selected native door exposes its authored teleport exit")) return false; + vector exitTransform[4]; door.GetExitTeleportPointInfo().GetWorldTransform(exitTransform); + m_AuthoredExit = exitTransform[3]; m_SeatedPosition = m_Casualty.GetOrigin(); + if (!Check(vector.Distance(m_AuthoredExit, m_Vehicle.GetOrigin()) < 15, "authored exit resolves beside this physical helicopter")) return false; + m_SavedDoor = m_Remove.GetCompartmentDoorInfoIndex(); + m_Remove.SetCompartmentDoorInfoIndex(m_SelectedDoor); m_DoorChanged = true; + vector outside = m_Context.GetOrigin() - m_Vehicle.GetOrigin(); outside[1] = 0; + if (!Check(outside.Length() > 0.1, "exterior context has a distinct outward direction")) return false; + outside.Normalize(); + m_HelperPosition = ERR_Actors.Ground(m_Context.GetOrigin() + outside * 0.75); + vector helper[4]; m_Caller.GetWorldTransform(helper); helper[3] = m_HelperPosition; + ChimeraCharacter.Cast(m_Caller).Teleport(helper); + PrintFormat("ERR CASUALTY REMOVE SETUP: action=%1 context=%2 door=%3 contextOrigin=%4 exit=%5 seatedOrigin=%6 helperRequested=%7", m_Remove.GetActionID(), m_Context.GetContextName(), m_SelectedDoor, m_Context.GetOrigin(), m_AuthoredExit, m_SeatedPosition, m_HelperPosition); + m_PendingAction = true; + m_Wait = GetGame().GetWorld().GetWorldTime() + 1000; + return true; + } + static bool SafeExit(float horizontalDistance, float terrainClearance) + { + return horizontalDistance >= 0 && horizontalDistance <= 1.25 && terrainClearance >= -0.25 && terrainClearance <= 1.5; + } + protected override vector ExpectedExit() { return m_AuthoredExit; } + protected override string ExitResultDetail() { return "stock removal leaves a living incapacitated body beside authored door exit, outside compartment, on terrain, and seat accessible"; } + protected override bool ExitSettled() + { + if (!m_Casualty || !m_Access || !m_Seat) return false; + vector actual = m_Casualty.GetOrigin(); + float height = actual[1] - GetGame().GetWorld().GetSurfaceY(actual[0], actual[2]); + CharacterAnimationComponent animation = CharacterAnimationComponent.Cast(m_Casualty.FindComponent(CharacterAnimationComponent)); + bool safe = DownOnGround() && !m_Access.IsGettingOut() && !m_Access.IsInCompartment() && !m_Seat.GetOccupant() && m_Seat.IsCompartmentAccessible() && animation && !animation.PhysicsIsFalling() && SafeExit(vector.DistanceXZ(actual, m_AuthoredExit), height); + float now = GetGame().GetWorld().GetWorldTime(); + if (now >= m_RemoveDiagnostic || safe) + { + PrintFormat("ERR CASUALTY REMOVE POSITION: actual=%1 aiming=%2 authored=%3 seated=%4 horizontalError=%5 terrainClearance=%6 safe=%7", actual, ChimeraCharacter.Cast(m_Casualty).AimingPosition(), m_AuthoredExit, m_SeatedPosition, vector.DistanceXZ(actual, m_AuthoredExit), height, safe); + Trace("stock door removal observation"); m_RemoveDiagnostic = now + 1000; + } + return safe; + } + override int Tick(float now) + { + if (m_RemoveComplete) return 1; + if (m_RemoveStopped) return -1; + if (m_RemoveDeadline == 0) + { + if (!Check(m_Mode && ERR_CasualtyLoadingRules.AircraftReady(m_Mode.ExtractionVehicle()), "production mission helicopter is physically grounded and stable before fixture")) return -1; + m_RemoveDeadline = now + 45000; + } + if (now > m_RemoveDeadline) { Check(false, "bounded 45-second stock removal fixture deadline"); return -1; } + if (m_Step == 4 && m_PendingAction) + { + if (now < m_Wait) return 0; + if (!Check(ERR_Actors.CanFight(m_Caller) && !CompartmentAccessComponent.GetVehicleIn(m_Caller) && vector.Distance(m_Caller.GetOrigin(), m_HelperPosition) < 1.5, "real conscious rescuer settled outside selected native door")) return -1; + bool shown = m_Remove.CanBeShown(m_Caller); + bool permitted = m_Remove.CanBePerformed(m_Caller); + PrintFormat("ERR CASUALTY REMOVE ACTION: shown=%1 performedAllowed=%2 reason=%3 cachedDoor=%4 caller=%5", shown, permitted, m_Remove.GetCannotPerformReason(), m_Remove.GetCompartmentDoorInfoIndex(), m_Caller.GetOrigin()); + if (!Check(shown && permitted && m_Seat.GetOccupant() == m_Casualty && m_Remove.GetCompartmentDoorInfoIndex() == m_SelectedDoor, "stock native action visibility and permission accept actual rescuer and occupied casualty bench")) return -1; + m_PendingAction = false; // exactly one completion invocation, no native retry + m_Remove.PerformAction(m_Remove.GetOwner(), m_Caller); + Print("ERR CASUALTY REMOVE: invoked existing stock action completion once; held input and network dispatch not exercised"); + m_Deadline = now + 8000; + } + int result = super.Tick(now); + if (!m_TestBodyProtected && m_Casualty && m_Damage) + { + // Only the fixture-owned casualty is protected from nearby initial guards. + // ForceUnconsciousness still uses its actual native health/life transition. + m_Damage.EnableDamageHandling(false); m_TestBodyProtected = true; + } + if (result == 1) m_RemoveComplete = true; + return result; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c new file mode 100644 index 0000000..289f381 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c @@ -0,0 +1,293 @@ +#ifdef WORKBENCH +// Only the helper's membership is synthetic. The casualty keeps its real native +// player controller/account/body and exercises the ordinary owner handshake. +class ERR_NativeCasualtyHelperAdapter : ERR_CasualtyLoadingService +{ + protected ref ERR_PlayerLife m_HelperLife; + protected bool m_HelperEnabled; + void ERR_NativeCasualtyHelperAdapter(ERR_GameMode mode) { m_Mode = mode; } + void Helper(IEntity actor) + { + m_HelperLife = new ERR_PlayerLife(); + m_HelperLife.Actor = actor; m_HelperLife.Connected = true; m_HelperLife.UsedLife = true; + m_HelperLife.ConnectionId = 15401; + m_HelperLife.AccountId = "00e77200-0000-0000-0000-000000001401"; + } + void EnableHelper() { m_HelperEnabled = true; } + bool StrictParticipant(IEntity actor) { return super.CurrentLife(actor) != null; } + bool StoppedForProbe() { return m_Stopped; } + protected override ERR_PlayerLife CurrentLife(IEntity actor) + { + if (m_HelperEnabled && m_HelperLife && actor && actor == m_HelperLife.Actor) return m_HelperLife; + return super.CurrentLife(actor); + } +} +class ERR_NativeCasualtyServiceProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Player; + protected IEntity m_Helper; + protected IEntity m_Blocker; + protected Vehicle m_Aircraft; + protected ERR_LoadCasualtyAction m_Action; + protected ref ERR_NativeCasualtyHelperAdapter m_Service; + protected ref ERR_NativeCasualtyGroundProbe m_GroundProbe; + protected bool m_GroundChecked; + protected ref array m_Reserved = {}; + protected BaseCompartmentSlot m_LoadedSeat; + protected float m_Deadline; + protected float m_Wait; + protected float m_PositionDeadline; + protected float m_NextDiagnostic; + protected vector m_RequestedPlayer; + protected vector m_RequestedHelper; + protected bool m_PlayerDamageSnapshot; + protected bool m_PlayerDamageOriginallyEnabled; + protected int m_SettleStart; + protected int m_Step; + protected int m_Resolutions; + protected bool m_Loaded; + protected bool m_Observing; + protected bool m_Stopped; + void ERR_NativeCasualtyServiceProbe(ERR_GameMode mode) { m_Mode = mode; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: casualty service " + detail); return true; } + Print("ERR SMOKE FAIL: casualty service " + detail, LogLevel.ERROR); + Stop(); return false; + } + protected void Resolved(IEntity actor, bool loaded) + { + m_Resolutions++; + m_Loaded = actor == m_Player && loaded; + } + protected void ReleaseFixtureReservations() + { + foreach (BaseCompartmentSlot seat : m_Reserved) + if (seat && m_Helper && seat.IsReservedBy(m_Helper)) seat.SetReserved(null); + m_Reserved.Clear(); + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_GroundProbe) m_GroundProbe.Stop(); + if (m_Service) { m_Service.Stop(); m_Service.OnResolved().Remove(Resolved); } + if (m_Mode) m_Mode.ERR_UseCasualtyFixture(null); + ReleaseFixtureReservations(); + // Restore the original damage-handling flag only on this exact still-owned + // living player body. This never restores health or changes another actor. + if (m_PlayerDamageSnapshot && GetGame() && GetGame().GetPlayerController() && GetGame().GetPlayerController().GetControlledEntity() == m_Player && ERR_Actors.Alive(m_Player)) + { + DamageManagerComponent damage = DamageManagerComponent.Cast(m_Player.FindComponent(DamageManagerComponent)); + if (damage) damage.EnableDamageHandling(m_PlayerDamageOriginallyEnabled); + } + m_PlayerDamageSnapshot = false; + ERR_Actors.DeleteSpawned(m_Blocker); m_Blocker = null; + ERR_Actors.DeleteSpawned(m_Helper); m_Helper = null; + // This opt-in case ends by ordinary round reset. Never restore arbitrary + // health, force recovery, teleport the seated player, or delete its body. + } + protected ERR_LoadCasualtyAction FindAction() + { + BaseActionsManagerComponent manager = BaseActionsManagerComponent.Cast(m_Player.FindComponent(BaseActionsManagerComponent)); + if (!manager) return null; + array actions = {}; manager.GetActionsList(actions); + bool medical; + ERR_LoadCasualtyAction load; + foreach (BaseUserAction action : actions) + { + if (SCR_BandageUserAction.Cast(action)) medical = true; + ERR_LoadCasualtyAction candidate = ERR_LoadCasualtyAction.Cast(action); + if (candidate) load = candidate; + } + if (!Check(medical, "successor prisoner retains inherited native medicine actions")) return null; + return load; + } + protected void Diagnose() + { + if (!m_Player || !m_Helper || !m_Aircraft || !m_Service) return; + HelicopterControllerComponent aircraftController = HelicopterControllerComponent.Cast(m_Aircraft.FindComponent(HelicopterControllerComponent)); + Physics physics = m_Aircraft.GetPhysics(); + bool groundContact; + bool simulationAvailable; + float speed = -1; + float angularSpeed = -1; + if (aircraftController && aircraftController.GetSimulation()) + { + simulationAvailable = true; + groundContact = aircraftController.GetSimulation().HasAnyGroundContact(); + } + if (physics) { speed = physics.GetVelocity().Length(); angularSpeed = physics.GetAngularVelocity().Length(); } + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + PrintFormat("ERR CASUALTY AIRCRAFT READINESS: alive=%1 controller=%2 simulation=%3 physics=%4 groundContact=%5 up=%6 speed=%7 angularSpeed=%8 position=%9", ERR_Actors.Alive(m_Aircraft), aircraftController != null, simulationAvailable, physics != null, groundContact, transform[1][1], speed, angularSpeed, m_Aircraft.GetOrigin()); + CharacterControllerComponent playerController = CharacterControllerComponent.Cast(m_Player.FindComponent(CharacterControllerComponent)); + CharacterControllerComponent helperController = CharacterControllerComponent.Cast(m_Helper.FindComponent(CharacterControllerComponent)); + int playerLife = -1; + int helperLife = -1; + if (playerController) playerLife = playerController.GetLifeState(); + if (helperController) helperLife = helperController.GetLifeState(); + PrintFormat("ERR CASUALTY ACTOR READINESS: playerAlive=%1 playerConscious=%2 playerLife=%3 helperAlive=%4 helperConscious=%5 helperLife=%6 pairRange=%7 playerAircraftRange=%8 helperAircraftRange=%9", ERR_Actors.Alive(m_Player), ERR_Actors.CanFight(m_Player), playerLife, ERR_Actors.Alive(m_Helper), ERR_Actors.CanFight(m_Helper), helperLife, vector.Distance(m_Player.GetOrigin(), m_Helper.GetOrigin()), vector.Distance(m_Player.GetOrigin(), m_Aircraft.GetOrigin()), vector.Distance(m_Helper.GetOrigin(), m_Aircraft.GetOrigin())); + PrintFormat("ERR CASUALTY POSITION READINESS: playerRequested=%1 playerActual=%2 playerError=%3 helperRequested=%4 helperActual=%5 helperError=%6", m_RequestedPlayer, m_Player.GetOrigin(), vector.Distance(m_RequestedPlayer, m_Player.GetOrigin()), m_RequestedHelper, m_Helper.GetOrigin(), vector.Distance(m_RequestedHelper, m_Helper.GetOrigin())); + ERR_CasualtyGroundSupport.Parked(m_Aircraft, true); + PrintFormat("ERR CASUALTY SERVICE STATE: step=%1 player=%2 helper=%3 groundedTarget=%4 aircraftReady=%5 sight=%6 pending=%7 resolutions=%8 loaded=%9", m_Step, m_Player.GetOrigin(), m_Helper.GetOrigin(), ERR_CasualtyLoadingRules.GroundSettled(m_Player), ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft), ERR_CasualtyLoadingRules.LineOfSight(m_Helper, m_Player), m_Service.PendingCount(), m_Resolutions, m_Loaded); + } + int Tick(float now) + { + if (m_Stopped) return -1; + if (m_Deadline > 0 && now > m_Deadline) { if (m_Player && m_Helper && m_Service) Diagnose(); Check(false, "bounded native fixture deadline"); return -1; } + if (m_Service && m_Observing) m_Service.Tick(now); + if (now < m_Wait) return 0; + if (m_Step == 0) + { + PlayerController controller = GetGame().GetPlayerController(); + if (!Check(Replication.IsServer() && controller && m_Mode.Phase() == ERR_Phase.PRISON, "explicit local server fixture starts with real prisoner")) return -1; + m_Player = controller.GetControlledEntity(); m_Aircraft = m_Mode.ExtractionVehicle(); + if (!Check(ERR_Actors.CanFight(m_Player) && m_Aircraft && !CompartmentAccessComponent.GetVehicleIn(m_Player), "real controlled casualty starts conscious on foot")) return -1; + m_Action = FindAction(); + if (!Check(m_Action && m_Action.GetOwner() == m_Player && m_Action.GetActionDuration() == 5 && !m_Action.HasLocalEffectOnly(), "real successor prisoner owns five-second server action")) return -1; + DamageManagerComponent playerDamage = DamageManagerComponent.Cast(m_Player.FindComponent(DamageManagerComponent)); + if (!Check(playerDamage != null, "fixture player damage manager available")) return -1; + m_PlayerDamageOriginallyEnabled = playerDamage.IsDamageHandlingEnabled(); + m_PlayerDamageSnapshot = true; + playerDamage.EnableDamageHandling(false); + m_RequestedPlayer = ERR_Actors.Ground(m_Aircraft.GetOrigin() + "6 0 6"); + m_RequestedHelper = ERR_Actors.Ground(m_RequestedPlayer + "0 0 2"); + m_Helper = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, m_RequestedHelper); + if (!Check(m_Helper != null, "separate physical helper spawned")) return -1; + m_Mode.Own(m_Helper); + DamageManagerComponent helperDamage = DamageManagerComponent.Cast(m_Helper.FindComponent(DamageManagerComponent)); + if (!Check(helperDamage != null, "fixture helper damage manager available")) return -1; + helperDamage.EnableDamageHandling(false); + vector transform[4]; m_Player.GetWorldTransform(transform); transform[3] = m_RequestedPlayer; + ChimeraCharacter.Cast(m_Player).Teleport(transform); + m_Service = new ERR_NativeCasualtyHelperAdapter(m_Mode); m_Service.Helper(m_Helper); + m_Service.OnResolved().Insert(Resolved); + if (!Check(m_Service.StrictParticipant(m_Player) && !m_Service.StrictParticipant(m_Helper), "actual target passes strict native membership; synthetic helper does not")) return -1; + if (!Check(!m_Mode.CasualtyLoading().Begin(m_Helper, m_Player) && !m_Service.Begin(m_Helper, m_Player), "production and unadapted sample reject out-of-phase helper request")) return -1; + // Deliberate fixture phase setup, not evidence of a completed radio objective. + if (!Check(m_Mode.Transition(ERR_Phase.RADIO_SEARCH) && m_Mode.Transition(ERR_Phase.RADIO_DEFENCE) && m_Mode.Transition(ERR_Phase.EXTRACTION), "fixture enters extraction through explicit legal phase transitions")) return -1; + m_Deadline = now + 45000; + m_PositionDeadline = now + 10000; + m_NextDiagnostic = now; + m_Wait = now + 500; m_Step = 1; return 0; + } + if (m_Step == 1) + { + if (now >= m_NextDiagnostic) { Diagnose(); m_NextDiagnostic = now + 1000; } + bool actorsReady = ERR_Actors.CanFight(m_Player) && ERR_Actors.CanFight(m_Helper) && vector.Distance(m_RequestedPlayer, m_Player.GetOrigin()) <= 1.5 && vector.Distance(m_RequestedHelper, m_Helper.GetOrigin()) <= 1.5 && vector.Distance(m_Player.GetOrigin(), m_Helper.GetOrigin()) <= 3; + bool aircraftReady = ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft); + if ((!actorsReady || !aircraftReady) && now < m_PositionDeadline) return 0; + if (!Check(actorsReady, "actual living conscious actors reached requested nearby ground positions before deadline")) return -1; + if (!Check(aircraftReady, "actual aircraft satisfies unchanged production grounded-motion safety before deadline")) return -1; + if (!m_GroundChecked) + { + if (!m_GroundProbe) m_GroundProbe = new ERR_NativeCasualtyGroundProbe(m_Mode); + int groundResult = m_GroundProbe.Tick(now); + if (groundResult < 0) { Check(false, "native ground-support qualification failed"); return -1; } + if (groundResult == 0) return 0; + m_GroundChecked = true; + } + if (!Check(!m_Service.Begin(m_Helper, m_Player), "conscious target is rejected before native incapacitation")) return -1; + SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_Player.FindComponent(SCR_CharacterDamageManagerComponent)); + if (!Check(damage != null, "real casualty has native health manager")) return -1; + HitZone resilience = damage.GetResilienceHitZone(); + if (!Check(resilience && damage.GetPermitUnconsciousness(), "native resilience and unconsciousness policy available")) return -1; + float beforeResilience = resilience.GetHealth(); + // Protection must not swallow the fixture's own true-damage request. Keep + // this synchronous interval limited to that one native health operation. + damage.EnableDamageHandling(true); + damage.ForceUnconsciousness(); + float afterResilience = resilience.GetHealth(); + damage.EnableDamageHandling(false); + PrintFormat("ERR CASUALTY INCAPACITATION: resilienceBefore=%1 resilienceAfter=%2", beforeResilience, afterResilience); + if (!Check(afterResilience < beforeResilience && ERR_Actors.Alive(m_Player), "single native resilience damage applied before restoring fixture protection")) return -1; + m_Step = 2; m_Wait = now + 500; return 0; + } + if (m_Step == 2) + { + if (!ERR_CasualtyLoadingRules.GroundSettled(m_Player)) + { + if (now >= m_NextDiagnostic) { Diagnose(); m_NextDiagnostic = now + 1000; } + return 0; + } + if (!Check(ERR_CasualtyLoadingRules.Nearby(m_Mode, m_Helper, m_Player), "actual incapacitated target is settled with clear line of sight")) return -1; + if (!Check(!m_Mode.CasualtyLoading().CanLoad(m_Helper, m_Player) && !m_Service.Begin(m_Helper, m_Player) && m_Service.PendingCount() == 0, "strict production authorization rejects nonparticipant helper even in valid physical state")) return -1; + m_Service.EnableHelper(); + if (!Check(m_Mode.ERR_UseCasualtyFixture(m_Service), "explicit fixture installs helper-only membership adapter")) return -1; + m_Observing = true; m_Service.Tick(now); m_SettleStart = System.GetTickCount(); + if (!Check(!m_Service.CanLoad(m_Helper, m_Player), "new observation cannot bypass five-second settling window")) return -1; + m_Step = 3; return 0; + } + if (m_Step == 3) + { + if (System.GetTickCount() - m_SettleStart < 5500) return 0; + Diagnose(); + if (!Check(m_Service.CanLoad(m_Helper, m_Player), "settled real casualty is eligible with only helper membership adapted")) return -1; + array seats = {}; m_Mode.Extraction().Seats(seats); + foreach (BaseCompartmentSlot seat : seats) + { + if (!ERR_CasualtyLoadingRules.TransportBench(seat, m_Aircraft) || seat.GetOccupant() || seat.IsReserved()) continue; + seat.SetReserved(m_Helper); m_Reserved.Insert(seat); + } + if (!Check(!m_Reserved.IsEmpty() && !m_Service.CanLoad(m_Helper, m_Player) && !m_Service.Begin(m_Helper, m_Player), "native external reservations prevent loading when all child benches are reserved")) return -1; + ReleaseFixtureReservations(); + vector middle = (ChimeraCharacter.Cast(m_Helper).AimingPosition() + ChimeraCharacter.Cast(m_Player).AimingPosition()) * 0.5; + m_Blocker = ERR_Actors.Spawn("{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et", middle); + if (!Check(m_Blocker != null, "successor-owned physical line-of-sight obstacle spawned")) return -1; + m_Mode.Own(m_Blocker); + vector low, high; m_Blocker.GetWorldBounds(low, high); + vector wall[4]; m_Blocker.GetWorldTransform(wall); wall[3] = wall[3] + middle - (low + high) * 0.5; + m_Blocker.SetWorldTransform(wall); + m_Step = 4; m_Wait = now + 500; return 0; + } + if (m_Step == 4) + { + if (!Check(!ERR_CasualtyLoadingRules.LineOfSight(m_Helper, m_Player) && !m_Service.CanLoad(m_Helper, m_Player) && !m_Service.Begin(m_Helper, m_Player) && m_Service.PendingCount() == 0, "physical wall blocks completion-time rescue authorization")) return -1; + ERR_Actors.DeleteSpawned(m_Blocker); m_Blocker = null; + m_Step = 5; m_Wait = now + 500; return 0; + } + if (m_Step == 5) + { + if (!Check(m_Action.CanBePerformedScript(m_Helper) && m_Service.PendingCount() == 0, "real action becomes performable after obstruction removal")) return -1; + // Invoke the real completion boundary. This does not simulate holding input + // for five seconds or claim a second authenticated network player. + m_Action.PerformAction(m_Player, m_Helper); + if (!Check(m_Service.PendingCount() == 1 && m_Resolutions == 0, "real owner handshake commits one pending physical load")) return -1; + array seats = {}; m_Mode.Extraction().Seats(seats); + foreach (BaseCompartmentSlot seat : seats) + if (ERR_CasualtyLoadingRules.TransportBench(seat, m_Aircraft) && seat.IsReservedBy(m_Player)) m_LoadedSeat = seat; + if (!Check(m_LoadedSeat != null, "service reserves the actual selected child bench for the casualty")) return -1; + m_Action.PerformAction(m_Player, m_Helper); + if (!Check(m_Service.PendingCount() == 1 && m_Resolutions == 0, "duplicate completion cannot issue a second ticket")) return -1; + m_Step = 6; return 0; + } + if (m_Step == 6) + { + if (m_Service.PendingCount() > 0) return 0; + Diagnose(); + if (!Check(m_Loaded && m_Resolutions == 1 && ERR_Actors.Alive(m_Player) && ERR_CasualtyLoadingRules.Down(m_Player) && CompartmentAccessComponent.GetVehicleIn(m_Player) == m_Aircraft && m_LoadedSeat.GetOccupant() == m_Player, "production owner handshake physically loads real living incapacitated player exactly once")) return -1; + if (!Check(!m_LoadedSeat.IsReserved() && m_Service.StrictParticipant(m_Player), "successful loading releases reservation and preserves actual player identity")) return -1; + m_Service.Stop(); m_Service.Stop(); m_Service.Tick(now); + if (!Check(m_Service.StoppedForProbe() && m_Service.PendingCount() == 0 && m_Resolutions == 1 && !m_Service.Begin(m_Helper, m_Player), "Stop is latched, idempotent and cannot repeat completion or restart loading")) return -1; + Stop(); return 1; + } + return 0; + } +} +modded class ERR_GameMode +{ + protected ref ERR_NativeCasualtyHelperAdapter m_ERRNativeCasualtyAdapter; + bool ERR_UseCasualtyFixture(ERR_NativeCasualtyHelperAdapter service) + { + string enabled, outcome; + if (!Replication.IsServer() || !System.GetCLIParam("errBaseSmoke", enabled) || enabled != "1" || !System.GetCLIParam("errSmokeOutcome", outcome) || outcome != "casualty-service") return false; + m_ERRNativeCasualtyAdapter = service; return true; + } + override ERR_CasualtyLoadingService CasualtyLoading() + { + if (m_ERRNativeCasualtyAdapter) return m_ERRNativeCasualtyAdapter; + return super.CasualtyLoading(); + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c new file mode 100644 index 0000000..14e03c1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c @@ -0,0 +1,52 @@ +#ifdef WORKBENCH +// Exercises native service dispatch, not remote RPC ownership or rendered UI. +class ERR_NativeContractsProbe +{ + protected static bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: base contracts " + detail); return true; } + Print("ERR SMOKE FAIL: base contracts " + detail, LogLevel.ERROR); + return false; + } + static bool Run(ERR_GameMode mode, IEntity player) + { + if (!Check(mode.Factions() && mode.Factions().WorldReady() && mode.PreparationError().IsEmpty(), "catalog resolves hostile vanilla factions and successful preparation")) return false; + if (!Check(SCR_FactionManager.SGetFaction(player) == mode.PlayerFaction() && player.GetPrefabData().GetPrefabName() == mode.Factions().PrisonerPrefab, "physical prisoner matches injected faction and resource")) return false; + ERR_SiteRuntime site = mode.Sites().Find("everon-supply-1"); + if (!Check(site && site.Group && site.Group.GetFaction() == mode.EnemyFaction() && site.Group.GetPrefabData().GetPrefabName() == mode.Factions().GuardGroupPrefab, "physical guard squad comes from injected catalog")) return false; + ERR_FactionCatalog isolated = ERR_FactionCatalog.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab("{BE50B97B8E2B36E6}Configs/ERR/VanillaFactions.conf")); + if (!isolated) return false; + string enemyKey = isolated.EnemyFactionKey; + isolated.EnemyFactionKey = isolated.PlayerFactionKey; + if (!Check(!isolated.Valid() && !isolated.WorldReady(), "same-side factions rejected")) return false; + isolated.EnemyFactionKey = "ERR_MISSING_FACTION"; + if (!Check(!isolated.WorldReady(), "unknown world faction rejected")) return false; + isolated.EnemyFactionKey = enemyKey; + ResourceName prisoner = isolated.PrisonerPrefab; + isolated.PrisonerPrefab = ""; + if (!Check(!isolated.Valid(), "missing prisoner resource rejected")) return false; + isolated.PrisonerPrefab = prisoner; + if (!Check(isolated.WorldReady(), "isolated catalog restored without mutating live configuration")) return false; + + array replies = {}; + int original = mode.Settings().Get("radioDefenceSeconds"); + mode.Admin().Execute(mode, false, "mission radio set 60", replies); + if (!Check(mode.Settings().Get("radioDefenceSeconds") == original && replies.Count() == 1 && replies[0] == "Administrator access required.", "unauthorized settings request rejected")) return false; + mode.Admin().Execute(mode, true, "mission radio set 60junk", replies); + if (!Check(mode.Settings().Get("radioDefenceSeconds") == original && replies[0].Contains("Invalid"), "partially numeric input rejected without mutation")) return false; + mode.Admin().Execute(mode, true, "mission radio set 0", replies); + if (!Check(mode.Settings().Get("radioDefenceSeconds") == original && replies[0].Contains("Invalid"), "out-of-range duration rejected without mutation")) return false; + mode.Admin().Execute(mode, true, " MISSION RADIO SET 60 ", replies); + if (!Check(mode.Settings().Get("radioDefenceSeconds") == 60 && replies[0] == "radioDefenceSeconds=60 saved", "normalized base command saves validated duration")) return false; + mode.Admin().Execute(mode, true, "mission radio show", replies); + if (!Check(replies.Count() == 1 && replies[0] == "radioDefenceSeconds=60", "base command reads saved duration")) return false; + mode.Admin().Execute(mode, true, "settings", replies); + if (!Check(replies.Count() == ERR_Settings.Keys().Count(), "base settings listing available")) return false; + mode.Admin().Execute(mode, true, "status", replies); + if (!Check(!replies.IsEmpty() && replies[0] == "Escape the prison", "base mission status available before companions")) return false; + mode.Admin().Execute(mode, true, "mission radio set " + original.ToString(), replies); + if (!Check(mode.Settings().Get("radioDefenceSeconds") == original, "test setting restored")) return false; + return true; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c new file mode 100644 index 0000000..8afc5ff --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c @@ -0,0 +1,60 @@ +#ifdef WORKBENCH +class ERR_NativeDefinitionProbe +{ + protected static bool Check(bool condition, string name) + { + if (condition) { Print("ERR SMOKE PASS: definition " + name); return true; } + Print("ERR SMOKE FAIL: definition " + name, LogLevel.ERROR); + return false; + } + static bool Run() + { + ERR_ScenarioDefinition definition = ERR_ScenarioDefinition.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab("{BC310DC0CD27F523}Configs/ERR/EveronSites.conf")); + if (!Check(definition && definition.Valid(), "authored configuration resolves")) return false; + ERR_SiteDefinition cache = definition.Find("everon-supply-1"); + if (!cache) return false; + cache.Id = "everon-prison-1"; + if (!Check(!definition.Valid(), "duplicate site identity rejected")) return false; + cache.Id = "everon-supply-1"; + ERR_SiteStock documents = cache.Stock[3]; + documents.TargetId = "missing-radio"; + if (!Check(!definition.Valid(), "dangling document target rejected")) return false; + documents.TargetId = "everon-prison-1"; + if (!Check(!definition.Valid(), "non-radio document target rejected")) return false; + documents.TargetId = "everon-radio-1"; + documents.Count = 1; + if (!Check(!definition.Valid(), "insufficient guaranteed radio clues rejected")) return false; + documents.Count = 65; + if (!Check(!definition.Valid(), "unbounded stock rejected")) return false; + documents.Count = 2; + cache.RevealOnEscape = false; + if (!Check(!definition.Valid(), "unguaranteed clue route rejected")) return false; + cache.RevealOnEscape = true; + ERR_SiteDefinition alternate = definition.Find("everon-supply-2"); + vector alternatePosition = alternate.Position; + alternate.Position = cache.Position + "10 0 0"; + if (!Check(!definition.Valid(), "radio sources sharing one footprint rejected")) return false; + alternate.Position = alternatePosition; + string label = alternate.Label; + alternate.Label = ""; + if (!Check(!definition.Valid(), "unnamed location rejected")) return false; + alternate.Label = label; + ERR_SiteDefinition radio = definition.Find("everon-radio-1"); + float radioRadius = radio.DiscoverRadius; + radio.DiscoverRadius = 9; + if (!Check(!definition.Valid(), "radio identification beyond eight metres rejected")) return false; + radio.DiscoverRadius = 8; + if (!Check(definition.Valid(), "close physical radio identification allowed")) return false; + radio.DiscoverRadius = radioRadius; + radio.RevealOnEscape = true; + if (!Check(!definition.Valid(), "escape cannot reveal the radio directly")) return false; + radio.RevealOnEscape = false; + ERR_SiteProp prop = definition.Find("everon-outpost-1").Props[0]; + vector offset = prop.Offset; + prop.Offset = "100 0 0"; + if (!Check(!definition.Valid(), "unbounded scenery offset rejected")) return false; + prop.Offset = offset; + return Check(definition.Valid(), "valid configuration restored after isolated mutations"); + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c new file mode 100644 index 0000000..67e07d4 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c @@ -0,0 +1,160 @@ +#ifdef WORKBENCH +// Opt-in hidden native-widget comparison; no discovery, inventory or mission +// state is changed, and no map menu or player input is fabricated. +// Separate owned subclasses preserve the vanilla base RPC serializer identity. +// Their small widget adapters are repeated to compare the unchanged native +// setter against the real successor subclass without modding a replicated type. +class ERR_NativePlainMapMarker : SCR_MapMarkerBase +{ + bool ERR_ProbeAttachMapWidget() + { + ERR_ProbeDetachMapWidget(); + SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance(); + if (!manager || !manager.GetMarkerConfig()) return false; + m_ConfigEntry = manager.GetMarkerConfig().GetMarkerEntryConfigByType(GetType()); + if (!m_ConfigEntry) return false; + m_wRoot = GetGame().GetWorkspace().CreateWidgets(m_ConfigEntry.GetMarkerLayout()); + if (!m_wRoot) return false; + m_wRoot.SetVisible(false); + m_MarkerWidgetComp = SCR_MapMarkerWidgetComponent.Cast(m_wRoot.FindHandler(SCR_MapMarkerWidgetComponent)); + if (!m_MarkerWidgetComp) return false; + m_MarkerWidgetComp.SetMarkerObject(this); + m_ConfigEntry.InitClientSettings(this, m_MarkerWidgetComp, true); + return m_wRoot.FindAnyWidget("MarkerText") != null; + } + string ERR_ProbeMapText() + { + if (!m_wRoot) return ""; + TextWidget text = TextWidget.Cast(m_wRoot.FindAnyWidget("MarkerText")); + if (!text) return ""; + return text.GetText(); + } + void ERR_ProbeDetachMapWidget() + { + // Remove only this probe object's native subscriptions/widgets. + SCR_MapEntity.GetOnMapClose().Remove(OnMapClosed); + SCR_MapEntity.GetOnLayerChanged().Remove(OnMapLayerChanged); + if (m_wRoot) m_wRoot.RemoveFromHierarchy(); + m_wRoot = null; + m_MarkerWidgetComp = null; + } +} +class ERR_NativeObjectiveMapMarker : ERR_DiscoveryMarker +{ + bool ERR_ProbeAttachMapWidget() + { + ERR_ProbeDetachMapWidget(); + SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance(); + if (!manager || !manager.GetMarkerConfig()) return false; + m_ConfigEntry = manager.GetMarkerConfig().GetMarkerEntryConfigByType(GetType()); + if (!m_ConfigEntry) return false; + m_wRoot = GetGame().GetWorkspace().CreateWidgets(m_ConfigEntry.GetMarkerLayout()); + if (!m_wRoot) return false; + m_wRoot.SetVisible(false); + m_MarkerWidgetComp = SCR_MapMarkerWidgetComponent.Cast(m_wRoot.FindHandler(SCR_MapMarkerWidgetComponent)); + if (!m_MarkerWidgetComp) return false; + m_MarkerWidgetComp.SetMarkerObject(this); + m_ConfigEntry.InitClientSettings(this, m_MarkerWidgetComp, true); + return m_wRoot.FindAnyWidget("MarkerText") != null; + } + string ERR_ProbeMapText() + { + if (!m_wRoot) return ""; + TextWidget text = TextWidget.Cast(m_wRoot.FindAnyWidget("MarkerText")); + if (!text) return ""; + return text.GetText(); + } + void ERR_ProbeDetachMapWidget() + { + // Remove only this probe object's native subscriptions/widgets. + SCR_MapEntity.GetOnMapClose().Remove(OnMapClosed); + SCR_MapEntity.GetOnLayerChanged().Remove(OnMapLayerChanged); + if (m_wRoot) m_wRoot.RemoveFromHierarchy(); + m_wRoot = null; + m_MarkerWidgetComp = null; + } +} +modded class SCR_MapMarkerManagerComponent +{ + bool ERR_ProbeRetainsDiscoveryMarker(ERR_DiscoveryMarker marker) + { + return m_aStaticMarkers.Contains(marker) || m_aDisabledMarkers.Contains(marker); + } +} +class ERR_NativeDiscoveryMapProbe +{ + protected static ref ERR_NativePlainMapMarker s_Plain; + protected static ref ERR_NativeObjectiveMapMarker s_Objective; + static void Stop() + { + SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance(); + if (s_Plain) + { + s_Plain.ERR_ProbeDetachMapWidget(); + if (manager) manager.RemoveStaticMarker(s_Plain); + } + if (s_Objective) + { + s_Objective.ERR_ProbeDetachMapWidget(); + if (manager) manager.ERR_RemoveDiscoveryMarker(s_Objective); + } + s_Plain = null; + s_Objective = null; + } + protected static bool Check(bool success, string detail) + { + if (success) { Print("ERR SMOKE PASS: discovery map " + detail); return true; } + Print("ERR SMOKE FAIL: discovery map " + detail, LogLevel.ERROR); + Stop(); + return false; + } + // Invoke once after ordinary fixture admission and native map manager init. + static bool Run() + { + Stop(); + SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance(); + if (!Check(manager && manager.GetMarkerConfig() && GetGame().GetPlayerController(), "native local controller and marker manager available")) return false; + int originalCount = manager.GetStaticMarkers().Count(); + s_Plain = new ERR_NativePlainMapMarker(); + s_Plain.SetType(SCR_EMapMarkerType.PLACED_CUSTOM); + s_Plain.SetMarkerConfigID(0); + s_Plain.SetCustomText("Unknown location"); + manager.InsertStaticMarker(s_Plain, true); + if (!Check(s_Plain.ERR_ProbeAttachMapWidget() && s_Plain.ERR_ProbeMapText() == "Unknown location", "native baseline label rendered in actual hidden marker layout")) return false; + s_Plain.SetCustomText("Radio station"); + if (!Check(s_Plain.GetCustomText() == "Radio station" && s_Plain.ERR_ProbeMapText() == "Unknown location", "native data-only setter reproduces stale already-open label")) return false; + if (!Check(s_Plain.CanBeRemovedByOwner() && SCR_MapMarkersUI.IsOwnedMarker(s_Plain), "plain local marker exposes native delete/edit/drag eligibility")) return false; + + s_Objective = new ERR_NativeObjectiveMapMarker(); + s_Objective.SetType(SCR_EMapMarkerType.PLACED_CUSTOM); + s_Objective.SetMarkerConfigID(0); + s_Objective.SetCustomText("Unknown location"); + manager.InsertStaticMarker(s_Objective, true); + if (!Check(s_Objective.GetMarkerOwnerID() == -1 && !SCR_MapMarkersUI.IsOwnedMarker(s_Objective) && !s_Objective.CanBeRemovedByOwner(), "local insertion retains objective identity and disables native edit/drag/delete eligibility")) return false; + if (!Check(s_Objective.ERR_ProbeAttachMapWidget() && s_Objective.ERR_ProbeMapText() == "Unknown location", "objective first label rendered through actual native layout")) return false; + int coordinates[2]; + s_Objective.SetDiscoveryPosition("6123.25 0 7345.75", 1); + s_Objective.GetWorldPos(coordinates); + if (!Check(coordinates[0] == 6250 && coordinates[1] == 7250, "first clue stores only stable 500m search-square center")) return false; + s_Objective.SetDiscoveryPosition("6123.25 0 7345.75", 2); + s_Objective.GetWorldPos(coordinates); + if (!Check(coordinates[0] == 6123 && coordinates[1] == 7346, "identification moves same native marker to exact rounded coordinates")) return false; + Widget originalWidget = s_Objective.GetRootWidget(); + s_Objective.SetCustomText("Radio station"); + if (!Check(s_Objective.GetRootWidget() == originalWidget && s_Objective.ERR_ProbeMapText() == "Radio station", "identification refreshes existing native widget without recreating marker")) return false; + if (!Check(manager.GetStaticMarkers().Count() == originalCount + 2, "label change creates no additional marker")) return false; + s_Objective.ERR_ProbeDetachMapWidget(); + s_Objective.SetCustomText("Initial helicopter pickup site"); + if (!Check(!s_Objective.GetRootWidget() && s_Objective.GetCustomText() == "Initial helicopter pickup site", "closed widget accepts data-only update safely")) return false; + if (!Check(s_Objective.ERR_ProbeAttachMapWidget() && s_Objective.ERR_ProbeMapText() == "Initial helicopter pickup site", "new native widget renders latest saved label")) return false; + manager.SetStaticMarkerDisabled(s_Objective, true); + if (!Check(manager.ERR_ProbeRetainsDiscoveryMarker(s_Objective) && !manager.GetStaticMarkers().Contains(s_Objective), "native culling retains objective only in disabled list")) return false; + manager.ERR_RemoveDiscoveryMarker(s_Objective); + if (!Check(!manager.ERR_ProbeRetainsDiscoveryMarker(s_Objective) && !s_Objective.GetRootWidget(), "deleting culled objective removes both memberships and its widget")) return false; + manager.ERR_RemoveDiscoveryMarker(s_Objective); + if (!Check(!manager.ERR_ProbeRetainsDiscoveryMarker(s_Objective), "duplicate owned cleanup cannot reactivate objective")) return false; + Stop(); + return Check(manager.GetStaticMarkers().Count() == originalCount, "owned probe widgets and markers removed; mission markers preserved"); + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c new file mode 100644 index 0000000..95df39b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c @@ -0,0 +1,163 @@ +#ifdef WORKBENCH +class ERR_NativeEnvironmentSample : ERR_EnvironmentService +{ + bool Apply(TimeAndWeatherManagerEntity manager, int dateCode, int profile) { return StartOn(manager, dateCode, profile); } +} +// Explicit isolated environment smoke outcome. It temporarily changes the private +// native world, restores date/weather family/looping, then requests a round reset. +class ERR_NativeEnvironmentProbe +{ + protected ERR_GameMode m_Mode; + protected TimeAndWeatherManagerEntity m_Manager; + protected ref ERR_NativeEnvironmentSample m_Sample; + protected ref ERR_Settings m_TestSettings; + protected bool m_Snapshot; + protected bool m_Restored; + protected bool m_Stopped; + protected bool m_OwnsSettings; + protected bool m_RestoreDateAccepted; + protected int m_Year; + protected int m_Month; + protected int m_Day; + protected string m_Weather; + protected bool m_Looping; + protected float m_Clock; + protected float m_DayDuration; + protected bool m_DayAdvances; + protected float m_Wait; + protected float m_Deadline; + protected int m_Step; + protected int m_Result; + void ERR_NativeEnvironmentProbe(ERR_GameMode mode) { m_Mode = mode; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: environment " + detail); return true; } + Print("ERR SMOKE FAIL: environment " + detail, LogLevel.ERROR); + m_Result = -1; + Stop(); + return false; + } + protected string CurrentWeather() + { + if (!m_Manager || !m_Manager.GetCurrentWeatherState()) return ""; + return m_Manager.GetCurrentWeatherState().GetStateName(); + } + protected void Restore() + { + if (!m_Snapshot || m_Restored || !m_Manager) return; + m_Restored = true; + if (m_Sample) m_Sample.Stop(); + m_RestoreDateAccepted = m_Manager.SetDate(m_Year, m_Month, m_Day, true); + m_Manager.ForceWeatherTo(m_Looping, m_Weather, 0, 24); + } + void Stop() + { + if (m_Stopped) return; + Restore(); + m_Stopped = true; + if (m_OwnsSettings) + { + string path = "$profile:erri-native-environment-probe.json"; + FileIO.DeleteFile(path); FileIO.DeleteFile(path + ".bak"); FileIO.DeleteFile(path + ".tmp"); + m_OwnsSettings = false; + } + } + protected bool SettingsChecks() + { + string path = "$profile:erri-native-environment-probe.json"; + if (!Check(!FileIO.FileExists(path) && !FileIO.FileExists(path + ".bak") && !FileIO.FileExists(path + ".tmp"), "environment fixture filenames are unused")) return false; + m_OwnsSettings = true; + JsonSaveContext json = new JsonSaveContext(); + json.EnableTypeDiscriminator(false); + foreach (string key : ERR_Settings.Keys()) + if (key != "startDateCode" && key != "weatherProfile") json.WriteValue(key, m_Mode.Settings().Get(key)); + if (!Check(json.SaveToFile(path), "owned legacy settings fixture written")) return false; + m_TestSettings = new ERR_Settings(path); + JsonLoadContext unchanged = new JsonLoadContext(); + if (!Check(m_TestSettings.Get("startDateCode") == 0 && m_TestSettings.Get("weatherProfile") == 0 && unchanged.LoadFromFile(path) && !unchanged.DoesKeyExist("startDateCode") && !unchanged.DoesKeyExist("weatherProfile"), "missing environment settings preserve authored defaults without rewriting legacy file")) return false; + if (!Check(m_TestSettings.Set("startDateCode", 1501231) && m_TestSettings.Set("weatherProfile", 2), "date and weather persist in owned fixture settings")) return false; + ERR_Settings reloaded = new ERR_Settings(path); + if (!Check(reloaded.Get("startDateCode") == 1501231 && reloaded.Get("weatherProfile") == 2 && reloaded.Get("radioDefenceSeconds") == m_Mode.Settings().Get("radioDefenceSeconds"), "odd maximum date code round-trips exactly and old settings survive")) return false; + if (!Check(!m_TestSettings.Set("startDateCode", 229) && !m_TestSettings.Set("weatherProfile", 4), "non-leap-century date and unknown profile cannot be saved")) return false; + int originalDate = m_Mode.Settings().Get("startDateCode"); + int originalProfile = m_Mode.Settings().Get("weatherProfile"); + array replies = {}; + m_Mode.Admin().Execute(m_Mode, false, "mission weather set rain", replies); + if (!Check(replies.Count() == 1 && replies[0].Contains("Administrator") && m_Mode.Settings().Get("startDateCode") == originalDate && m_Mode.Settings().Get("weatherProfile") == originalProfile, "unauthorized environment command preserves real settings")) return false; + replies.Clear(); + ERR_EnvironmentCommands.Execute(m_TestSettings, m_Mode.Environment(), {"mission", "date", "set", "2000-02-29"}, replies); + if (!Check(m_TestSettings.Get("startDateCode") == 1000229 && replies.Count() == 1 && replies[0].Contains("next round"), "natural leap-date command saves only next-round settings")) return false; + replies.Clear(); + ERR_EnvironmentCommands.Execute(m_TestSettings, m_Mode.Environment(), {"mission", "weather", "set", "clear"}, replies); + if (!Check(m_TestSettings.Get("weatherProfile") == 1 && replies.Count() == 1 && replies[0].Contains("Current round unchanged"), "named weather command saves only next-round settings")) return false; + replies.Clear(); + ERR_EnvironmentCommands.Execute(m_TestSettings, m_Mode.Environment(), {"mission", "date", "set", "1900-00-00"}, replies); + if (!Check(m_TestSettings.Get("startDateCode") == 1000229 && replies[0].Contains("Invalid"), "zero month/day cannot masquerade as authored date")) return false; + return true; + } + int Tick(float now) + { + if (m_Result != 0) return m_Result; + if (m_Stopped) return -1; + if (!Replication.IsServer() || !m_Mode || !m_Mode.Active()) { Check(false, "requires active server authority"); return -1; } + if (m_Deadline > 0 && now > m_Deadline) { Check(false, "native environment request timed out"); return -1; } + if (now < m_Wait) return 0; + if (m_Step == 0) + { + ChimeraWorld world = ChimeraWorld.CastFrom(m_Mode.GetWorld()); + if (world) m_Manager = world.GetTimeAndWeatherManager(); + if (!Check(m_Manager && m_Manager.GetCurrentWeatherState() && m_Mode.Environment().Started(), "native environment manager and round service available")) return -1; + m_Manager.GetDate(m_Year, m_Month, m_Day); + m_Weather = CurrentWeather(); m_Looping = m_Manager.IsWeatherLooping(); + m_Clock = m_Manager.GetTimeOfTheDay(); m_DayDuration = m_Manager.GetDayDuration(); m_DayAdvances = m_Manager.GetIsDayAutoAdvanced(); + m_Snapshot = true; + m_Deadline = now + 15000; + if (!SettingsChecks()) return -1; + if (!Check(CurrentWeather() == m_Weather && m_Manager.GetYear() == m_Year && m_Manager.GetMonth() == m_Month && m_Manager.GetDay() == m_Day, "saving fixture environment settings does not mutate native world")) return -1; + for (int profile = 1; profile <= 3; profile++) + if (!Check(ERR_EnvironmentService.HasWeatherState(m_Manager, ERR_EnvironmentService.WeatherStateName(profile)), "selected vanilla weather family exists: " + ERR_EnvironmentService.ProfileName(profile))) return -1; + m_Sample = new ERR_NativeEnvironmentSample(); + if (!Check(!m_Sample.Apply(m_Manager, 229, 1) && !m_Sample.Apply(m_Manager, 1000229, 4) && !m_Sample.Started(), "invalid date/profile rejected before native changes")) return -1; + if (!Check(m_Sample.Apply(m_Manager, 890601, 1), "clear profile and specific date requested once")) return -1; + m_Step = 1; m_Wait = now + 500; + return 0; + } + if (m_Step == 1) + { + if (!Check(CurrentWeather() == "Clear" && m_Manager.IsWeatherLooping() && m_Manager.GetYear() == 1989 && m_Manager.GetMonth() == 6 && m_Manager.GetDay() == 1, "native clear weather and requested date applied after frame")) return -1; + if (!Check(m_Sample.Apply(m_Manager, 1000229, 3) && m_Sample.DateCode() == 890601 && m_Sample.Profile() == 1 && CurrentWeather() == "Clear", "repeated start cannot apply another date or profile")) return -1; + m_Sample.Stop(); + if (!Check(!m_Sample.Apply(m_Manager, 1000229, 3), "stopped environment cannot restart")) return -1; + m_Sample = new ERR_NativeEnvironmentSample(); + if (!Check(m_Sample.Apply(m_Manager, 1000229, 2), "overcast and leap date requested on fresh service")) return -1; + m_Step = 2; m_Wait = now + 500; + return 0; + } + if (m_Step == 2) + { + if (!Check(CurrentWeather() == "Overcast" && m_Manager.GetYear() == 2000 && m_Manager.GetMonth() == 2 && m_Manager.GetDay() == 29, "native overcast and leap date accepted")) return -1; + m_Sample.Stop(); m_Sample = new ERR_NativeEnvironmentSample(); + if (!Check(m_Sample.Apply(m_Manager, 0, 3), "rain profile preserves authored/current date when date override is disabled")) return -1; + m_Step = 3; m_Wait = now + 500; + return 0; + } + if (m_Step == 3) + { + if (!Check(CurrentWeather() == "Rainy" && m_Manager.GetYear() == 2000 && m_Manager.GetMonth() == 2 && m_Manager.GetDay() == 29, "native rainy family applied without changing date")) return -1; + float clockAdvance = m_Manager.GetTimeOfTheDay() - m_Clock; + if (clockAdvance < 0) clockAdvance += 24; + if (!Check(m_Manager.GetDayDuration() == m_DayDuration && m_Manager.GetIsDayAutoAdvanced() == m_DayAdvances && clockAdvance < 0.1, "environment does not reset clock or progression")) return -1; + Restore(); + m_Step = 4; m_Wait = now + 500; + return 0; + } + if (m_Step == 4) + { + if (!Check(m_RestoreDateAccepted && m_Manager.GetYear() == m_Year && m_Manager.GetMonth() == m_Month && m_Manager.GetDay() == m_Day && CurrentWeather() == m_Weather && m_Manager.IsWeatherLooping() == m_Looping, "fixture restores original native date, weather family and looping")) return -1; + m_Result = 1; Stop(); + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c new file mode 100644 index 0000000..0046a03 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c @@ -0,0 +1,118 @@ +#ifdef WORKBENCH +// Only environment-restart opts into this fixed private path. The runner must +// refuse all preexisting fixture files and require exactly two real rounds. +class ERR_NativeEnvironmentRestartProbe +{ + static const string PATH = "$profile:erri-environment-restart.json"; + static const string MARKER = "$profile:erri-environment-restart-round.json"; + protected ERR_GameMode m_Mode; + protected TimeAndWeatherManagerEntity m_Manager; + protected bool m_Failed; + protected bool m_Stopped; + protected bool m_Complete; + protected int m_Round = 1; + protected int m_InitialDate; + protected string m_InitialWeather; + protected bool m_InitialLoop; + protected float m_Wait; + protected float m_Hour; + protected float m_Duration; + + void ERR_NativeEnvironmentRestartProbe(ERR_GameMode mode) + { + m_Mode = mode; + ChimeraWorld world = ChimeraWorld.CastFrom(mode.GetWorld()); + if (world) m_Manager = world.GetTimeAndWeatherManager(); + if (!Check(m_Manager && m_Manager.GetCurrentWeatherState(), "world environment exists before production settings and service initialization")) return; + m_InitialDate = DateCode(); + m_InitialWeather = Weather(); + m_InitialLoop = m_Manager.IsWeatherLooping(); + if (FileIO.FileExists(MARKER)) + { + JsonLoadContext marker = new JsonLoadContext(); + int stage; + if (!Check(marker.LoadFromFile(MARKER) && marker.ReadValue("completedRound", stage) && stage == 1 && FileIO.FileExists(PATH), "second instance sees first round's completed marker and saved settings")) return; + m_Round = 2; + } + else + { + if (!Check(!FileIO.FileExists(PATH) && !FileIO.FileExists(PATH + ".bak") && !FileIO.FileExists(PATH + ".tmp"), "first instance owns previously unused fixture settings paths")) return; + } + PrintFormat("ERR ENVIRONMENT RESTART INSTANCE: round=%1 authoredDate=%2 authoredWeather=%3", m_Round, m_InitialDate, m_InitialWeather); + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: environment restart " + detail); return true; } + m_Failed = true; + Print("ERR SMOKE FAIL: environment restart " + detail, LogLevel.ERROR); + return false; + } + protected int DateCode() { return (m_Manager.GetYear() - 1900) * 10000 + m_Manager.GetMonth() * 100 + m_Manager.GetDay(); } + protected string Weather() + { + WeatherState state = m_Manager.GetCurrentWeatherState(); + if (!state) return "unavailable"; + return state.GetStateName(); + } + int Round() { return m_Round; } + void Stop() { m_Stopped = true; } + int Tick(float now) + { + if (m_Failed || m_Stopped) return -1; + if (m_Complete) return 1; + if (m_Wait == 0) + { + if (!Check(m_Mode.Environment().Started() && m_Mode.Time().Started(), "production round services started")) return -1; + if (!Check(m_Mode.Settings().Get("startTimeMinutes") == 840 && m_Mode.Settings().Get("timeMultiplier") == 1 && m_Mode.Time().StartMinutes() == 840 && m_Mode.Time().Multiplier() == 1, "both rounds retain original clock defaults and active progression settings")) return -1; + m_Hour = m_Manager.GetTimeOfTheDay(); + m_Duration = m_Manager.GetDayDuration(); + if (m_Round == 1) + { + if (!Check(m_Mode.Settings().Get("startDateCode") == 0 && m_Mode.Settings().Get("weatherProfile") == 0 && m_Mode.Environment().DateCode() == 0 && m_Mode.Environment().Profile() == 0, "first instance uses authored environment defaults")) return -1; + if (!Check(DateCode() == m_InitialDate && Weather() == m_InitialWeather && m_Manager.IsWeatherLooping() == m_InitialLoop, "default production startup preserves authored date and weather")) return -1; + array replies = {}; + if (!Check(ERR_EnvironmentCommands.Execute(m_Mode.Settings(), m_Mode.Environment(), {"mission", "date", "set", "2000-02-29"}, replies), "production date command handled")) return -1; + if (!Check(ERR_EnvironmentCommands.Execute(m_Mode.Settings(), m_Mode.Environment(), {"mission", "weather", "set", "overcast"}, replies), "production weather command handled")) return -1; + if (!Check(replies.Count() == 2 && replies[0].Contains("Saved for next round") && replies[1].Contains("Saved for next round"), "both commands report durable next-round saves")) return -1; + // This is the actual mode's settings owner, not a detached sample service. + ERR_Settings disk = new ERR_Settings(PATH); + if (!Check(disk.Get("startDateCode") == 1000229 && disk.Get("weatherProfile") == 2 && disk.Get("radioDefenceSeconds") == 180 && disk.Get("timeMultiplier") == 1, "production saves persist environment and preserve unrelated defaults")) return -1; + } + else + { + if (!Check(m_Mode.Settings().Get("startDateCode") == 1000229 && m_Mode.Settings().Get("weatherProfile") == 2 && m_Mode.Environment().DateCode() == 1000229 && m_Mode.Environment().Profile() == 2, "second real mode loads saved date and weather into production services")) return -1; + } + m_Wait = now + 2500; + return 0; + } + if (now < m_Wait) return 0; + if (!Check(m_Mode.Settings().Get("startDateCode") == 1000229 && m_Mode.Settings().Get("weatherProfile") == 2, "saved next-round settings remain intact")) return -1; + if (m_Round == 1) + { + if (!Check(m_Mode.Environment().DateCode() == 0 && m_Mode.Environment().Profile() == 0 && DateCode() == m_InitialDate && Weather() == m_InitialWeather && m_Manager.IsWeatherLooping() == m_InitialLoop, "saving real mode settings leaves current environment unchanged across native ticks")) return -1; + } + else if (!Check(DateCode() == 1000229 && Weather() == "Overcast" && m_Manager.IsWeatherLooping(), "second round applies exact leap date and selected native weather family")) return -1; + float advance = m_Manager.GetTimeOfTheDay() - m_Hour; + if (advance < 0) advance += 24; + if (!Check(advance > 0 && advance < 0.02 && m_Manager.GetIsDayAutoAdvanced() && m_Duration == ERR_TimeService.DayDuration(1) && m_Manager.GetDayDuration() == m_Duration, "native clock continues advancing without an environment-induced reset or rate change")) return -1; + if (m_Round == 1) + { + JsonSaveContext marker = new JsonSaveContext(); + marker.EnableTypeDiscriminator(false); + marker.WriteValue("completedRound", 1); + if (!Check(marker.SaveToFile(MARKER), "first completed round leaves restart handoff marker")) return -1; + } + else + { + if (FileIO.FileExists(PATH)) FileIO.DeleteFile(PATH); + if (FileIO.FileExists(PATH + ".bak")) FileIO.DeleteFile(PATH + ".bak"); + if (FileIO.FileExists(PATH + ".tmp")) FileIO.DeleteFile(PATH + ".tmp"); + if (FileIO.FileExists(MARKER)) FileIO.DeleteFile(MARKER); + if (!Check(!FileIO.FileExists(PATH) && !FileIO.FileExists(PATH + ".bak") && !FileIO.FileExists(PATH + ".tmp") && !FileIO.FileExists(MARKER), "successful second round removes only fixture settings and marker files")) return -1; + } + m_Complete = true; + return 1; + } +} + +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c new file mode 100644 index 0000000..f962fc5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c @@ -0,0 +1,172 @@ +#ifdef WORKBENCH +// Real vehicle/character compartments with an isolated synthetic identity roster. +// This is not twelve network clients, manual boarding, medical treatment or flight. +class ERR_NativeExtractionProbe +{ + protected ERR_GameMode m_Mode; + protected Vehicle m_Vehicle; + protected ref ERR_PlayerRoster m_Roster = new ERR_PlayerRoster(); + protected ref ERR_ExtractionService m_All; + protected ref ERR_ExtractionService m_Partial; + protected ref array m_Actors = {}; + protected ref array m_Accounts = {}; + protected ref array m_Seats = {}; + protected vector m_Original[4]; + protected int m_Step; + protected int m_Boarding; + protected int m_Resolutions; + protected float m_Wait; + protected UUID m_NewAccount = "00e77200-0000-0000-0000-000000000099"; + + void ERR_NativeExtractionProbe(ERR_GameMode mode) { m_Mode = mode; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: extraction " + detail); return true; } + Print("ERR SMOKE FAIL: extraction " + detail, LogLevel.ERROR); + return false; + } + protected void Resolved(ERR_ExtractionState state) { m_Resolutions++; } + protected IEntity Character(int index) + { + IEntity actor = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, ERR_Actors.Ground(m_Original[3] + Vector(20 + index * 2, 0, 15))); + if (!actor) return null; + m_Mode.Own(actor); + m_Actors.Insert(actor); + DamageManagerComponent.Cast(actor.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + return actor; + } + protected void MoveHelicopter(bool outside) + { + vector transform[4]; + m_Vehicle.GetWorldTransform(transform); + transform[3] = m_Original[3]; + if (outside) transform[3] = m_Original[3] + "650 150 0"; + m_Vehicle.SetWorldTransform(transform); + } + int Tick(float now) + { + if (now < m_Wait) return 0; + if (m_Step == 0) + { + if (!ERR_NativeTimeProbe.Run(m_Mode)) return -1; + m_Vehicle = m_Mode.ExtractionVehicle(); + if (!Check(m_Vehicle && m_Mode.Extraction().Ready(), "authored transport is ready for twelve prisoners")) return -1; + int count = m_Mode.Extraction().Seats(m_Seats); + PrintFormat("ERR EXTRACTION CAPACITY: usable pilot/passenger positions=%1", count); + if (!Check(count >= 12 && !m_Mode.SetExtractionVehicle(m_Vehicle), "running mission cannot rebind its extraction vehicle")) return -1; + m_Vehicle.GetWorldTransform(m_Original); + DamageManagerComponent.Cast(m_Vehicle.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + for (int i = 0; i < 12; i++) + { + IEntity actor = Character(i); + UUID account = "00e77200-0000-0000-0000-" + (i + 1).ToString(12, true); + if (!Check(actor && m_Roster.Bind(10001 + i, account), "isolated participant created")) return -1; + m_Accounts.Insert(account); + m_Roster.Spawned(10001 + i, actor); + } + m_All = new ERR_ExtractionService(m_Roster); + if (!Check(m_All.Assign(m_Vehicle) && !m_All.Begin(m_Original[3], 0) && m_All.Begin(m_Original[3], 500), "invalid boundary rejected without preventing a valid service start")) return -1; + if (!Check(!m_All.Assign(m_Vehicle) && !m_All.Begin(m_Original[3], 500), "duplicate binding and start rejected")) return -1; + m_All.OnResolved().Insert(Resolved); + m_Step = 1; + m_Wait = now + 1000; + return 0; + } + if (m_Step == 1) + { + CompartmentAccessComponent access = CompartmentAccessComponent.Cast(m_Actors[m_Boarding].FindComponent(CompartmentAccessComponent)); + if (!Check(access && access.GetInVehicle(m_Vehicle, m_Seats[m_Boarding], true, -1, ECloseDoorAfterActions.INVALID, false), "native boarding request accepted")) return -1; + m_Boarding++; + m_Wait = now + 500; + if (m_Boarding == 12) { m_Step = 2; m_Wait = now + 3000; } + return 0; + } + if (m_Step == 2) + { + for (int i = 0; i < 12; i++) + if (!Check(CompartmentAccessComponent.GetVehicleIn(m_Actors[i]) == m_Vehicle && m_Seats[i].GetOccupant() == m_Actors[i], "participant occupies a distinct physical seat")) return -1; + m_All.Tick(ERR_Phase.EXTRACTION); + if (!Check(m_All.State() == ERR_ExtractionState.WAITING && m_All.EscapedCount() == 0, "boarding inside boundary does not win")) return -1; + MoveHelicopter(true); + m_Step = 3; + m_Wait = now + 2500; + return 0; + } + if (m_Step == 3) + { + m_All.Tick(ERR_Phase.RADIO_SEARCH); + if (!Check(m_All.State() == ERR_ExtractionState.WAITING, "leaving before extraction phase does not win")) return -1; + m_All.Tick(ERR_Phase.EXTRACTION); + array winners = {}; + m_All.ConnectedWinners(winners); + if (!Check(m_All.EscapedCount() == 12 && m_All.LeftBehindCount() == 0 && winners.Count() == 12 && m_Resolutions == 1, "all twelve physical occupants escape exactly once")) return -1; + m_All.Tick(ERR_Phase.EXTRACTION); + if (!Check(m_Resolutions == 1 && !m_All.Assign(m_Vehicle), "resolved extraction neither repeats nor replaces its vehicle")) return -1; + MoveHelicopter(false); + m_Step = 4; + m_Wait = now + 2500; + return 0; + } + if (m_Step == 4) + { + SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_Actors[0].FindComponent(SCR_CharacterDamageManagerComponent)); + damage.EnableDamageHandling(true); + damage.Kill(Instigator.CreateInstigator(m_Actors[0])); + vector exitTransform[4]; + m_Actors[1].GetWorldTransform(exitTransform); + exitTransform[3] = ERR_Actors.Ground(m_Original[3] + "30 0 0"); + CompartmentAccessComponent access = CompartmentAccessComponent.Cast(m_Actors[1].FindComponent(CompartmentAccessComponent)); + if (!Check(access.GetOutVehicle_NoDoor(exitTransform, false, false), "one survivor leaves the helicopter")) return -1; + CharacterControllerComponent.Cast(m_Actors[2].FindComponent(CharacterControllerComponent)).SetUnconscious(true); + m_Roster.Disconnect(10004); + IEntity newcomer = Character(12); + if (!Check(newcomer && m_Roster.Bind(10004, m_NewAccount), "departed connection ID reused by a distinct account")) return -1; + m_Roster.Spawned(10004, newcomer); + m_Partial = new ERR_ExtractionService(m_Roster); + if (!Check(m_Partial.Assign(m_Vehicle) && m_Partial.Begin(m_Original[3], 500), "isolated partial escape case starts")) return -1; + m_Step = 5; + m_Wait = now + 3000; + return 0; + } + if (m_Step == 5) + { + if (!Check(!ERR_Actors.Alive(m_Actors[0]) && !CompartmentAccessComponent.GetVehicleIn(m_Actors[1]), "dead occupant and left-behind survivor are physically distinct cases")) return -1; + if (!Check(ERR_Actors.Alive(m_Actors[2]) && !ERR_Actors.CanFight(m_Actors[2]) && CompartmentAccessComponent.GetVehicleIn(m_Actors[2]) == m_Vehicle, "unconscious passenger remains physically aboard")) return -1; + MoveHelicopter(true); + m_Step = 6; + m_Wait = now + 2500; + return 0; + } + if (m_Step == 6) + { + m_Partial.Tick(ERR_Phase.EXTRACTION); + array winners = {}; + m_Partial.ConnectedWinners(winners); + if (!Check(m_Partial.EscapedCount() == 10 && m_Partial.LeftBehindCount() == 3 && winners.Count() == 9, "partial escape counts only living aboard participants")) return -1; + if (!Check(m_Partial.DidEscape(m_Accounts[2]) && m_Partial.DidEscape(m_Accounts[3]) && !m_Partial.DidEscape(m_Accounts[0]) && !m_Partial.DidEscape(m_Accounts[1]) && !m_Partial.DidEscape(m_NewAccount), "unconscious and reserved occupants escape; dead and absent people do not")) return -1; + if (!Check(winners.Contains(10003) && !winners.Contains(10004), "recycled connection ID does not inherit another account's win")) return -1; + if (!Check(m_Roster.Bind(10040, m_Accounts[3]), "escaped reserved account can rebind to a new connection")) return -1; + m_Partial.ConnectedWinners(winners); + if (!Check(winners.Count() == 10 && winners.Contains(10040) && !winners.Contains(10004), "result follows escaped identity after rebinding")) return -1; + m_Partial.Tick(ERR_Phase.EXTRACTION); + if (!Check(m_Partial.EscapedCount() == 10 && m_Partial.LeftBehindCount() == 3, "terminal result snapshot remains stable")) return -1; + ERR_PlayerRoster emptyRoster = new ERR_PlayerRoster(); + ERR_ExtractionService empty = new ERR_ExtractionService(emptyRoster); + if (!Check(empty.Assign(m_Vehicle) && empty.Begin(m_Original[3], 500), "empty-roster control starts")) return -1; + empty.Tick(ERR_Phase.EXTRACTION); + if (!Check(empty.State() == ERR_ExtractionState.WAITING, "unregistered occupants cannot win the mission")) return -1; + ERR_ExtractionService stopped = new ERR_ExtractionService(m_Roster); + if (!Check(stopped.Assign(m_Vehicle) && stopped.Begin(m_Original[3], 500), "stopped-service control starts")) return -1; + stopped.Stop(); + stopped.Tick(ERR_Phase.EXTRACTION); + if (!Check(stopped.State() == ERR_ExtractionState.WAITING, "stopped extraction cannot resolve")) return -1; + if (!ERR_NativeResultProbe.Run(m_Partial, m_Accounts[3], m_Accounts[0]) || !ERR_NativeTimeProbe.VerifyProgression(m_Mode)) return -1; + MoveHelicopter(false); + for (int i = m_Actors.Count() - 1; i >= 0; i--) ERR_Actors.DeleteSpawned(m_Actors[i]); + m_Step = 7; + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c new file mode 100644 index 0000000..05161d5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c @@ -0,0 +1,75 @@ +#ifdef WORKBENCH +// Read-only native assertions. Run after site preparation and faction init, +// before destructive vehicle fixtures. Does not load legacy full faction configs. +class ERR_NativeFactionCatalogProbe +{ + protected static ResourceName UAZ() { return "{259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et"; } + protected static ResourceName Mi8() { return "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et"; } + protected static bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: faction-catalog " + detail); return true; } + Print("ERR SMOKE FAIL: faction-catalog " + detail, LogLevel.ERROR); + return false; + } + protected static bool Catalogs(SCR_Faction faction) + { + array catalogs = {}; + if (!Check(faction.GetAllFactionEntityCatalogs(catalogs) == 6, faction.GetFactionKey() + " retains all six catalog types")) return false; + SCR_EntityCatalog vehicles = faction.GetFactionEntityCatalogOfType(EEntityCatalogType.VEHICLE); + array entries = {}; + if (!Check(vehicles && vehicles.GetEntityList(entries) == 2, faction.GetFactionKey() + " has exactly two supported vehicle entries")) return false; + bool uaz, mi8; + foreach (SCR_EntityCatalogEntry entry : entries) + { + if (!Check(entry != null, "vehicle entry exists")) return false; + ResourceName prefab = entry.GetPrefab(); + PrintFormat("ERR FACTION VEHICLE: faction=%1 prefab=%2", faction.GetFactionKey(), prefab); + if (prefab == UAZ()) uaz = true; + else if (prefab == Mi8()) mi8 = true; + else return Check(false, "unexpected vehicle catalog entry " + prefab); + } + if (!Check(uaz && mi8 && vehicles.GetEntryWithPrefab(UAZ()) && vehicles.GetEntryWithPrefab(Mi8()), "catalog lookup resolves both unique mission vehicles")) return false; + array retained = {EEntityCatalogType.CHARACTER, EEntityCatalogType.GROUP, EEntityCatalogType.WEAPONS_TRIPOD, EEntityCatalogType.ITEM, EEntityCatalogType.SUPPLY_CONTAINER_ITEM}; + foreach (EEntityCatalogType kind : retained) + { + SCR_EntityCatalog catalog = faction.GetFactionEntityCatalogOfType(kind); + if (!Check(catalog != null, faction.GetFactionKey() + " non-vehicle catalog exists " + typename.EnumToString(EEntityCatalogType, kind))) return false; + catalog.GetEntityList(entries); + PrintFormat("ERR FACTION RETAINED: faction=%1 type=%2 entries=%3", faction.GetFactionKey(), typename.EnumToString(EEntityCatalogType, kind), entries.Count()); + // Installed US/USSR supply-container catalogs are intentionally empty. + if (kind != EEntityCatalogType.SUPPLY_CONTAINER_ITEM && !Check(!entries.IsEmpty(), "retained native content catalog is initialized and nonempty")) return false; + } + return true; + } + protected static bool Items(SCR_Faction faction, ResourceName dressing, ResourceName saline, ResourceName radio) + { + SCR_EntityCatalog items = faction.GetFactionEntityCatalogOfType(EEntityCatalogType.ITEM); + return Check(items && items.GetEntryWithPrefab(dressing) && items.GetEntryWithPrefab(saline) && items.GetEntryWithPrefab(radio), faction.GetFactionKey() + " native dressing saline and backpack radio remain catalogued"); + } + static bool Run(ERR_GameMode mode) + { + if (!Check(Replication.IsServer() && mode && mode.Active(), "active authority available")) return false; + FactionManager manager = GetGame().GetFactionManager(); + if (!Check(manager != null, "native faction manager exists")) return false; + SCR_Faction us = SCR_Faction.Cast(manager.GetFactionByKey("US")); + SCR_Faction ussr = SCR_Faction.Cast(manager.GetFactionByKey("USSR")); + if (!Check(us && ussr && mode.PlayerFaction() == us && mode.EnemyFaction() == ussr, "mission retains US and USSR faction identities")) return false; + if (!Check(us.IsFactionEnemy(ussr) && ussr.IsFactionEnemy(us) && !us.IsFactionEnemy(us) && !ussr.IsFactionEnemy(ussr), "mutual enemy and same-faction relations preserved")) return false; + if (!Check(us.GetFactionRadioEncryptionKey() == "chickenNuggets" && ussr.GetFactionRadioEncryptionKey() == "coldBorscht" && us.GetFactionRadioFrequency() == 48000 && ussr.GetFactionRadioFrequency() == 42000, "native radio encryption and frequencies preserved")) return false; + if (!Check(us.GetCallsignInfo() && ussr.GetCallsignInfo(), "native faction callsign configurations resolve")) return false; + if (!Catalogs(us) || !Catalogs(ussr)) return false; + if (!Items(us, "{A81F501D3EF6F38E}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_US_01.et", "{00E36F41CA310E2A}Prefabs/Items/Medicine/SalineBag_01/SalineBag_US_01.et", "{9B6B61BB3FE3DFB0}Prefabs/Items/Equipment/Radios/Radio_ANPRC77.et")) return false; + if (!Items(ussr, "{C3F1FA1E2EC2B345}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et", "{527D7C5D2E476BDC}Prefabs/Items/Medicine/SalineBag_01/SalineBag_USSR_01.et", "{54C68E438DD34265}Prefabs/Items/Equipment/Radios/Radio_R107M.et")) return false; + SCR_EntityCatalogManagerComponent catalogManager = SCR_EntityCatalogManagerComponent.GetInstance(); + if (!Check(catalogManager && catalogManager.GetFactionEntityCatalogOfType(EEntityCatalogType.VEHICLE, "US") && catalogManager.GetFactionEntityCatalogOfType(EEntityCatalogType.ITEM, "USSR"), "global catalog manager retains faction vehicle and inventory access")) return false; + ERR_SiteRuntime depot = mode.Sites().Find("everon-supply-2"); + Vehicle helicopter = mode.ExtractionVehicle(); + if (!Check(depot && depot.Transport && ERR_Actors.Alive(depot.Transport) && depot.Transport.GetPrefabData().GetPrefabName() == UAZ(), "physical finite depot vehicle is supported UAZ")) return false; + if (!Check(helicopter && ERR_Actors.Alive(helicopter) && helicopter.GetPrefabData().GetPrefabName() == Mi8() && helicopter.FindComponent(HelicopterControllerComponent), "physical extraction aircraft is supported Mi8")) return false; + array seats = {}; + if (!Check(mode.Extraction().Seats(seats) >= 12, "physical aircraft still has required capacity")) return false; + Print("ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim"); + return true; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c new file mode 100644 index 0000000..44d0141 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c @@ -0,0 +1,141 @@ +#ifdef WORKBENCH +// Test-only horizontal envelope, independent of aircraft yaw/pitch/roll. +// All distances are around the native physics origin, not the rotor centre. +class ERR_FlightFootprintRules +{ + static float CylinderSphere(float originDistance, float radius, float thickness) + { + // Triangle inequality deliberately overbounds the one-sided rotor cylinder. + return originDistance + radius + thickness; + } + static bool Fits(float radius, float initialDrift, float initialHeight) + { + if (!(radius > 0 && radius < 32 && initialDrift >= 0 && initialDrift < 32)) return false; + if (!(initialHeight >= -3 && initialHeight <= 5)) return false; + return radius + initialDrift + 8 + 1 <= 40 && radius + initialHeight + 18 + 1 <= 60; + } +} + +class ERR_NativeFlightFootprint +{ + static const int MAX_ENTITIES = 256; + static const int MAX_DEPTH = 16; + static const int MAX_HITZONES = 512; + protected static bool Refuse(string reason) + { + Print("ERR POWERED FOOTPRINT: refused " + reason); + return false; + } + protected static bool PointRadius(vector point, vector origin, inout float radius) + { + float distance = vector.Distance(point, origin); + if (!(distance >= 0 && distance < 1000)) return false; + radius = Math.Max(radius, distance); + return true; + } + static bool Measure(Vehicle aircraft, VehicleHelicopterSimulation simulation, vector pad, out vector origin, out float radius) + { + radius = 0; + if (!aircraft || !simulation || !simulation.IsValid() || !aircraft.GetPrefabData()) return Refuse("missing initialized native airframe"); + if (aircraft.GetPrefabData().GetPrefabName() != "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et") return Refuse("different airframe resource"); + // Model bounds and damage pivots are world-space. The simulation getter + // exposes internal physics space (identity at the airport in 100422), so + // use this same physical aircraft's actual entity world transform. + vector worldTransform[4]; aircraft.GetWorldTransform(worldTransform); + origin = worldTransform[3]; + for (int axis = 0; axis < 3; axis++) + if (!(Math.AbsFloat(worldTransform[axis].Length() - 1) < 0.001)) return Refuse("non-unit native entity world basis"); + + array entities = {aircraft}; + array depths = {0}; + array seenZones = {}; + int meshes, mainSweeps, tailSweeps; + float modelRadius, damageRadius, simulationRadius; + for (int index = 0; index < entities.Count(); index++) + { + IEntity entity = entities[index]; + if (!entity) return Refuse("hierarchy changed during measurement"); + if (entity.GetVObject()) + { + vector mins, maxs; entity.GetWorldBounds(mins, maxs); + for (int dimension = 0; dimension < 3; dimension++) + if (!(mins[dimension] <= maxs[dimension])) return Refuse("invalid model bounds"); + // A sphere around every corner encloses the complete world AABB. Its radius + // remains conservative under any rigid orientation of the whole aircraft. + for (int x = 0; x < 2; x++) + for (int y = 0; y < 2; y++) + for (int z = 0; z < 2; z++) + { + vector corner = mins; + if (x == 1) corner[0] = maxs[0]; + if (y == 1) corner[1] = maxs[1]; + if (z == 1) corner[2] = maxs[2]; + if (!PointRadius(corner, origin, modelRadius)) return Refuse("non-finite or excessive model bounds"); + } + meshes++; + } + HitZoneContainerComponent container = HitZoneContainerComponent.Cast(entity.FindComponent(HitZoneContainerComponent)); + if (container) + { + int count = container.CountAllHitZones(); + if (count < 0 || count + seenZones.Count() > MAX_HITZONES) return Refuse("hitzone traversal bound"); + array zones = {}; + if (container.GetAllHitZones(zones) != count || zones.Count() != count) return Refuse("hitzones changed during measurement"); + foreach (HitZone zone : zones) + { + if (!zone || seenZones.Contains(zone)) continue; + seenZones.Insert(zone); + SCR_RotorHitZone rotorZone = SCR_RotorHitZone.Cast(zone); + if (!rotorZone || rotorZone.GetRotorRadius() <= 0) continue; // transmission zones have no sweep + int rotorIndex = rotorZone.GetRotorIndex(); + float expectedRadius, thickness; + if (rotorIndex == 0) { expectedRadius = 12; thickness = 1.5; mainSweeps++; } + else if (rotorIndex == 1) { expectedRadius = 2.3; thickness = 0.75; tailSweeps++; } + else return Refuse("unknown rotor sweep index"); + // Stock thickness is protected with no getter. Scope to the exact prefab + // and verify its public sweep radius against the audited stock constants. + if (!(Math.AbsFloat(rotorZone.GetRotorRadius() - expectedRadius) < 0.001)) return Refuse("stock damage sweep radius changed"); + PointInfo point = rotorZone.GetPointInfo(); + if (!point) return Refuse("missing actual rotor sweep pivot"); + vector rotorWorld[4]; point.GetWorldTransform(rotorWorld); + // Frobenius norm bounds the transform's maximum stretch even with scale + // or shear; do not assume the PointInfo basis is orthonormal. + float scaleSquared = 0; + for (int basis = 0; basis < 3; basis++) scaleSquared += vector.Dot(rotorWorld[basis], rotorWorld[basis]); + float scale = Math.Sqrt(scaleSquared); + if (!(scale > 0 && scale < 4)) return Refuse("invalid damage sweep basis"); + float distance = vector.Distance(origin, rotorWorld[3]); + float sweepBound = ERR_FlightFootprintRules.CylinderSphere(distance, expectedRadius * scale, thickness * scale); + if (!(sweepBound > 0 && sweepBound < 1000)) return Refuse("invalid damage sweep extent"); + damageRadius = Math.Max(damageRadius, sweepBound); + PrintFormat("ERR POWERED FOOTPRINT ROTOR: index=%1 pivot=%2 damageRadius=%3 thickness=%4 scale=%5 sphereBound=%6", rotorIndex, rotorWorld[3], expectedRadius, thickness, scale, sweepBound); + } + } + IEntity child = entity.GetChildren(); + while (child) + { + if (entities.Count() >= MAX_ENTITIES || depths[index] >= MAX_DEPTH || entities.Contains(child)) return Refuse("entity/depth/cycle traversal bound"); + entities.Insert(child); depths.Insert(depths[index] + 1); + child = child.GetSibling(); + } + } + if (meshes == 0 || mainSweeps != 1 || tailSweeps != 1) return Refuse("complete model and both actual damage sweeps required"); + if (simulation.RotorCount() != 2) return Refuse("stock simulation rotor count changed"); + for (int rotor = 0; rotor < 2; rotor++) + { + vector localRotor[4]; simulation.RotorGetTransform(rotor, localRotor); + float physicalRadius = simulation.RotorGetRadius(rotor); + float physicalBound = localRotor[3].Length() + physicalRadius; + if (!(physicalRadius > 0 && physicalBound > 0 && physicalBound < 1000)) return Refuse("invalid native simulation rotor extent"); + simulationRadius = Math.Max(simulationRadius, physicalBound); + PrintFormat("ERR POWERED FOOTPRINT PHYSICS ROTOR: index=%1 localPivot=%2 radius=%3 sphereBound=%4", rotor, localRotor[3], physicalRadius, physicalBound); + } + radius = Math.Max(modelRadius, Math.Max(damageRadius, simulationRadius)); + float initialDrift = vector.DistanceXZ(origin, pad); + float initialHeight = origin[1] - pad[1]; + PrintFormat("ERR POWERED FOOTPRINT: entities=%1 meshes=%2 zones=%3 modelSphere=%4 damageSphere=%5 simulationSphere=%6 completeSphere=%7 initialDrift=%8 initialHeight=%9", entities.Count(), meshes, seenZones.Count(), modelRadius, damageRadius, simulationRadius, radius, initialDrift, initialHeight); + if (!ERR_FlightFootprintRules.Fits(radius, initialDrift, initialHeight)) return Refuse("measured footprint plus initial placement,8m drift and1m margin exceeds40m corridor or60m ceiling"); + return true; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c new file mode 100644 index 0000000..b480393 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c @@ -0,0 +1,106 @@ +#ifdef WORKBENCH +// Optional observations only. Never writes pilot controls, signals or settings. +modded class ERR_NativePoweredFlightProbe +{ + protected bool m_ERRInputDiagChecked; + protected bool m_ERRInputDiagEnabled; + protected int m_ERRInputDiagSamples; + protected int m_ERRWrittenSequence; + protected int m_ERRAppliedSequence; + protected int m_ERRApplyCallbacks; + protected float m_ERRWrittenAt; + protected float m_ERRAppliedAt; + protected float m_ERRWrittenCollective; + protected float m_ERRAppliedCollective; + protected float m_ERRWrittenThrottle; + protected float m_ERRAppliedThrottle; + // Vector elements are cyclic-forward, cyclic-aside, anti-torque, respectively. + protected vector m_ERRWrittenCyclic; + protected vector m_ERRAppliedCyclic; + + protected bool ERR_InputDiagActive() + { + if (!m_ERRInputDiagChecked) + { + string enabled; + m_ERRInputDiagEnabled = System.GetCLIParam("errFlightInputDiag", enabled) && enabled == "1"; + m_ERRInputDiagChecked = true; + } + if (!m_ERRInputDiagEnabled || !m_Bound || m_Stopped || !m_Input) return false; + return PoweredAuthority(); + } + + override void PreparePilotActions(CharacterControllerComponent controller, IEntity owner, ActionManager am, float dt) + { + int before = m_ControlUpdates; + super.PreparePilotActions(controller, owner, am, dt); + if (m_ControlUpdates == before || controller != m_Character || owner != m_Pilot || !ERR_InputDiagActive()) return; + m_ERRWrittenSequence = m_ControlUpdates; + m_ERRWrittenAt = GetGame().GetWorld().GetWorldTime(); + // These are actual owned virtual-action values, not native consumption. + m_ERRWrittenCollective = am.GetActionValue("HelicopterCollectiveIncrease") - am.GetActionValue("HelicopterCollectiveDecrease"); + float forward = am.GetActionValue("HelicopterCyclicForward") - am.GetActionValue("HelicopterCyclicBack"); + float aside = am.GetActionValue("HelicopterCyclicRight") - am.GetActionValue("HelicopterCyclicLeft"); + float torque = am.GetActionValue("HelicopterAntiTorqueRight") - am.GetActionValue("HelicopterAntiTorqueLeft"); + m_ERRWrittenCyclic = Vector(forward, aside, torque); + m_ERRWrittenThrottle = m_Input.GetVehicleThrottle(); // observation only in action mode + } + + override void ApplyPilot(CharacterControllerComponent controller, IEntity owner, float dt) + { + // Snapshot native context before this callback's owned final writes. + ERR_ObserveAppliedFlightInput(controller, owner); + int before = m_ControlUpdates; + super.ApplyPilot(controller, owner, dt); + if (m_ControlUpdates == before || controller != m_Character || owner != m_Pilot || !ERR_InputDiagActive()) return; + m_ERRWrittenSequence = m_ControlUpdates; + m_ERRWrittenAt = GetGame().GetWorld().GetWorldTime(); + m_ERRWrittenCollective = m_Input.GetVehicleCollective(); + m_ERRWrittenThrottle = m_Input.GetVehicleThrottle(); + m_ERRWrittenCyclic = Vector(m_Input.GetVehicleCyclicForward(), m_Input.GetVehicleCyclicAside(), m_Input.GetVehicleAntiTorque()); + } + + void ERR_ObserveAppliedFlightInput(CharacterControllerComponent controller, IEntity owner) + { + if (controller != m_Character || owner != m_Pilot || !ERR_InputDiagActive()) return; + m_ERRApplyCallbacks++; + m_ERRAppliedSequence = m_ERRWrittenSequence; + m_ERRAppliedAt = GetGame().GetWorld().GetWorldTime(); + m_ERRAppliedCollective = m_Input.GetVehicleCollective(); + m_ERRAppliedThrottle = m_Input.GetVehicleThrottle(); + m_ERRAppliedCyclic = Vector(m_Input.GetVehicleCyclicForward(), m_Input.GetVehicleCyclicAside(), m_Input.GetVehicleAntiTorque()); + } + + protected string ERR_ExistingRotorSignal(SignalsManagerComponent signals, string name) + { + if (!signals) return "no-manager"; + int index = signals.FindSignal(name); + if (index < 0) return "missing"; + return string.Format("%1", signals.GetSignalValue(index)); + } + + protected override void Diagnostic(float now) + { + bool due = m_Simulation && m_Aircraft && now >= m_NextLog; + super.Diagnostic(now); + // The existing diagnostic gate is two seconds. Cap at120 batches as well, + // and never call native getters for an unowned or player-claimed fixture. + if (!due || m_ERRInputDiagSamples >= 120 || !ERR_InputDiagActive()) return; + m_ERRInputDiagSamples++; + float writtenAge = -1; + float appliedAge = -1; + if (m_ERRWrittenSequence > 0) writtenAge = now - m_ERRWrittenAt; + if (m_ERRApplyCallbacks > 0) appliedAge = now - m_ERRAppliedAt; + PrintFormat("ERR POWERED INPUT OBSERVATION: sample=%1 writtenSequence=%2 applyCallbacks=%3 beforeWriteSequence=%4 writtenAgeMs=%5 beforeWriteAgeMs=%6", m_ERRInputDiagSamples, m_ERRWrittenSequence, m_ERRApplyCallbacks, m_ERRAppliedSequence, writtenAge, appliedAge); + PrintFormat("ERR POWERED INPUT STAGES: writtenCollective=%1 beforeWriteCollective=%2 writtenFRA=%3 beforeWriteFRA=%4 writtenThrottle=%5 beforeWriteThrottle=%6", m_ERRWrittenCollective, m_ERRAppliedCollective, m_ERRWrittenCyclic, m_ERRAppliedCyclic, m_ERRWrittenThrottle, m_ERRAppliedThrottle); + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + string collective = ERR_ExistingRotorSignal(signals, "MainRotorCollective"); + string forward = ERR_ExistingRotorSignal(signals, "MainRotorCyclicForward"); + string aside = ERR_ExistingRotorSignal(signals, "MainRotorCyclicAside"); + string tail = ERR_ExistingRotorSignal(signals, "TailRotorCollective"); + bool autohover = m_Controller.GetAutohoverEnabled(); + int mode = m_Controller.GetCollectiveMode(); + PrintFormat("ERR POWERED ROTOR SIGNALS: collective=%1 cyclicForward=%2 cyclicAside=%3 tailCollective=%4 autohover=%5 collectiveMode=%6", collective, forward, aside, tail, autohover, mode); + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c new file mode 100644 index 0000000..9892230 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c @@ -0,0 +1,247 @@ +#ifdef WORKBENCH +// Native queue length is not exposed: SCR_AIGroup.GetSpawnQueueSize() is a +// compatibility stub returning zero. Observe dispatch on explicitly tagged +// disposable groups instead; every engine call still reaches unchanged super. +class ERR_NativeGuardDispatchTrace +{ + static int Total; +} +modded class SCR_AIGroup +{ + protected bool m_ERRGuardCancelTracked; + protected int m_ERRGuardCancelDispatches; + protected int m_ERRGuardCancelInitCalls; + protected int m_ERRGuardCancelRequestCalls; + void ERR_TrackGuardCancel() + { + m_ERRGuardCancelTracked = true; + PrintFormat("ERR GUARD CANCEL TRACK: group=%1 initCalls=%2 requests=%3 agents=%4 spawnImmediately=%5 slots=%6 lifecycle=%7", this, m_ERRGuardCancelInitCalls, m_ERRGuardCancelRequestCalls, GetAgentsCount(), GetSpawnImmediately(), m_aUnitPrefabSlots.Count(), GetLifecyclePolicy()); + } + override void EOnInit(IEntity owner) + { + m_ERRGuardCancelInitCalls++; + if (m_ERRGuardCancelTracked) PrintFormat("ERR GUARD CANCEL LATE INIT: group=%1 initCalls=%2", this, m_ERRGuardCancelInitCalls); + super.EOnInit(owner); + } + override void RequestSpawn(int slotsWanted = -1, float observerRange = 0) + { + m_ERRGuardCancelRequestCalls++; + if (m_ERRGuardCancelTracked) PrintFormat("ERR GUARD CANCEL REQUEST: group=%1 request=%2 wanted=%3 range=%4 slots=%5", this, m_ERRGuardCancelRequestCalls, slotsWanted, observerRange, m_aUnitPrefabSlots.Count()); + super.RequestSpawn(slotsWanted, observerRange); + } + int ERR_GuardCancelDispatches() { return m_ERRGuardCancelDispatches; } + // EOnInit assigns the cached utility before requesting members. The ignore- + // spawning branch instead invokes all-members init immediately; exclude it. + bool ERR_GuardCancelPendingInit() { return GetGroupUtilityComponent() && !m_bOnInitInvoked; } + override bool ExpandOneMember() + { + if (m_ERRGuardCancelTracked) + { + m_ERRGuardCancelDispatches++; + ERR_NativeGuardDispatchTrace.Total++; + PrintFormat("ERR GUARD CANCEL DISPATCH: group=%1 dispatch=%2 agents=%3 slots=%4 complete=%5", this, m_ERRGuardCancelDispatches, GetAgentsCount(), m_aUnitPrefabSlots.Count(), IsExpandComplete()); + } + return super.ExpandOneMember(); + } +} + +// Assemble only the owned-group portion of PENDING preparation. No authored +// mission sites, stock, waypoints or live mission service are cloned or changed. +class ERR_NativeGuardCancelOwner : ERR_SiteService +{ + protected int m_Cancellations; + void ERR_NativeGuardCancelOwner(ERR_GameMode mode) { m_Mode = mode; } + int Cancellations() { return m_Cancellations; } + protected override void CancelInitialGuardRequests() + { + m_Cancellations++; + PrintFormat("ERR GUARD CANCEL OWNER: pendingState=%1 calls=%2 ownedSites=%3", m_State, m_Cancellations, m_Sites.Count()); + super.CancelInitialGuardRequests(); + foreach (ERR_SiteRuntime site : m_Sites) + if (site.Group) PrintFormat("ERR GUARD CANCEL RETIRED: site=%1 group=%2 slots=%3 spawnImmediately=%4 agents=%5 complete=%6", site.Definition.Id, site.Group, site.Group.m_aUnitPrefabSlots.Count(), site.Group.GetSpawnImmediately(), site.Group.GetAgentsCount(), site.Group.IsExpandComplete()); + } + bool Attach(SCR_AIGroup group, string label) + { + if (!group || m_Begun) return false; + m_Begun = true; + ERR_SiteRuntime site = new ERR_SiteRuntime(); + site.Definition = new ERR_SiteDefinition(); + site.Definition.Id = label; + site.Definition.Guarded = true; + site.Group = group; + if (group.m_aUnitPrefabSlots) site.InitialGuardCount = group.m_aUnitPrefabSlots.Count(); + m_Sites.Insert(site); + m_Entities.Insert(group); + return site.InitialGuardCount == 6 && group.GetSpawnImmediately(); + } +} + +class ERR_NativeGuardCancelProbe +{ + protected ERR_GameMode m_Mode; + protected ref ERR_NativeGuardCancelOwner m_EmptyOwner; + protected ref ERR_NativeGuardCancelOwner m_PartialOwner; + protected ref ERR_NativeGuardCancelOwner m_ControlOwner; + protected SCR_AIGroup m_Empty; + protected SCR_AIGroup m_Partial; + protected SCR_AIGroup m_Control; + protected ref array m_PartialMembers = {}; + protected ref array m_DeletedMembers = {}; + protected ref array m_MainGroups = {}; + protected int m_PartialDispatches; + protected int m_TotalBeforeDelete; + protected int m_Step; + protected float m_Deadline; + protected float m_ObserveUntil; + protected bool m_RolledBack; + void ERR_NativeGuardCancelProbe(ERR_GameMode mode) { m_Mode = mode; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: guard-cancel " + detail); return true; } + Print("ERR SMOKE FAIL: guard-cancel " + detail, LogLevel.ERROR); + Stop(); + return false; + } + protected int Members(SCR_AIGroup group, out array members) + { + members.Clear(); + if (!group) return 0; + array agents = {}; + group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + if (!agent) continue; + IEntity actor = agent.GetControlledEntity(); + if (actor && !members.Contains(actor)) members.Insert(actor); + } + return members.Count(); + } + protected SCR_AIGroup NewGroup(vector offset) + { + ERR_SiteRuntime outpost = m_Mode.Sites().Find("everon-outpost-1"); + if (!outpost || !outpost.Group) return null; + SCR_AIGroup group = SCR_AIGroup.Cast(ERR_Actors.Spawn(m_Mode.Factions().GuardGroupPrefab, ERR_Actors.Ground(outpost.Group.GetOrigin() + offset))); + if (group) group.ERR_TrackGuardCancel(); + return group; + } + protected bool OriginalSitesIntact() + { + if (!m_Mode.Sites() || m_Mode.Sites().Prepare() != ERR_PrepareResult.READY) return false; + array locations = {}; + m_Mode.Locations(locations); + array groups = {}; + foreach (ERR_LocationComponent location : locations) + { + ERR_SiteRuntime site = m_Mode.Sites().Find(location.Id()); + if (site && site.Group) groups.Insert(site.Group); + } + if (groups.Count() != m_MainGroups.Count()) return false; + foreach (SCR_AIGroup group : m_MainGroups) + if (!group || !groups.Contains(group)) return false; + return true; + } + protected bool CancelledStable() + { + array emptyMembers = {}; + array partialMembers = {}; + if (!m_Empty || Members(m_Empty, emptyMembers) != 0 || m_Empty.ERR_GuardCancelDispatches() != 0) return false; + if (!m_Partial || Members(m_Partial, partialMembers) != m_PartialMembers.Count() || m_Partial.ERR_GuardCancelDispatches() != m_PartialDispatches) return false; + foreach (IEntity actor : m_PartialMembers) + if (!actor || !partialMembers.Contains(actor)) return false; + return true; + } + void Stop() + { + // Each owner rolls back at most once. ERR_Actors.DeleteSpawned retains its + // stock active-player protection; no player is assigned to these groups. + if (m_RolledBack) return; + m_RolledBack = true; + if (m_EmptyOwner) m_EmptyOwner.Rollback(); + if (m_PartialOwner) m_PartialOwner.Rollback(); + if (m_ControlOwner) m_ControlOwner.Rollback(); + } + int Tick(float now) + { + if (m_Deadline == 0) m_Deadline = now + 90000; + if (now > m_Deadline || !m_Mode.Active()) { Check(false, "bounded fixture deadline or active mission lost"); return -1; } + if (m_Step == 0) + { + array locations = {}; + m_Mode.Locations(locations); + foreach (ERR_LocationComponent location : locations) + { + ERR_SiteRuntime site = m_Mode.Sites().Find(location.Id()); + if (site && site.Group) m_MainGroups.Insert(site.Group); + } + ERR_NativeGuardDispatchTrace.Total = 0; + m_EmptyOwner = new ERR_NativeGuardCancelOwner(m_Mode); + m_PartialOwner = new ERR_NativeGuardCancelOwner(m_Mode); + m_ControlOwner = new ERR_NativeGuardCancelOwner(m_Mode); + m_Empty = NewGroup("50 0 60"); + if (!Check(m_EmptyOwner.Attach(m_Empty, "guard-cancel-empty"), "empty case owns one six-slot automatic native group")) return -1; + array initial = {}; + if (!Check(m_Empty.ERR_GuardCancelPendingInit() && Members(m_Empty, initial) == 0 && m_Empty.ERR_GuardCancelDispatches() == 0 && !m_Empty.IsExpandComplete(), "empty case is cancelled before its first native member dispatch")) return -1; + m_EmptyOwner.Stop(); + m_EmptyOwner.Stop(); + if (!Check(m_EmptyOwner.Cancellations() == 1 && !m_Empty.GetSpawnImmediately() && m_Empty.m_aUnitPrefabSlots.IsEmpty(), "empty cancellation retires only this instance's spawn intent once")) return -1; + if (!Check(m_Empty && m_EmptyOwner.Owns(m_Empty) && m_EmptyOwner.Prepare() == ERR_PrepareResult.FAILED && !m_Mode.Sites().Owns(m_Empty), "repeated actual preparation stop retains only the disposable empty group for observation")) return -1; + m_Partial = NewGroup("-50 0 60"); + if (!Check(m_PartialOwner.Attach(m_Partial, "guard-cancel-partial"), "partial case owns a separate six-slot automatic native group")) return -1; + m_Control = NewGroup("0 0 100"); + if (!Check(m_ControlOwner.Attach(m_Control, "guard-cancel-control"), "uncancelled six-slot control uses the same native queue")) return -1; + m_Step = 1; + return 0; + } + if (m_Step == 1) + { + array emptyMembers = {}; + if (!m_Empty || Members(m_Empty, emptyMembers) != 0 || m_Empty.ERR_GuardCancelDispatches() != 0) + { Check(false, "empty group received late dispatch or members after cancellation"); return -1; } + if (!m_Partial || !m_Control) { Check(false, "disposable observation group disappeared before cancellation"); return -1; } + if (Members(m_Partial, m_PartialMembers) == 0) return 0; + if (!Check(m_PartialMembers.Count() < 6 && !m_Partial.IsExpandComplete() && m_Partial.ERR_GuardCancelDispatches() > 0, "native queue produced a real partial squad before cancellation")) return -1; + // The fixture tick runs after native dispatch returns, so the queue has + // finished re-enqueuing this partial fill. Do not purge from inside AddAgent. + m_PartialOwner.Stop(); + m_PartialOwner.Stop(); + if (!Check(m_PartialOwner.Cancellations() == 1 && !m_Partial.GetSpawnImmediately() && m_Partial.m_aUnitPrefabSlots.IsEmpty(), "partial cancellation retires future spawn intent without deleting present actors")) return -1; + m_PartialDispatches = m_Partial.ERR_GuardCancelDispatches(); + if (!Check(m_PartialOwner.Prepare() == ERR_PrepareResult.FAILED && m_PartialOwner.Owns(m_Partial), "partial preparation stops idempotently while existing members remain")) return -1; + PrintFormat("ERR GUARD CANCEL: partialMembers=%1 dispatches=%2 observationSeconds=15", m_PartialMembers.Count(), m_PartialDispatches); + m_ObserveUntil = now + 15000; + m_Step = 2; + return 0; + } + if (m_Step == 2) + { + if (!CancelledStable()) { Check(false, "cancelled groups changed member identity/count or received another native dispatch"); return -1; } + array controlMembers = {}; + int controlCount = Members(m_Control, controlMembers); + if (!m_Control || controlCount > 6) { Check(false, "uncancelled control vanished or exceeded its requested size"); return -1; } + if (now < m_ObserveUntil || controlCount != 6 || !m_Control.IsExpandComplete()) return 0; + if (!Check(m_Control.ERR_GuardCancelDispatches() >= 6 && m_Control.m_aUnitPrefabSlots.Count() == 6 && m_Control.GetSpawnImmediately(), "uncancelled native control reached six while cancelled groups stayed unchanged for at least fifteen seconds")) return -1; + if (!Check(OriginalSitesIntact(), "original mission site groups and ready service remain intact")) return -1; + foreach (IEntity partialMember : m_PartialMembers) m_DeletedMembers.Insert(partialMember); + foreach (IEntity controlMember : controlMembers) m_DeletedMembers.Insert(controlMember); + foreach (IEntity actor : m_DeletedMembers) + if (!Check(!ERR_Actors.Player(actor), "rollback target is a disposable non-player character")) return -1; + m_TotalBeforeDelete = ERR_NativeGuardDispatchTrace.Total; + Stop(); + m_ObserveUntil = now + 6000; + m_Step = 3; + return 0; + } + if (m_Step == 3) + { + if (ERR_NativeGuardDispatchTrace.Total != m_TotalBeforeDelete) { Check(false, "native dispatch occurred after rollback"); return -1; } + if (now < m_ObserveUntil) return 0; + if (!Check(!m_Empty && !m_Partial && !m_Control, "each disposable group was deleted once by its real owner rollback")) return -1; + foreach (IEntity deleted : m_DeletedMembers) + if (!Check(!deleted, "each physical partial/control member is actually deleted after rollback")) return -1; + if (!Check(OriginalSitesIntact(), "original mission groups remain intact after rollback and six-second observation")) return -1; + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c new file mode 100644 index 0000000..ce6dd60 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c @@ -0,0 +1,162 @@ +#ifdef WORKBENCH +// Opt-in fault injection on a fixture-owned stock kit in a private preview world. +// Calls the actual teardown boundary while the native callback sources still +// exist, so an unsubscribe failure remains observable before entity destruction. +modded class SCR_ResupplyMedicalGadgetSupportStationComponent +{ + protected bool m_ERRTeardownProbeWatch; + protected int m_ERRTeardownProbeResourceCalls; + protected int m_ERRTeardownProbeDamageCalls; + protected int m_ERRTeardownProbeInitCalls; + + protected override void DelayedInit(IEntity owner) + { + if (m_ERRTeardownProbeWatch) m_ERRTeardownProbeInitCalls++; + super.DelayedInit(owner); + } + protected override void TEMP_OnInteractorReplicated() + { + if (m_ERRTeardownProbeWatch) m_ERRTeardownProbeResourceCalls++; + super.TEMP_OnInteractorReplicated(); + } + protected override void OnDamageStateChanged(EDamageState damageState) + { + if (m_ERRTeardownProbeWatch) m_ERRTeardownProbeDamageCalls++; + super.OnDamageStateChanged(damageState); + } + bool ERR_TeardownProbeInitialize() + { + // Preview worlds need not process normal world events. Execute the unchanged + // native initialization routine once if EOnInit has not already done so. + if (!m_ERRTeardownInitialized) + { + GetGame().GetCallqueue().Remove(DelayedInit); + DelayedInit(GetOwner()); + } + return m_ERRTeardownInitialized && m_ERRTeardownScope && m_EntityCatalogManager && !UsesRange(); + } + SCR_ResourceComponent ERR_TeardownProbeResource() { return m_ERRTeardownResource; } + void ERR_TeardownProbeWatch() { m_ERRTeardownProbeWatch = true; } + int ERR_TeardownProbeResourceCalls() { return m_ERRTeardownProbeResourceCalls; } + int ERR_TeardownProbeDamageCalls() { return m_ERRTeardownProbeDamageCalls; } + int ERR_TeardownProbeInitCalls() { return m_ERRTeardownProbeInitCalls; } + bool ERR_TeardownProbeDone() { return m_ERRTeardownDone; } + void ERR_TeardownProbeExpireAndDelete() + { + // Fault injection only: do not mutate/delete the global manager or any + // existing preview/cache entity. Nothing calls InitValidSetup with this null. + m_EntityCatalogManager = null; + GetGame().GetCallqueue().CallLater(DelayedInit, 100, false, GetOwner()); + OnDelete(GetOwner()); + OnDelete(GetOwner()); + } +} + +class ERR_NativeItemStationTeardownProbe +{ + protected ref SharedItemRef m_WorldRef; + protected BaseWorld m_World; + protected IEntity m_Kit; + protected SCR_ResupplyMedicalGadgetSupportStationComponent m_Station; + protected SCR_ResourceComponent m_Resource; + protected SCR_DamageManagerComponent m_Damage; + protected SCR_HitZone m_HitZone; + protected SCR_EntityCatalogManagerComponent m_OriginalCatalog; + protected int m_Index; + protected int m_Step; + protected int m_Result; + protected bool m_Stopped; + protected int m_ExpectedDamageCalls; + protected float m_Wait; + protected float m_Deadline; + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: station teardown " + detail); return true; } + Print("ERR SMOKE FAIL: station teardown " + detail, LogLevel.ERROR); + m_Result = -1; + Stop(); + return false; + } + void Stop() + { + m_Stopped = true; + ReleaseKit(); + } + protected void ReleaseKit() + { + // All objects belong to this fixture, never a resource or preview cache. + m_Station = null; + m_Resource = null; + m_Damage = null; + m_HitZone = null; + if (m_Kit) delete m_Kit; + m_Kit = null; + m_World = null; + m_WorldRef = null; + } + protected void EmitNativeCallbacks() + { + m_Resource.TEMP_GetOnInteractorReplicated().Invoke(); + if (m_Damage) m_Damage.GetOnDamageStateChanged().Invoke(m_Damage.GetState()); + if (m_HitZone) m_HitZone.GetOnDamageStateChanged().Invoke(m_HitZone); + } + int Tick(float now) + { + if (m_Result != 0) return m_Result; + if (m_Stopped) return -1; + if (m_Deadline == 0) m_Deadline = now + 10000; + if (now >= m_Deadline) { Check(false, "bounded fixture deadline"); return -1; } + if (now < m_Wait) return 0; + if (m_Step == 0) + { + if (!Check(Replication.IsServer() && ERR_GameMode.Get() && SCR_EntityCatalogManagerComponent.GetInstance(), "successor server and real global catalog available")) return -1; + m_OriginalCatalog = SCR_EntityCatalogManagerComponent.GetInstance(); + m_WorldRef = BaseWorld.CreateWorld("Preview", "ERRStationTeardownProbe"); + if (m_WorldRef) m_World = m_WorldRef.GetRef(); + if (!Check(m_World && m_World != GetGame().GetWorld(), "owns an independent off-world preview world")) return -1; + ResourceName prefab = "{AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et"; + if (m_Index == 1) prefab = "{21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et"; + Resource resource = Resource.Load(prefab); + if (!Check(resource && resource.IsValid(), "stock kit resource resolves")) return -1; + m_Kit = GetGame().SpawnEntityPrefab(resource, m_World); + if (!Check(m_Kit != null, "isolated stock kit spawned")) return -1; + m_Wait = now + 500; + m_Step = 1; + return 0; + } + if (m_Step == 1) + { + m_Station = SCR_ResupplyMedicalGadgetSupportStationComponent.Cast(m_Kit.FindComponent(SCR_ResupplyMedicalGadgetSupportStationComponent)); + if (!Check(m_Station && m_Station.ERR_TeardownProbeInitialize(), "actual native initialization completed with valid catalog and no range registration")) return -1; + m_Resource = m_Station.ERR_TeardownProbeResource(); + if (!Check(m_Resource != null, "actual subscribed native resource component captured")) return -1; + m_Damage = SCR_DamageManagerComponent.Cast(m_Kit.FindComponent(SCR_DamageManagerComponent)); + HitZoneContainerComponent hitZones = HitZoneContainerComponent.Cast(m_Kit.FindComponent(HitZoneContainerComponent)); + if (hitZones) m_HitZone = SCR_HitZone.Cast(hitZones.GetDefaultHitZone()); + m_ExpectedDamageCalls = 0; + if (m_Damage) m_ExpectedDamageCalls++; + if (m_HitZone) m_ExpectedDamageCalls++; + PrintFormat("ERR STATION TEARDOWN PROBE: kit=%1 nativeDamageSources=%2 resourcePresent=%3", m_Index, m_ExpectedDamageCalls, m_Resource != null); + m_Station.ERR_TeardownProbeWatch(); + EmitNativeCallbacks(); + if (!Check(m_Station.ERR_TeardownProbeResourceCalls() == 1 && m_Station.ERR_TeardownProbeDamageCalls() == m_ExpectedDamageCalls, "native invokers reach initialized station exactly once per installed source")) return -1; + m_Station.ERR_TeardownProbeExpireAndDelete(); + if (!Check(m_Station.ERR_TeardownProbeDone(), "expired cached catalog takes production cleanup exactly once")) return -1; + EmitNativeCallbacks(); + if (!Check(m_Station.ERR_TeardownProbeResourceCalls() == 1 && m_Station.ERR_TeardownProbeDamageCalls() == m_ExpectedDamageCalls, "resource and installed damage sources no longer invoke detached station")) return -1; + m_Wait = now + 500; + m_Step = 2; + return 0; + } + if (!Check(m_Station.ERR_TeardownProbeInitCalls() == 0, "queued native initialization did not run after teardown")) return -1; + EmitNativeCallbacks(); + if (!Check(m_Station.ERR_TeardownProbeResourceCalls() == 1 && m_Station.ERR_TeardownProbeDamageCalls() == m_ExpectedDamageCalls, "no late callbacks after 500 ms")) return -1; + if (!Check(m_OriginalCatalog && SCR_EntityCatalogManagerComponent.GetInstance() == m_OriginalCatalog, "same global catalog remains alive and unchanged by fault injection")) return -1; + ReleaseKit(); + m_Index++; + if (m_Index < 2) { m_Step = 0; return 0; } + m_Result = 1; + return 1; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c new file mode 100644 index 0000000..7cacb39 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c @@ -0,0 +1,190 @@ +#ifdef WORKBENCH +[BaseContainerProps(category: "Respawn")] +modded class ERR_SpawnLogic +{ + // Test-only ownership setup. This does not change a life record, start a real + // spawn request, replace a controller's actor or bypass production finalization. + bool ERR_TestPendingActor(SCR_SpawnRequestComponent request, SCR_SpawnData data, IEntity actor) + { + if (!Replication.IsServer() || !request || !data || !actor || ERR_Actors.Player(actor)) return false; + int id = request.GetPlayerId(); + if (m_Pending.Contains(id) || !m_Identities.Contains(id)) return false; + ERR_SpawnTicket ticket = new ERR_SpawnTicket(); + ticket.ConnectionId = id; ticket.AccountId = m_Identities.Get(id); + ticket.Mode = ERR_GameMode.Get(); + ticket.Controller = SCR_PlayerController.Cast(request.GetPlayerController()); + ticket.Request = request; ticket.Data = data; ticket.Actor = actor; + m_SpawnTickets.Insert(ticket); + m_Pending.Insert(id); + m_AuthorizedPositions.Set(id, data.GetPosition()); + return true; + } + void ERR_TestClearAdmission(int playerId) { CancelAdmission(playerId, ERR_ObserverReason.NONE); } + bool ERR_TestDelayedLossPreservesAdmission(int playerId, SCR_PlayerController controller) + { + ObserveAfterLoss(playerId, m_Identities.Get(playerId), controller); + return m_Pending.Contains(playerId) && m_AuthorizedPositions.Contains(playerId); + } + bool ERR_TestHasAdmission(int playerId) + { + if (m_Pending.Contains(playerId) || m_AuthorizedPositions.Contains(playerId)) return true; + foreach (ERR_SpawnTicket ticket : m_SpawnTickets) + if (ticket.ConnectionId == playerId) return true; + return false; + } +} + +class ERR_NativeLifecycleProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Player; + protected IEntity m_Blocker; + protected IEntity m_Preload; + protected IEntity m_Cancelled; + protected IEntity m_Drift; + protected SCR_PlayerController m_Controller; + protected SCR_FreeSpawnRequestComponent m_Request; + protected SCR_FreeSpawnHandlerComponent m_Handler; + protected ERR_SpawnLogic m_Logic; + protected ref SCR_FreeSpawnData m_Data; + protected ref ERR_SpawnPlacement m_Placement = new ERR_SpawnPlacement(); + protected vector m_Position; + protected int m_Step; + protected float m_Wait; + void ERR_NativeLifecycleProbe(ERR_GameMode mode, IEntity player) { m_Mode = mode; m_Player = player; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: lifecycle " + detail); return true; } + Print("ERR SMOKE FAIL: lifecycle " + detail, LogLevel.ERROR); + return false; + } + protected IEntity Actor(vector position) + { + IEntity actor = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, position); + if (actor) + { + m_Mode.Own(actor); + DamageManagerComponent.Cast(actor.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + } + return actor; + } + protected bool Rules() + { + UUID account = "00e77300-0000-0000-0000-000000000001"; + UUID other = "00e77300-0000-0000-0000-000000000002"; + for (int phase = ERR_Phase.PREPARING; phase <= ERR_Phase.DEFEAT; phase++) + { + bool permitted = phase >= ERR_Phase.PRISON && phase <= ERR_Phase.RADIO_DEFENCE; + if (!Check(ERR_SpawnFinalizationRules.Allows(phase, true, false, account, account, true, true, true) == permitted, "finalization phase matrix " + phase.ToString())) return false; + } + if (!Check(!ERR_SpawnFinalizationRules.Allows(ERR_Phase.PRISON, true, true, account, account, true, true, true), "spent life cannot finalize a delayed admission")) return false; + if (!Check(!ERR_SpawnFinalizationRules.Allows(ERR_Phase.PRISON, false, false, account, account, true, true, true), "disconnected account cannot finalize")) return false; + if (!Check(!ERR_SpawnFinalizationRules.Allows(ERR_Phase.PRISON, true, false, account, other, true, true, true), "recycled connection identity cannot inherit a pending admission")) return false; + if (!Check(!ERR_SpawnFinalizationRules.Allows(ERR_Phase.PRISON, true, false, account, account, false, true, true), "changed controller rejects stale admission")) return false; + if (!Check(!ERR_SpawnFinalizationRules.Allows(ERR_Phase.PRISON, true, false, account, account, true, false, true), "changed request rejects stale admission")) return false; + if (!Check(!ERR_SpawnFinalizationRules.Allows(ERR_Phase.PRISON, true, false, account, account, true, true, false), "existing controlled actor cannot be replaced by delayed admission")) return false; + return Check(ERR_SpawnFinalizationRules.PositionClose("0.3 0.2 0", "0 0 0") && !ERR_SpawnFinalizationRules.PositionClose("0 2 0", "0 0 0") && !ERR_SpawnFinalizationRules.PositionClose("0.7 0 0", "0 0 0"), "native settling tolerance rejects horizontal and vertical preload drift"); + } + protected bool Finalization() + { + m_Controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + m_Request = SCR_FreeSpawnRequestComponent.Cast(m_Controller.FindComponent(SCR_FreeSpawnRequestComponent)); + if (m_Request) m_Handler = SCR_FreeSpawnHandlerComponent.Cast(m_Request.GetHandlerComponent()); + SCR_RespawnSystemComponent system = SCR_RespawnSystemComponent.GetInstance(); + m_Logic = ERR_SpawnLogic.Cast(system.GetSpawnLogic()); + if (!Check(m_Request && m_Handler && m_Logic, "real local free-spawn request, handler and admission logic exist")) return false; + int id = m_Controller.GetPlayerId(); + ERR_PlayerLife life = m_Mode.Players().Get(id); + if (!Check(life && life.UsedLife && life.Actor == m_Player && m_Controller.GetControlledEntity() == m_Player && !m_Logic.ERR_TestHasAdmission(id), "real prisoner has a spent life and no pending admission")) return false; + m_Preload = Actor(m_Position); + m_Data = new SCR_FreeSpawnData(m_Mode.Factions().PrisonerPrefab, m_Position); + if (!Check(m_Preload && m_Logic.ERR_TestPendingActor(m_Request, m_Data, m_Preload), "isolated unpossessed actor receives an explicit test-owned admission ticket")) return false; + SCR_FreeSpawnData different = new SCR_FreeSpawnData(m_Mode.Factions().PrisonerPrefab, m_Position); + if (!Check(m_Handler.FinalizeRequest_S(m_Request, different, m_Preload) == SCR_ESpawnResult.SPAWN_NOT_ALLOWED && ERR_Actors.Alive(m_Preload), "different request payload cannot claim or delete the owned actor")) return false; + return Check(m_Handler.FinalizeRequest_S(m_Request, m_Data, m_Preload) == SCR_ESpawnResult.SPAWN_NOT_ALLOWED, "native finalization refuses the spent-life preload"); + } + int Tick(float now) + { + if (now < m_Wait) return 0; + if (m_Step == 0) + { + if (!Rules()) return -1; + map reservations = new map(); + vector first, second; + if (!Check(m_Placement.Prison(m_Mode.PrisonPosition(), reservations, first), "native prison has a clear candidate")) return -1; + reservations.Set(1, first); + if (!Check(m_Placement.Prison(m_Mode.PrisonPosition(), reservations, second) && vector.DistanceXZ(first, second) >= 1.2, "IDs one and thirteen receive distinct reserved slots")) return -1; + reservations.Set(13, second); + vector position; + int count = 2; + while (count < 16 && m_Placement.Prison(m_Mode.PrisonPosition(), reservations, position)) + { + reservations.Set(100 + count, position); + count++; + } + PrintFormat("ERR SPAWN CAPACITY: remaining clear prison positions=%1 plus current controlled prisoner", count); + if (!Check(count >= 11 && !m_Placement.Prison(m_Mode.PrisonPosition(), reservations, position), "occupied and pending slots exhaust a bounded grid without overlap or outside fallback")) return -1; + vector prison = m_Mode.PrisonPosition(); + foreach (int id, vector reserved : reservations) + if (!Check(Math.AbsFloat(reserved[0] - prison[0]) <= 4.6 && Math.AbsFloat(reserved[2] - prison[2]) <= 4.6, "candidate remains inside authored prison")) return -1; + reservations.Remove(1); + if (!Check(m_Placement.Prison(m_Mode.PrisonPosition(), reservations, position) && vector.DistanceXZ(position, first) < 0.1, "released pending reservation becomes available again")) return -1; + m_Position = first; + m_Blocker = Actor(first); + if (!Check(m_Blocker != null, "uncontrolled physical body created at a previously clear slot")) return -1; + m_Step = 1; m_Wait = now + 1000; + return 0; + } + if (m_Step == 1) + { + map empty = new map(); + if (!Check(!m_Placement.Clear(m_Position, empty), "native character body blocks a slot even without a connected player ID")) return -1; + ERR_Actors.DeleteSpawned(m_Blocker); + m_Step = 2; m_Wait = now + 1000; + return 0; + } + if (m_Step == 2) + { + if (!Finalization()) return -1; + m_Step = 3; m_Wait = now + 1000; + return 0; + } + if (m_Step == 3) + { + int id = m_Controller.GetPlayerId(); + ERR_PlayerLife life = m_Mode.Players().Get(id); + if (!Check(!m_Preload, "refused native preload was deleted after lifecycle processing")) return -1; + m_Logic.ERR_TestClearAdmission(id); + if (!Check(!m_Logic.ERR_TestHasAdmission(id) && life.UsedLife && life.Actor == m_Player && m_Controller.GetControlledEntity() == m_Player, "refusal releases reservations without changing life or controlled actor")) return -1; + if (!Check(m_Handler.FinalizeRequest_S(m_Request, m_Data, m_Player) == SCR_ESpawnResult.SPAWN_NOT_ALLOWED && ERR_Actors.Alive(m_Player), "unticketed repeated callback cannot delete or replace the controlled prisoner")) return -1; + m_Cancelled = Actor(m_Position); + if (!Check(m_Cancelled && m_Logic.ERR_TestPendingActor(m_Request, m_Data, m_Cancelled), "second isolated pending actor prepared for cancellation")) return -1; + if (!Check(m_Logic.ERR_TestDelayedLossPreservesAdmission(id, m_Controller) && m_Controller.ERR_ObserverState() == ERR_ObserverReason.NONE, "delayed loss callback preserves reacquired living controller and admission metadata")) return -1; + m_Logic.ERR_TestClearAdmission(id); + m_Step = 4; m_Wait = now + 1000; + return 0; + } + if (m_Step == 4) + { + int id = m_Controller.GetPlayerId(); + ERR_PlayerLife life = m_Mode.Players().Get(id); + if (!Check(!m_Cancelled && !m_Logic.ERR_TestHasAdmission(id) && life.UsedLife && life.Actor == m_Player, "pending-request cancellation cleans its actor and never grants another life")) return -1; + m_Drift = Actor(m_Position); + if (!Check(m_Drift != null, "physical actor created for vertical drift check")) return -1; + vector transform[4]; m_Drift.GetWorldTransform(transform); + transform[3] = m_Position + "0 10 0"; + ChimeraCharacter.Cast(m_Drift).Teleport(transform); + m_Step = 5; m_Wait = now + 750; + return 0; + } + if (m_Step == 5) + { + if (!Check(!ERR_SpawnFinalizationRules.PositionClose(m_Drift.GetOrigin(), m_Position), "actual vertically displaced character fails finalization position tolerance after native movement")) return -1; + ERR_Actors.DeleteSpawned(m_Drift); + m_Step = 6; + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c new file mode 100644 index 0000000..20ae4a7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c @@ -0,0 +1,129 @@ +#ifdef WORKBENCH +[BaseContainerProps(category: "Respawn")] +modded class ERR_SpawnLogic +{ + ERR_LocalAdmission ERR_LocalProbeHelper() + { + if (!ERR_NativeLocalAdmissionProbe.Enabled()) return null; + return m_LocalAdmission; + } + bool ERR_LocalProbeIdle(int connection) + { + return ERR_NativeLocalAdmissionProbe.Enabled() && !m_Attempts.Contains(connection) && !m_Retries.Contains(connection) && !m_Pending.Contains(connection) && !m_AuthorizedPositions.Contains(connection) && m_SpawnTickets.IsEmpty(); + } + bool ERR_LocalProbeClosed() + { + return ERR_NativeLocalAdmissionProbe.Enabled() && m_AdmissionsStopped && m_LocalAdmissionFailed; + } + bool ERR_LocalProbeRefuseController(int connection) + { + if (!ERR_NativeLocalAdmissionProbe.Enabled() || !m_LocalAdmission || !m_LocalAdmission.OfflineMode() || !m_LocalAdmission.Selected() || !m_Identities.Contains(connection)) return false; + // Deliberately invalid METHOD ARGUMENT, not a fabricated native disconnect or + // replacement controller. The real controller and backend remain untouched. + UUID rejected = m_LocalAdmission.Resolve(ERR_GameMode.Get(), connection, null, m_Identities.Get(connection)); + if (!rejected.IsNull()) return false; + return !CheckLocalAdmissionContext(); + } +} + +class ERR_NativeLocalAdmissionProbe +{ + protected ERR_GameMode m_Mode; + protected SCR_PlayerController m_Controller; + protected IEntity m_Actor; + protected ERR_SpawnLogic m_Logic; + protected ERR_LocalAdmission m_Helper; + protected ERR_PlayerLife m_Life; + protected UUID m_Key; + protected int m_Connection; + protected int m_Participants; + protected int m_Changes; + protected int m_Step; + protected float m_Deadline; + protected float m_Wait; + protected bool m_Listening; + protected bool m_Stopped; + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errBaseSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "local-admission"; + } + void ERR_NativeLocalAdmissionProbe(ERR_GameMode mode) + { + m_Mode = mode; m_Deadline = GetGame().GetWorld().GetWorldTime() + 15000; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: local admission " + detail); return true; } + Print("ERR SMOKE FAIL: local admission " + detail, LogLevel.ERROR); Stop(); return false; + } + protected void Changed(int connection) { m_Changes++; } + protected int Participants() + { + array lives = {}; m_Mode.Players().Participants(lives); return lives.Count(); + } + protected bool Unchanged() + { + return m_Controller && m_Actor && m_Life && m_Mode.Players().Get(m_Connection) == m_Life && m_Mode.Players().CurrentActor(m_Actor) == m_Life && m_Life.AccountId == m_Key && m_Life.Connected && m_Life.UsedLife && m_Life.Actor == m_Actor && m_Controller.GetControlledEntity() == m_Actor && GetGame().GetPlayerManager().GetPlayerController(m_Connection) == m_Controller && Participants() == m_Participants && !m_Mode.Players().CanEnter(m_Connection, ERR_Phase.PRISON) && m_Logic.ERR_LocalProbeIdle(m_Connection); + } + protected bool DisposableHelpers() + { + ERR_LocalAdmission disconnected = new ERR_LocalAdmission(m_Mode); + if (!Check(disconnected.Resolve(m_Mode, m_Connection, m_Controller, m_Key) == m_Key && disconnected.Validate() && !disconnected.LocalKey(), "disposable helper accepts actual sole native controller using existing round key")) return false; + // Opaque alternative input only: no backend read/write, roster bind or login. + UUID alternative = "00e77500-0000-0000-0000-000000000001"; + if (!Check(disconnected.Resolve(m_Mode, m_Connection, m_Controller, alternative) == m_Key && disconnected.Resolve(m_Mode, m_Connection, m_Controller, UUID.NULL_UUID) == m_Key, "late opaque identity input and null input retain the selected key")) return false; + if (!Check(!disconnected.Disconnected(m_Connection + 1) && disconnected.Validate(), "unrelated disconnect argument does not close helper")) return false; + if (!Check(disconnected.Disconnected(m_Connection) && !disconnected.Validate() && disconnected.Resolve(m_Mode, m_Connection, m_Controller, m_Key).IsNull(), "matching disconnect argument latches disposable helper closed")) return false; + disconnected.Stop(); + if (!Check(!disconnected.Validate() && disconnected.Resolve(m_Mode, m_Connection, m_Controller, m_Key).IsNull(), "stopped disposable helper cannot reopen with the genuine controller")) return false; + ERR_LocalAdmission invalid = new ERR_LocalAdmission(m_Mode); + if (!Check(invalid.Resolve(m_Mode, m_Connection, null, m_Key).IsNull() && invalid.Resolve(m_Mode, m_Connection, m_Controller, m_Key).IsNull() && !invalid.Selected(), "invalid controller argument before selection fails closed without selecting another life")) return false; + invalid.Stop(); + Print("ERR LOCAL ADMISSION LIMIT: disposable method-argument fault injection; no native disconnect or replacement occurred; Listen/Dedicated pass-through remains source-policy coverage, not multiplayer evidence"); + return true; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_Listening && m_Mode) m_Mode.Players().OnChanged().Remove(Changed); + m_Listening = false; + } + int Tick(float now) + { + if (m_Stopped) return -1; + if (!Enabled() || now > m_Deadline) { Check(false, "explicit enabled fixture completes within fifteen seconds"); return -1; } + if (now < m_Wait) return 0; + if (m_Step == 0) + { + m_Controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + SCR_RespawnSystemComponent respawn = SCR_RespawnSystemComponent.GetInstance(); + if (respawn) m_Logic = ERR_SpawnLogic.Cast(respawn.GetSpawnLogic()); + if (!Check(RplSession.Mode() == RplMode.None && m_Controller && m_Logic && GetGame().GetPlayerManager().GetPlayerCount() == 1, "actual standalone session has one native local controller and successor spawn logic")) return -1; + m_Connection = m_Controller.GetPlayerId(); m_Actor = m_Controller.GetControlledEntity(); + m_Life = m_Mode.Players().Get(m_Connection); m_Helper = m_Logic.ERR_LocalProbeHelper(); + if (!Check(m_Actor && m_Life && m_Helper && m_Helper.OfflineMode() && m_Helper.Selected() && m_Helper.Validate(), "real native admission already created the local controlled prisoner and selected helper")) return -1; + m_Key = m_Life.AccountId; m_Participants = Participants(); + if (!Check(!m_Key.IsNull() && Unchanged(), "existing prisoner has one spent life and no pending spawn metadata")) return -1; + if (!DisposableHelpers()) return -1; + m_Mode.Players().OnChanged().Insert(Changed); m_Listening = true; + Print("ERR LOCAL ADMISSION REPLAY: invoking existing callback twice for already admitted real controller; this does not represent new native authentication/audits"); + m_Logic.OnPlayerAuditSuccess_S(m_Connection); + m_Logic.OnPlayerAuditSuccess_S(m_Connection); + if (!Check(Unchanged() && m_Changes == 0, "replayed callbacks preserve exact roster object, used life, key, actor and no roster-change event")) return -1; + m_Step = 1; m_Wait = now + 1500; return 0; + } + if (m_Step == 1) + { + if (!Check(Unchanged() && m_Changes == 0 && m_Helper.Validate(), "native update interval after replay creates no replacement actor, life or pending request")) return -1; + if (!Check(m_Logic.ERR_LocalProbeRefuseController(m_Connection), "live helper rejects invalid controller argument through production context guard")) return -1; + // The guard has synchronously entered the real terminal transition and + // stopped services. No second callback, login, UUID or actor is introduced. + if (!Check(m_Mode.Phase() == ERR_Phase.DEFEAT && m_Mode.EndReason().Contains("offline player context changed") && m_Logic.ERR_LocalProbeClosed() && !m_Helper.Validate() && Unchanged(), "production failure closes admission and ends round while preserving original used life and controlled actor")) return -1; + Stop(); m_Step = 2; return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c new file mode 100644 index 0000000..373b6b8 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c @@ -0,0 +1,225 @@ +#ifdef WORKBENCH +// Opt-in native medical-effects fixture. Treatment enters at the real item's +// completion boundary; manual user actions/animations and remote clients are not +// simulated. Only fixture-owned characters are injured or deleted. +class ERR_NativeMedicalProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Casualty; + protected IEntity m_Healer; + protected IEntity m_Dressing; + protected IEntity m_Saline; + protected IEntity m_SpareSaline; + protected SCR_CharacterDamageManagerComponent m_Damage; + protected CharacterControllerComponent m_Controller; + protected SCR_CharacterBloodHitZone m_Blood; + protected SCR_SalineStorageComponent m_SalineStorage; + protected SCR_InventoryStorageManagerComponent m_Inventory; + protected ref array m_Owned = {}; + protected int m_Step; + protected int m_Result; + protected bool m_Stopped; + protected bool m_Recovered; + protected float m_Wait; + protected float m_Deadline; + protected float m_InfusionStarted; + protected float m_SeedBlood; + protected float m_PreInfusionBlood; + protected float m_RegenSpeed; + protected float m_NextDiagnostic; + + void ERR_NativeMedicalProbe(ERR_GameMode mode) { m_Mode = mode; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: medical " + detail); return true; } + Print("ERR SMOKE FAIL: medical " + detail, LogLevel.ERROR); + Trace("failure"); + m_Result = -1; + Stop(); + return false; + } + protected IEntity Spawn(ResourceName prefab, vector position) + { + IEntity entity = ERR_Actors.Spawn(prefab, ERR_Actors.Ground(position)); + if (entity) { m_Owned.Insert(entity); m_Mode.Own(entity); } + return entity; + } + protected int SalineEffects() + { + if (!m_Damage) return 0; + array effects = {}; + m_Damage.GetPersistentEffects(effects); + int count; + foreach (SCR_PersistentDamageEffect effect : effects) + if (SCR_SalineDamageEffect.Cast(effect)) count++; + return count; + } + protected int AttachedBags() + { + if (!m_SalineStorage) return 0; + array items = {}; + m_SalineStorage.GetAll(items); + return items.Count(); + } + protected void Trace(string stage) + { + if (!m_Blood || !m_Controller || !m_Damage) return; + PrintFormat("ERR MEDICAL STATE: stage=%1 blood=%2 bloodState=%3 unconscious=%4 bleeding=%5 salineEffects=%6 attachedBags=%7", stage, m_Blood.GetHealth(), m_Blood.GetDamageState(), m_Controller.IsUnconscious(), m_Damage.IsBleeding(), SalineEffects(), AttachedBags()); + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + // Items first, then characters; native scheduled saline deletion is null-safe. + for (int i = m_Owned.Count() - 1; i >= 0; i--) ERR_Actors.DeleteSpawned(m_Owned[i]); + m_Owned.Clear(); + m_Casualty = null; + m_Healer = null; + m_Dressing = null; + m_Saline = null; + m_SpareSaline = null; + m_Damage = null; + m_Controller = null; + m_Blood = null; + m_SalineStorage = null; + m_Inventory = null; + } + int Tick(float now) + { + if (m_Result != 0) return m_Result; + if (m_Stopped) return -1; + if (!Replication.IsServer() || !m_Mode || !m_Mode.Active()) + { + Check(false, "fixture requires the active authority"); + return -1; + } + if (m_Deadline > 0 && now > m_Deadline) + { + Check(false, "native medical state timed out at step " + m_Step.ToString()); + return -1; + } + if (now < m_Wait) return 0; + if (m_Step == 0) + { + // Keep fixture actors separate from the real prisoner spawn. + vector anchor = m_Mode.PrisonPosition() + "100 0 100"; + m_Casualty = Spawn(m_Mode.Factions().PrisonerPrefab, anchor); + m_Healer = Spawn(m_Mode.Factions().PrisonerPrefab, anchor + "3 0 0"); + m_Dressing = Spawn("{C3F1FA1E2EC2B345}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et", anchor + "4 0 0"); + m_Saline = Spawn("{527D7C5D2E476BDC}Prefabs/Items/Medicine/SalineBag_01/SalineBag_USSR_01.et", anchor + "5 0 0"); + m_SpareSaline = Spawn("{527D7C5D2E476BDC}Prefabs/Items/Medicine/SalineBag_01/SalineBag_USSR_01.et", anchor + "6 0 0"); + if (!Check(m_Casualty && m_Healer && m_Dressing && m_Saline && m_SpareSaline, "two isolated characters and finite stock-type medicine spawned")) return -1; + if (!Check(!ERR_Actors.Player(m_Casualty) && !ERR_Actors.Player(m_Healer), "neither medical actor is a real player")) return -1; + m_Deadline = now + 120000; + m_Wait = now + 1000; + m_Step = 1; + return 0; + } + if (!ERR_Actors.Alive(m_Casualty) || !ERR_Actors.Alive(m_Healer)) + { + Check(false, "owned casualty or healer died unexpectedly"); + return -1; + } + if (m_Step == 1) + { + m_Damage = SCR_CharacterDamageManagerComponent.Cast(m_Casualty.FindComponent(SCR_CharacterDamageManagerComponent)); + m_Controller = CharacterControllerComponent.Cast(m_Casualty.FindComponent(CharacterControllerComponent)); + m_SalineStorage = SCR_SalineStorageComponent.Cast(m_Casualty.FindComponent(SCR_SalineStorageComponent)); + m_Inventory = SCR_InventoryStorageManagerComponent.Cast(m_Healer.FindComponent(SCR_InventoryStorageManagerComponent)); + if (!Check(m_Damage && m_Controller && m_SalineStorage && m_Inventory, "native health, controller and medical storage components available")) return -1; + m_Blood = m_Damage.GetBloodHitZone(); + if (!Check(m_Blood && !m_Controller.IsUnconscious() && !m_Damage.IsBleeding(), "casualty begins healthy and conscious")) return -1; + if (!Check(m_Inventory.TryInsertItem(m_Dressing) && m_Inventory.TryInsertItem(m_Saline) && m_Inventory.TryInsertItem(m_SpareSaline), "finite medical items enter healer inventory")) return -1; + SCR_ConsumableItemComponent dressing = SCR_ConsumableItemComponent.Cast(m_Dressing.FindComponent(SCR_ConsumableItemComponent)); + SCR_ConsumableItemComponent saline = SCR_ConsumableItemComponent.Cast(m_Saline.FindComponent(SCR_ConsumableItemComponent)); + if (!Check(dressing && saline, "stock items contain actual native consumable components")) return -1; + SCR_ConsumableBandage bandageEffect = SCR_ConsumableBandage.Cast(dressing.GetConsumableEffect()); + SCR_ConsumableSalineBag salineEffect = SCR_ConsumableSalineBag.Cast(saline.GetConsumableEffect()); + SCR_EConsumableFailReason reason; + if (!Check(bandageEffect && salineEffect && !bandageEffect.CanApplyEffect(m_Casualty, m_Healer, reason) && !salineEffect.CanApplyEffect(m_Casualty, m_Healer, reason), "healthy casualty rejects bandage and saline")) return -1; + array zones = {}; + m_Damage.GetHitZonesOfGroupFromOwner(ECharacterHitZoneGroup.LEFTARM, zones); + SCR_CharacterHitZone wound; + foreach (HitZone zone : zones) + { + SCR_CharacterHitZone candidate = SCR_CharacterHitZone.Cast(zone); + if (candidate && candidate.GetMaxBleedingRate() > 0) { wound = candidate; break; } + } + if (!Check(wound != null, "native left-arm hit zone can bleed")) return -1; + wound.SetHealthScaled(0.5); + m_Damage.AddBleedingEffectOnHitZone(wound); + float threshold = m_Blood.GetDamageStateThreshold(ECharacterBloodState.UNCONSCIOUS) * m_Blood.GetMaxHealth(); + float destroyed = m_Blood.GetDamageStateThreshold(ECharacterBloodState.DESTROYED) * m_Blood.GetMaxHealth(); + if (!Check(threshold - destroyed > 200, "native blood thresholds permit a survivable recovery fixture")) return -1; + // Initial casualty condition only. All subsequent blood changes are native effects. + m_Blood.SetHealth(threshold - 100); + m_SeedBlood = m_Blood.GetHealth(); + m_Wait = now + 5000; + m_Step = 2; + return 0; + } + if (m_Step == 2) + { + Trace("untreated blood loss"); + if (!Check(m_Damage.IsBleeding() && m_Blood.GetHealth() < m_SeedBlood && m_Controller.IsUnconscious(), "native bleeding reduces real blood and causes unconsciousness")) return -1; + SCR_ConsumableItemComponent dressing = SCR_ConsumableItemComponent.Cast(m_Dressing.FindComponent(SCR_ConsumableItemComponent)); + SCR_ConsumableBandage effect = SCR_ConsumableBandage.Cast(dressing.GetConsumableEffect()); + SCR_EConsumableFailReason reason; + if (!Check(effect.CanApplyEffectToHZ(m_Casualty, m_Healer, ECharacterHitZoneGroup.LEFTARM, reason), "real dressing accepts bleeding arm")) return -1; + ItemUseParameters parameters = effect.GetAnimationParameters(m_Dressing, m_Casualty, ECharacterHitZoneGroup.LEFTARM); + if (!Check(parameters && effect.GetDeleteOnUse(), "native dressing parameters and finite consumption policy are valid")) return -1; + dressing.ApplyItemEffect(m_Casualty, m_Healer, parameters, m_Dressing, effect.GetDeleteOnUse()); + m_Wait = now + 500; + m_Step = 3; + return 0; + } + if (m_Step == 3) + { + if (!Check(!m_Dressing && !m_Damage.IsBleeding() && m_Damage.GetGroupDamageOverTime(ECharacterHitZoneGroup.LEFTARM, EDamageType.BLEEDING) == 0, "dressing is consumed and native bleeding is stopped")) return -1; + if (!Check(m_Controller.IsUnconscious(), "bandage alone has not fabricated blood recovery")) return -1; + SCR_ConsumableItemComponent saline = SCR_ConsumableItemComponent.Cast(m_Saline.FindComponent(SCR_ConsumableItemComponent)); + SCR_ConsumableSalineBag effect = SCR_ConsumableSalineBag.Cast(saline.GetConsumableEffect()); + SCR_EConsumableFailReason reason; + if (!Check(effect && effect.CanApplyEffect(m_Casualty, m_Healer, reason) && !effect.GetDeleteOnUse(), "native saline accepts real blood loss and retains bag for infusion")) return -1; + ItemUseParameters parameters = effect.GetAnimationParameters(m_Saline, m_Casualty); + if (!Check(parameters != null, "native saline item parameters available")) return -1; + m_PreInfusionBlood = m_Blood.GetHealth(); + m_RegenSpeed = effect.GetItemRegenSpeed(); + saline.ApplyItemEffect(m_Casualty, m_Healer, parameters, m_Saline, effect.GetDeleteOnUse()); + m_InfusionStarted = now; + m_Wait = now + 1000; + m_Step = 4; + return 0; + } + if (m_Step == 4) + { + array attached = {}; + m_SalineStorage.GetAll(attached); + if (!Check(m_Saline && attached.Count() == 1 && attached.Contains(m_Saline) && m_Damage.GetGroupSalineBagged(ECharacterHitZoneGroup.RIGHTARM) && SalineEffects() == 1, "real saline bag occupies native treatment slot with one healing effect")) return -1; + SCR_ConsumableItemComponent spare = SCR_ConsumableItemComponent.Cast(m_SpareSaline.FindComponent(SCR_ConsumableItemComponent)); + SCR_EConsumableFailReason reason; + if (!Check(!spare.GetConsumableEffect().CanApplyEffect(m_Casualty, m_Healer, reason) && reason == SCR_EConsumableFailReason.ALREADY_APPLIED && m_SpareSaline, "occupied treatment slot rejects another bag without consuming spare")) return -1; + m_NextDiagnostic = now; + m_Step = 5; + } + if (m_Step == 5) + { + if (now >= m_NextDiagnostic) { Trace("native infusion"); m_NextDiagnostic = now + 10000; } + if (!m_Controller.IsUnconscious()) m_Recovered = true; + if (m_Saline || AttachedBags() != 0 || SalineEffects() != 0 || m_Damage.GetGroupSalineBagged(ECharacterHitZoneGroup.RIGHTARM)) return 0; + float requiredGain = Math.Min(m_RegenSpeed * 60, (m_Blood.GetMaxHealth() - m_PreInfusionBlood) * 0.8); + if (!Check(m_RegenSpeed > 0 && m_Blood.GetHealth() - m_PreInfusionBlood >= requiredGain, "native infusion restores substantial blood without setting health again")) return -1; + if (!Check(m_Recovered && !m_Controller.IsUnconscious() && ERR_Actors.CanFight(m_Casualty), "casualty regains consciousness through native health recovery")) return -1; + if (!Check(now - m_InfusionStarted >= 85000 && !m_Saline && AttachedBags() == 0 && SalineEffects() == 0, "finite saline expires after native duration and releases treatment state")) return -1; + if (!Check(m_SpareSaline != null, "unused spare survives the completed infusion")) return -1; + InventoryItemComponent spareItem = InventoryItemComponent.Cast(m_SpareSaline.FindComponent(InventoryItemComponent)); + if (!Check(spareItem && spareItem.GetParentSlot(), "rejected spare bag remains a physical inventory item")) return -1; + m_Result = 1; + Stop(); + Print("ERR MEDICAL RESULT: native blood loss, finite treatment and recovery; not manual action or multiplayer acceptance"); + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c new file mode 100644 index 0000000..21efa9a --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c @@ -0,0 +1,183 @@ +#ifdef WORKBENCH +// Explicit disposable-world fixture: destroy all four authored radio documents, +// then move the real participant to the station. No replacement clues or actors +// are used to grant discovery; the normal site tick must identify the station. +class ERR_NativeObjectiveLossProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Player; + protected ERR_SiteRuntime m_Radio; + protected ref array m_Documents = {}; + protected IEntity m_NonParticipant; + protected IEntity m_Blocker; + protected bool m_Partial; + protected bool m_SettingSaved; + protected int m_RevealChance; + protected int m_Step; + protected int m_Identifications; + protected float m_Wait; + protected float m_Deadline; + void ERR_NativeObjectiveLossProbe(ERR_GameMode mode, IEntity player, bool partial) + { + m_Mode = mode; m_Player = player; m_Partial = partial; + m_Mode.OnLocationDiscovered().Insert(Discovered); + } + protected void Discovered(ERR_LocationComponent location, int previous, int current) + { + if (m_Radio && location == m_Radio.Location && current == 2) m_Identifications++; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: objective-loss " + detail); return true; } + Print("ERR SMOKE FAIL: objective-loss " + detail, LogLevel.ERROR); + Stop(); + return false; + } + protected void Move(vector position) + { + vector transform[4]; + m_Player.GetWorldTransform(transform); + transform[3] = ERR_Actors.Ground(position); + ChimeraCharacter.Cast(m_Player).Teleport(transform); + } + protected void CollectDocuments(out array documents) + { + documents.Clear(); + array locations = {}; + m_Mode.Locations(locations); + array stock = {}; + foreach (ERR_LocationComponent location : locations) + { + ERR_SiteRuntime site = m_Mode.Sites().Find(location.Id()); + if (!site || !site.Container) continue; + ERR_Inventory.AppendUnique(InventoryStorageManagerComponent.Cast(site.Container.FindComponent(InventoryStorageManagerComponent)), stock); + } + ERR_Inventory.AppendUnique(InventoryStorageManagerComponent.Cast(m_Player.FindComponent(InventoryStorageManagerComponent)), stock); + foreach (IEntity item : stock) + { + ERR_DocumentComponent document = ERR_DocumentComponent.Cast(item.FindComponent(ERR_DocumentComponent)); + if (document && document.TargetId() == m_Radio.Location.Id()) documents.Insert(item); + } + } + void Stop() + { + if (m_Mode) + { + m_Mode.OnLocationDiscovered().Remove(Discovered); + if (m_SettingSaved) m_Mode.Settings().Set("intelRevealChancePercent", m_RevealChance); + } + m_SettingSaved = false; + ERR_Actors.DeleteSpawned(m_NonParticipant); + ERR_Actors.DeleteSpawned(m_Blocker); + } + int Tick(float now) + { + if (m_Deadline == 0) m_Deadline = now + 60000; + if (now > m_Deadline || !m_Mode.Active() || !ERR_Actors.CanFight(m_Player)) + { + Check(false, "fixture lost its active conscious participant or exceeded its deadline"); + return -1; + } + if (now < m_Wait) return 0; + if (m_Step == 0) + { + m_Radio = m_Mode.Sites().Find("everon-radio-1"); + if (!Check(m_Radio && m_Radio.Location && m_Radio.Location.Knowledge() == 0 && m_Radio.Definition.DiscoverRadius == 8, "authored station is initially unknown with bounded eight-metre discovery")) return -1; + CollectDocuments(m_Documents); + if (!Check(m_Documents.Count() == 4, "four distinct physical documents exist before deliberate loss")) return -1; + if (!Check(m_Mode.UnlockPrison(m_Player) && m_Mode.Phase() == ERR_Phase.RADIO_SEARCH, "real prisoner enters radio search through ordinary mission interface")) return -1; + if (m_Partial) + { + m_RevealChance = m_Mode.Settings().Get("intelRevealChancePercent"); + m_SettingSaved = true; + if (!Check(m_Mode.Settings().Set("intelRevealChancePercent", 0), "isolated first document produces only partial knowledge")) return -1; + ERR_SiteRuntime cache = m_Mode.Sites().Find("everon-supply-1"); + Move(cache.Container.GetOrigin() + "0 0 2"); + InventoryStorageManagerComponent source = InventoryStorageManagerComponent.Cast(cache.Container.FindComponent(InventoryStorageManagerComponent)); + SCR_InventoryStorageManagerComponent target = SCR_InventoryStorageManagerComponent.Cast(m_Player.FindComponent(SCR_InventoryStorageManagerComponent)); + array stock = {}; + ERR_Inventory.Items(source, stock); + IEntity selected; + foreach (IEntity item : stock) if (m_Documents.Contains(item)) { selected = item; break; } + BaseInventoryStorageComponent destination; + if (selected && target) destination = target.FindStorageForItem(selected); + if (!Check(destination && source.TryMoveItemToStorage(selected, destination), "one real document transfer accepted before the remaining clues are lost")) return -1; + m_Wait = now + 8000; + } + m_Step = 1; + return 0; + } + if (m_Step == 1) + { + int expected; + if (m_Partial) expected = 1; + if (!Check(m_Radio.Location.Knowledge() == expected, "ordinary clue processing leaves the requested unknown or partial station state")) return -1; + foreach (IEntity document : m_Documents) if (document) SCR_EntityHelper.DeleteEntityAndChildren(document); + m_Step = 2; + m_Wait = now + 1500; + return 0; + } + if (m_Step == 2) + { + foreach (IEntity removed : m_Documents) + if (!Check(!removed, "each original physical document is deleted")) return -1; + array remaining = {}; + CollectDocuments(remaining); + if (!Check(remaining.IsEmpty() && m_Mode.Sites().Prepare() == ERR_PrepareResult.READY, "all targeted documents are absent and preparation does not replenish them")) return -1; + Move(m_Radio.Location.Position() + "0 0 20"); + m_NonParticipant = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, ERR_Actors.Ground(m_Radio.Location.Position() + "3 0 0")); + if (!Check(m_NonParticipant != null, "disposable unpossessed character created for authorization rejection")) return -1; + m_Mode.Own(m_NonParticipant); + if (!Check(!m_Mode.Sites().CanObserve(m_NonParticipant, m_Radio), "unpossessed character cannot identify the station")) return -1; + m_Step = 3; + m_Wait = now + 6000; + return 0; + } + if (m_Step == 3) + { + int expected; + if (m_Partial) expected = 1; + if (!Check(m_Radio.Location.Knowledge() == expected && !m_Mode.Sites().CanObserve(m_Player, m_Radio), "distant participant and nearby nonparticipant do not reveal the station")) return -1; + ERR_Actors.DeleteSpawned(m_NonParticipant); + m_Blocker = ERR_Actors.Spawn("{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et", ERR_Actors.Ground(m_Radio.Location.Position() + "-1.5 0 2")); + if (!Check(m_Blocker != null, "physical obstruction created before close approach")) return -1; + m_Mode.Own(m_Blocker); + Move(m_Radio.Location.Position() + "0 0 4"); + m_Step = 4; + m_Wait = now + 6000; + return 0; + } + if (m_Step == 4) + { + int expected; + if (m_Partial) expected = 1; + PrintFormat("ERR OBJECTIVE LOSS: player=%1 radio=%2 knowledge=%3 visible=%4", m_Player.GetOrigin(), m_Radio.Location.Position(), m_Radio.Location.Knowledge(), m_Mode.Sites().CanObserve(m_Player, m_Radio)); + if (!Check(m_Radio.Location.Knowledge() == expected && !m_Mode.Sites().CanObserve(m_Player, m_Radio), "a nearby station behind a wall remains unidentified")) return -1; + ERR_Actors.DeleteSpawned(m_Blocker); + m_Step = 5; + m_Wait = now + 6000; + return 0; + } + if (m_Step == 5) + { + TraceParam sight = new TraceParam(); + sight.Start = m_Player.GetOrigin() + "0 1.5 0"; + sight.End = m_Radio.Location.Position() + "0 1.3 0"; + sight.Flags = TraceFlags.WORLD | TraceFlags.ENTS; + sight.LayerMask = TRACE_LAYER_CAMERA; + sight.Exclude = m_Player; + float fraction = m_Mode.GetWorld().TraceMove(sight, null); + PrintFormat("ERR OBJECTIVE LOSS FINAL: player=%1 radio=%2 knowledge=%3 identifications=%4 visible=%5", m_Player.GetOrigin(), m_Radio.Location.Position(), m_Radio.Location.Knowledge(), m_Identifications, m_Mode.Sites().CanObserve(m_Player, m_Radio)); + PrintFormat("ERR OBJECTIVE LOSS SIGHT: fraction=%1 hit=%2 blockerRemaining=%3", fraction, sight.TraceEnt, m_Blocker); + if (!Check(m_Mode.Sites().CanObserve(m_Player, m_Radio) && m_Radio.Location.Knowledge() == 2 && m_Identifications == 1, "actual participant with clear close approach identifies the station once through normal discovery")) return -1; + array remaining = {}; + CollectDocuments(remaining); + if (!Check(remaining.IsEmpty(), "physical discovery creates no replacement documents")) return -1; + if (!Check(m_Mode.RadioDefence().CanBegin(m_Player, m_Radio.Location) && m_Mode.TuneRadio(m_Player, m_Radio.Location) && m_Mode.Phase() == ERR_Phase.RADIO_DEFENCE, "identified station permits ordinary authorized tuning after complete document loss")) return -1; + Stop(); + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c new file mode 100644 index 0000000..c32f072 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c @@ -0,0 +1,238 @@ +#ifdef WORKBENCH +// Exercise native task entries and detail text on the private test display. +// This is local presentation evidence, not remote task replication acceptance. +class ERR_NativeObjectiveProbe +{ + protected static bool s_Failed; + protected static Widget s_Entry; + protected static Widget s_Detail; + protected static SCR_Task s_Task; + protected static SCR_TaskListEntryUIComponent s_EntryHandler; + protected static SCR_TaskListEntryDescriptionUIComponent s_DetailHandler; + protected static ref SCR_TaskListEntryDescriptionUIComponent s_ClosedHandler; + protected static float s_CloseReadyAt; + protected static SCR_Task s_IsolatedTask; + protected static bool s_IsolatedDeleteRequested; + protected static SCR_Task s_PreservedMissionTask; + protected static ref SCR_TaskExecutor s_RestoreExecutor; + static void BeginRound() + { + Stop(); + s_Failed = false; + } + protected static bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: objective UI " + detail); return true; } + s_Failed = true; + Stop(); + Print("ERR SMOKE FAIL: objective UI " + detail, LogLevel.ERROR); + return false; + } + static void Stop() + { + if (s_EntryHandler && s_DetailHandler) s_EntryHandler.GetOnTaskVisualChanged().Remove(s_DetailHandler.InitDescription); + if (s_Detail) s_Detail.RemoveFromHierarchy(); + if (s_Entry) s_Entry.RemoveFromHierarchy(); + s_Detail = null; + s_Entry = null; + s_DetailHandler = null; + s_EntryHandler = null; + s_Task = null; + s_ClosedHandler = null; + s_CloseReadyAt = 0; + SCR_TaskSystem tasks = SCR_TaskSystem.GetInstance(); + if (tasks && s_IsolatedTask && !s_IsolatedDeleteRequested) tasks.DeleteTask(s_IsolatedTask); + if (tasks && s_PreservedMissionTask && s_RestoreExecutor && !s_PreservedMissionTask.IsTaskAssignedTo(s_RestoreExecutor)) + tasks.AssignTask(s_PreservedMissionTask, s_RestoreExecutor, true); + s_IsolatedTask = null; + s_IsolatedDeleteRequested = false; + s_PreservedMissionTask = null; + s_RestoreExecutor = null; + } + // Emit unchanged task state: exercise actual invoker subscriptions without + // changing assignment, visibility, ownership or mission progression. + protected static void EmitTaskCallbacks(SCR_Task task) + { + task.GetOnTaskAssigneeAdded().Invoke(task, null, 0); + task.GetOnTaskAssigneeRemoved().Invoke(task, null, 0); + task.GetOnTaskUIVisibilityChanged().Invoke(task, task.GetTaskUIVisibility()); + task.GetOnTaskVisibilityChanged().Invoke(task, task.GetTaskVisibility()); + task.GetOnTaskOwnershipChanged().Invoke(task, task.GetTaskOwnership()); + task.GetOnDisplayDataChanged().Invoke(); + } + static bool BeginCloseReopen(ERR_GameMode mode, float now) + { + if (!Observe(mode)) return false; + // Reinitialization is the vanilla route when the selected task changes. + s_DetailHandler.InitDescription(s_Task); + s_DetailHandler.ERR_ProbeWatch(); + EmitTaskCallbacks(s_Task); + if (!Check(s_DetailHandler.ERR_ProbeTaskCallbacks() == 5, "rebinding keeps one subscription to each native task event")) return false; + // Keep only the handler alive so a leaked event or queued overflow callback + // can be counted safely after actual widget destruction. No manual unbinding. + SCR_Task task = s_Task; + ref SCR_TaskListEntryDescriptionUIComponent closed = s_DetailHandler; + Stop(); + s_ClosedHandler = closed; + s_ClosedHandler.ERR_ProbeClosed(); + if (!Check(s_ClosedHandler.ERR_ProbeWasDetached() && s_ClosedHandler.ERR_ProbeHasNoTask(), "closing native widget uses production detach and releases its task")) return false; + EmitTaskCallbacks(task); + if (!Check(s_ClosedHandler.ERR_ProbeLateCallbacks() == 0, "closed native widget receives no task callbacks")) return false; + s_CloseReadyAt = now + 500; + return true; + } + // One normal smoke tick allows native 100ms overflow work to become due. + static int TickCloseReopen(ERR_GameMode mode, float now) + { + if (s_Failed || !s_ClosedHandler) return -1; + if (now < s_CloseReadyAt) return 0; + if (!Check(s_ClosedHandler.ERR_ProbeLateCallbacks() == 0, "closed native widget has no delayed overflow callbacks")) return -1; + if (!Observe(mode)) return -1; + if (!Check(s_DetailHandler != null, "details reopen through native layout and current objective binding")) return -1; + return 1; + } + // Dedicated objective-ui case: delete an owned test task before its panel. + // The real objective remains alive and regains its local assignment immediately. + static bool BeginDeletedTaskClose(ERR_GameMode mode, float now) + { + Stop(); + SCR_TaskSystem tasks = SCR_TaskSystem.GetInstance(); + s_PreservedMissionTask = mode.Objectives().Current(); + s_RestoreExecutor = SCR_TaskSystem.TaskExecutorFromPlayerID(SCR_PlayerController.GetLocalPlayerId()); + if (!Check(tasks && s_PreservedMissionTask && s_RestoreExecutor, "isolated deletion has a native task system, mission task and local executor")) return false; + s_IsolatedTask = tasks.CreateTask("{1D0F815858EE24AD}Prefabs/Tasks/BaseTask.et", "erri-mission-probe-teardown", "Objective cleanup probe", "Isolated native task for widget teardown."); + if (!Check(s_IsolatedTask && s_IsolatedTask != s_PreservedMissionTask, "deletion fixture owns a separate native task")) return false; + tasks.SetTaskUIVisibility(s_IsolatedTask, SCR_ETaskUIVisibility.LIST_ONLY); + // Vanilla permits one assigned task per executor. Cleanup restores the real one. + tasks.AssignTask(s_IsolatedTask, s_RestoreExecutor, true); + if (!Check(s_IsolatedTask.IsTaskAssignedTo(s_RestoreExecutor), "isolated task has an actual local assignee")) return false; + s_Detail = GetGame().GetWorkspace().CreateWidgets("{552EB1921B5C548C}UI/layouts/Task/TaskListEntryDescription.layout"); + if (!Check(s_Detail != null, "isolated native details layout created")) return false; + s_Detail.SetVisible(false); + s_DetailHandler = SCR_TaskListEntryDescriptionUIComponent.Cast(s_Detail.FindHandler(SCR_TaskListEntryDescriptionUIComponent)); + if (!Check(s_DetailHandler != null, "isolated native details handler attached")) return false; + s_DetailHandler.InitDescription(s_IsolatedTask); + s_DetailHandler.ERR_ProbeWatch(); + s_IsolatedDeleteRequested = true; + tasks.DeleteTask(s_IsolatedTask); + // These are native weak references, not manually cleared probe variables. + if (!Check(s_IsolatedTask == null && s_DetailHandler.ERR_ProbeHasNoTask(), "native task deletion clears both task and bound-widget weak references")) return false; + s_ClosedHandler = s_DetailHandler; + s_Detail.RemoveFromHierarchy(); + s_Detail = null; + s_DetailHandler = null; + s_ClosedHandler.ERR_ProbeClosed(); + if (!Check(s_ClosedHandler.ERR_ProbeWasDetached(), "deleted-task panel closes through production detach")) return false; + tasks.AssignTask(s_PreservedMissionTask, s_RestoreExecutor, true); + if (!Check(mode.Objectives().Current() == s_PreservedMissionTask && s_PreservedMissionTask.IsTaskAssignedTo(s_RestoreExecutor), "real mission objective survives isolated deletion and assignment is restored")) return false; + s_CloseReadyAt = now + 500; + return true; + } + static int TickDeletedTaskClose(ERR_GameMode mode, float now) + { + if (s_Failed || !s_ClosedHandler) return -1; + if (now < s_CloseReadyAt) return 0; + if (!Check(s_ClosedHandler.ERR_ProbeLateCallbacks() == 0, "deleted-task panel has no delayed callbacks after weak references clear")) return -1; + if (!Check(s_PreservedMissionTask && mode.Objectives().Current() == s_PreservedMissionTask && s_PreservedMissionTask.IsTaskAssignedTo(s_RestoreExecutor), "real mission objective remains intact after delayed teardown check")) return -1; + Stop(); + return 1; + } + static bool Observe(ERR_GameMode mode) + { + if (s_Failed) return false; + SCR_Task task = mode.Objectives().Current(); + if (!Check(task != null, "current native task exists")) return false; + if (s_Task != task) + { + Stop(); + s_Task = task; + s_Entry = GetGame().GetWorkspace().CreateWidgets("{B71975032150BAFB}UI/layouts/Task/TaskListEntry.layout"); + s_Detail = GetGame().GetWorkspace().CreateWidgets("{552EB1921B5C548C}UI/layouts/Task/TaskListEntryDescription.layout"); + if (!Check(s_Entry && s_Detail, "native list and detail layouts created")) return false; + s_Entry.SetVisible(false); + s_Detail.SetVisible(false); + s_EntryHandler = SCR_TaskListEntryUIComponent.Cast(s_Entry.FindHandler(SCR_TaskListEntryUIComponent)); + s_DetailHandler = SCR_TaskListEntryDescriptionUIComponent.Cast(s_Detail.FindHandler(SCR_TaskListEntryDescriptionUIComponent)); + if (!Check(s_EntryHandler && s_DetailHandler, "native handlers attached")) return false; + s_EntryHandler.InitTask(task); + s_DetailHandler.InitDescription(task); + // Same visual-change route used by the vanilla task list. + s_EntryHandler.GetOnTaskVisualChanged().Insert(s_DetailHandler.InitDescription); + } + RichTextWidget title = RichTextWidget.Cast(s_Entry.FindAnyWidget("m_wTaskTitle")); + RichTextWidget description = RichTextWidget.Cast(s_Detail.FindAnyWidget("m_wDescription")); + if (!Check(title && description && title.GetText() == task.GetTaskName() && description.GetText() == task.GetTaskDescription(), "open list and details contain current title and instructions")) return false; + Widget showMap = s_Detail.FindAnyWidget("m_wButtonShowMap"); + if (!Check(showMap && !showMap.IsVisible(), "list-only task cannot expose an undiscovered map position")) return false; + SCR_TaskExecutor player = SCR_TaskSystem.TaskExecutorFromPlayerID(SCR_PlayerController.GetLocalPlayerId()); + if (!Check(player && task.IsTaskAssignedTo(player), "actual local player receives the active objective")) return false; + if (!Check(ERR_ObjectiveText.Extraction(12500).Contains("12.5") && !ERR_ObjectiveText.Extraction(12500).Contains("9 kilometres"), "extraction instructions follow a nondefault boundary")) return false; + return true; + } +} + +// Observers exist only in the opt-in native fixture. They do not unsubscribe or +// cancel work: a late callback is counted as failure before avoiding dead-widget +// dereferences, allowing the fixture to report the production cleanup defect. +modded class SCR_TaskListEntryDescriptionUIComponent +{ + protected bool m_ERRProbeWatching; + protected bool m_ERRProbeClosed; + protected bool m_ERRProbeDetached; + protected int m_ERRProbeTaskCallbacks; + protected int m_ERRProbeLateCallbacks; + void ERR_ProbeWatch() { m_ERRProbeWatching = true; m_ERRProbeTaskCallbacks = 0; } + void ERR_ProbeClosed() { m_ERRProbeClosed = true; } + int ERR_ProbeTaskCallbacks() { return m_ERRProbeTaskCallbacks; } + int ERR_ProbeLateCallbacks() { return m_ERRProbeLateCallbacks; } + bool ERR_ProbeWasDetached() { return m_ERRProbeDetached; } + bool ERR_ProbeHasNoTask() { return m_Task == null; } + protected bool ERR_ProbeCallback(bool taskEvent, string kind) + { + if (!m_ERRProbeWatching) return false; + if (m_ERRProbeClosed) + { + m_ERRProbeLateCallbacks++; + PrintFormat("ERR OBJECTIVE LATE CALLBACK: kind=%1 count=%2 task=%3 detached=%4 root=%5", kind, m_ERRProbeLateCallbacks, m_Task != null, m_ERRProbeDetached, m_wRoot != null); + return true; + } + if (taskEvent) m_ERRProbeTaskCallbacks++; + return false; + } + override void HandlerDeattached(Widget w) + { + m_ERRProbeDetached = true; + super.HandlerDeattached(w); + } + protected override void UpdateAssignees(notnull SCR_Task task, SCR_TaskExecutor newAssignee = null, int requesterID = 0) + { + if (ERR_ProbeCallback(true, "UpdateAssignees")) return; + super.UpdateAssignees(task, newAssignee, requesterID); + } + protected override void OnTaskUIVisibilityChanged(SCR_Task task, SCR_ETaskUIVisibility visible) + { + if (ERR_ProbeCallback(true, "OnTaskUIVisibilityChanged")) return; + super.OnTaskUIVisibilityChanged(task, visible); + } + protected override void OnTaskVisibilityChanged(SCR_Task task, SCR_ETaskVisibility visible) + { + if (ERR_ProbeCallback(true, "OnTaskVisibilityChanged")) return; + super.OnTaskVisibilityChanged(task, visible); + } + protected override void OnTaskOwnershipChanged(SCR_Task task, SCR_ETaskOwnership ownership) + { + if (ERR_ProbeCallback(true, "OnTaskOwnershipChanged")) return; + super.OnTaskOwnershipChanged(task, ownership); + } + protected override void CheckOverflow(Widget w) + { + if (ERR_ProbeCallback(false, "CheckOverflow")) return; + super.CheckOverflow(w); + } + override void UpdateTask() + { + if (ERR_ProbeCallback(false, "UpdateTask")) return; + super.UpdateTask(); + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c new file mode 100644 index 0000000..ec795e5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c @@ -0,0 +1,203 @@ +#ifdef WORKBENCH +// Observe existing physical guards. No teleporting, spawned soldiers or forced +// completion: a full ordered loop and physical movement must happen natively. +class ERR_NativePatrolProbe +{ + protected ERR_GameMode m_Mode; + protected string m_SiteId; + protected ERR_SiteRuntime m_Site; + protected IEntity m_Actor; + protected vector m_Origin; + protected float m_Deadline; + protected int m_Completions; + protected int m_LastIndex = -1; + protected bool m_BadSequence; + protected bool m_Moved; + protected bool m_Started; + protected bool m_Prepared; + protected float m_AcquireDeadline; + protected bool m_Finished; + protected int m_LastQueueSample = -1; + protected ref map m_QueueBounds = new map(); + void ERR_NativePatrolProbe(ERR_GameMode mode, string siteId = "everon-outpost-1") { m_Mode = mode; m_SiteId = siteId; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: patrol " + detail); return true; } + Print("ERR SMOKE FAIL: patrol " + detail, LogLevel.ERROR); + return false; + } + protected void Completed(AIWaypoint waypoint) + { + if (!m_Site) return; + int index = m_Site.PatrolWaypoints.Find(waypoint); + if (index < 0) return; + if (m_LastIndex >= 0 && index != (m_LastIndex + 1) % m_Site.PatrolWaypoints.Count()) m_BadSequence = true; + m_LastIndex = index; + m_Completions++; + PrintFormat("ERR PATROL COMPLETED: site=%1 index=%2 count=%3", m_Site.Definition.Id, index, m_Completions); + } + protected bool DefinitionChecks() + { + ERR_ScenarioDefinition definition = ERR_ScenarioDefinition.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab("{BC310DC0CD27F523}Configs/ERR/EveronSites.conf")); + if (!Check(definition && definition.Valid(), "authored definition resolves")) return false; + ERR_SiteDefinition site = definition.Find("everon-outpost-1"); + if (!Check(site && site.Patrol && site.Patrol.Count() == 4, "four ordered outpost points authored")) return false; + ref array savedRoute = site.Patrol; + site.Patrol = new array(); + site.Patrol.Insert(savedRoute[0]); + if (!Check(!definition.Valid(), "single-point route rejected")) return false; + for (int extra = 1; extra < 7; extra++) site.Patrol.Insert(savedRoute[extra % savedRoute.Count()]); + if (!Check(!definition.Valid(), "over-six-point route rejected")) return false; + site.Patrol.Clear(); + site.Patrol.Insert(null); + site.Patrol.Insert(savedRoute[1]); + if (!Check(!definition.Valid(), "missing point rejected")) return false; + site.Patrol = savedRoute; + vector saved = site.Patrol[0].Offset; + site.Patrol[0].Offset = "61 0 0"; + if (!Check(!definition.Valid(), "unbounded route rejected")) return false; + site.Patrol[0].Offset = "0 1 0"; + if (!Check(!definition.Valid(), "floating route rejected")) return false; + site.Patrol[0].Offset = site.Patrol[1].Offset; + if (!Check(!definition.Valid(), "duplicate route points rejected")) return false; + site.Patrol[0].Offset = saved; + site.Guarded = false; + if (!Check(!definition.Valid(), "route without a physical guard rejected")) return false; + site.Guarded = true; + ERR_SiteDefinition prison = definition.Find("everon-prison-1"); + prison.Patrol = site.Patrol; + if (!Check(!definition.Valid(), "prison patrol rejected; gate guards remain stationary")) return false; + prison.Patrol = null; + return Check(definition.Valid(), "isolated authoring mutations restored"); + } + protected bool PreparedRoute(string id, bool deferDuplicateFailure = false) + { + ERR_SiteRuntime site = m_Mode.Sites().Find(id); + if (!Check(site && site.Group && site.PatrolCycle && site.PatrolWaypoints.Count() == 4, id + " existing group has one cycle and four native moves")) return false; + array route = {}; + site.PatrolCycle.GetWaypoints(route); + if (!Check(route.Count() == 4 && site.PatrolCycle.GetRerunCounter() == -1 && m_Mode.Sites().Owns(site.PatrolCycle), id + " finite owner holds repeating cycle")) return false; + for (int i = 0; i < route.Count(); i++) + { + vector expected = site.Definition.Position + site.Definition.GuardOffset + site.Definition.Patrol[i].Offset; + if (!Check(route[i] == site.PatrolWaypoints[i] && m_Mode.Sites().Owns(route[i]) && vector.DistanceXZ(route[i].GetOrigin(), expected) < 0.1, id + " authored point " + i.ToString())) return false; + } + array queued = {}; + site.Group.GetWaypoints(queued); + PrintFormat("ERR PATROL QUEUE: site=%1 count=%2 current=%3", id, queued.Count(), site.Group.GetCurrentWaypoint()); + for (int diagnosticIndex = 0; diagnosticIndex < Math.Min(queued.Count(), 20); diagnosticIndex++) + { + AIWaypoint entry = queued[diagnosticIndex]; + PrintFormat("ERR PATROL QUEUE ENTRY: site=%1 index=%2 point=%3 cycle=%4 current=%5 entity=%6", id, diagnosticIndex, site.PatrolWaypoints.Find(entry), entry == site.PatrolCycle, entry == site.Group.GetCurrentWaypoint(), entry); + } + // Diagnostic only: retain duplicate rejection at final acceptance, but first + // observe whether native completion events execute the apparent repetitions. + // GetWaypoints has no documented raw-queue/expanded-cycle distinction. + int repeated; + for (int j = 0; j < queued.Count(); j++) + { + if (!Check(queued[j] && (queued[j] == site.PatrolCycle || site.PatrolWaypoints.Contains(queued[j])), id + " queue contains only owned patrol references")) return false; + for (int k = 0; k < j; k++) if (queued[j] == queued[k]) repeated++; + } + int currentIndex = site.PatrolWaypoints.Find(site.Group.GetCurrentWaypoint()); + string stateKey = id + ":" + currentIndex.ToString(); + if (m_QueueBounds.Contains(stateKey)) + { + if (!Check(queued.Count() <= m_QueueBounds.Get(stateKey), id + " queue does not grow at the same current route point")) return false; + } + else m_QueueBounds.Insert(stateKey, queued.Count()); + PrintFormat("ERR PATROL QUEUE DIAGNOSTIC: site=%1 repeatedPairs=%2 deferred=%3 completions=%4", id, repeated, deferDuplicateFailure, m_Completions); + if (!deferDuplicateFailure && !Check(repeated == 0, id + " no duplicate queue references")) return false; + return true; + } + int Tick(float now) + { + if (m_Finished) return 1; + if (!m_Started) + { + if (!m_Prepared) + { + if (!DefinitionChecks() || !PreparedRoute("everon-supply-2", true) || !PreparedRoute("everon-outpost-1", true)) return -1; + ERR_SiteRuntime prison = m_Mode.Sites().Find("everon-prison-1"); + if (!Check(prison && prison.Group && !prison.PatrolCycle && prison.PatrolWaypoints.IsEmpty(), "prison guards retain stationary orders")) return -1; + m_Site = m_Mode.Sites().Find(m_SiteId); + if (!Check(m_Site && m_Site.Group && m_Site.InitialGuardCount == 6, "selected native guard profile requests six physical members")) return -1; + m_AcquireDeadline = now + 15000; + m_Prepared = true; + } + if (!m_Site || !m_Site.Group) { Check(false, "original guard group disappeared before observation"); return -1; } + array agents = {}; + m_Site.Group.GetAgents(agents); + array ready = {}; + foreach (AIAgent agent : agents) + { + if (!agent) continue; + IEntity actor = agent.GetControlledEntity(); + if (ERR_Actors.CanFight(actor) && !ready.Contains(actor)) ready.Insert(actor); + } + if (ready.Count() > m_Site.InitialGuardCount) { Check(false, "original group contains excess living physical guards"); return -1; } + if (ready.Count() < m_Site.InitialGuardCount) + { + if (now < m_AcquireDeadline) return 0; + PrintFormat("ERR PATROL ACTOR TIMEOUT: site=%1 agents=%2 requested=%3 nativeComplete=%4", m_SiteId, agents.Count(), m_Site.InitialGuardCount, m_Site.Group.IsExpandComplete()); + Check(false, "existing living physical guard unavailable after bounded readiness wait"); + return -1; + } + m_Actor = ready[0]; + if (!Check(ready.Count() == 6, "six distinct original living physical guards available")) return -1; + m_Origin = m_Actor.GetOrigin(); + m_Site.Group.GetOnWaypointCompleted().Insert(Completed); + m_Deadline = now + 180000; + m_Started = true; + return 0; + } + if (m_Actor && vector.DistanceXZ(m_Origin, m_Actor.GetOrigin()) >= 8) m_Moved = true; + if (m_BadSequence) { Stop(); Check(false, "native route completion order"); return -1; } + if (m_Completions != m_LastQueueSample) + { + m_LastQueueSample = m_Completions; + if (!PreparedRoute(m_SiteId, true)) { Stop(); return -1; } + } + // Five completions prove traversal across a cycle boundary, from any starting point. + if (m_Completions >= 5 && m_Moved) + { + Stop(); + if (!Check(true, "existing physical guard moved at least 8m and five native moves completed in authored cyclic order")) return -1; + if (!PreparedRoute(m_SiteId)) return -1; + m_Finished = true; + return 1; + } + if (now >= m_Deadline) + { + PrintFormat("ERR PATROL TIMEOUT: completions=%1 moved=%2 actor=%3 current=%4", m_Completions, m_Moved, m_Actor, m_Site.Group.GetCurrentWaypoint()); + Stop(); Check(false, "native route traversal completed within 180s"); return -1; + } + return 0; + } + // Run last in a disposable mission: deliberately stops both route owners. + static bool StopChecks(ERR_GameMode mode) + { + ERR_SiteRuntime site = mode.Sites().Find("everon-outpost-1"); + if (!site || !site.Group || !site.PatrolCycle) return false; + AIWaypoint search = AIWaypoint.Cast(ERR_Actors.Spawn(ERR_Resources.SearchWaypoint(), ERR_Actors.Ground(site.Definition.Position + "40 0 0"))); + if (!search) return false; + mode.Own(search); + site.Group.AddWaypointAt(search, 0); + mode.Sites().Stop(); + mode.Sites().Stop(); + array queued = {}; + site.Group.GetWaypoints(queued); + bool valid = !site.PatrolCycle && site.PatrolWaypoints.IsEmpty() && queued.Contains(search) && mode.Sites().Prepare() == ERR_PrepareResult.FAILED; + site.Group.RemoveWaypoint(search); + ERR_Actors.DeleteSpawned(search); + if (valid) Print("ERR SMOKE PASS: patrol stop clears owned routes once and preserves foreign Search"); + else Print("ERR SMOKE FAIL: patrol stop ownership", LogLevel.ERROR); + return valid; + } + void Stop() + { + if (m_Site && m_Site.Group) m_Site.Group.GetOnWaypointCompleted().Remove(Completed); + } + void ~ERR_NativePatrolProbe() { Stop(); } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c new file mode 100644 index 0000000..cbd064d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c @@ -0,0 +1,819 @@ +#ifdef WORKBENCH +// New native-input feasibility experiment. No original Escapists flight code. +// Only the exact fixture-owned AI pilot and helicopter receive these hooks. +modded class SCR_CharacterControllerComponent +{ + override void OnPrepareControls(IEntity owner, ActionManager am, float dt, bool player) + { + ERR_NativePoweredFlightProbe probe = ERR_NativePoweredFlightProbe.Current(); + if (probe && !player) probe.PreparePilotActions(this, owner, am, dt); + super.OnPrepareControls(owner, am, dt, player); + if (probe && !player) probe.ObservePilotPreparation(this, owner); + } + protected override void OnApplyControls(IEntity owner, float timeSlice) + { + super.OnApplyControls(owner, timeSlice); + ERR_NativePoweredFlightProbe probe = ERR_NativePoweredFlightProbe.Current(); + if (probe) probe.ApplyPilot(this, owner, timeSlice); + } +} +modded class SCR_HelicopterControllerComponent +{ + protected override event void OnPrepareControls() + { + super.OnPrepareControls(); + ERR_NativePoweredFlightProbe probe = ERR_NativePoweredFlightProbe.Current(); + if (probe) probe.PrepareHelicopter(this); + } +} +class ERR_PoweredFlightRules +{ + static const int PAD_CANDIDATES = 128; + static const int PAD_REFINEMENTS = 80; + static const int AIRPORT_CANDIDATES = 169; + static vector AirportOffset(int index) + { + if (index < 0 || index >= AIRPORT_CANDIDATES) return vector.Zero; + int x = Math.Mod(index, 13) - 6; + int z = index / 13; + z -= 6; + return Vector(x * 50, 0, z * 50); + } + static vector RefineOffset(int index) + { + if (index < 0 || index >= PAD_REFINEMENTS) return vector.Zero; + int sample = index; + if (sample >= 40) sample++; + int x = Math.Mod(sample, 9) - 4; + int z = sample / 9; + z -= 4; + return Vector(x * 10, 0, z * 10); + } + static vector PadOffset(int index) + { + if (index < 0 || index >= PAD_CANDIDATES) return vector.Zero; + float radius = 120; + int segments = 12; + int sample = index; + float phase = 0; + if (index >= 12 && index < 108) + { + int ring = (index - 12) / 24; + radius = 200 + ring * 80; + segments = 24; sample = Math.Mod(index - 12, 24); phase = Math.Mod(ring, 2) * 0.5; + } + else if (index >= 108) + { + radius = 500; segments = 20; sample = index - 108; phase = 0.25; + } + float angle = (sample + phase) * 2 * Math.PI / segments; + return Vector(Math.Cos(angle) * radius, 0, Math.Sin(angle) * radius); + } + static bool Authority(bool server, bool enabled, bool stopped, bool ownedPilot, bool ownedSeat, bool playerPresent, bool alive, bool fueled) + { + return server && enabled && !stopped && ownedPilot && ownedSeat && !playerPresent && alive && fueled; + } + static float ClampInput(float value, float limit = 1) + { + return Math.Clamp(value, -limit, limit); + } + static float NativeCollective(float signedDemand) + { + // Preserve the legacy Apply experiment unchanged. Later observations showed + // overwritten positive inputs too, so this is not a proven native domain. + return (ClampInput(signedDemand) + 1) * 0.5; + } + static float CollectiveCommand(float signedDemand, bool actions, int stage) + { + // Preserve pre-engine/startup zero and the old Apply comparison branch. + if (!actions) return NativeCollective(signedDemand); + if (stage == 9) return 0.05; + if (stage == 10) return -0.05; + if (stage == 7) return -1; // keep minimum pitch while the stopped engine's rotors coast + if (stage >= 4 && stage <= 6) return ClampInput(signedDemand); + return 0; + } + static bool NegativeCollectiveObserved(float command, float signal) + { + return command >= -0.06 && command <= -0.04 && Math.AbsFloat(signal - command) <= 0.01; + } + static bool CollectiveObserved(float command, float signal) + { + return command >= 0.04 && command <= 0.06 && Math.AbsFloat(signal - command) <= 0.01; + } + static float DesiredVertical(float height, bool landing) + { + float target = 8; + if (landing) target = 0; + return Math.Clamp((target - height) * 0.6, -0.8, 1.5); + } + static bool Hover(float height, float speed, float vertical, float upright, float drift) + { + return height >= 7 && height <= 9 && speed < 1.5 && Math.AbsFloat(vertical) < 0.5 && upright > 0.98 && drift < 8; + } + static bool Landed(bool contact, float height, float speed, float angular, float upright) + { + return contact && height < 1 && height > -1 && speed < 0.5 && angular < 0.1 && upright > 0.98; + } + static bool TranslationInputs(bool selected, bool actions, bool autohover) + { + return !selected || (actions && autohover); + } + static bool TranslationActive(bool selected, bool frozen, bool actions, bool autohover, int stage) + { + return selected && frozen && actions && autohover && stage == 5; + } + static bool TranslationTarget(vector home, vector start, vector fallback, out vector target) + { + target = vector.Zero; + if (!(vector.DistanceXZ(home, start) < 8)) return false; + vector direction = home - start; direction[1] = 0; + if (direction.Length() < 0.5) { direction = fallback; direction[1] = 0; } + float length = direction.Length(); + if (!(length >= 0.5)) return false; + target = start + direction * (4 / length); + return vector.DistanceXZ(start, target) >= 3.99 && vector.DistanceXZ(start, target) <= 4.01 && vector.DistanceXZ(home, target) <= 5; + } + static vector TranslationDemand(vector target, vector position, vector velocity) + { + vector error = target - position; error[1] = 0; + vector desired = error * 0.25; + float speed = desired.Length(); + if (speed > 0.5) desired = desired * (0.5 / speed); + velocity[1] = 0; + // Experimental outer velocity request only; native autohover stabilizes attitude. + vector demand = (desired - velocity) * 0.05; + float magnitude = demand.Length(); + if (magnitude > 0.03) demand = demand * (0.03 / magnitude); + return demand; + } + static bool TranslationHeld(bool contact, float height, float speed, float vertical, float upright, float drift, float horizontalSpeed, float targetError, float displacement) + { + return !contact && Hover(height, speed, vertical, upright, drift) && horizontalSpeed >= 0 && horizontalSpeed < 0.25 && targetError >= 0 && targetError <= 0.75 && displacement >= 3.25; + } +} +class ERR_NativePoweredFlightProbe +{ + protected static ERR_NativePoweredFlightProbe s_Current; + protected ERR_GameMode m_Mode; + protected Vehicle m_Aircraft; + protected SCR_AIGroup m_Group; + protected IEntity m_Pilot; + protected HelicopterControllerComponent m_Controller; + protected CharacterControllerComponent m_Character; + protected CharacterInputContext m_Input; + protected VehicleHelicopterSimulation m_Simulation; + protected FuelManagerComponent m_Fuel; + protected PilotCompartmentSlot m_Seat; + protected CollectiveMode m_OriginalMode; + protected vector m_Home; + protected vector m_TestPad; + protected float m_Heading; + protected float m_Deadline; + protected float m_StageDeadline; + protected float m_Stable = -1; + protected float m_PreviousTick = -1; + protected float m_NextLog; + protected float m_InitialFuel; + protected float m_Collective = -1; + protected float m_LastControl; + protected int m_Stage; + protected int m_Wakes; + protected int m_StartRequests; + protected int m_ControlUpdates; + protected int m_PilotPreparations; + protected int m_PositiveGateUpdates; + protected float m_PositiveSignalSince = -1; + protected int m_NegativeGateUpdates; + protected float m_NegativeSignalSince = -1; + protected bool m_SignedCollectiveProven; + protected int m_HelicopterUpdates; + protected bool m_PilotSpawnRequested; + protected AIAgent m_PilotAgent; + protected int m_OriginalPilotLOD; + protected bool m_PilotLODSaved; + protected bool m_PilotSeatsLogged; + protected float m_NextInitializationLog; + protected float m_NextSeatingLog; + protected bool m_Bound; + protected bool m_ModeSaved; + protected bool m_Stopped; + protected bool m_Complete; + protected bool m_ReadbackOK = true; + protected bool m_ActionInputs; + protected bool m_Started; + protected bool m_AutohoverMode; + protected bool m_TranslationMode; + protected bool m_TranslationFrozen; + protected bool m_TranslationProven; + protected vector m_TranslationOrigin; + protected vector m_TranslationTarget; + protected int m_TranslationUpdates; + protected bool m_AutohoverSaved; + protected bool m_OriginalAutohover; + protected HelicopterControllerComponent m_AutohoverController; + protected ActionManager m_OwnedActions; + protected int m_ActionContextSamples; + static const ResourceName AIRCRAFT = "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et"; + static const ResourceName GROUP = "{000CD338713F2B5A}Prefabs/AI/Groups/Group_Base.et"; + static const ResourceName PILOT = "{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et"; + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errBaseSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && (outcome == "powered-flight" || outcome == "powered-translate"); + } + static ERR_NativePoweredFlightProbe Current() { return s_Current; } + void ERR_NativePoweredFlightProbe(ERR_GameMode mode) + { + string actionInputs; + m_ActionInputs = System.GetCLIParam("errFlightActionInputs", actionInputs) && actionInputs == "1"; + string outcome; + m_TranslationMode = System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "powered-translate"; + m_Mode = mode; m_Deadline = GetGame().GetWorld().GetWorldTime() + 240000; + if (Enabled() && !s_Current) s_Current = this; + else m_Stopped = true; + } + // Fixture configuration only: caller must select this before the first Tick. + bool SetAutohoverMode(bool enabled) + { + if (m_Started || m_Stopped || m_Complete || m_Bound || m_Aircraft) return false; + m_AutohoverMode = enabled; + return true; + } + protected bool BeginAutohover() + { + if (!m_AutohoverMode) return true; + if (m_AutohoverSaved || !m_Bound || !PoweredAuthority() || !m_Controller || m_Controller.GetOwner() != m_Aircraft) return false; + m_AutohoverController = m_Controller; + m_OriginalAutohover = m_Controller.GetAutohoverEnabled(); + m_AutohoverSaved = true; + m_Controller.SetAutohoverEnabled(true); + return m_Controller.GetAutohoverEnabled(); + } + protected bool AutohoverReady() + { + if (!m_AutohoverMode) return true; + // Native autohover also rewrites collective. Prove direct input consumption + // first, then enable its controller only for the bounded flight phase. + if (!m_AutohoverSaved && (m_Stage == 2 || m_Stage == 3 || m_Stage == 9 || m_Stage == 10)) return true; + return m_AutohoverSaved && m_AutohoverController && m_AutohoverController == m_Controller && m_Controller.GetOwner() == m_Aircraft && m_Controller.GetAutohoverEnabled(); + } + protected void RestoreAutohover(bool ownedSeat) + { + if (ownedSeat && m_AutohoverSaved && m_AutohoverController && m_AutohoverController == m_Controller && m_Controller.GetOwner() == m_Aircraft) + { + m_Controller.SetAutohoverEnabled(m_OriginalAutohover); + PrintFormat("ERR POWERED AUTOHOVER RESTORE: original=%1 observed=%2", m_OriginalAutohover, m_Controller.GetAutohoverEnabled()); + if (m_Controller.GetAutohoverEnabled() != m_OriginalAutohover) Print("ERR SMOKE FAIL: powered-flight original owned autohover state restored", LogLevel.ERROR); + } + m_AutohoverSaved = false; + m_AutohoverController = null; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: powered-flight " + detail); return true; } + Print("ERR SMOKE FAIL: powered-flight " + detail, LogLevel.ERROR); Stop(); return false; + } + protected bool PlayerPresent() + { + if (!m_Aircraft || !m_Group || m_Group.GetPlayerCount(true) > 0) return true; + array ids = {}; GetGame().GetPlayerManager().GetPlayers(ids); + foreach (int id : ids) + { + IEntity actor = GetGame().GetPlayerManager().GetPlayerControlledEntity(id); + if (actor && (actor == m_Pilot || CompartmentAccessComponent.GetVehicleIn(actor) == m_Aircraft)) return true; + } + return false; + } + protected bool OwnPilot() + { + return m_Pilot && m_Group && ERR_Actors.Group(m_Pilot) == m_Group && !ERR_Actors.Player(m_Pilot); + } + protected bool PoweredAuthority() + { + bool occupied = m_Seat && m_Seat.GetOccupant() == m_Pilot && m_Controller && m_Controller.GetPilotCompartmentSlot() == m_Seat && CompartmentAccessComponent.GetVehicleIn(m_Pilot) == m_Aircraft; + bool alive = ERR_Actors.Alive(m_Aircraft) && ERR_Actors.CanFight(m_Pilot); + SCR_VehicleDamageManagerComponent damage; + if (m_Aircraft) damage = SCR_VehicleDamageManagerComponent.Cast(m_Aircraft.FindComponent(SCR_VehicleDamageManagerComponent)); + alive = alive && damage && damage.GetEngineFunctional() && damage.GetMovementDamage() < 1 && !damage.IsOnFire(); + if (m_Simulation) + for (int rotor = 0; rotor < m_Simulation.RotorCount(); rotor++) if (m_Simulation.RotorGetState(rotor) == RotorState.DESTROYED) alive = false; + return ERR_PoweredFlightRules.Authority(Replication.IsServer(), Enabled(), m_Stopped, OwnPilot(), occupied, PlayerPresent(), alive, m_Fuel && m_Fuel.HasFuel()); + } + void PrepareHelicopter(HelicopterControllerComponent controller) + { + if (!m_Bound || controller != m_Controller || !PoweredAuthority()) return; + // Native SCR controller normally reapplies device preferences every update. + // Override only this owned fixture controller, never global/user settings. + controller.SetCollectiveMode(CollectiveMode.Direct); m_HelicopterUpdates++; + } + bool UsesActionInputs() { return m_ActionInputs; } + void ObservePilotPreparation(CharacterControllerComponent controller, IEntity owner) + { + if (!m_Bound || controller != m_Character || owner != m_Pilot || !PoweredAuthority()) return; + m_PilotPreparations++; + } + // Both selectable input paths share one computation. Only the selected + // path integrates per callback; neither path invokes the other writer. + protected bool ComputePilotDemand(CharacterControllerComponent controller, IEntity owner, float dt, out float collective, out vector axes) + { + if (!m_Bound || controller != m_Character || owner != m_Pilot || !PoweredAuthority() || !AutohoverReady() || !m_Input || !m_Simulation || dt <= 0 || dt > 0.2) return false; + if (m_ActionInputs && m_Stage >= 4 && m_Stage <= 6 && !m_SignedCollectiveProven) return false; + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + vector velocity = m_Simulation.GetVelocity(); + vector angular = m_Simulation.GetAngularVelocityLocal(); + float height = transform[3][1] - m_Home[1]; + float forward, aside, torque; + collective = -1; + if (m_Stage == 9) collective = -0.9; // native0.05, bounded signal-consumption proof + if (m_Stage >= 4 && m_Stage <= 6 && m_Controller.IsEngineOn()) + { + float desiredVertical = ERR_PoweredFlightRules.DesiredVertical(height, m_Stage == 6); + float error = desiredVertical - velocity[1]; + m_Collective = Math.Clamp(m_Collective + error * dt * 0.12, -0.95, 0.8); + collective = Math.Clamp(m_Collective + error * 0.12, -1, 0.9); + vector offset = m_Home - transform[3]; offset[1] = 0; + // Native105226 already brakes before8m refusal; increase only velocity damping. + vector acceleration = offset * 0.08 - velocity * 0.6; acceleration[1] = 0; + // Small local cyclic corrections counter drift/tilt through native inputs. + // Sign/gain and native Direct-mode response remain experimental evidence. + forward = ERR_PoweredFlightRules.ClampInput((vector.Dot(acceleration, transform[2]) / 9.81 + transform[2][1]) * 0.8 - angular[0] * 1.2, 0.15); + aside = ERR_PoweredFlightRules.ClampInput((vector.Dot(acceleration, transform[0]) / 9.81 + transform[0][1]) * 0.8 + angular[2] * 1.2, 0.15); + // Native autohover also adjusts collective; observe its physical response. + // Give its lateral controller zero custom cyclic in this experiment. + // Preserve collective/yaw and bounds; never combine two cyclic controllers. + if (m_AutohoverMode) { forward = 0; aside = 0; } + if (ERR_PoweredFlightRules.TranslationActive(m_TranslationMode, m_TranslationFrozen, m_ActionInputs, m_AutohoverMode, m_Stage)) + { + vector demand = ERR_PoweredFlightRules.TranslationDemand(m_TranslationTarget, transform[3], velocity); + forward = ERR_PoweredFlightRules.ClampInput(vector.Dot(demand, transform[2]), 0.03); + aside = ERR_PoweredFlightRules.ClampInput(vector.Dot(demand, transform[0]), 0.03); + m_TranslationUpdates++; + } + float headingError = m_Heading - m_Aircraft.GetYawPitchRoll()[0]; + while (headingError > 180) headingError -= 360; + while (headingError < -180) headingError += 360; + torque = ERR_PoweredFlightRules.ClampInput(headingError * 0.01 - angular[1] * 0.3, 0.3); + if (m_Stage == 6 && ERR_PoweredFlightRules.Landed(m_Simulation.HasAnyGroundContact(), height, velocity.Length(), angular.Length(), transform[1][1])) collective = -1; + } + collective = ERR_PoweredFlightRules.CollectiveCommand(collective, m_ActionInputs, m_Stage); + axes = Vector(forward, aside, torque); + return true; + } + protected bool WriteActionPair(ActionManager am, string positive, string negative, float demand) + { + float a = Math.Clamp(demand, 0, 1); + float b = Math.Clamp(-demand, 0, 1); + am.SetActionValue(positive, a); am.SetActionValue(negative, b); + return Math.AbsFloat(am.GetActionValue(positive) - a) < 0.001 && Math.AbsFloat(am.GetActionValue(negative) - b) < 0.001; + } + protected bool OwnActionManager(ActionManager am) + { + // Read the global manager only to reject shared ownership. Never write it. + return am && m_PilotAgent && am == m_PilotAgent.GetActionManager() && am != GetGame().GetInputManager(); + } + void PreparePilotActions(CharacterControllerComponent controller, IEntity owner, ActionManager am, float dt) + { + if (!m_ActionInputs || !m_Bound || controller != m_Character || owner != m_Pilot || !PoweredAuthority()) return; + if (!OwnActionManager(am)) { m_ReadbackOK = false; return; } + m_OwnedActions = am; + // Same short activation pattern used by vanilla game.c; this manager belongs + // solely to the fixture AI, never to global hardware or the human player. + // Native104256 reports false from ActivateContext while already active. + // Treat observed active state as authority, not an undocumented return meaning. + bool alreadyActive = am.IsContextActive("HelicopterContext"); + bool activated; + if (!alreadyActive) activated = am.ActivateContext("HelicopterContext", 1); + bool contextActive = am.IsContextActive("HelicopterContext"); + if (m_ActionContextSamples < 4) + { + m_ActionContextSamples++; + PrintFormat("ERR POWERED ACTION CONTEXT: sample=%1 activated=%2 active=%3 dt=%4 input=%5 simulation=%6", m_ActionContextSamples, activated, contextActive, dt, m_Input != null, m_Simulation != null); + } + if (!contextActive) { m_ReadbackOK = false; return; } + float collective; vector axes; + if (!ComputePilotDemand(controller, owner, dt, collective, axes)) return; + bool a = WriteActionPair(am, "HelicopterCollectiveIncrease", "HelicopterCollectiveDecrease", collective); + bool b = WriteActionPair(am, "HelicopterCyclicForward", "HelicopterCyclicBack", axes[0]); + bool c = WriteActionPair(am, "HelicopterCyclicRight", "HelicopterCyclicLeft", axes[1]); + bool d = WriteActionPair(am, "HelicopterAntiTorqueRight", "HelicopterAntiTorqueLeft", axes[2]); + m_ReadbackOK = m_ReadbackOK && a && b && c && d; + m_ControlUpdates++; m_LastControl = GetGame().GetWorld().GetWorldTime(); + } + void ApplyPilot(CharacterControllerComponent controller, IEntity owner, float dt) + { + // The experimental actor-action path and old context path never both write. + if (m_ActionInputs) return; + float collective; vector axes; + if (!ComputePilotDemand(controller, owner, dt, collective, axes)) return; + float forward = axes[0]; float aside = axes[1]; float torque = axes[2]; + m_Input.SetVehicleThrottle(1); + m_Input.SetVehicleCollective(collective); + m_Input.SetVehicleCyclicForward(forward); + m_Input.SetVehicleCyclicAside(aside); + m_Input.SetVehicleAntiTorque(torque); + m_ReadbackOK = m_ReadbackOK && Math.AbsFloat(m_Input.GetVehicleCollective() - collective) < 0.001 && Math.AbsFloat(m_Input.GetVehicleCyclicForward() - forward) < 0.001 && Math.AbsFloat(m_Input.GetVehicleCyclicAside() - aside) < 0.001 && Math.AbsFloat(m_Input.GetVehicleAntiTorque() - torque) < 0.001; + m_ControlUpdates++; m_LastControl = GetGame().GetWorld().GetWorldTime(); + } + protected bool FindPad(out vector result) + { + vector anchor = m_Mode.ExtractionVehicle().GetOrigin(); + int tested, lowGround, slopeRejected, cylinderRejected, sweepRejected; + float bestSlope = float.MAX; + vector bestCandidate; + vector refinementAnchor; + int localCandidates = ERR_PoweredFlightRules.PAD_CANDIDATES + ERR_PoweredFlightRules.PAD_REFINEMENTS; + for (int index = 0; index < localCandidates + ERR_PoweredFlightRules.AIRPORT_CANDIDATES; index++) + { + if (index == ERR_PoweredFlightRules.PAD_CANDIDATES) + { + if (bestSlope == float.MAX) refinementAnchor = anchor; + else refinementAnchor = bestCandidate; + // Freeze the refinement centre; improvements must not move the grid. + } + tested++; + vector candidate; + if (index < ERR_PoweredFlightRules.PAD_CANDIDATES) candidate = ERR_Actors.Ground(anchor + ERR_PoweredFlightRules.PadOffset(index)); + else if (index < localCandidates) candidate = ERR_Actors.Ground(refinementAnchor + ERR_PoweredFlightRules.RefineOffset(index - ERR_PoweredFlightRules.PAD_CANDIDATES)); + // Installed vanilla Eden/Airport location centre; candidate only, never + // accepted without exactly the same terrain and physical clearance queries. + else candidate = ERR_Actors.Ground("4900.953 0 11787.412" + ERR_PoweredFlightRules.AirportOffset(index - localCandidates)); + if (candidate[1] < 2) { lowGround++; continue; } + float maximumDelta = 0; + for (int edge = 0; edge < 4; edge++) + { + float side = edge * Math.PI / 2; + vector point = candidate + Vector(Math.Cos(side) * 14, 0, Math.Sin(side) * 14); + maximumDelta = Math.Max(maximumDelta, Math.AbsFloat(SCR_TerrainHelper.GetTerrainY(point) - candidate[1])); + } + if (maximumDelta < bestSlope) { bestSlope = maximumDelta; bestCandidate = candidate; } + if (maximumDelta > 0.8) { slopeRejected++; continue; } + // Retain slope and exact native rejection semantics; widen the tested + // column for a runtime-measured whole-aircraft footprint plus8m drift. + if (!SCR_WorldTools.TraceCilinderUtil(candidate + "0 2.5 0", 40, 4, TraceFlags.ENTS)) { cylinderRejected++; continue; } + TraceBox clearance = new TraceBox(); clearance.Start = candidate + "0 3 0"; clearance.End = candidate + "0 60 0"; + clearance.Mins = "-40 -1 -40"; clearance.Maxs = "40 1 40"; clearance.Flags = TraceFlags.ENTS | TraceFlags.WORLD; + if (GetGame().GetWorld().TraceMove(clearance, null) < 1) { sweepRejected++; continue; } + PrintFormat("ERR POWERED PAD: found=%1 tested=%2 distance=%3m maximumHeightDelta=%4m lowGround=%5 slopeRejected=%6 cylinderRejected=%7 sweepRejected=%8", candidate, tested, vector.DistanceXZ(anchor, candidate), maximumDelta, lowGround, slopeRejected, cylinderRejected, sweepRejected); + result = candidate; return true; + } + if (bestSlope == float.MAX) bestSlope = -1; + PrintFormat("ERR POWERED PAD: no safe candidate; tested=%1 localRadius=557m plus airport300m-grid lowGround=%2 slopeRejected=%3 cylinderRejected=%4 sweepRejected=%5 bestHeightDelta=%6m bestCandidate=%7 (diagnostic only; never a fallback)", tested, lowGround, slopeRejected, cylinderRejected, sweepRejected, bestSlope, bestCandidate); + return false; + } + protected void Diagnostic(float now) + { + if (!m_Simulation || !m_Aircraft || now < m_NextLog) return; + m_NextLog = now + 2000; + if (m_Stage == 4 && now < m_StageDeadline - 57000) m_NextLog = now + 250; + if (m_TranslationMode && m_Stage == 5) m_NextLog = now + 500; + if (m_ActionInputs) + { + bool ownedActions = OwnActionManager(m_OwnedActions); + bool contextActive = m_OwnedActions && m_OwnedActions.IsContextActive("HelicopterContext"); + PrintFormat("ERR POWERED ACTION MANAGER: selected=1 exactOwnedNonGlobal=%1 contextActive=%2 virtualWrites=%3", ownedActions, contextActive, m_ControlUpdates); + } + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + PrintFormat("ERR POWERED AUTOHOVER: selected=%1 saved=%2 enabled=%3 exactController=%4", m_AutohoverMode, m_AutohoverSaved, m_Controller.GetAutohoverEnabled(), m_AutohoverController == m_Controller); + PrintFormat("ERR POWERED FLIGHT: stage=%1 height=%2 drift=%3 speed=%4 vertical=%5 up=%6 groundContact=%7 fuel=%8 engine=%9", m_Stage, transform[3][1] - m_Home[1], vector.DistanceXZ(transform[3], m_Home), m_Simulation.GetVelocity().Length(), m_Simulation.GetVelocity()[1], transform[1][1], m_Simulation.HasAnyGroundContact(), m_Fuel.GetTotalFuel(), m_Controller.IsEngineOn()); + vector rotorAxis; m_Simulation.RotorGetAxis(0, rotorAxis); + PrintFormat("ERR POWERED HEADING: desiredYaw=%1 actualYawPitchRoll=%2", m_Heading, m_Aircraft.GetYawPitchRoll()); + PrintFormat("ERR POWERED ROTOR AXIS: local=%1 acceleration=%2", rotorAxis, m_Simulation.GetAcceleration()); + PrintFormat("ERR POWERED MOTION: offset=%1 velocity=%2 angularLocal=%3 forward=%4 right=%5", m_Home - transform[3], m_Simulation.GetVelocity(), m_Simulation.GetAngularVelocityLocal(), transform[2], transform[0]); + PrintFormat("ERR POWERED INPUT: pilotHooks=%1 vehicleHooks=%2 readback=%3 collective=%4 cyclicF=%5 cyclicR=%6 antiTorque=%7 rotorRPM=%8 targetRPM=%9", m_ControlUpdates, m_HelicopterUpdates, m_ReadbackOK, m_Input.GetVehicleCollective(), m_Input.GetVehicleCyclicForward(), m_Input.GetVehicleCyclicAside(), m_Input.GetVehicleAntiTorque(), m_Simulation.RotorGetRPM(0), m_Simulation.RotorGetRPMTarget(0)); + if (m_TranslationMode && m_TranslationFrozen) + { + vector direction = m_TranslationTarget - m_TranslationOrigin; direction[1] = 0; direction = direction * 0.25; + vector travel = transform[3] - m_TranslationOrigin; travel[1] = 0; + float along = vector.Dot(travel, direction); + vector cross = travel - direction * along; + vector horizontal = m_Simulation.GetVelocity(); horizontal[1] = 0; + PrintFormat("ERR POWERED TRANSLATION: stage=%1 origin=%2 target=%3 position=%4 along=%5 cross=%6 error=%7 horizontalSpeed=%8 updates=%9", m_Stage, m_TranslationOrigin, m_TranslationTarget, transform[3], along, cross.Length(), vector.DistanceXZ(transform[3], m_TranslationTarget), horizontal.Length(), m_TranslationUpdates); + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + if (signals) + { + int cyclicForward = signals.FindSignal("MainRotorCyclicForward"); + int cyclicAside = signals.FindSignal("MainRotorCyclicAside"); + if (cyclicForward >= 0 && cyclicAside >= 0) PrintFormat("ERR POWERED TRANSLATION SIGNALS: pilotForward=%1 pilotAside=%2 rotorForward=%3 rotorAside=%4 (native autohover may modify rotor commands)", m_Input.GetVehicleCyclicForward(), m_Input.GetVehicleCyclicAside(), signals.GetSignalValue(cyclicForward), signals.GetSignalValue(cyclicAside)); + } + } + } + protected bool PollNativeFlightComponents(float now) + { + // Component pointers, simulation and tank contents may initialize after spawn. + // Enumerate the real empty primary cockpit slot; an active pilot assignment + // is a later occupancy requirement, not a prerequisite to creating its pilot. + m_Controller = HelicopterControllerComponent.Cast(m_Aircraft.FindComponent(HelicopterControllerComponent)); + m_Simulation = null; + if (m_Controller) m_Simulation = m_Controller.GetSimulation(); + m_Fuel = FuelManagerComponent.Cast(m_Aircraft.FindComponent(FuelManagerComponent)); + BaseCompartmentManagerComponent manager = BaseCompartmentManagerComponent.Cast(m_Aircraft.FindComponent(BaseCompartmentManagerComponent)); + array slots = {}; + if (manager) manager.GetCompartments(slots); + m_Seat = null; + if (slots.Count() <= 64) + { + foreach (BaseCompartmentSlot slot : slots) + { + PilotCompartmentSlot pilotSlot = PilotCompartmentSlot.Cast(slot); + if (!pilotSlot || pilotSlot.GetOwner() != m_Aircraft || pilotSlot.GetVehicle() != m_Aircraft) continue; + if (!m_PilotSeatsLogged) PrintFormat("ERR POWERED INITIAL SEAT: name=%1 unique=%2 type=%3 occupied=%4 accessible=%5 piloting=%6", pilotSlot.GetCompartmentName(), pilotSlot.GetCompartmentUniqueName(), pilotSlot.GetType(), pilotSlot.GetOccupant() != null, pilotSlot.IsCompartmentAccessible(), pilotSlot.IsPiloting()); + // This is the actual object name in the audited stock Mi8 prefab. Do not + // choose the copilot merely because it has the same PilotCompartment type. + if (pilotSlot.GetCompartmentName() != "PilotCompartment") continue; + if (pilotSlot.GetType() != ECompartmentType.PILOT || !pilotSlot.IsCompartmentAccessible()) continue; + if (pilotSlot.GetOccupant() || pilotSlot.IsReserved() || pilotSlot.IsGetInLocked()) continue; + m_Seat = pilotSlot; + } + } + if (slots.Count() > 0) m_PilotSeatsLogged = true; + bool validSimulation = m_Simulation && m_Simulation.IsValid(); + bool fueled = m_Fuel && m_Fuel.HasFuel(); + PilotCompartmentSlot active; + if (m_Controller) active = m_Controller.GetPilotCompartmentSlot(); + if (now >= m_NextInitializationLog || now >= m_StageDeadline) + { + m_NextInitializationLog = now + 2000; + float fuel = -1; + if (m_Fuel) fuel = m_Fuel.GetTotalFuel(); + PrintFormat("ERR POWERED INITIALIZATION: controller=%1 simulation=%2 valid=%3 manager=%4 slots=%5 primaryEmptySeat=%6 activeSeat=%7 fuelManager=%8", m_Controller != null, m_Simulation != null, validSimulation, manager != null, slots.Count(), m_Seat != null, active != null, m_Fuel != null); + PrintFormat("ERR POWERED INITIALIZATION STOCK: fueled=%1 totalFuel=%2 agents=%3 pilotSpawnRequested=%4", fueled, fuel, m_Group.GetAgentsCount(), m_PilotSpawnRequested); + } + return m_Controller && validSimulation && m_Seat && fueled; + } + protected void SeatingDiagnostic(float now) + { + // Observe each existing stage-1 predicate without changing seating, AI, + // physics, health, fuel, or the shared preparation deadline. + if (now < m_NextSeatingLog && now < m_StageDeadline) return; + m_NextSeatingLog = now + 2000; + bool ownPilot = OwnPilot(); + bool seatMatches = m_Seat.GetOccupant() == m_Pilot; + bool activeMatches = m_Controller.GetPilotCompartmentSlot() == m_Seat; + bool vehicleMatches = m_Pilot && CompartmentAccessComponent.GetVehicleIn(m_Pilot) == m_Aircraft; + bool aircraftReady = ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft); + bool pilotAlive = ERR_Actors.Alive(m_Pilot); + bool pilotConscious = ERR_Actors.CanFight(m_Pilot); + bool aircraftAlive = ERR_Actors.Alive(m_Aircraft); + bool sameGroup = ERR_Actors.Group(m_Pilot) == m_Group; + bool player = ERR_Actors.Player(m_Pilot); + PrintFormat("ERR POWERED SEATING: ownPilot=%1 seatOccupantMatches=%2 activeSlotMatches=%3 vehicleMatches=%4 aircraftReady=%5 wakes=%6 stableSince=%7 remainingMs=%8", ownPilot, seatMatches, activeMatches, vehicleMatches, aircraftReady, m_Wakes, m_Stable, m_StageDeadline - now); + PrintFormat("ERR POWERED SEATING ACTORS: pilotExists=%1 alive=%2 conscious=%3 sameGroup=%4 player=%5 groupAgents=%6 aircraftAlive=%7", m_Pilot != null, pilotAlive, pilotConscious, sameGroup, player, m_Group.GetAgentsCount(), aircraftAlive); + PrintFormat("ERR POWERED SEATING IDENTITIES: pilot=%1 occupant=%2 selectedSeat=%3 activeSeat=%4 group=%5 actualGroup=%6", m_Pilot, m_Seat.GetOccupant(), m_Seat, m_Controller.GetPilotCompartmentSlot(), m_Group, ERR_Actors.Group(m_Pilot)); + if (m_PilotAgent) PrintFormat("ERR POWERED SEATING AGENT: actualLOD=%1 forcedLOD=%2 activated=%3", m_PilotAgent.GetLOD(), m_PilotAgent.GetPermanentLOD(), m_PilotAgent.IsAIActivated()); + CompartmentAccessComponent access; + if (m_Pilot) access = CompartmentAccessComponent.Cast(m_Pilot.FindComponent(CompartmentAccessComponent)); + if (access) PrintFormat("ERR POWERED SEATING ACCESS: gettingIn=%1 gettingOut=%2", access.IsGettingIn(), access.IsGettingOut()); + Physics physics = m_Aircraft.GetPhysics(); + vector entityTransform[4]; m_Aircraft.GetWorldTransform(entityTransform); + if (physics) PrintFormat("ERR POWERED SEATING PHYSICS: dynamic=%1 awake=%2 speed=%3 angularSpeed=%4 entityUp=%5 entityOrigin=%6", physics.IsDynamic(), physics.IsActive(), physics.GetVelocity().Length(), physics.GetAngularVelocity().Length(), entityTransform[1][1], entityTransform[3]); + vector nativeTransform[4]; m_Simulation.GetWorldTransform(nativeTransform); + bool valid = m_Simulation.IsValid(); + bool nativeContact = m_Simulation.HasAnyGroundContact(); + bool parkedSupport = ERR_CasualtyGroundSupport.Parked(m_Aircraft, now >= m_StageDeadline); + PrintFormat("ERR POWERED SEATING SIMULATION: valid=%1 nativeContact=%2 parkedSupport=%3 engineOn=%4 nativeUp=%5 nativeOrigin=%6", valid, nativeContact, parkedSupport, m_Controller.IsEngineOn(), nativeTransform[1][1], nativeTransform[3]); + } + void Stop() + { + if (m_Stopped) return; + // Input cleanup is confined to the same unclaimed test pilot/aircraft. + bool ours = m_Bound && OwnPilot() && !PlayerPresent(); + bool ownSeat = ours && m_Seat && m_Seat.GetOccupant() == m_Pilot && m_Controller && m_Controller.GetPilotCompartmentSlot() == m_Seat && CompartmentAccessComponent.GetVehicleIn(m_Pilot) == m_Aircraft; + RestoreAutohover(ownSeat); + m_Stopped = true; m_Bound = false; + if (s_Current == this) s_Current = null; + if (ours && m_ActionInputs && OwnActionManager(m_OwnedActions)) + { + WriteActionPair(m_OwnedActions, "HelicopterCollectiveIncrease", "HelicopterCollectiveDecrease", 0); + WriteActionPair(m_OwnedActions, "HelicopterCyclicForward", "HelicopterCyclicBack", 0); + WriteActionPair(m_OwnedActions, "HelicopterCyclicRight", "HelicopterCyclicLeft", 0); + WriteActionPair(m_OwnedActions, "HelicopterAntiTorqueRight", "HelicopterAntiTorqueLeft", 0); + } + if (ours && !m_ActionInputs && m_Input) + { + m_Input.SetVehicleCollective(0); m_Input.SetVehicleThrottle(0); + m_Input.SetVehicleCyclicForward(0); m_Input.SetVehicleCyclicAside(0); m_Input.SetVehicleAntiTorque(0); + } + if (ours && m_Controller && m_ModeSaved) m_Controller.SetCollectiveMode(m_OriginalMode); + m_OwnedActions = null; + if (m_PilotLODSaved && m_PilotAgent && OwnPilot() && !PlayerPresent()) m_PilotAgent.SetPermanentLOD(m_OriginalPilotLOD); + if (m_Group && m_Group.GetPlayerCount(true) == 0) m_Group.SetPermanentLOD(-1); + // Keep real airborne/failed test actors for diagnosis and mode-owned cleanup. + // Stop never repairs, stabilizes, teleports, refuels or replaces them. + } + protected bool BeginTranslation(float now, vector position, vector fallback) + { + if (!Check(m_TranslationMode && !m_TranslationFrozen && m_Stage == 4 && m_ActionInputs && m_AutohoverMode && AutohoverReady(), "translation starts once after the original native hover stage")) return false; + vector target; + if (!Check(ERR_PoweredFlightRules.TranslationTarget(m_Home, position, fallback, target), "frozen four-metre horizontal target remains within five metres of original home")) return false; + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + if (!Check(signals && signals.FindSignal("MainRotorCyclicForward") >= 0 && signals.FindSignal("MainRotorCyclicAside") >= 0, "existing native cyclic signals available for translation observation")) return false; + m_TranslationOrigin = position; + m_TranslationTarget = target; + m_TranslationFrozen = true; + m_Stage = 5; m_StageDeadline = now + 45000; m_Stable = -1; m_NextLog = 0; + PrintFormat("ERR POWERED TRANSLATION BEGIN: origin=%1 target=%2 originalHome=%3 deadline=%4 overallDeadline=%5", m_TranslationOrigin, m_TranslationTarget, m_Home, m_StageDeadline, m_Deadline); + return true; + } + protected bool CheckTranslation(float now, vector position, float height, float speed, float upright, float drift) + { + if (!ERR_PoweredFlightRules.TranslationActive(m_TranslationMode, m_TranslationFrozen, m_ActionInputs, m_AutohoverMode, m_Stage)) return Check(false, "translation retains its selected inputs and frozen stage ownership"); + if (now >= m_StageDeadline) return Check(false, "four-metre translation and five-second target hold finish within 45 seconds"); + vector velocity = m_Simulation.GetVelocity(); + vector horizontal = velocity; horizontal[1] = 0; + bool held = m_TranslationUpdates >= 3 && ERR_PoweredFlightRules.TranslationHeld(m_Simulation.HasAnyGroundContact(), height, speed, velocity[1], upright, drift, horizontal.Length(), vector.DistanceXZ(position, m_TranslationTarget), vector.DistanceXZ(position, m_TranslationOrigin)); + if (!held) m_Stable = -1; + if (held && m_Stable < 0) m_Stable = now; + if (m_Stable < 0 || now - m_Stable < 5000) return true; + if (!Check(true, "actual horizontal translation reaches frozen target and holds five seconds at 7–9m with horizontal speed below 0.25m/s")) return false; + m_TranslationProven = true; + m_Stage = 6; m_StageDeadline = now + 65000; m_Stable = -1; + return true; + } + int Tick(float now) + { + if (m_Complete) return 1; + if (m_Stopped) return -1; + m_Started = true; + if (!Enabled() || !m_Mode || now >= m_Deadline || ERR_MissionRules.Terminal(m_Mode.Phase())) { Check(false, "server fixture active within 240-second bound"); return -1; } + if (!ERR_PoweredFlightRules.TranslationInputs(m_TranslationMode, m_ActionInputs, m_AutohoverMode)) { Check(false, "translation requires actor-local actions and selected native autohover before allocation"); return -1; } + if (m_PreviousTick >= 0 && (now < m_PreviousTick || now - m_PreviousTick > 1500)) { m_Stable = -1; m_PositiveSignalSince = -1; m_NegativeSignalSince = -1; } + m_PreviousTick = now; + if (m_Stage == 0) + { + if (!m_Mode.ExtractionVehicle()) return 0; + vector pad; + if (!Check(FindPad(pad), "separate clear flat test pad found; extraction vehicle untouched")) return -1; + m_TestPad = pad; + m_Aircraft = Vehicle.Cast(ERR_Actors.Spawn(AIRCRAFT, pad)); + m_Group = SCR_AIGroup.Cast(ERR_Actors.Spawn(GROUP, pad + "20 0 0")); + m_Mode.Own(m_Aircraft); m_Mode.Own(m_Group); + if (!Check(m_Aircraft && m_Group, "one stock unarmed airframe and own empty group created once")) return -1; + // Group_USSR_Base authors six queued members; use the memberless native + // base group so adding one pilot cannot initiate a hidden crew allocation. + if (!Check(m_Group.InitFactionKey("USSR") && m_Group.GetFactionName() == "USSR", "memberless native group receives explicit USSR faction")) return -1; + m_Group.SetPermanentLOD(0); m_Group.ActivateAI(); + m_Stage = 8; m_StageDeadline = now + 30000; return 0; + } + if (m_Stage == 8) + { + if (!m_Aircraft || !m_Group || PlayerPresent()) { Check(false, "initial fixture airframe/group remain owned and unclaimed"); return -1; } + bool componentsReady = PollNativeFlightComponents(now); + if (now >= m_StageDeadline) { Check(false, "native flight components and empty primary pilot seat initialize within shared 30-second preparation bound"); return -1; } + if (!componentsReady) return 0; + if (!Check(!m_PilotSpawnRequested && m_Group.GetAgentsCount() == 0, "native components initialized before the only pilot allocation")) return -1; + m_PilotSpawnRequested = true; + AIGroup nativeGroup = m_Group; + m_Pilot = m_Seat.SpawnCharacterInCompartment(PILOT, nativeGroup, GROUP); + if (m_Pilot) m_Mode.Own(m_Pilot); + if (!Check(m_Pilot && nativeGroup == m_Group, "one existing vanilla character spawned through native pilot-seat mechanism")) return -1; + AIControlComponent pilotControl = AIControlComponent.Cast(m_Pilot.FindComponent(AIControlComponent)); + if (pilotControl) m_PilotAgent = pilotControl.GetControlAIAgent(); + if (!Check(m_PilotAgent && OwnPilot(), "single native pilot owns its actual control agent and fixture group")) return -1; + // Group LOD does not establish each member's own native LOD. Keep the + // distant fixture pilot's actual control agent active, as physical crews do. + m_OriginalPilotLOD = m_PilotAgent.GetPermanentLOD(); m_PilotLODSaved = true; + m_PilotAgent.SetPermanentLOD(0); m_PilotAgent.ActivateAI(); + m_Stage = 1; return 0; + } + if (m_Stage == 1) + { + if (!m_Aircraft || !m_Group || !m_Controller || !m_Simulation || !m_Seat) { Check(false, "same native flight objects survive seating"); return -1; } + SeatingDiagnostic(now); + Physics physics = m_Aircraft.GetPhysics(); + if (physics && physics.IsDynamic() && m_Simulation.IsValid() && m_Wakes == 0) { m_Wakes = 1; physics.SetActive(ActiveState.ACTIVE); m_Stable = -1; return 0; } + if (now >= m_StageDeadline) { Check(false, "initial native seating and ground settling complete in 30 seconds"); return -1; } + if (!m_Wakes || !OwnPilot() || m_Seat.GetOccupant() != m_Pilot || m_Controller.GetPilotCompartmentSlot() != m_Seat || !ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft)) { m_Stable = -1; return 0; } + if (m_Stable < 0) m_Stable = now; + if (now - m_Stable < 1000) return 0; + m_Character = CharacterControllerComponent.Cast(m_Pilot.FindComponent(CharacterControllerComponent)); + if (m_Character) m_Input = m_Character.GetInputContext(); + if (!Check(m_Input && m_Group.GetAgentsCount() == 1 && PoweredAuthority(), "one living native AI pilot physically occupies its own fueled helicopter")) return -1; + m_Home = m_Aircraft.GetOrigin(); m_Heading = m_Aircraft.GetYawPitchRoll()[0]; + m_OriginalMode = m_Controller.GetCollectiveMode(); m_ModeSaved = true; + m_InitialFuel = m_Fuel.GetTotalFuel(); m_Bound = true; + m_Stage = 2; m_StageDeadline = now + 5000; return 0; + } + Diagnostic(now); + if (!PoweredAuthority() || !m_ReadbackOK || !AutohoverReady()) { Check(false, "current owned conscious pilot, fuel, rotors, selected autohover and exact input readback remain valid"); return -1; } + if (m_Stage == 2) + { + if (now >= m_StageDeadline) { Check(false, "native AI input and helicopter preparation hooks execute before engine start"); return -1; } + if (m_PilotPreparations < 3 || m_ControlUpdates < 3 || m_HelicopterUpdates < 3) return 0; + if (!Check(m_Controller.GetCollectiveMode() == CollectiveMode.Direct && m_Input.GetVehicleCollective() == 0, "owned native input hooks apply minimum collective in Direct mode")) return -1; + if (!Check(!m_Controller.IsEngineOn(), "native engine remains off until the complete footprint is qualified")) return -1; + vector measuredOrigin; + float measuredRadius; + if (!Check(ERR_NativeFlightFootprint.Measure(m_Aircraft, m_Simulation, m_TestPad, measuredOrigin, measuredRadius), "actual complete model and rotor footprint fits the cleared flight column before engine start")) return -1; + // Baseline the actual entity world origin used by geometry and telemetry, + // after native placement; this never changes an entity transform. + m_Home = measuredOrigin; + m_StartRequests = 1; + bool started = m_Controller.StartEngine(); + PrintFormat("ERR POWERED ENGINE REQUEST: StartEngine returned=%1; normal procedure, no force-start or simulation EngineStart", started); + m_Stage = 3; m_StageDeadline = now + 65000; return 0; + } + if (now - m_LastControl > 1000) { Check(false, "native control callback remains live during test flight"); return -1; } + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + float height = transform[3][1] - m_Home[1]; + float speed = m_Simulation.GetVelocity().Length(); + float drift = vector.DistanceXZ(transform[3], m_Home); + if (height > 18 || height < -3 || drift >= 8 || transform[1][1] < 0.85) { Check(false, "physical test stays inside height, drift and tilt safety envelope"); return -1; } + if (m_Stage == 3) + { + if (now >= m_StageDeadline) { Check(false, "normal engine startup and native rotor RPM complete within 65 seconds"); return -1; } + float targetRPM = m_Simulation.RotorGetRPMTarget(0); + if (!m_Controller.IsEngineOn() || targetRPM <= 0 || m_Simulation.RotorGetRPM(0) < targetRPM * 0.9 || m_Fuel.GetTotalFuel() >= m_InitialFuel) return 0; + if (!Check(m_StartRequests == 1 && m_Fuel.GetTotalFuel() < m_InitialFuel, "single normal engine start spins physical rotor and consumes native fuel")) return -1; + m_PositiveGateUpdates = m_ControlUpdates; m_PositiveSignalSince = -1; + m_Stage = 9; m_StageDeadline = now + 3000; return 0; + } + if (((m_Stage >= 4 && m_Stage <= 6) || m_Stage == 9 || m_Stage == 10) && !m_Controller.IsEngineOn()) { Check(false, "powered flight retains real running engine"); return -1; } + if (m_Stage == 9) + { + if (now >= m_StageDeadline) { Check(false, "positive native collective reaches actual rotor signal before climb within three seconds"); return -1; } + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + int signalIndex = -1; + if (signals) signalIndex = signals.FindSignal("MainRotorCollective"); + if (!Check(signalIndex >= 0, "existing native main rotor collective signal available for consumption proof")) return -1; + float observed = signals.GetSignalValue(signalIndex); + bool matched = m_ControlUpdates >= m_PositiveGateUpdates + 3 && ERR_PoweredFlightRules.CollectiveObserved(m_Input.GetVehicleCollective(), observed); + PrintFormat("ERR POWERED COLLECTIVE GATE: command=%1 rotorSignal=%2 applyUpdates=%3 matched=%4", m_Input.GetVehicleCollective(), observed, m_ControlUpdates - m_PositiveGateUpdates, matched); + if (!matched) { m_PositiveSignalSince = -1; return 0; } + if (m_PositiveSignalSince < 0) m_PositiveSignalSince = now; + if (now - m_PositiveSignalSince < 500) return 0; + if (!Check(true, "positive collective persists in existing native rotor signal across actual ticks before climb")) return -1; + if (m_ActionInputs) + { + m_NegativeGateUpdates = m_ControlUpdates; m_NegativeSignalSince = -1; + m_Stage = 10; m_StageDeadline = now + 3000; return 0; + } + if (!Check(BeginAutohover(), "selected native autohover enabled after direct collective consumption proof; exact owned controller readback")) return -1; + m_Collective = -0.8; m_Stage = 4; m_StageDeadline = now + 65000; m_Stable = -1; return 0; + } + if (m_Stage == 10) + { + if (now >= m_StageDeadline) { Check(false, "negative actor collective reaches actual rotor signal before climb within three seconds"); return -1; } + if (!Check(m_ActionInputs && m_Controller.GetCollectiveMode() == CollectiveMode.Direct && !m_Controller.GetAutohoverEnabled(), "negative consumption proof uses owned actor actions in Direct mode with autohover off")) return -1; + SignalsManagerComponent negativeSignals = m_Controller.GetSignalsManager(); + int negativeIndex = -1; + if (negativeSignals) negativeIndex = negativeSignals.FindSignal("MainRotorCollective"); + if (!Check(negativeIndex >= 0, "existing native main rotor collective signal available for negative proof")) return -1; + float negativeObserved = negativeSignals.GetSignalValue(negativeIndex); + bool negativeMatched = m_ControlUpdates >= m_NegativeGateUpdates + 3 && ERR_PoweredFlightRules.NegativeCollectiveObserved(m_Input.GetVehicleCollective(), negativeObserved); + PrintFormat("ERR POWERED NEGATIVE COLLECTIVE GATE: command=%1 rotorSignal=%2 actionUpdates=%3 matched=%4", m_Input.GetVehicleCollective(), negativeObserved, m_ControlUpdates - m_NegativeGateUpdates, negativeMatched); + if (!negativeMatched) { m_NegativeSignalSince = -1; return 0; } + if (m_NegativeSignalSince < 0) m_NegativeSignalSince = now; + if (now - m_NegativeSignalSince < 500) return 0; + if (!Check(true, "negative actor collective persists in existing native rotor signal across actual ticks before signed flight demand")) return -1; + m_SignedCollectiveProven = true; + if (!Check(BeginAutohover(), "selected native autohover enabled only after both direct collective consumption proofs")) return -1; + m_Collective = -0.8; m_Stage = 4; m_StageDeadline = now + 65000; m_Stable = -1; return 0; + } + if (m_TranslationMode && m_Stage == 5) + { + if (!CheckTranslation(now, transform[3], height, speed, transform[1][1], drift)) return -1; + return 0; + } + if (m_Stage == 4 || m_Stage == 5) + { + bool hover = !m_Simulation.HasAnyGroundContact() && ERR_PoweredFlightRules.Hover(height, speed, m_Simulation.GetVelocity()[1], transform[1][1], drift); + if (!hover) m_Stable = -1; + if (hover && m_Stable < 0) m_Stable = now; + if (now >= m_StageDeadline) { Check(false, "actual powered takeoff and five-second stable hover reached in 65 seconds"); return -1; } + if (m_Stable >= 0 && now - m_Stable >= 5000) + { + if (!Check(m_ControlUpdates > 100 && m_Fuel.GetTotalFuel() < m_InitialFuel - 0.05, "actual 7–9 metre powered hover stable five seconds with native fuel consumption")) return -1; + if (m_TranslationMode) + { + if (!BeginTranslation(now, transform[3], transform[0])) return -1; + return 0; + } + m_Stage = 6; m_StageDeadline = now + 65000; m_Stable = -1; + } + return 0; + } + if (m_Stage == 6) + { + if (m_TranslationMode && !m_TranslationProven) { Check(false, "translation reaches its frozen target before landing"); return -1; } + bool landed = ERR_PoweredFlightRules.Landed(m_Simulation.HasAnyGroundContact(), height, speed, m_Simulation.GetAngularVelocity().Length(), transform[1][1]); + if (!landed) m_Stable = -1; + if (landed && m_Stable < 0) m_Stable = now; + if (now >= m_StageDeadline) { Check(false, "actual native contact landing reached within 65 seconds"); return -1; } + if (m_Stable < 0 || now - m_Stable < 2000) return 0; + if (!Check(drift < 8 && m_Fuel.GetTotalFuel() < m_InitialFuel - 0.05 && m_Wakes == 1 && m_StartRequests == 1, "same physical aircraft and living AI pilot land with stable ground contact after powered hover")) return -1; + m_Controller.StopEngine(false); + m_Stage = 7; m_StageDeadline = now + 15000; return 0; + } + if (m_Stage == 7) + { + if (now >= m_StageDeadline) { Check(false, "normal engine shutdown completed on actual ground"); return -1; } + if (m_Controller.IsEngineOn()) return 0; + PrintFormat("ERR POWERED SHUTDOWN: height=%1 speed=%2 angular=%3 up=%4 contact=%5 authority=%6 collective=%7 rotorRPM=%8", height, speed, m_Simulation.GetAngularVelocity().Length(), transform[1][1], m_Simulation.HasAnyGroundContact(), PoweredAuthority(), m_Input.GetVehicleCollective(), m_Simulation.RotorGetRPM(0)); + if (!Check(ERR_PoweredFlightRules.Landed(m_Simulation.HasAnyGroundContact(), height, speed, m_Simulation.GetAngularVelocity().Length(), transform[1][1]) && PoweredAuthority(), "native engine off after contact landing; no transform/velocity/health/fuel correction")) return -1; + Stop(); m_Complete = true; return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c new file mode 100644 index 0000000..7cd8883 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c @@ -0,0 +1,167 @@ +#ifdef WORKBENCH +// Disposable-world fixture. Direct native door boundary, gate damage and real admitted character; +// deliberate asynchronous repositioning tests sampling, not walking/input/MP. +class ERR_NativePrisonBreachProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Player; + protected vector m_Center; + protected vector m_Target; + protected int m_Step; + protected int m_Transitions; + protected float m_Wait; + protected float m_Deadline; + void ERR_NativePrisonBreachProbe(ERR_GameMode mode, IEntity player) + { + m_Mode = mode; m_Player = player; + m_Mode.OnPhaseChanged().Insert(PhaseChanged); + } + protected void PhaseChanged(ERR_Phase previous, ERR_Phase current) + { + if (previous == ERR_Phase.PRISON && current == ERR_Phase.RADIO_SEARCH) m_Transitions++; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: prison-breach " + detail); return true; } + Print("ERR SMOKE FAIL: prison-breach " + detail, LogLevel.ERROR); + Stop(); + return false; + } + protected void Move(vector offset) + { + vector transform[4]; + m_Player.GetWorldTransform(transform); + m_Target = ERR_Actors.Ground(m_Center + offset); + transform[3] = m_Target; + ChimeraCharacter.Cast(m_Player).Teleport(transform); + } + protected bool Arrived() { return vector.Distance(m_Player.GetOrigin(), m_Target) < 1; } + void Stop() { if (m_Mode) m_Mode.OnPhaseChanged().Remove(PhaseChanged); } + int Tick(float now) + { + if (m_Deadline == 0) m_Deadline = now + 45000; + if (now > m_Deadline || !m_Mode.Active() || !ERR_Actors.CanFight(m_Player) || !m_Mode.Players().CurrentActor(m_Player)) + { + vector observed; + if (m_Player) observed = m_Player.GetOrigin(); + PrintFormat("ERR PRISON BREACH STATE: step=%1 player=%2 target=%3 phase=%4", m_Step, observed, m_Target, m_Mode.Phase()); + Check(false, "deadline or canonical conscious participant lost"); + return -1; + } + if (now < m_Wait) return 0; + ERR_PrisonEscapeService escape = m_Mode.PrisonEscape(); + if (m_Step == 0) + { + if (escape) Print("ERR PRISON BREACH REGISTRATION: " + escape.RegistrationReason()); + if (!Check(escape && escape.Registered() && escape.Gate() && !escape.GateLost() && m_Mode.Phase() == ERR_Phase.PRISON, "actual authored gate registered before any breach")) return -1; + array locations = {}; + m_Mode.Locations(locations); + foreach (ERR_LocationComponent location : locations) + if (location.Kind() == ERR_LocationKind.PRISON) m_Center = location.Position(); + Move("1.5 0 -4"); + m_Step = 1; m_Wait = now + 1500; + return 0; + } + if (m_Step == 1) + { + if (!Arrived() || !escape.ProbeArmed(m_Player)) return 0; + if (!Check(m_Mode.Phase() == ERR_Phase.PRISON && m_Transitions == 0, "inside sample alone does not complete prison")) return -1; + IEntity gate = escape.Gate(); + BaseDoorComponent door = BaseDoorComponent.Cast(gate.FindComponent(BaseDoorComponent)); + BaseActionsManagerComponent manager = BaseActionsManagerComponent.Cast(gate.FindComponent(BaseActionsManagerComponent)); + array actions = {}; + if (manager) manager.GetActionsList(actions); + ERR_PrisonDoorAction guardedAction; + foreach (BaseUserAction action : actions) + { + ERR_PrisonDoorAction candidate = ERR_PrisonDoorAction.Cast(action); + if (candidate && candidate.GetOwner() == gate) guardedAction = candidate; + } + ERR_SiteRuntime prison = m_Mode.Sites().Find("everon-prison-1"); + array guards = {}; + if (prison && prison.Group) prison.Group.GetAgents(guards); + IEntity actualGuard; + foreach (AIAgent guard : guards) + if (guard && ERR_Actors.CanFight(guard.GetControlledEntity()) && !ERR_Actors.Player(guard.GetControlledEntity())) { actualGuard = guard.GetControlledEntity(); break; } + if (!Check(door && guardedAction && actualGuard && Math.AbsFloat(door.GetNormalizedDoorState()) < 0.01 && !door.IsOpening(), "actual intact gate is closed with successor door action and original living guard")) return -1; + if (!Check(!guardedAction.CanBePerformedScript(actualGuard) && !guardedAction.CanBePerformedScript(m_Player), "locked phase rejects both original AI and actual prisoner action permission")) return -1; + // Direct calls deliberately match SCR_AIOpenDoor's execution boundary. + // This is not autonomous AI navigation or a player held-input test. + guardedAction.PerformAction(gate, actualGuard); + guardedAction.PerformAction(gate, m_Player); + m_Step = 11; m_Wait = now + 1500; + return 0; + } + if (m_Step == 11) + { + IEntity gate = escape.Gate(); + BaseDoorComponent door; + if (gate) door = BaseDoorComponent.Cast(gate.FindComponent(BaseDoorComponent)); + if (!Check(door && !escape.GateLost() && Math.AbsFloat(door.GetNormalizedDoorState()) < 0.01 && !door.IsOpening() && m_Mode.Phase() == ERR_Phase.PRISON && m_Transitions == 0, "direct AI/player PerformAction cannot open locked native gate or advance progression")) return -1; + SCR_DestructionMultiPhaseComponent damage = SCR_DestructionMultiPhaseComponent.Cast(gate.FindComponent(SCR_DestructionMultiPhaseComponent)); + if (!Check(damage && damage.GetDefaultHitZone(), "actual gate has its inherited multiphase destruction component and hit zone")) return -1; + PrintFormat("ERR PRISON BREACH DAMAGE: health=%1 enabled=%2 threshold=%3", damage.GetHealth(), damage.IsDamageHandlingEnabled(), damage.GetTotalDestructionThreshold()); + vector hit[3]; hit[0] = gate.GetOrigin(); hit[1] = "0 0 1"; hit[2] = "0 0 -1"; + SCR_DamageContext context = new SCR_DamageContext(EDamageType.TRUE, 100000, hit, gate, damage.GetDefaultHitZone(), Instigator.CreateInstigator(m_Player), null, -1, -1); + damage.HandleDamage(context); + m_Step = 2; m_Wait = now + 1500; + return 0; + } + if (m_Step == 2) + { + if (!escape.GateLost()) return 0; + PrintFormat("ERR PRISON BREACH GATE: remaining=%1 lost=%2", escape.Gate(), escape.GateLost()); + ERR_PrisonEscapeService late = new ERR_PrisonEscapeService(m_Mode); + late.PhaseChanged(ERR_Phase.PREPARING, ERR_Phase.PRISON); + bool refusedLate = !late.Registered() && !late.GateLost(); + late.Stop(); + if (!Check(refusedLate, "fresh registration after native gate loss stays unregistered and cannot grant escape")) return -1; + if (!Check(m_Mode.Phase() == ERR_Phase.PRISON && m_Transitions == 0, "native gate destruction alone cannot advance the round")) return -1; + Move("1.5 0 -60"); + m_Step = 3; m_Wait = now + 2500; + return 0; + } + if (m_Step == 3) + { + if (!Arrived()) return 0; + if (!Check(m_Mode.Phase() == ERR_Phase.PRISON && !escape.ProbeArmed(m_Player), "actual far displacement is rejected and clears inside continuity")) return -1; + Move("1.5 0 -9"); + m_Step = 4; m_Wait = now + 2500; + return 0; + } + if (m_Step == 4) + { + if (!Arrived()) return 0; + if (!Check(m_Mode.Phase() == ERR_Phase.PRISON && !escape.ProbeArmed(m_Player), "outside-only arrival cannot finish prison")) return -1; + Move("1.5 0 -4"); + m_Step = 5; m_Wait = now + 1500; + return 0; + } + if (m_Step == 5) + { + if (!Arrived() || !escape.ProbeArmed(m_Player)) return 0; + Move("1.5 0 -9"); + m_Step = 6; m_Wait = now + 1500; + return 0; + } + if (m_Step == 6) + { + if (!Arrived() || m_Mode.Phase() == ERR_Phase.PRISON) return 0; + if (!Check(m_Mode.Phase() == ERR_Phase.RADIO_SEARCH && m_Transitions == 1, "bounded inside-to-outside crossing advances once through ordinary phase event")) return -1; + ERR_SiteRuntime first = m_Mode.Sites().Find("everon-supply-1"); + ERR_SiteRuntime second = m_Mode.Sites().Find("everon-supply-2"); + if (!Check(first && second && first.Location.Knowledge() == 2 && second.Location.Knowledge() == 2, "ordinary escape handlers reveal both scavenging sites")) return -1; + m_Step = 7; m_Wait = now + 2500; + return 0; + } + if (m_Step == 7) + { + if (!Check(m_Mode.Phase() == ERR_Phase.RADIO_SEARCH && m_Transitions == 1, "later production ticks do not repeat prison completion")) return -1; + Stop(); + m_Step = 8; + return 1; + } + return 1; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c new file mode 100644 index 0000000..8ac8bae --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c @@ -0,0 +1,210 @@ +#ifdef WORKBENCH +// One real controller plus eleven disposable physical characters. This probes +// native inventory and transfer compatibility, not twelve clients or UI pickup. +class ERR_NativePrisonerProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Player; + protected ref array m_Actors = {}; + protected ref map m_Reservations = new map(); + protected ref ERR_SpawnPlacement m_Placement = new ERR_SpawnPlacement(); + protected ref map m_Expected = new map(); + protected ERR_SiteRuntime m_Cache; + protected InventoryStorageManagerComponent m_Source; + protected SCR_InventoryStorageManagerComponent m_Inventory; + protected IEntity m_Document; + protected vector m_Original[4]; + protected int m_Step; + protected int m_Checked; + protected float m_Wait; + void ERR_NativePrisonerProbe(ERR_GameMode mode, IEntity player) + { + m_Mode = mode; m_Player = player; + m_Expected.Set("Prefabs/Characters/HeadGear/Hat_Patrol_US_01/Hat_Patrol_US_01.et", 1); + m_Expected.Set("Prefabs/Characters/Uniforms/Jacket_US_BDU_rolledup.et", 1); + m_Expected.Set("Prefabs/Characters/Uniforms/Pants_US_BDU.et", 1); + m_Expected.Set("Prefabs/Characters/Footwear/CombatBoots_US_01.et", 1); + m_Expected.Set("Prefabs/Items/Equipment/Watches/Watch_SandY184A.et", 1); + m_Expected.Set("Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_US_01.et", 2); + m_Expected.Set("Prefabs/Items/Medicine/Tourniquet_01/Tourniquet_US_01.et", 1); + m_Expected.Set("Prefabs/Items/Medicine/MorphineInjection_01/MorphineInjection_01.et", 1); + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: prisoner " + detail); return true; } + Print("ERR SMOKE FAIL: prisoner " + detail, LogLevel.ERROR); + Stop(); + return false; + } + protected void Positions(string stage) + { + foreach (int index, IEntity actor : m_Actors) + { + if (!actor) continue; + vector lower, upper; + actor.GetWorldBounds(lower, upper); + PrintFormat("ERR PRISONER POSITION: stage=%1 index=%2 requested=%3 actual=%4 boundsMin=%5 boundsMax=%6", stage, index, m_Reservations.Get(index), actor.GetOrigin(), lower, upper); + } + } + protected bool Kit(IEntity actor, int index) + { + if (!Check(actor && actor.GetPrefabData() && actor.GetPrefabData().GetPrefabName() == "{3FF693715C9F8928}Prefabs/ERR/Prisoner.et", "character " + index.ToString() + " uses successor resource")) return false; + if (!Check(actor.FindComponent(SCR_CharacterDamageManagerComponent) && actor.FindComponent(CharacterControllerComponent) && actor.FindComponent(SCR_SalineStorageComponent) && actor.FindComponent(SCR_TourniquetStorageComponent) && actor.FindComponent(CompartmentAccessComponent), "character " + index.ToString() + " retains vanilla health, treatment and vehicle components")) return false; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(actor.FindComponent(InventoryStorageManagerComponent)); + if (!Check(inventory != null, "character inventory exists")) return false; + array items = {}; + inventory.GetItems(items); + map counts = new map(); + int identityItems; + array seen = {}; + foreach (IEntity item : items) + { + if (!item || !item.GetPrefabData()) return Check(false, "inventory item has no resource identity"); + ResourceName resource = item.GetPrefabData().GetPrefabName(); + PrintFormat("ERR PRISONER ITEM: actor=%1 item=%2 resource=%3 duplicateReference=%4", index, item, resource, seen.Contains(item)); + if (seen.Contains(item)) continue; + seen.Insert(item); + // Vanilla creates identification on possession, death or unconsciousness. + // Preserve this native identity record; it is not mission navigation equipment. + if (resource.EndsWith("Prefabs/Items/PersonalBelongings/PersonalBelongings_US.et")) + { + if (!Check(ERR_Actors.Player(actor) && item.FindComponent(SCR_IdentityInventoryItemComponent), "possessed prisoner retains native identification")) return false; + identityItems++; + continue; + } + // A non-equipment belt is authored by the rolled-up vanilla jacket itself. + if (resource.EndsWith("Prefabs/Characters/Vests/Vest_ALICE/Vest_ALICE_belt_dummy.et")) continue; + bool allowed = false; + foreach (string path, int expected : m_Expected) + { + if (!resource.EndsWith(path)) continue; + counts.Set(path, counts.Get(path) + 1); + allowed = true; + break; + } + if (!allowed) return Check(false, "unexpected starter inventory resource: " + resource); + } + int expectedIdentity; + if (ERR_Actors.Player(actor)) expectedIdentity = 1; + if (!Check(identityItems == expectedIdentity, "native identification is created exactly once for the possessed prisoner")) return false; + foreach (string path, int expected : m_Expected) + if (counts.Get(path) != expected) return Check(false, string.Format("character %1 expected %2 of %3, found %4", index, expected, path, counts.Get(path))); + PrintFormat("ERR PRISONER INVENTORY: character=%1 storedItems=%2", index, items.Count()); + return Check(true, "character " + index.ToString() + " has exact clothing/watch/medical kit and no inherited navigation, radio, binoculars, tools, flares or weapons"); + } + protected bool Contains(InventoryStorageManagerComponent inventory, IEntity item) + { + if (!inventory || !item) return false; + array items = {}; + inventory.GetItems(items); + return items.Contains(item); + } + void Stop() + { + // Return borrowed stock when its source still exists; never spawn replacements. + if (m_Document && m_Cache && m_Cache.Container && m_Inventory && Contains(m_Inventory, m_Document)) + { + BaseInventoryStorageComponent destination = BaseInventoryStorageComponent.Cast(m_Cache.Container.FindComponent(BaseInventoryStorageComponent)); + if (destination) m_Inventory.TryMoveItemToStorage(m_Document, destination); + } + for (int i = 1; i < m_Actors.Count(); i++) ERR_Actors.DeleteSpawned(m_Actors[i]); + m_Reservations.Clear(); + } + int Tick(float now) + { + if (now < m_Wait) return 0; + if (m_Step == 0) + { + if (!Check(m_Mode && m_Mode.Phase() == ERR_Phase.PRISON && ERR_Actors.Player(m_Player) && ERR_Actors.CanFight(m_Player), "fixture begins with a real conscious prisoner")) return -1; + m_Player.GetWorldTransform(m_Original); + m_Actors.Insert(m_Player); + m_Reservations.Set(0, m_Player.GetOrigin()); + Positions("initial"); + m_Step = 1; + m_Wait = now + 1000; + return 0; + } + if (m_Step == 1) + { + if (m_Actors.Count() < 12) + { + vector position; + bool available = m_Placement.Prison(m_Mode.PrisonPosition(), m_Reservations, position); + if (!available) Positions("no-clear-slot"); + if (!Check(available, "bounded clear prison slot exists for next test character")) return -1; + IEntity actor = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, position); + if (!Check(actor != null, "physical test prisoner created")) return -1; + m_Mode.Own(actor); + m_Reservations.Set(m_Actors.Count(), position); + m_Actors.Insert(actor); + DamageManagerComponent damage = DamageManagerComponent.Cast(actor.FindComponent(DamageManagerComponent)); + if (!Check(damage != null, "test prisoner damage component exists")) return -1; + damage.EnableDamageHandling(false); + m_Wait = now + 500; + return 0; + } + Positions("all-spawned"); + m_Step = 2; m_Wait = now + 1500; + return 0; + } + if (m_Step == 2) + { + if (m_Checked == 0) Positions("settled"); + if (!Kit(m_Actors[m_Checked], m_Checked)) return -1; + m_Checked++; + if (m_Checked < 12) return 0; + m_Cache = m_Mode.Sites().Find("everon-supply-1"); + if (!Check(m_Cache && m_Cache.Container, "authored clue source remains available")) return -1; + m_Source = InventoryStorageManagerComponent.Cast(m_Cache.Container.FindComponent(InventoryStorageManagerComponent)); + m_Inventory = SCR_InventoryStorageManagerComponent.Cast(m_Player.FindComponent(SCR_InventoryStorageManagerComponent)); + if (!Check(m_Source && m_Inventory, "source and player inventory managers are usable")) return -1; + array stock = {}; + m_Source.GetItems(stock); + foreach (IEntity item : stock) + { + ERR_DocumentComponent document = ERR_DocumentComponent.Cast(item.FindComponent(ERR_DocumentComponent)); + if (document && document.TargetId() == "everon-radio-1") { m_Document = item; break; } + } + if (!Check(m_Document && m_Inventory, "real finite radio document and player storage found")) return -1; + vector transform[4]; m_Player.GetWorldTransform(transform); + transform[3] = ERR_Actors.Ground(m_Cache.Container.GetOrigin() + "0 0 2"); + ChimeraCharacter.Cast(m_Player).Teleport(transform); + m_Step = 3; m_Wait = now + 1000; + return 0; + } + if (m_Step == 3) + { + BaseInventoryStorageComponent destination = m_Inventory.FindStorageForItem(m_Document); + if (!Check(destination && m_Source.TryMoveItemToStorage(m_Document, destination), "minimal starter clothing accepts a real authored clue transfer")) return -1; + m_Step = 4; m_Wait = now + 1000; + return 0; + } + if (m_Step == 4) + { + if (!Check(Contains(m_Inventory, m_Document) && !Contains(m_Source, m_Document) && m_Mode.Phase() == ERR_Phase.PRISON, "document physically moved without duplication while prison phase remains active")) return -1; + BaseInventoryStorageComponent destination = BaseInventoryStorageComponent.Cast(m_Cache.Container.FindComponent(BaseInventoryStorageComponent)); + if (!Check(destination && m_Inventory.TryMoveItemToStorage(m_Document, destination), "borrowed document returns to finite source")) return -1; + m_Step = 5; m_Wait = now + 1000; + return 0; + } + if (m_Step == 5) + { + if (!Check(Contains(m_Source, m_Document) && !Contains(m_Inventory, m_Document), "borrowed clue restored exactly once")) return -1; + Stop(); + ChimeraCharacter.Cast(m_Player).Teleport(m_Original); + m_Step = 6; m_Wait = now + 1000; + return 0; + } + if (m_Step == 6) + { + for (int i = 1; i < m_Actors.Count(); i++) + if (!Check(!m_Actors[i], "disposable prisoner removed after native cleanup")) return -1; + ERR_PlayerLife life = m_Mode.Players().Get(GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(m_Player)); + if (!Check(ERR_Actors.Player(m_Player) && ERR_Actors.Alive(m_Player) && life && life.UsedLife, "real prisoner and spent life preserved")) return -1; + m_Step = 7; + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c new file mode 100644 index 0000000..37a91a2 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c @@ -0,0 +1,105 @@ +#ifdef WORKBENCH +// Synchronous roster-body fault injection against the real admitted controller. +// No disconnect, possession, account change, network event or native rebind is simulated. +class ERR_NativeProgressionIdentityProbe +{ + protected static ERR_GameMode s_Mode; + protected static IEntity s_Actor; + protected static bool s_DocumentAttempted; + protected static bool s_DocumentPassed; + protected static bool s_Failed; + static bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: progression identity " + detail); return true; } + s_Failed = true; + Print("ERR SMOKE FAIL: progression identity " + detail, LogLevel.ERROR); + return false; + } + static bool Failed() { return s_Failed; } + static bool DocumentPassed() { return s_DocumentPassed; } + static void Stop() { s_Mode = null; s_Actor = null; } + static void BeginRound() { Stop(); s_DocumentAttempted = false; s_DocumentPassed = false; s_Failed = false; } + static bool Begin(ERR_GameMode mode, IEntity actor) + { + BeginRound(); + string enabled; + if (!Replication.IsServer() || !System.GetCLIParam("errBaseSmoke", enabled) || enabled != "1") return false; + if (!mode || !actor || !mode.Players()) return false; + ERR_PlayerLife life = mode.Players().CurrentActor(actor); + PlayerController controller = GetGame().GetPlayerController(); + if (!Check(life && controller && controller.GetControlledEntity() == actor && mode.Phase() == ERR_Phase.PRISON && ERR_Actors.CanFight(actor) && SCR_FactionManager.SGetFaction(actor) == mode.PlayerFaction() && vector.DistanceXZ(actor.GetOrigin(), mode.PrisonPosition()) < 5, "actual local conscious prisoner is canonical and inside lock range")) return false; + IEntity savedActor = life.Actor; + UUID savedIdentity = life.AccountId; + int savedConnection = life.ConnectionId; + bool savedConnected = life.Connected; + bool savedUsedLife = life.UsedLife; + // No callback, assertion, early return or yield between mutation and restore. + life.Actor = null; + bool nativeRosterRefused = mode.Players().CurrentActor(actor) == null; + bool refused = !mode.UnlockPrison(actor); + life.Actor = savedActor; + if (!Check(nativeRosterRefused && refused && mode.Phase() == ERR_Phase.PRISON, "synchronous body-mismatch fault injection rejects normal prison unlock without progression")) return false; + if (!Check(mode.Players().CurrentActor(actor) == life && controller.GetControlledEntity() == savedActor && life.AccountId == savedIdentity && life.ConnectionId == savedConnection && life.Connected == savedConnected && life.UsedLife == savedUsedLife, "exact actor, account, connection and used-life state restored before assertions")) return false; + s_Mode = mode; s_Actor = actor; + Print("ERR IDENTITY FIXTURE LIMIT: synchronous roster Actor=null fault injection, immediately restored; no actual possession, reconnect, foreign faction or multiplayer test"); + return true; + } + static bool WantsDocument(ERR_GameMode mode, IEntity actor) + { + return !s_Failed && !s_DocumentAttempted && mode && mode == s_Mode && actor == s_Actor; + } + static void AttemptDocument() { s_DocumentAttempted = true; } + static void CompleteDocument(bool success) { s_DocumentPassed = success; } +} + +modded class ERR_DiscoveryService +{ + protected override void Recover(IEntity player) + { + if (!ERR_NativeProgressionIdentityProbe.WantsDocument(m_Mode, player)) { super.Recover(player); return; } + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(player.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) { super.Recover(player); return; } + array folders = {}; Folders(inventory, folders); + array locations = {}; m_Mode.Locations(locations); + IEntity candidate; + ERR_LocationComponent target; + foreach (IEntity folder : folders) + { + if (!folder || m_Spent.Contains(folder) || m_Spent.Count() >= 4096) continue; + InventoryItemComponent item = InventoryItemComponent.Cast(folder.FindComponent(InventoryItemComponent)); + ERR_DocumentComponent document = ERR_DocumentComponent.Cast(folder.FindComponent(ERR_DocumentComponent)); + if (!item || !item.GetParentSlot() || !item.GetParentSlot().GetStorage() || !item.GetParentSlot().GetStorage().Contains(folder) || !document) continue; + foreach (ERR_LocationComponent location : locations) + if (location && location.Id() == document.TargetId() && location.Knowledge() < 2) { candidate = folder; target = location; break; } + if (candidate) break; + } + if (!candidate) { super.Recover(player); return; } + ERR_NativeProgressionIdentityProbe.AttemptDocument(); + ERR_PlayerLife life = m_Mode.Players().CurrentActor(player); + PlayerController controller = GetGame().GetPlayerController(); + if (!ERR_NativeProgressionIdentityProbe.Check(life && controller && controller.GetControlledEntity() == player && ERR_Actors.Alive(player) && SCR_FactionManager.SGetFaction(player) == m_Mode.PlayerFaction(), "real held unspent targeted document has an eligible unidentified site and canonical carrier")) return; + array knowledge = {}; + foreach (ERR_LocationComponent location : locations) knowledge.Insert(location.Knowledge()); + int spent = m_Spent.Count(); + int previousKnowledge = target.Knowledge(); + IEntity savedActor = life.Actor; + UUID savedIdentity = life.AccountId; + int savedConnection = life.ConnectionId; + bool savedConnected = life.Connected; + bool savedUsedLife = life.UsedLife; + // Call the actual production implementation directly: no recursion into this + // hook. Restore synchronously before any check, positive call or return. + life.Actor = null; + super.Recover(player); + life.Actor = savedActor; + bool unchanged = m_Spent.Count() == spent && !m_Spent.Contains(candidate); + for (int index = 0; index < locations.Count(); index++) + if (!locations[index] || locations[index].Knowledge() != knowledge[index]) unchanged = false; + if (!ERR_NativeProgressionIdentityProbe.Check(unchanged, "synchronous body-mismatch fault injection neither spends the held document nor changes any discovery knowledge")) return; + if (!ERR_NativeProgressionIdentityProbe.Check(m_Mode.Players().CurrentActor(player) == life && controller.GetControlledEntity() == savedActor && life.AccountId == savedIdentity && life.ConnectionId == savedConnection && life.Connected == savedConnected && life.UsedLife == savedUsedLife, "document rejection restores exact canonical actor and unchanged used-life identity before normal recovery")) return; + super.Recover(player); + bool recovered = m_Spent.Contains(candidate) && m_Spent.Count() > spent && target.Knowledge() > previousKnowledge; + ERR_NativeProgressionIdentityProbe.CompleteDocument(ERR_NativeProgressionIdentityProbe.Check(recovered, "immediately restored ordinary recovery spends the same actual document and advances its target")); + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c new file mode 100644 index 0000000..cd2c545 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c @@ -0,0 +1,367 @@ +#ifdef WORKBENCH +// Only connection membership is simulated for the second character. Native +// actor mutations settle on later frames; isolated service timestamps stay exact. +class ERR_NativeRadioSample : ERR_RadioDefenceService +{ + ref array Members = {}; + int Connections = 2; + void ERR_NativeRadioSample(ERR_GameMode mode) { m_Mode = mode; } + protected override bool IsPlayer(IEntity actor) { return Members.Contains(actor); } + protected override int ConnectedPlayers() { return Connections; } + protected override void Players(out array players) { players.Copy(Members); } +} +class ERR_NativeRadioDefenceProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Player; + protected IEntity m_Second; + protected ERR_LocationComponent m_Radio; + protected FactionAffiliationComponent m_Affiliation; + protected ref ERR_NativeRadioSample m_Service; + protected ref ERR_RadioDefenceService m_Authoritative; + protected int m_Starts; + protected int m_Completions; + protected int m_Changes; + protected int m_OriginalDuration; + protected vector m_Original[4]; + protected bool m_OriginalUnconscious; + protected bool m_Snapshot; + protected bool m_SettingsChanged; + protected bool m_Restored; + protected bool m_RestoreSucceeded; + protected int m_Step; + protected int m_Result; + protected float m_Wait; + protected float m_StateDeadline; + protected float m_NextStateDiagnostic; + + void ERR_NativeRadioDefenceProbe(ERR_GameMode mode, IEntity player, ERR_LocationComponent radio) + { + m_Mode = mode; m_Player = player; m_Radio = radio; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: radio service " + detail); return true; } + Print("ERR SMOKE FAIL: radio service " + detail, LogLevel.ERROR); + m_Result = -1; + Restore(); + return false; + } + protected void Started(ERR_LocationComponent location) { m_Starts++; } + protected void Changed(ERR_RadioDefenceService service) { m_Changes++; } + protected void Completed(ERR_LocationComponent location) + { + m_Completions++; + m_Service.Tick(1000000); // Re-entrant observer cannot complete twice. + } + protected void Move(IEntity actor, vector position) + { + vector transform[4]; actor.GetWorldTransform(transform); + transform[3] = ERR_Actors.Ground(position); + ChimeraCharacter.Cast(actor).Teleport(transform); + } + protected void Conscious(IEntity actor, bool value) + { + CharacterControllerComponent.Cast(actor.FindComponent(CharacterControllerComponent)).SetUnconscious(!value); + } + protected float Distance(string label) + { + float distance = vector.DistanceXZ(m_Player.GetOrigin(), m_Radio.Position()); + PrintFormat("ERR RADIO POSITION: %1 actor=%2 radio=%3 distanceXZ=%4", label, m_Player.GetOrigin(), m_Radio.Position(), distance); + return distance; + } + protected void WaitFor(int step, float now) + { + m_Step = step; + m_Wait = now + 750; + m_StateDeadline = now + 12000; + m_NextStateDiagnostic = now; + } + protected void RecoveryDiagnostic(IEntity actor, string label) + { + CharacterControllerComponent controller; + if (actor) controller = CharacterControllerComponent.Cast(actor.FindComponent(CharacterControllerComponent)); + int unconscious = -1; + int lifeState = -1; + if (controller) + { + unconscious = controller.IsUnconscious(); + lifeState = controller.GetLifeState(); + } + PrintFormat("ERR RADIO RECOVERY: %1 step=%2 alive=%3 canFight=%4 unconscious=%5 lifeState=%6 origin=%7", label, m_Step, ERR_Actors.Alive(actor), ERR_Actors.CanFight(actor), unconscious, lifeState, actor.GetOrigin()); + } + // Native recovery includes controller/ragdoll state transitions beyond one + // frame. Poll the observed state without reissuing SetUnconscious or altering + // health. Dead/missing actors fail immediately; delayed recovery has a bound. + protected bool Recovered(IEntity actor, float now, string label) + { + if (!actor || !ERR_Actors.Alive(actor)) + { + Check(false, label + " lost its living actor during recovery"); + return false; + } + if (ERR_Actors.CanFight(actor)) + { + RecoveryDiagnostic(actor, label + " ready"); + return true; + } + if (now >= m_NextStateDiagnostic) + { + RecoveryDiagnostic(actor, label + " waiting"); + m_NextStateDiagnostic = now + 1000; + } + if (now >= m_StateDeadline) + { + Check(false, label + " did not regain conscious native state within twelve seconds"); + return false; + } + m_Wait = now + 250; + return false; + } + protected void AuthorizationDiagnostic() + { + int id = GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(m_Player); + ERR_PlayerLife life = m_Mode.Players().Get(id); + bool connected = life && life.Connected; + bool usedLife = life && life.UsedLife; + bool sameActor = life && life.Actor == m_Player; + bool friendly = m_Mode.PlayerFaction() && SCR_FactionManager.SGetFaction(m_Player) == m_Mode.PlayerFaction(); + PrintFormat("ERR RADIO AUTH: active=%1 phase=%2 registered=%3 kind=%4 knowledge=%5 serviceState=%6 distance=%7", m_Mode.Active(), m_Mode.Phase(), m_Mode.HasLocation(m_Radio), m_Radio.Kind(), m_Radio.Knowledge(), m_Authoritative.State(), vector.DistanceXZ(m_Player.GetOrigin(), m_Radio.Position())); + PrintFormat("ERR RADIO AUTH: playerId=%1 connected=%2 usedLife=%3 sameActor=%4 friendly=%5 canFight=%6 canBegin=%7", id, connected, usedLife, sameActor, friendly, ERR_Actors.CanFight(m_Player), m_Authoritative.CanBegin(m_Player, m_Radio)); + } + protected void Restore() + { + if (m_Restored) return; + m_Restored = true; + m_RestoreSucceeded = true; + if (m_Service) + { + m_Service.OnStarted().Remove(Started); + m_Service.OnProgressChanged().Remove(Changed); + m_Service.OnCompleted().Remove(Completed); + m_Service.Stop(); + } + if (m_Authoritative) m_Authoritative.Stop(); + if (!GetGame() || !Replication.IsServer()) return; + if (m_SettingsChanged && m_Mode && m_Mode.Settings()) + m_RestoreSucceeded = m_Mode.Settings().Set("radioDefenceSeconds", m_OriginalDuration); + if (m_Snapshot && m_Player) + { + CharacterControllerComponent controller = CharacterControllerComponent.Cast(m_Player.FindComponent(CharacterControllerComponent)); + ChimeraCharacter character = ChimeraCharacter.Cast(m_Player); + if (controller && character && ERR_Actors.Alive(m_Player)) + { + controller.SetUnconscious(m_OriginalUnconscious); + character.Teleport(m_Original); + } + else m_RestoreSucceeded = false; + } + ERR_Actors.DeleteSpawned(m_Second); + m_Second = null; + } + // The parent must call this on cancellation/fixture timeout as well as failure. + // No fixture-owned callqueue is installed; no later mutation runs after Stop. + void Stop() + { + if (m_Result == 0) m_Result = -1; + Restore(); + } + int Tick(float now) + { + if (m_Result != 0) return m_Result; + if (now < m_Wait) return 0; + if (!Replication.IsServer() || !m_Mode || !m_Player || !m_Radio || !m_Mode.Settings()) + { + Check(false, "async fixture lost authoritative mission/player/radio"); + return -1; + } + if (m_Step == 0) + { + if (!Check(m_Mode.Phase() == ERR_Phase.RADIO_SEARCH && m_Radio.Knowledge() == 2 && ERR_Actors.Player(m_Player), "identified radio and real controlled prisoner available")) return -1; + m_OriginalDuration = m_Mode.Settings().Get("radioDefenceSeconds"); + m_Player.GetWorldTransform(m_Original); + CharacterControllerComponent controller = CharacterControllerComponent.Cast(m_Player.FindComponent(CharacterControllerComponent)); + if (!Check(controller && ChimeraCharacter.Cast(m_Player), "controlled prisoner supports native state restoration")) return -1; + m_OriginalUnconscious = controller.IsUnconscious(); + m_Snapshot = true; + if (!Check(m_Mode.Settings().Set("radioDefenceSeconds", 30), "isolated thirty-second duration saved")) return -1; + m_SettingsChanged = true; + m_Second = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, ERR_Actors.Ground(m_Radio.Position() + "-2 0 0")); + if (!Check(m_Second != null, "second physical defender spawned")) return -1; + m_Mode.Own(m_Second); + DamageManagerComponent.Cast(m_Second.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + WaitFor(1, now); + return 0; + } + if (m_Step == 1) + { + if (!Check(ERR_Actors.CanFight(m_Second), "second physical defender settles with simulated connection membership")) return -1; + m_Authoritative = new ERR_RadioDefenceService(m_Mode); + if (!Check(!m_Authoritative.Begin(m_Second, m_Radio), "ordinary AI cannot tune even while alive and nearby")) return -1; + if (!Check(!m_Authoritative.Begin(m_Player, null), "missing radio rejected")) return -1; + Move(m_Player, m_Radio.Position() + "6 0 0"); + WaitFor(2, now); + return 0; + } + if (m_Step == 2) + { + if (!Check(Distance("outside tuning range after deferred teleport") > 5 && !m_Authoritative.Begin(m_Player, m_Radio), "tuning outside five metres rejected")) return -1; + Move(m_Player, m_Radio.Position() + "2 0 0"); + Conscious(m_Player, false); + WaitFor(3, now); + return 0; + } + if (m_Step == 3) + { + CharacterControllerComponent controller = CharacterControllerComponent.Cast(m_Player.FindComponent(CharacterControllerComponent)); + if (!Check(Distance("unconscious tuning range after deferred teleport") <= 5 && controller.IsUnconscious() && !m_Authoritative.Begin(m_Player, m_Radio), "unconscious prisoner cannot tune")) return -1; + Conscious(m_Player, true); + WaitFor(4, now); + return 0; + } + if (m_Step == 4) + { + if (!Recovered(m_Player, now, "tuning prisoner")) return m_Result; + AuthorizationDiagnostic(); + m_Service = new ERR_NativeRadioSample(m_Mode); + if (!Check(ERR_Actors.CanFight(m_Player) && m_Authoritative.CanBegin(m_Player, m_Radio), "registered friendly conscious prisoner remains authorized")) return -1; + if (!Check(!m_Service.Begin(m_Player, m_Radio), "unregistered defender cannot start the isolated service")) return -1; + m_Service.Members.Insert(m_Player); m_Service.Members.Insert(m_Second); + m_Affiliation = FactionAffiliationComponent.Cast(m_Second.FindComponent(FactionAffiliationComponent)); + if (!Check(m_Affiliation != null, "physical defender has native faction affiliation")) return -1; + m_Affiliation.SetAffiliatedFaction(m_Mode.EnemyFaction()); + WaitFor(5, now); + return 0; + } + if (m_Step == 5) + { + if (!Check(SCR_FactionManager.SGetFaction(m_Second) == m_Mode.EnemyFaction() && !m_Service.Begin(m_Second, m_Radio), "hostile controlled defender cannot tune")) return -1; + m_Affiliation.SetAffiliatedFaction(m_Mode.PlayerFaction()); + WaitFor(6, now); + return 0; + } + if (m_Step == 6) + { + m_Service.OnStarted().Insert(Started); + m_Service.OnProgressChanged().Insert(Changed); + m_Service.OnCompleted().Insert(Completed); + if (!Check(m_Service.Begin(m_Player, m_Radio) && !m_Service.Begin(m_Player, m_Radio) && m_Starts == 1, "start event emitted once and duplicate start rejected")) return -1; + m_Service.Tick(1000); + if (!Check(m_Service.DefenderCount() == 2 && m_Service.Since() == 1000 && m_Service.Occupied(), "two conscious physical defenders share one timer")) return -1; + m_Affiliation.SetAffiliatedFaction(m_Mode.EnemyFaction()); + WaitFor(7, now); + return 0; + } + if (m_Step == 7) + { + m_Service.Tick(1500); + if (!Check(!m_Service.CanDefend(m_Second) && m_Service.DefenderCount() == 1 && m_Service.Since() == 1000, "hostile actor cannot defend even with simulated connection membership")) return -1; + m_Affiliation.SetAffiliatedFaction(m_Mode.PlayerFaction()); + WaitFor(8, now); + return 0; + } + if (m_Step == 8) + { + m_Service.Tick(1600); + int changed = m_Changes; + m_Service.Tick(6000); + if (!Check(m_Service.SecondsRemaining(6000) == 25 && m_Changes == changed, "elapsed countdown does not emit redundant progress events")) return -1; + Conscious(m_Player, false); + WaitFor(9, now); + return 0; + } + if (m_Step == 9) + { + m_Service.Tick(7000); + if (!Check(m_Service.DefenderCount() == 1 && m_Service.Since() == 1000, "second defender preserves progress while first is unconscious")) return -1; + Conscious(m_Second, false); + WaitFor(10, now); + return 0; + } + if (m_Step == 10) + { + m_Service.Tick(8000); + if (!Check(!m_Service.Occupied() && m_Service.Since() == -1 && m_Service.SecondsRemaining(8000) == 30, "all unconscious defenders reset accumulated time")) return -1; + Conscious(m_Player, true); + WaitFor(11, now); + return 0; + } + if (m_Step == 11) + { + if (!Recovered(m_Player, now, "first defender")) return m_Result; + m_Service.Tick(9000); + if (!Check(m_Service.DefenderCount() == 1 && m_Service.Since() == 9000, "conscious recovery starts a fresh continuous interval")) return -1; + Conscious(m_Second, true); + WaitFor(12, now); + return 0; + } + if (m_Step == 12) + { + if (!Recovered(m_Second, now, "second defender")) return m_Result; + m_Service.Tick(10000); + m_Service.Connections = 0; m_Service.Tick(11000); + if (!Check(m_Service.DefenderCount() == 0 && !m_Service.Occupied(), "empty server resets despite remaining character bodies")) return -1; + m_Service.Connections = 2; m_Service.Tick(12000); + Move(m_Player, m_Radio.Position() + "60.5 0 0"); + WaitFor(13, now); + return 0; + } + if (m_Step == 13) + { + m_Service.Tick(13000); + if (!Check(Distance("outside defence radius after deferred teleport") >= 60 && !m_Service.CanDefend(m_Player) && m_Service.DefenderCount() == 1 && m_Service.Since() == 12000, "outside sixty metres excludes first defender without resetting second")) return -1; + DamageManagerComponent damage = DamageManagerComponent.Cast(m_Second.FindComponent(DamageManagerComponent)); + damage.EnableDamageHandling(true); + SCR_CharacterDamageManagerComponent.Cast(damage).Kill(Instigator.CreateInstigator(m_Second)); + WaitFor(14, now); + return 0; + } + if (m_Step == 14) + { + m_Service.Tick(14000); + if (!Check(!ERR_Actors.Alive(m_Second) && !m_Service.CanDefend(m_Second) && !m_Service.Occupied(), "dead defender cannot maintain transmission")) return -1; + Move(m_Player, m_Radio.Position() + "2 0 0"); + WaitFor(15, now); + return 0; + } + if (m_Step == 15) + { + if (!Check(Distance("returned to radio after deferred teleport") <= 5 && ERR_Actors.CanFight(m_Player), "survivor returns physically before final transmission samples")) return -1; + m_Service.Tick(15000); + if (!Check(m_Mode.Settings().Set("radioDefenceSeconds", 45), "live duration increase saved")) return -1; + m_Service.Tick(45000); + if (!Check(m_Service.State() == ERR_RadioDefenceState.DEFENDING && m_Service.Since() == 15000 && m_Service.SecondsRemaining(45000) == 15, "live duration increase preserves accumulated occupancy")) return -1; + if (!Check(m_Mode.Settings().Set("radioDefenceSeconds", 30), "live duration reduction saved")) return -1; + m_Service.Tick(45000); + if (!Check(m_Service.State() == ERR_RadioDefenceState.COMPLETED && m_Completions == 1 && m_Service.SecondsRemaining(45000) == 0, "live duration reduction completes at exact continuous boundary")) return -1; + m_Service.Tick(46000); m_Service.Stop(); m_Service.Tick(47000); + if (!Check(m_Completions == 1 && !m_Service.Begin(m_Player, m_Radio), "completed service cannot restart or emit duplicate completion after stop")) return -1; + ERR_NativeRadioSample stopped = new ERR_NativeRadioSample(m_Mode); + stopped.Members.Insert(m_Player); stopped.OnCompleted().Insert(Completed); + if (!Check(stopped.Begin(m_Player, m_Radio), "isolated cancellation service begins")) return -1; + stopped.Tick(1000); stopped.Stop(); stopped.Stop(); stopped.Tick(60000); + if (!Check(stopped.State() == ERR_RadioDefenceState.STOPPED && !stopped.Occupied() && m_Completions == 1 && !stopped.Begin(m_Player, m_Radio), "stop cancels progress and future starts without completing")) return -1; + ERR_NativeRadioSample terminal = new ERR_NativeRadioSample(m_Mode); + terminal.Members.Insert(m_Player); terminal.OnCompleted().Insert(Completed); + if (!Check(terminal.Begin(m_Player, m_Radio), "isolated terminal-phase service begins")) return -1; + terminal.Tick(1000); terminal.PhaseChanged(ERR_Phase.RADIO_DEFENCE, ERR_Phase.DEFEAT); terminal.Tick(60000); + if (!Check(terminal.State() == ERR_RadioDefenceState.STOPPED && m_Completions == 1, "terminal phase event prevents later completion")) return -1; + if (!Check(m_Mode.Phase() == ERR_Phase.RADIO_SEARCH && m_Mode.RadioDefence().State() == ERR_RadioDefenceState.IDLE, "isolated event tests leave live objective ready for normal tuning")) return -1; + Restore(); + WaitFor(90, now); + return 0; + } + if (m_Step == 90) + { + if (!m_OriginalUnconscious && !Recovered(m_Player, now, "restored prisoner")) return m_Result; + CharacterControllerComponent controller = CharacterControllerComponent.Cast(m_Player.FindComponent(CharacterControllerComponent)); + PrintFormat("ERR RADIO RESTORE: actual=%1 original=%2 distance=%3", m_Player.GetOrigin(), m_Original[3], vector.Distance(m_Player.GetOrigin(), m_Original[3])); + if (!Check(m_RestoreSucceeded && m_Mode.Settings().Get("radioDefenceSeconds") == m_OriginalDuration && controller.IsUnconscious() == m_OriginalUnconscious && vector.Distance(m_Player.GetOrigin(), m_Original[3]) < 1.5, "isolated test restores live duration and physical player state after a world frame")) return -1; + m_Result = 1; + return 1; + } + Check(false, "unknown asynchronous fixture step"); + return -1; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c new file mode 100644 index 0000000..7ebba2c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c @@ -0,0 +1,96 @@ +#ifdef WORKBENCH +class ERR_NativeRecoveryProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Player; + protected CharacterControllerComponent m_Controller; + protected float m_Wait; + protected float m_RecoveryDeadline; + protected bool m_Stopped; + protected bool m_ChangedConsciousness; + protected bool m_InitiallyUnconscious; + protected int m_Step; + protected int m_Changes; + void ERR_NativeRecoveryProbe(ERR_GameMode mode, IEntity player) + { + m_Mode = mode; m_Player = player; + m_Controller = CharacterControllerComponent.Cast(player.FindComponent(CharacterControllerComponent)); + if (m_Controller) m_InitiallyUnconscious = m_Controller.IsUnconscious(); + mode.Recovery().OnChanged().Insert(Changed); + mode.OnStop().Insert(Stop); + } + protected void Changed(string message) { m_Changes++; } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_Mode) m_Mode.OnStop().Remove(Stop); + if (m_Mode && m_Mode.Recovery()) m_Mode.Recovery().OnChanged().Remove(Changed); + if (m_ChangedConsciousness && m_Controller && ERR_Actors.Alive(m_Player)) m_Controller.SetUnconscious(m_InitiallyUnconscious); + } + protected bool Check(bool ok, string detail) + { + if (ok) { Print("ERR SMOKE PASS: recovery " + detail); return true; } + Stop(); + Print("ERR SMOKE FAIL: recovery " + detail, LogLevel.ERROR); + return false; + } + int Tick(float now) + { + if (m_Stopped) return -1; + if (now < m_Wait) return 0; + if (m_Step == 0) + { + m_Mode.Recovery().Tick(); + if (!Check(m_Controller && m_Mode.Recovery().Conscious() == 1 && m_Mode.RecoveryStatus().IsEmpty(), "real conscious prisoner is available without recovery warning")) return -1; + array replies = {}; + m_Mode.Admin().Execute(m_Mode, false, "mission abandon", replies); + if (!Check(replies.Count() == 1 && replies[0].Contains("Administrator") && m_Mode.Phase() == ERR_Phase.PRISON && m_Mode.EndReason().IsEmpty(), "unauthorized abandonment leaves round and result intact")) return -1; + m_Mode.Admin().Execute(m_Mode, true, "mission abandon now", replies); + if (!Check(m_Mode.Phase() == ERR_Phase.PRISON && m_Mode.EndReason().IsEmpty(), "malformed abandonment does not end a round")) return -1; + m_ChangedConsciousness = true; + m_Controller.SetUnconscious(true); + m_Step = 1; m_Wait = now + 1000; + return 0; + } + if (m_Step == 1) + { + m_Mode.Recovery().Tick(); + if (!Check(ERR_Actors.Alive(m_Player) && !ERR_Actors.CanFight(m_Player) && m_Mode.Recovery().Incapacitated() == 1 && m_Mode.Recovery().Conscious() == 0, "native unconscious prisoner is counted as incapacitated, not dead")) return -1; + if (!Check(m_Mode.RecoveryStatus().Contains("No conscious prisoner") && m_Mode.Status().Contains("mission abandon") && ERR_ObjectiveText.Description(m_Mode).Contains(m_Mode.RecoveryStatus()), "server status and native objective copy explain the recovery state")) return -1; + if (!Check(m_Changes == 1, "recovery state publishes exactly one change")) return -1; + m_Mode.Recovery().Tick(); + if (!Check(m_Changes == 1, "unchanged sampling emits no duplicate recovery event")) return -1; + m_Step = 2; m_Wait = now + 35000; + return 0; + } + if (m_Step == 2) + { + if (!Check(m_Mode.Phase() == ERR_Phase.PRISON && ERR_Actors.Alive(m_Player) && !ERR_Actors.CanFight(m_Player) && m_Mode.Players().HasSurvivor(), "all-incapacitated player survives beyond ordinary defeat grace")) return -1; + m_Controller.SetUnconscious(false); + m_RecoveryDeadline = now + 12000; + m_Step = 3; m_Wait = now + 1000; + return 0; + } + if (m_Step == 3) + { + if (!ERR_Actors.CanFight(m_Player) && now < m_RecoveryDeadline) return 0; + m_Mode.Recovery().Tick(); + if (!Check(ERR_Actors.CanFight(m_Player) && m_Mode.RecoveryStatus().IsEmpty() && m_Mode.Recovery().Conscious() == 1 && m_Changes == 2, "native recovery clears the warning once")) return -1; + int id = GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(m_Player); + ERR_PlayerLife life = m_Mode.Players().Get(id); + if (!Check(life && life.UsedLife && life.Actor == m_Player, "recovery preserves original actor and spent life")) return -1; + m_Controller.SetUnconscious(true); + m_Step = 4; m_Wait = now + 1000; + return 0; + } + if (m_Step == 4) + { + m_Mode.Recovery().Tick(); + if (!Check(!m_Mode.RecoveryStatus().IsEmpty() && m_Changes == 3, "second incapacitation restores warning before abandonment")) return -1; + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c new file mode 100644 index 0000000..b664226 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c @@ -0,0 +1,68 @@ +#ifdef WORKBENCH +// Local controller and native presentation provider; no network clients are +// simulated. The extraction snapshot was produced by real occupied seats. +class ERR_NativeResultProbe +{ + protected static Widget s_Content; + protected static bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: result " + detail); return true; } + if (s_Content) s_Content.RemoveFromHierarchy(); + s_Content = null; + Print("ERR SMOKE FAIL: result " + detail, LogLevel.ERROR); + return false; + } + protected static bool NativeText(string title, string debrief) + { + if (!s_Content) return false; + TextWidget titleWidget = TextWidget.Cast(s_Content.FindAnyWidget("GameOver_State")); + TextWidget debriefWidget = TextWidget.Cast(s_Content.FindAnyWidget("GameOver_Description")); + return titleWidget && debriefWidget && titleWidget.GetText() == title && debriefWidget.GetText() == debrief; + } + static bool Run(ERR_ExtractionService extraction, UUID escapedAccount, UUID missedAccount) + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + if (!Check(controller && extraction && extraction.State() == ERR_ExtractionState.ESCAPED, "local controller and physical extraction snapshot exist")) return false; + int playerId = controller.GetPlayerId(); + ERR_EscapeGameOverScreenInfo info = new ERR_EscapeGameOverScreenInfo(); + array staleIds = {playerId}; + SCR_GameModeEndData staleData = SCR_GameModeEndData.Create(EGameOverTypes.VICTORY, staleIds); + array copiedIds = {}; + staleData.GetWinnerIds(copiedIds); + controller.ERR_ResetEscapeResult(); + if (!Check(controller.ERR_EscapeResult() == ERR_PersonalEscapeResult.UNKNOWN && info.GetTitle(playerId, copiedIds) == "The helicopter escaped", "unknown controller ignores stale native end-data winner ID")) return false; + ResourceName layout = "{C4507D07F3C54831}UI/layouts/HUD/GameOver/EndScreen/EndScreenContent_NoImage.layout"; + s_Content = GetGame().GetWorkspace().CreateWidgets(layout); + if (!Check(s_Content != null, "native result content widgets created")) return false; + s_Content.SetVisible(false); + SCR_GameOverScreenContentUIComponent contentHandler = SCR_GameOverScreenContentUIComponent.Cast(s_Content.FindHandler(SCR_GameOverScreenContentUIComponent)); + if (!Check(contentHandler != null, "native result content handler attached")) return false; + SCR_GameOverScreenUIContentData content = new SCR_GameOverScreenUIContentData(layout, info, staleData, "STALE WINNER", string.Empty, "STALE DEBRIEF", ResourceName.Empty, ResourceName.Empty, null, string.Empty, string.Empty, string.Empty); + contentHandler.InitContent(content); + if (!Check(NativeText("The helicopter escaped", "Your personal escape result is not available."), "opened native content ignores a stale winner while personal result is unknown")) return false; + ERR_PlayerRoster roster = new ERR_PlayerRoster(); + if (!Check(roster.Bind(playerId, escapedAccount), "isolated presentation account binds to local controller ID")) return false; + roster.Spawned(playerId, controller.GetControlledEntity()); + controller.ERR_PublishEscapeResult(roster, extraction); + array noWinners = {}; + if (!Check(controller.ERR_EscapeResult() == ERR_PersonalEscapeResult.ESCAPED && info.GetTitle(playerId, noWinners) == "You escaped Everon", "identity snapshot publishes victory despite missing end-data ID")) return false; + if (!Check(NativeText("You escaped Everon", "You crossed the extraction boundary aboard the helicopter."), "already-open native content refreshes when personal victory arrives")) return false; + if (!Check(roster.Bind(playerId, missedAccount), "local presentation connection ID is recycled to non-escapee")) return false; + roster.Spawned(playerId, controller.GetControlledEntity()); + controller.ERR_PublishEscapeResult(roster, extraction); + if (!Check(controller.ERR_EscapeResult() == ERR_PersonalEscapeResult.MISSED && info.GetTitle(playerId, copiedIds) == "The helicopter escaped" && info.GetDebriefing(playerId, copiedIds) == "You did not escape with the helicopter.", "recycled winner ID cannot grant escape or misdescribe dead occupants")) return false; + if (!Check(NativeText("The helicopter escaped", "You did not escape with the helicopter."), "native text refresh removes the previous account's win")) return false; + if (!Check(roster.Bind(playerId, escapedAccount), "escaped presentation account returns after simulated rebind")) return false; + controller.ERR_PublishEscapeResult(roster, extraction); + if (!Check(info.GetTitle(playerId, noWinners) == "You escaped Everon", "presentation follows returning account rather than copied end data")) return false; + controller.ERR_ResetEscapeResult(); + if (!Check(controller.ERR_EscapeResult() == ERR_PersonalEscapeResult.UNKNOWN && info.GetTitle(playerId, copiedIds) == "The helicopter escaped", "round reset clears personal result despite stale winner ID")) return false; + if (!Check(NativeText("The helicopter escaped", "Your personal escape result is not available."), "round reset clears the open native result text")) return false; + s_Content.RemoveFromHierarchy(); + s_Content = null; + ERR_GameMode mode = ERR_GameMode.Get(); + controller.ERR_PublishEscapeResult(mode.Players(), mode.Extraction()); + return true; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c new file mode 100644 index 0000000..d171845 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c @@ -0,0 +1,58 @@ +#ifdef WORKBENCH +// Read-only spatial survey of new authored site candidates. No world edits. +class ERR_NativeSiteSurvey +{ + protected bool m_Blocked; + protected string m_Obstacle; + protected bool Obstacle(IEntity entity) + { + if (entity && entity.GetVObject()) + { + m_Blocked = true; + m_Obstacle = entity.ToString(); + if (entity.GetPrefabData()) m_Obstacle = entity.GetPrefabData().GetPrefabName(); + } + return !m_Blocked; + } + void Area(string name, vector center) + { + int found, slopes, blocked; + float best = 10000; + for (int x = -80; x <= 80; x += 20) + for (int z = -80; z <= 80; z += 20) + { + vector position = ERR_Actors.Ground(center + Vector(x, 0, z)); + float low = 10000; + float high = -10000; + for (int dx = -2; dx <= 2; dx += 2) + for (int dz = -2; dz <= 2; dz += 2) + { + float height = GetGame().GetWorld().GetSurfaceY(position[0] + dx, position[2] + dz); + low = Math.Min(low, height); + high = Math.Max(high, height); + } + best = Math.Min(best, high-low); + if (low < 1 || high - low > 1.2) { slopes++; continue; } + m_Blocked = false; + GetGame().GetWorld().QueryEntitiesByAABB(Vector(position[0]-1.3, low+0.1, position[2]-1.3), Vector(position[0]+1.3, high+2, position[2]+1.3), Obstacle); + if (m_Blocked) + { + blocked++; + if (blocked <= 2) PrintFormat("ERR SITE OBSTACLE: area=%1 position=%2 object=%3", name, position, m_Obstacle); + continue; + } + found++; + PrintFormat("ERR SITE CANDIDATE: area=%1 position=%2 elevationRange=%3", name, position, high-low); + } + PrintFormat("ERR SITE SURVEY COUNT: area=%1 clear=%2 slopes=%3 blocked=%4 bestSlope=%5", name, found, slopes, blocked, best); + } + void Run() + { + Area("west-supplies", "5900 0 7200"); + Area("medical", "6320 0 7440"); + Area("outpost", "6740 0 7320"); + Print("ERR SMOKE PASS: candidate survey completed without authoring world changes"); + Print("ERR SMOKE COMPLETE: read-only site survey"); + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c new file mode 100644 index 0000000..7c331df --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c @@ -0,0 +1,111 @@ +// Opt-in local diagnostic only. It does not bypass validation or alter cleanup. +#ifdef WORKBENCH +modded class SCR_BaseItemSupportStationComponent +{ + protected static int s_ERRStationTeardownLines; + protected static int s_ERRStationInitLines; + protected bool m_ERRStationInitSeen; + protected bool m_ERRStationInitModePresent; + protected bool m_ERRStationInitMainWorld; + protected bool m_ERRStationInitSiteOwned; + protected bool m_ERRStationInitInInventory; + protected ResourceName m_ERRStationInitParentPrefab; + protected bool m_ERRStationInDelete; + protected IEntity m_ERRStationDeleteOwner; + + protected override void DelayedInit(IEntity owner) + { + // Preserve initialization and every native validation before observation. + super.DelayedInit(owner); + string enabled; + if (!System.GetCLIParam("errStationTeardownDiag", enabled) || enabled != "1" || !owner) return; + m_ERRStationInitSeen = true; + ERR_GameMode mode = ERR_GameMode.Get(); + m_ERRStationInitModePresent = mode != null; + if (GetGame()) m_ERRStationInitMainWorld = owner.GetWorld() == GetGame().GetWorld(); + ERR_SiteService sites; + if (mode) sites = mode.Sites(); + m_ERRStationInitSiteOwned = sites && sites.Owns(owner); + InventoryItemComponent item = InventoryItemComponent.Cast(owner.FindComponent(InventoryItemComponent)); + m_ERRStationInitInInventory = item && item.GetParentSlot(); + IEntity parent = owner.GetParent(); + if (parent && parent.GetPrefabData()) m_ERRStationInitParentPrefab = parent.GetPrefabData().GetPrefabName(); + if (s_ERRStationInitLines >= 64) return; + s_ERRStationInitLines++; + ResourceName prefab; + if (owner.GetPrefabData()) prefab = owner.GetPrefabData().GetPrefabName(); + PrintFormat("ERR STATION INIT OWNERSHIP: n=%1 prefab=%2 modePresent=%3 mainWorld=%4 siteOwned=%5 inInventory=%6 parentPrefab=%7", s_ERRStationInitLines, prefab, m_ERRStationInitModePresent, m_ERRStationInitMainWorld, m_ERRStationInitSiteOwned, m_ERRStationInitInInventory, m_ERRStationInitParentPrefab); + } + + override void OnDelete(IEntity owner) + { + string enabled; + bool diagnose = System.GetCLIParam("errStationTeardownDiag", enabled) && enabled == "1"; + if (diagnose) + { + m_ERRStationInDelete = true; + m_ERRStationDeleteOwner = owner; + } + + // Preserve vanilla OnDelete, including its call to InitValidSetup. + super.OnDelete(owner); + + m_ERRStationInDelete = false; + m_ERRStationDeleteOwner = null; + } + + protected override bool InitValidSetup() + { + if (m_ERRStationInDelete && s_ERRStationTeardownLines < 64) + { + s_ERRStationTeardownLines++; + IEntity owner = m_ERRStationDeleteOwner; + string ownerName = ""; + ResourceName prefab; + if (owner) + { + ownerName = owner.GetName(); + if (owner.GetPrefabData()) prefab = owner.GetPrefabData().GetPrefabName(); + } + bool globalCatalogPresent = SCR_EntityCatalogManagerComponent.GetInstance() != null; + SCR_BaseGameMode baseMode; + if (GetGame()) baseMode = SCR_BaseGameMode.Cast(GetGame().GetGameMode()); + int gameState = -1; + int phase = -1; + bool hasEndData; + if (baseMode) + { + gameState = baseMode.GetState(); + hasEndData = baseMode.GetEndGameData() != null; + ERR_GameMode mode = ERR_GameMode.Cast(baseMode); + if (mode) phase = mode.Phase(); + } + string detail = string.Format("ERR STATION TEARDOWN DIAG: n=%1 owner=%2 prefab=%3 cachedCatalog=%4 globalCatalog=%5", s_ERRStationTeardownLines, ownerName, prefab, m_EntityCatalogManager != null, globalCatalogPresent); + detail += string.Format(" modePresent=%1 gameState=%2 errPhase=%3 endData=%4 call=OnDelete/InitValidSetup", baseMode != null, gameState, phase, hasEndData); + detail += string.Format(" initSeen=%1 initMode=%2 initMainWorld=%3 initSiteOwned=%4 initInInventory=%5 initParentPrefab=%6", m_ERRStationInitSeen, m_ERRStationInitModePresent, m_ERRStationInitMainWorld, m_ERRStationInitSiteOwned, m_ERRStationInitInInventory, m_ERRStationInitParentPrefab); + bool deleteMainWorld; + bool deleteSiteOwned; + bool deleteInInventory; + ResourceName deleteParentPrefab; + if (owner) + { + if (GetGame()) deleteMainWorld = owner.GetWorld() == GetGame().GetWorld(); + ERR_GameMode deleteMode = ERR_GameMode.Cast(baseMode); + ERR_SiteService deleteSites; + if (deleteMode) deleteSites = deleteMode.Sites(); + deleteSiteOwned = deleteSites && deleteSites.Owns(owner); + InventoryItemComponent deleteItem = InventoryItemComponent.Cast(owner.FindComponent(InventoryItemComponent)); + deleteInInventory = deleteItem && deleteItem.GetParentSlot(); + IEntity deleteParent = owner.GetParent(); + if (deleteParent && deleteParent.GetPrefabData()) deleteParentPrefab = deleteParent.GetPrefabData().GetPrefabName(); + } + detail += string.Format(" deleteMainWorld=%1 deleteSiteOwned=%2 deleteInInventory=%3 deleteParentPrefab=%4", deleteMainWorld, deleteSiteOwned, deleteInInventory, deleteParentPrefab); + Print(detail); + if (s_ERRStationTeardownLines == 64) Print("ERR STATION TEARDOWN DIAG: 64-line diagnostic limit reached; vanilla validation and cleanup continue unchanged."); + } + + // Retain every original validation result and error message. + return super.InitValidSetup(); + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c new file mode 100644 index 0000000..03790c0 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c @@ -0,0 +1,117 @@ +#ifdef WORKBENCH +class ERR_NativeSettingsReader : ERR_Settings +{ + bool Probe(string path, out map values) { return Read(path, values); } +} +// Runs inside the disposable native test profile. No original settings touched. +class ERR_NativeTimeProbe +{ + protected static float s_EngineTime; + protected static float s_ClockHours; + protected static int s_Multiplier; + protected static bool s_Started; + static bool VerifyProgression(ERR_GameMode mode) + { + ChimeraWorld world = ChimeraWorld.CastFrom(mode.GetWorld()); + TimeAndWeatherManagerEntity manager = world.GetTimeAndWeatherManager(); + if (!Check(s_Started && manager && manager.GetIsDayAutoAdvanced(), "clock advancement remains enabled")) return false; + float elapsed = manager.GetEngineTime() - s_EngineTime; + if (!Check(elapsed >= 10, "progression sampled across at least ten engine seconds")) return false; + float actual = manager.GetTimeOfTheDay() - s_ClockHours; + if (actual < 0) actual += 24; + float expected = elapsed * s_Multiplier / 3600.0; + return Check(Math.AbsFloat(actual - expected) < 0.001, "native clock advances at configured rate without periodic resets"); + } + protected static bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: mission time " + detail); return true; } + Print("ERR SMOKE FAIL: mission time " + detail, LogLevel.ERROR); + return false; + } + protected static bool WriteFixture(string path, string omit = "", bool clock = false, float minutes = 840, bool speed = false, float multiplier = 1) + { + JsonSaveContext json = new JsonSaveContext(); + json.EnableTypeDiscriminator(false); + if (omit != "reportIntervalSeconds") json.WriteValue("reportIntervalSeconds", 20); + json.WriteValue("supportSquadLimit", 2); + json.WriteValue("responseRadiusMetres", 1500); + json.WriteValue("aiIntelChancePercent", 0); + json.WriteValue("intelRevealChancePercent", 100); + json.WriteValue("radioDefenceSeconds", 120); + if (clock) json.WriteValue("startTimeMinutes", minutes); + if (speed) json.WriteValue("timeMultiplier", multiplier); + return json.SaveToFile(path); + } + protected static bool SettingsMigration(string path) + { + if (!Check(WriteFixture(path), "legacy fixture created")) return false; + ERR_Settings legacy = new ERR_Settings(path); + if (!Check(legacy.Get("reportIntervalSeconds") == 20 && legacy.Get("radioDefenceSeconds") == 120 && legacy.Get("aiIntelChancePercent") == 0 && legacy.Get("intelRevealChancePercent") == 100, "existing six-key settings preserved")) return false; + if (!Check(legacy.Get("startTimeMinutes") == 840 && legacy.Get("timeMultiplier") == 1, "only absent time settings receive defaults")) return false; + JsonLoadContext unchanged = new JsonLoadContext(); + if (!Check(unchanged.LoadFromFile(path) && !unchanged.DoesKeyExist("startTimeMinutes") && !unchanged.DoesKeyExist("timeMultiplier"), "loading does not rewrite legacy file")) return false; + if (!Check(legacy.Set("startTimeMinutes", 375) && legacy.Set("timeMultiplier", 4), "explicit save upgrades valid legacy settings")) return false; + ERR_Settings reloaded = new ERR_Settings(path); + if (!Check(reloaded.Get("startTimeMinutes") == 375 && reloaded.Get("timeMultiplier") == 4 && reloaded.Get("responseRadiusMetres") == 1500 && reloaded.Get("radioDefenceSeconds") == 120, "new keys and old values survive reload")) return false; + ERR_NativeSettingsReader reader = new ERR_NativeSettingsReader(); + map values; + if (!WriteFixture(path, "", true, 1440)) return false; + if (!Check(!reader.Probe(path, values), "present out-of-range time cannot silently default")) return false; + if (!WriteFixture(path, "", true, 375.5)) return false; + if (!Check(!reader.Probe(path, values), "fractional clock setting rejected")) return false; + if (!WriteFixture(path, "", false, 0, true, 0)) return false; + if (!Check(!reader.Probe(path, values), "zero multiplier rejected")) return false; + if (!WriteFixture(path, "reportIntervalSeconds")) return false; + if (!Check(!reader.Probe(path, values), "missing legacy setting remains invalid")) return false; + if (!WriteFixture(path, "", true, 375)) return false; + if (!Check(reader.Probe(path, values) && values.Get("startTimeMinutes") == 375 && values.Get("timeMultiplier") == 1, "partially upgraded file defaults only missing new field")) return false; + if (!WriteFixture(path, "", false, 0, true, 25)) return false; + ERR_Settings recovered = new ERR_Settings(path); + if (!Check(recovered.Get("startTimeMinutes") == 375 && recovered.Get("timeMultiplier") == 1 && recovered.Get("reportIntervalSeconds") == 20, "valid saved backup recovers invalid primary")) return false; + return true; + } + static bool Run(ERR_GameMode mode) + { + int minutes; + if (!Check(ERR_TimeService.ParseClock("00:00", minutes) && minutes == 0 && ERR_TimeService.ParseClock("23:59", minutes) && minutes == 1439 && ERR_TimeService.Clock(375) == "06:15", "clock parsing includes midnight and final minute")) return false; + if (!Check(!ERR_TimeService.ParseClock("24:00", minutes) && !ERR_TimeService.ParseClock("12:60", minutes) && !ERR_TimeService.ParseClock("1:00", minutes) && !ERR_TimeService.ParseClock("ab:cd", minutes) && !ERR_TimeService.ParseClock("06:15junk", minutes), "malformed clock commands rejected")) return false; + string path = "$profile:erri-native-time-probe.json"; + if (!Check(!FileIO.FileExists(path) && !FileIO.FileExists(path + ".bak") && !FileIO.FileExists(path + ".tmp"), "isolated fixture paths unused")) return false; + bool migrated = SettingsMigration(path); + FileIO.DeleteFile(path); FileIO.DeleteFile(path + ".bak"); FileIO.DeleteFile(path + ".tmp"); + if (!migrated) return false; + if (!Check(mode.Time() && mode.Time().Started(), "server starts world clock before prison phase")) return false; + ChimeraWorld world = ChimeraWorld.CastFrom(mode.GetWorld()); + TimeAndWeatherManagerEntity manager = world.GetTimeAndWeatherManager(); + if (!Check(manager && manager.GetIsDayAutoAdvanced() && Math.AbsFloat(manager.GetDayDuration() - ERR_TimeService.DayDuration(mode.Time().Multiplier())) < 0.1, "engine progression matches applied multiplier")) return false; + int originalTime = mode.Settings().Get("startTimeMinutes"); + int originalSpeed = mode.Settings().Get("timeMultiplier"); + array replies = {}; + mode.Admin().Execute(mode, false, "mission time set 06:15", replies); + if (!Check(mode.Settings().Get("startTimeMinutes") == originalTime && replies[0] == "Administrator access required.", "unauthorized clock mutation rejected")) return false; + mode.Admin().Execute(mode, true, "mission time set 24:00", replies); + if (!Check(mode.Settings().Get("startTimeMinutes") == originalTime && replies[0].Contains("Invalid"), "invalid clock command preserves setting")) return false; + float currentHours = manager.GetTimeOfTheDay(); + float currentDuration = manager.GetDayDuration(); + int appliedStart = mode.Time().StartMinutes(); + int appliedSpeed = mode.Time().Multiplier(); + mode.Admin().Execute(mode, true, "mission time set 06:15", replies); + bool savedTime = mode.Settings().Get("startTimeMinutes") == 375 && replies[0].Contains("next round"); + mode.Admin().Execute(mode, true, "mission speed set 4", replies); + bool savedSpeed = mode.Settings().Get("timeMultiplier") == 4 && replies[0].Contains("next round"); + bool idempotent = mode.Time().Start(mode) && Math.AbsFloat(manager.GetTimeOfTheDay() - currentHours) < 0.01 && manager.GetDayDuration() == currentDuration && mode.Time().StartMinutes() == appliedStart && mode.Time().Multiplier() == appliedSpeed; + mode.Admin().Execute(mode, true, "mission time show", replies); + bool shown = replies.Count() == 2 && replies[0].Contains("Clock") && replies[1] == "Next round: 06:15, 4x progression."; + bool restoredTime = mode.Settings().Set("startTimeMinutes", originalTime); + bool restoredSpeed = mode.Settings().Set("timeMultiplier", originalSpeed); + if (!Check(savedTime && savedSpeed && restoredTime && restoredSpeed, "authorized settings persist and test restores originals")) return false; + if (!Check(idempotent, "saved changes and repeated start leave current clock and speed intact")) return false; + if (!Check(shown, "admin sees current clock separately from next round settings")) return false; + s_EngineTime = manager.GetEngineTime(); + s_ClockHours = manager.GetTimeOfTheDay(); + s_Multiplier = mode.Time().Multiplier(); + s_Started = true; + return true; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c new file mode 100644 index 0000000..305a3b4 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c @@ -0,0 +1,146 @@ +#ifdef WORKBENCH +// Explicit destructive test of successor-owned transport in the disposable +// scenario. Scripted occupants and engine input are not manual driving or MP. +class ERR_NativeTransportProbe +{ + protected ERR_GameMode m_Mode; + protected ERR_SiteRuntime m_Site; + protected Vehicle m_Vehicle; + protected CarControllerComponent m_Controller; + protected SCR_FuelManagerComponent m_Fuel; + protected ref array m_Actors = {}; + protected BaseCompartmentSlot m_Driver; + protected BaseCompartmentSlot m_Passenger; + protected int m_Step; + protected float m_Wait; + void ERR_NativeTransportProbe(ERR_GameMode mode) { m_Mode = mode; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: transport " + detail); return true; } + Print("ERR SMOKE FAIL: transport " + detail, LogLevel.ERROR); + return false; + } + protected bool DefinitionChecks() + { + ERR_ScenarioDefinition definition = ERR_ScenarioDefinition.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab("{BC310DC0CD27F523}Configs/ERR/EveronSites.conf")); + ERR_SiteDefinition site; + if (definition) site = definition.Find("everon-supply-2"); + if (!Check(site && site.Transport && definition.Valid(), "authored transport definition resolves")) return false; + ERR_SiteTransport transport = site.Transport; + vector offset = transport.Offset; + transport.Offset = "61 0 0"; + if (!Check(!definition.Valid(), "unbounded parking offset rejected")) return false; + transport.Offset = "0 1 0"; + if (!Check(!definition.Valid(), "floating parking offset rejected")) return false; + transport.Offset = offset; + float radius = transport.ClearanceRadius; + transport.ClearanceRadius = 1; + if (!Check(!definition.Valid(), "undersized parking footprint rejected")) return false; + transport.ClearanceRadius = 9; + if (!Check(!definition.Valid(), "unbounded parking footprint rejected")) return false; + transport.ClearanceRadius = radius; + float range = transport.MaximumTerrainRange; + transport.MaximumTerrainRange = 2; + if (!Check(!definition.Valid(), "unsafe authoring slope allowance rejected")) return false; + transport.MaximumTerrainRange = range; + ERR_SiteDefinition radio = definition.Find("everon-radio-1"); + radio.Transport = transport; + if (!Check(!definition.Valid(), "transport restricted to optional depot and outpost sites")) return false; + radio.Transport = null; + return Check(definition.Valid(), "valid authoring restored after isolated mutations"); + } + protected IEntity Character(int index) + { + IEntity actor = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, ERR_Actors.Ground(m_Vehicle.GetOrigin() + Vector(-8 - index * 2, 0, 0))); + if (!actor) return null; + m_Mode.Own(actor); + m_Actors.Insert(actor); + DamageManagerComponent damage = DamageManagerComponent.Cast(actor.FindComponent(DamageManagerComponent)); + if (damage) damage.EnableDamageHandling(false); + return actor; + } + int Tick(float now) + { + if (now < m_Wait) return 0; + if (m_Step == 0) + { + if (!DefinitionChecks()) return -1; + m_Site = m_Mode.Sites().Find("everon-supply-2"); + if (!Check(m_Site && m_Site.Transport && m_Mode.Sites().TransportCount() == 1 && m_Mode.Sites().Owns(m_Site.Transport), "exactly one authored transport belongs to the finite site service")) return -1; + m_Vehicle = m_Site.Transport; + m_Controller = CarControllerComponent.Cast(m_Vehicle.FindComponent(CarControllerComponent)); + m_Fuel = SCR_FuelManagerComponent.Cast(m_Vehicle.FindComponent(SCR_FuelManagerComponent)); + if (!Check(m_Controller && m_Fuel && m_Fuel.HasFuel() && m_Controller.GetPersistentHandBrake(), "wheeled transport starts parked with vanilla finite fuel")) return -1; + PrintFormat("ERR TRANSPORT FUEL: current=%1 maximum=%2", m_Fuel.GetTotalFuel(), m_Fuel.GetTotalMaxFuel()); + BaseCompartmentManagerComponent manager = BaseCompartmentManagerComponent.Cast(m_Vehicle.FindComponent(BaseCompartmentManagerComponent)); + array seats = {}; + if (manager) manager.GetCompartments(seats); + int usable; + foreach (BaseCompartmentSlot slot : seats) + { + if (!slot) continue; + ECompartmentType type = SCR_CompartmentAccessComponent.GetCompartmentType(slot); + if (type == ECompartmentType.PILOT) { usable++; if (!m_Driver) m_Driver = slot; } + if (type == ECompartmentType.CARGO) { usable++; if (!m_Passenger) m_Passenger = slot; } + } + PrintFormat("ERR TRANSPORT SEATS: usable driver/passenger positions=%1", usable); + if (!Check(m_Driver && m_Passenger && m_Driver != m_Passenger, "native driver and passenger compartments are distinct")) return -1; + DamageManagerComponent.Cast(m_Vehicle.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + IEntity driver = Character(0); + IEntity passenger = Character(1); + if (!Check(driver && passenger, "isolated physical occupants created")) return -1; + CompartmentAccessComponent access = CompartmentAccessComponent.Cast(driver.FindComponent(CompartmentAccessComponent)); + if (!Check(access && access.GetInVehicle(m_Vehicle, m_Driver, true, -1, ECloseDoorAfterActions.INVALID, false), "native driver boarding request accepted")) return -1; + m_Step = 1; + m_Wait = now + 1500; + return 0; + } + if (m_Step == 1) + { + CompartmentAccessComponent access = CompartmentAccessComponent.Cast(m_Actors[1].FindComponent(CompartmentAccessComponent)); + if (!Check(access && access.GetInVehicle(m_Vehicle, m_Passenger, true, -1, ECloseDoorAfterActions.INVALID, false), "native passenger boarding request accepted")) return -1; + m_Step = 2; + m_Wait = now + 2500; + return 0; + } + if (m_Step == 2) + { + if (!Check(m_Driver.GetOccupant() == m_Actors[0] && m_Passenger.GetOccupant() == m_Actors[1] && CompartmentAccessComponent.GetVehicleIn(m_Actors[0]) == m_Vehicle && CompartmentAccessComponent.GetVehicleIn(m_Actors[1]) == m_Vehicle, "driver and passenger physically occupy their native seats")) return -1; + if (!Check(m_Controller.IsEngineOn() || m_Controller.StartEngine(), "ordinary native engine start request accepted")) return -1; + m_Step = 3; + m_Wait = now + 6000; + return 0; + } + if (m_Step == 3) + { + if (!Check(m_Controller.IsEngineOn(), "native wheeled engine starts with available fuel")) return -1; + m_Fuel.SetTotalFuelPercentage(0); + if (!Check(m_Mode.Sites().Prepare() == ERR_PrepareResult.READY && m_Site.Transport == m_Vehicle, "preparation queries preserve the original vehicle after deliberate fuel depletion")) return -1; + m_Step = 4; + m_Wait = now + 5000; + return 0; + } + if (m_Step == 4) + { + if (!Check(!m_Fuel.HasFuel() && m_Fuel.GetTotalFuel() <= 0.001 && m_Mode.Sites().Prepare() == ERR_PrepareResult.READY && m_Mode.Sites().TransportCount() == 1 && m_Site.Transport == m_Vehicle, "empty transport stays empty and is not refilled or replaced")) return -1; + foreach (IEntity actor : m_Actors) ERR_Actors.DeleteSpawned(actor); + m_Actors.Clear(); + ERR_Actors.DeleteSpawned(m_Vehicle); + m_Step = 5; + m_Wait = now + 3000; + return 0; + } + if (m_Step == 5) + { + if (!Check(!m_Site.Transport && m_Mode.Sites().TransportCount() == 0 && m_Mode.Sites().Prepare() == ERR_PrepareResult.READY, "lost transport remains absent after service ticks and preparation queries")) return -1; + ERR_ScenarioDefinition definition = ERR_ScenarioDefinition.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab("{BC310DC0CD27F523}Configs/ERR/EveronSites.conf")); + if (!Check(!m_Mode.Sites().Begin(definition, ERR_Supplies.Map()) && m_Mode.Sites().TransportCount() == 0, "duplicate initialization cannot replace lost transport")) return -1; + m_Mode.Sites().Stop(); + if (!Check(m_Mode.Sites().Prepare() == ERR_PrepareResult.FAILED && !m_Mode.Sites().Begin(definition, ERR_Supplies.Map()), "stopped finite owner cannot reinitialize transport")) return -1; + m_Step = 6; + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c new file mode 100644 index 0000000..475a2b1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c @@ -0,0 +1,36 @@ +#ifdef WORKBENCH +// Authoring-only survey: omit transport in the fixture's in-memory definition so +// an invalid parking candidate cannot block inspecting nearby terrain/scenery. +modded class ERR_SiteService +{ + override bool Begin(ERR_ScenarioDefinition definition, ResourceName fieldMap) + { + string outcome; + if (definition && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "transport-survey") + foreach (ERR_SiteDefinition site : definition.Sites) site.Transport = null; + return super.Begin(definition, fieldMap); + } +} +class ERR_NativeTransportSurvey +{ + static void Run(ERR_GameMode mode) + { + ERR_ScenarioDefinition definition = ERR_ScenarioDefinition.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab("{BC310DC0CD27F523}Configs/ERR/EveronSites.conf")); + ERR_SiteDefinition site = definition.Find("everon-supply-2"); + int clear; + for (int x = -40; x <= 40; x += 8) + for (int z = -40; z <= 40; z += 8) + { + vector offset = Vector(x, 0, z); + if (offset.Length() < 8) continue; + vector position = site.Position + offset; + if (!mode.Sites().TransportClearance(position, site.Transport.ClearanceRadius, site.Transport.MaximumTerrainRange)) continue; + clear++; + PrintFormat("ERR PARKING CANDIDATE: offset=%1 position=%2", offset, ERR_Actors.Ground(position)); + } + PrintFormat("ERR PARKING SURVEY: clear=%1; no scenery removed and no transport spawned", clear); + Print("ERR SMOKE PASS: transport parking survey completed"); + Print("ERR SMOKE COMPLETE: bounded transport parking survey"); + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c new file mode 100644 index 0000000..b583a40 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c @@ -0,0 +1,59 @@ +// Native task descriptions otherwise remain stale while their entry is open. +// Own only this scenario's additional binding and missing native detach cleanup. +modded class SCR_TaskListEntryDescriptionUIComponent +{ + protected SCR_Task m_ERRObservedObjective; + // Entity references become null when a task is deleted; work ownership must survive. + protected bool m_ERROwnsObjectiveBinding; + override void InitDescription(notnull SCR_Task task) + { + // Native InitDescription deletes assignee labels; cancel their delayed work first. + ERR_UnbindObjectiveDetails(); + super.InitDescription(task); + if (!ERR_GameMode.Get() || !task.GetTaskID().StartsWith("erri-mission-")) return; + m_ERRObservedObjective = task; + m_ERROwnsObjectiveBinding = true; + task.GetOnDisplayDataChanged().Insert(ERR_RefreshObjectiveDetails); + } + protected void ERR_RefreshObjectiveDetails() + { + if (m_wRoot && m_Task && m_Task == m_ERRObservedObjective) UpdateTask(); + } + protected override void UpdateAssignees(notnull SCR_Task task, SCR_TaskExecutor newAssignee = null, int requesterID = 0) + { + // Native assignment refresh also deletes the old labels before rebuilding them. + if (m_ERROwnsObjectiveBinding && task == m_Task) + ERR_CancelObjectiveOverflow(); + super.UpdateAssignees(task, newAssignee, requesterID); + } + protected void ERR_CancelObjectiveOverflow() + { + if (GetGame() && GetGame().GetCallqueue()) GetGame().GetCallqueue().Remove(CheckOverflow); + } + protected void ERR_UnbindObjectiveDetails() + { + if (!m_ERROwnsObjectiveBinding) return; + ERR_CancelObjectiveOverflow(); + if (m_ERRObservedObjective) m_ERRObservedObjective.GetOnDisplayDataChanged().Remove(ERR_RefreshObjectiveDetails); + m_ERRObservedObjective = null; + m_ERROwnsObjectiveBinding = false; + } + override void HandlerDeattached(Widget w) + { + // Vanilla detaches widget/manager listeners but leaves these task listeners. + // Preserve that vanilla path for every task outside the successor scenario. + if (m_ERROwnsObjectiveBinding) + { + // These five native invokers are static and survive task entity deletion. + SCR_Task.GetOnTaskAssigneeAdded().Remove(UpdateAssignees); + SCR_Task.GetOnTaskAssigneeRemoved().Remove(UpdateAssignees); + SCR_Task.GetOnTaskUIVisibilityChanged().Remove(OnTaskUIVisibilityChanged); + SCR_Task.GetOnTaskVisibilityChanged().Remove(OnTaskVisibilityChanged); + SCR_Task.GetOnTaskOwnershipChanged().Remove(OnTaskOwnershipChanged); + if (m_TaskComponent) m_TaskComponent.GetOnTaskVisualChanged().Remove(OnTaskVisualChanged); + m_Task = null; + } + ERR_UnbindObjectiveDetails(); + super.HandlerDeattached(w); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c new file mode 100644 index 0000000..60128d0 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c @@ -0,0 +1,64 @@ +// Shared player-facing copy; reads replicated mission state and never changes it. +class ERR_ObjectiveText +{ + static string Title(ERR_Phase phase) + { + if (phase == ERR_Phase.PRISON) return "Escape the prison"; + if (phase == ERR_Phase.RADIO_SEARCH) return "Locate the radio station"; + if (phase == ERR_Phase.RADIO_DEFENCE) return "Defend the radio transmission"; + if (phase == ERR_Phase.EXTRACTION) return "Escape Everon by helicopter"; + return "Escape Everon"; + } + static string Extraction(float radius) + { + return string.Format("The map marks the initial helicopter pickup site. Board the helicopter and fly beyond %1 kilometres from the prison. To load an unconscious prisoner, place them on the ground beside the grounded, stationary helicopter and use 'Load casualty into extraction helicopter' on them. Living prisoners aboard escape; dead or absent prisoners do not.", radius / 1000.0); + } + static string RadioFeedbackMessage(ERR_RadioFeedback feedback) + { + if (feedback == ERR_RadioFeedback.WAITING) + return "Waiting for a conscious defender near the radio. Keep someone within 60 metres to start the transmission."; + if (feedback == ERR_RadioFeedback.TRANSMITTING) + return "Transmission in progress. Keep a conscious survivor within 60 metres of the radio. Leaving the area resets progress."; + if (feedback == ERR_RadioFeedback.INTERRUPTED) + return "Transmission interrupted. Progress has reset. Return a conscious survivor to within 60 metres of the radio to resume."; + return "Keep a conscious survivor within 60 metres of the radio until the transmission finishes. Leaving the area resets the defence timer."; + } + static string Description(ERR_GameMode mode, bool progress = true) + { + string description = PhaseDescription(mode, progress); + if (mode && mode.Active() && !mode.RecoveryStatus().IsEmpty()) description += "\n" + mode.RecoveryStatus(); + return description; + } + protected static string PhaseDescription(ERR_GameMode mode, bool progress) + { + if (!mode) return ""; + ERR_Phase phase = mode.Phase(); + if (phase == ERR_Phase.PREPARING) + { + if (!mode.PreparationError().IsEmpty()) return "The mission could not start. An administrator can use /esc status for the cause. Spawning is disabled until the configuration is corrected and the scenario restarted."; + return "Preparing mission sites and equipment. You will spawn when the mission is ready."; + } + if (phase == ERR_Phase.PRISON) + return "Search the supply box inside the prison for weapons and a field map. Pick the gate lock, then get clear of the guards."; + if (phase == ERR_Phase.RADIO_SEARCH) + { + array locations = {}; + mode.Locations(locations); + foreach (ERR_LocationComponent location : locations) + if (location.Kind() == ERR_LocationKind.RADIO && location.Knowledge() == 2) + return "The radio station is identified on your map. Reach its radio and complete the 'Contact extraction HQ' action to start the transmission."; + return "Choose either marked supply cache. Take its intelligence folders into your own inventory to reveal the station on your map. If only a search area appears, take another folder. Each cache has enough folders; use the other if one is lost. If every folder is lost, a close approach with a clear view can identify the station itself. Nearby medical and guard sites can also be discovered by approaching with a clear view."; + } + if (phase == ERR_Phase.RADIO_DEFENCE) + { + if (!progress) return RadioFeedbackMessage(mode.RadioFeedback()); + int seconds = mode.DefenceSecondsRemaining(); + if (!mode.DefenceOccupied()) + return string.Format("Transmission interrupted. Keep a conscious survivor within 60 metres of the radio for %1 seconds. Leaving resets progress.", seconds); + int displayed = Math.Ceil(seconds / 5.0) * 5; + return string.Format("Transmission in progress: up to %1 seconds remaining. Keep a conscious survivor within 60 metres of the radio. Leaving resets progress.", displayed); + } + if (phase == ERR_Phase.EXTRACTION) return Extraction(mode.EscapeRadius()); + return ""; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Objectives.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Objectives.c new file mode 100644 index 0000000..b01ef91 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Objectives.c @@ -0,0 +1,60 @@ +// Server-owned presentation adapter: mission rules decide progress, native tasks +// replicate it. Companion addons neither create nor advance these objectives. +class ERR_Objectives +{ + protected ERR_GameMode m_Mode; + protected SCR_Task m_Current; + protected string m_LastDescription; + protected bool m_Stopped; + + void ERR_Objectives(ERR_GameMode mode) { m_Mode = mode; } + SCR_Task Current() { return m_Current; } + static string Id(ERR_Phase phase) { return "erri-mission-" + phase.ToString(); } + + void PhaseChanged(ERR_Phase previous, ERR_Phase current) + { + if (!Replication.IsServer() || m_Stopped) return; + SCR_TaskSystem tasks = SCR_TaskSystem.GetInstance(); + if (!tasks) { Print("Rereintroduced: native task system missing", LogLevel.ERROR); return; } + if (m_Current) + { + SCR_ETaskState result = SCR_ETaskState.COMPLETED; + if (current == ERR_Phase.DEFEAT) result = SCR_ETaskState.FAILED; + tasks.SetTaskState(m_Current, result); + } + m_Current = null; + if (ERR_MissionRules.Terminal(current)) return; + string title = ERR_ObjectiveText.Title(current); + if (title.IsEmpty()) return; + m_Current = tasks.CreateTask("{1D0F815858EE24AD}Prefabs/Tasks/BaseTask.et", Id(current), title, Description()); + if (!m_Current) { Print("Rereintroduced: objective creation failed", LogLevel.ERROR); return; } + // Location markers use the discovery registry. A task cannot expose an unknown site. + tasks.SetTaskUIVisibility(m_Current, SCR_ETaskUIVisibility.LIST_ONLY); + m_Mode.Own(m_Current); + m_LastDescription = ""; + Tick(GetGame().GetWorld().GetWorldTime()); + } + + protected string Description() { return ERR_ObjectiveText.Description(m_Mode); } + + void Tick(float now) + { + if (!Replication.IsServer() || m_Stopped || !m_Current) return; + string description = Description(); + if (description != m_LastDescription) + { + m_Current.SetTaskDescription(description); + m_LastDescription = description; + } + SCR_TaskSystem tasks = SCR_TaskSystem.GetInstance(); + if (!tasks) return; + array players = {}; + GetGame().GetPlayerManager().GetPlayers(players); + foreach (int playerId : players) + { + SCR_TaskExecutor executor = SCR_TaskSystem.TaskExecutorFromPlayerID(playerId); + if (executor && !m_Current.IsTaskAssignedTo(executor)) tasks.AssignTask(m_Current, executor, true); + } + } + void Stop() { m_Stopped = true; } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Observer.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Observer.c new file mode 100644 index 0000000..2682bcc --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Observer.c @@ -0,0 +1,256 @@ +enum ERR_ObserverReason +{ + NONE, + SPENT_LIFE, + LATE_EXTRACTION, + SPAWN_UNAVAILABLE +} + +// Presentation only. Existing server admission and observer selection own state. +class ERR_ObserverGuidance +{ + static string Message(int reason, bool survivorAvailable) + { + if (reason == ERR_ObserverReason.NONE) return ""; + string message = "You are spectating until the next round."; + if (reason == ERR_ObserverReason.SPENT_LIFE) + message = "Your life for this round has been used. You can play again next round."; + else if (reason == ERR_ObserverReason.LATE_EXTRACTION) + message = "Extraction has started. New prisoners can join next round."; + else if (reason == ERR_ObserverReason.SPAWN_UNAVAILABLE) + message = "Your prisoner could not be spawned. You are spectating until the next round."; + if (!survivorAvailable) + return message + " No survivor is currently available to follow. The view will follow a survivor when one becomes available."; + return message + " Use /esc spectate next or /esc spectate previous to change who you follow."; + } + static bool Refresh(bool shown, int previousReason, int reason, bool previousAvailable, bool survivorAvailable) + { + return reason != ERR_ObserverReason.NONE && (!shown || previousReason != reason || previousAvailable != survivorAvailable); + } +} + +// A local follow camera. It never possesses its target or offers free flight. +[BaseContainerProps(), SCR_BaseManualCameraComponentTitle()] +class ERR_FollowSurvivorCameraComponent : SCR_BaseManualCameraComponent +{ + override bool EOnCameraInit() { return true; } + override void EOnCameraFrame(SCR_ManualCameraParam param) + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + if (!controller) return; + IEntity target = controller.ERR_ObservedEntity(); + vector aim = controller.ERR_ObserverAnchor() + "0 1.5 0"; + vector position = aim + "0 4 -6"; + IEntity exclude = target; + if (target) + { + IEntity vehicle = CompartmentAccessComponent.GetVehicleIn(target); + vector transform[4]; + if (vehicle) + { + vehicle.GetWorldTransform(transform); + vector lower, upper; + vehicle.GetWorldBounds(lower, upper); + aim = (lower + upper) * 0.5; + position = aim + "0 5 0" - transform[2] * 10; + exclude = vehicle; + } + else + { + target.GetWorldTransform(transform); + aim = transform[3] + "0 1.5 0"; + position = aim + "0 1.5 0" - transform[2] * 4; + } + } + TraceParam trace = new TraceParam(); + trace.Start = aim; + trace.End = position; + trace.Flags = TraceFlags.WORLD | TraceFlags.ENTS; + trace.LayerMask = TRACE_LAYER_CAMERA; + trace.Exclude = exclude; + float fraction = GetCameraEntity().GetWorld().TraceMove(trace, null); + if (fraction < 1) position = vector.Lerp(aim, position, Math.Max(0.05, fraction - 0.05)); + Math3D.DirectionAndUpMatrix(vector.Direction(position, aim), "0 1 0", param.transform); + param.transform[3] = position; + param.isDirty = true; + } +} + +modded class SCR_PlayerController +{ + [RplProp()] + protected ERR_ObserverReason m_ERRObserverReason; + [RplProp()] + protected RplId m_ERRObservedId = RplId.Invalid(); + [RplProp()] + protected vector m_ERRObserverAnchor; + protected IEntity m_ERRServerObserved; + protected IEntity m_ERRServerObservedVehicle; + protected SCR_ManualCamera m_ERRObserverCamera; + protected bool m_ERRObserverMonitor; + protected bool m_ERRObserverReady; + protected ERR_ObserverReason m_ERRShownObserverReason; + protected bool m_ERRShownObserverAvailable; + protected float m_ERRLastCycle = -1000; + + ERR_ObserverReason ERR_ObserverState() { return m_ERRObserverReason; } + vector ERR_ObserverAnchor() { return m_ERRObserverAnchor; } + IEntity ERR_ObservedEntity() + { + RplComponent component = RplComponent.Cast(Replication.FindItem(m_ERRObservedId)); + if (!component) return null; + return component.GetEntity(); + } + bool ERR_HasObserverCamera() { return m_ERRObserverCamera != null; } + + void ERR_SetObserver(ERR_ObserverReason reason) + { + if (!Replication.IsServer()) return; + if (reason != ERR_ObserverReason.NONE && ERR_Actors.Alive(GetControlledEntity())) return; + m_ERRObserverReason = reason; + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode && reason != ERR_ObserverReason.NONE) m_ERRObserverAnchor = mode.PrisonPosition(); + if (reason == ERR_ObserverReason.NONE) ERR_ReleaseObserved(); + Replication.BumpMe(); + ERR_UpdateObserverServer(); + } + + protected void ERR_StreamObserved(IEntity entity, bool normalStreaming) + { + RplIdentity identity = GetRplIdentity(); + if (!identity.IsValid() || identity == RplIdentity.Local() || !entity) return; + RplComponent component = RplComponent.Cast(entity.FindComponent(RplComponent)); + if (component) component.EnableStreamingConNode(identity, normalStreaming); + } + protected void ERR_ReleaseObserved() + { + ERR_StreamObserved(m_ERRServerObserved, true); + ERR_StreamObserved(m_ERRServerObservedVehicle, true); + m_ERRServerObserved = null; + m_ERRServerObservedVehicle = null; + m_ERRObservedId = RplId.Invalid(); + } + void ERR_UpdateObserverServer(int direction = 0) + { + if (!Replication.IsServer() || m_ERRObserverReason == ERR_ObserverReason.NONE) return; + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode || !mode.Active() || ERR_Actors.Alive(GetControlledEntity())) + { + m_ERRObserverReason = ERR_ObserverReason.NONE; + ERR_ReleaseObserved(); + Replication.BumpMe(); + return; + } + array survivors = {}; + ERR_Actors.Players(survivors); + Faction friendly = mode.PlayerFaction(); + for (int i = survivors.Count() - 1; i >= 0; i--) + if (!friendly || !mode.Players() || !mode.Players().CurrentActor(survivors[i]) || SCR_FactionManager.SGetFaction(survivors[i]) != friendly) survivors.RemoveOrdered(i); + int index = survivors.Find(m_ERRServerObserved); + if (index < 0) index = 0; + else index += direction; + if (index < 0) index = survivors.Count() - 1; + if (index >= survivors.Count()) index = 0; + IEntity target; + if (!survivors.IsEmpty()) target = survivors[index]; + if (target != m_ERRServerObserved) + { + ERR_ReleaseObserved(); + m_ERRServerObserved = target; + if (target) + { + RplComponent component = RplComponent.Cast(target.FindComponent(RplComponent)); + if (component) m_ERRObservedId = component.Id(); + ERR_StreamObserved(target, false); + } + } + if (target) + { + m_ERRObserverAnchor = target.GetOrigin(); + IEntity vehicle = CompartmentAccessComponent.GetVehicleIn(target); + if (vehicle != m_ERRServerObservedVehicle) + { + ERR_StreamObserved(m_ERRServerObservedVehicle, true); + m_ERRServerObservedVehicle = vehicle; + ERR_StreamObserved(vehicle, false); + } + } + Replication.BumpMe(); + } + void ERR_CycleObserver(int direction) + { + if (this == GetGame().GetPlayerController()) Rpc(ERR_RequestObserverCycle, direction); + } + [RplRpc(RplChannel.Reliable, RplRcver.Server)] + protected void ERR_RequestObserverCycle(int direction) + { + if (!Replication.IsServer() || (direction != -1 && direction != 1)) return; + float now = GetGame().GetWorld().GetWorldTime(); + if (now - m_ERRLastCycle < 250) return; + m_ERRLastCycle = now; + ERR_UpdateObserverServer(direction); + } + + void ERR_StartObserverMonitor() + { + if (this != GetGame().GetPlayerController() || System.IsConsoleApp() || m_ERRObserverMonitor) return; + m_ERRObserverMonitor = true; + ERR_OnObserverMonitorStarted(); + GetGame().GetCallqueue().CallLater(ERR_UpdateObserverClient, 250, true); + } + protected void ERR_OnObserverMonitorStarted() {} + protected void ERR_UpdateObserverClient() + { + ERR_GameMode mode = ERR_GameMode.Get(); + bool observe = mode && mode.Active() && m_ERRObserverReason != ERR_ObserverReason.NONE && !ERR_Actors.Alive(GetControlledEntity()); + if (!observe) + { + ERR_CloseObserverCamera(); + return; + } + if (!m_ERRObserverCamera) + { + Resource resource = Resource.Load("{EB1210AAE1BB8F54}Prefabs/ERR/SpectatorCamera.et"); + if (!resource || !resource.IsValid()) return; + EntitySpawnParams params = new EntitySpawnParams(); + params.TransformMode = ETransformMode.WORLD; + params.Transform[3] = m_ERRObserverAnchor + "0 5 -6"; + m_ERRObserverCamera = SCR_ManualCamera.Cast(GetGame().SpawnEntityPrefab(resource, GetGame().GetWorld(), params)); + if (!m_ERRObserverCamera) return; + } + CameraManager manager = GetGame().GetCameraManager(); + if (!manager || manager.CurrentCamera() != m_ERRObserverCamera) return; + SCR_RespawnSystemComponent respawn = SCR_RespawnSystemComponent.GetInstance(); + if (respawn) respawn.DestroyLoadingPlaceholder(); + // The server-selected replicated ID distinguishes no target from a target + // whose local entity is still streaming. Never imply no survivors from delay. + bool survivorAvailable = m_ERRObservedId != RplId.Invalid(); + if (ERR_ObserverGuidance.Refresh(m_ERRObserverReady, m_ERRShownObserverReason, m_ERRObserverReason, m_ERRShownObserverAvailable, survivorAvailable)) + { + SCR_HintManagerComponent hints = SCR_HintManagerComponent.GetInstance(); + if (!hints) return; // retry on the existing monitor; do not lose the first hint + hints.ShowCustom(ERR_ObserverGuidance.Message(m_ERRObserverReason, survivorAvailable), "Spectating", 12); + m_ERRObserverReady = true; + m_ERRShownObserverReason = m_ERRObserverReason; + m_ERRShownObserverAvailable = survivorAvailable; + } + } + protected void ERR_CloseObserverCamera() + { + m_ERRObserverReady = false; + if (!m_ERRObserverCamera) return; + if (GetGame().GetPlayerController() == this) m_ERRObserverCamera.TrySwitchToControlledEntityCamera(); + m_ERRObserverCamera.Terminate(); + delete m_ERRObserverCamera; + m_ERRObserverCamera = null; + } + void ~SCR_PlayerController() + { + if (GetGame()) + { + GetGame().GetCallqueue().Remove(ERR_UpdateObserverClient); + ERR_CloseObserverCamera(); + if (Replication.IsServer()) ERR_ReleaseObserved(); + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c new file mode 100644 index 0000000..7c06393 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c @@ -0,0 +1,273 @@ +// Explicit local diagnostic launcher. Normal games and Workbench never request +// transitions from this file. No player, identity or audit state is fabricated. +#ifndef WORKBENCH +// Native Game is not Managed; this script-owned helper owns the callback. +class ERR_OrdinaryScenarioLaunchRequest : Managed +{ + protected string m_Project; + protected ResourceName m_Header; + protected string m_Addon; + protected bool m_Queued; + protected bool m_Finished; + + void Queue(string project, ResourceName header, string addon) + { + if (m_Queued || m_Finished) return; + m_Queued = true; + m_Project = project; + m_Header = header; + m_Addon = addon; + GetGame().GetCallqueue().CallLater(Attempt, 0, false); + } + + void Cancel() + { + m_Finished = true; + if (GetGame() && GetGame().GetCallqueue()) GetGame().GetCallqueue().Remove(Attempt); + } + + protected void Attempt() + { + if (m_Finished) return; + m_Finished = true; + if (!GameStateTransitions.IsInsideMainMenu() || ERR_GameMode.Get() || GameStateTransitions.IsTransitionRequestedOrInProgress()) + { + Print("ERR ORDINARY: header launch refused outside idle main menu", LogLevel.ERROR); + return; + } + string addons; + if (!System.GetCLIParam("addons", addons) || addons != m_Addon) + { + Print("ERR ORDINARY: header launch addon selection mismatch", LogLevel.ERROR); + return; + } + ResourceName expected = m_Header; + MissionHeader header = MissionHeader.ReadMissionHeader(expected); + if (!header || header.GetWorldResourceName() != "{B6C516F86302C679}Worlds/ERR_Everon.ent" || header.GetWorldSystemsConfig() != "{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf") + { + Print("ERR ORDINARY: diagnostic mission header is invalid", LogLevel.ERROR); + return; + } + PrintFormat("ERR ORDINARY: requesting header project=%1", m_Project); + if (!GameStateTransitions.RequestScenarioChangeTransition(expected, string.Empty, addons)) + Print("ERR ORDINARY: native header transition refused", LogLevel.ERROR); + } + +} + +// One optional capture request per world, with no camera or gameplay mutation. +// Managed callback ownership matches the ordinary launch request above. +class ERR_OrdinaryScreenshotRequest : Managed +{ + protected static ref ERR_OrdinaryScreenshotRequest s_Request; + protected static bool s_Attempted; + protected ERR_GameMode m_Mode; + protected PlayerController m_Controller; + protected IEntity m_Actor; + protected ref ERR_PlayerLife m_Life; + protected UUID m_Account; + protected int m_PlayerId; + protected bool m_Finished; + + protected static bool Enabled() + { + string project, screenshot; + if (!Replication.IsServer() || System.IsConsoleApp()) return false; + if (!System.GetCLIParam("errOrdinaryScenario", project) || (project != "core" && project != "chat")) return false; + return System.GetCLIParam("errOrdinaryScreenshot", screenshot) && screenshot == "1"; + } + static void Queue(ERR_GameMode mode, PlayerController controller, IEntity actor) + { + if (s_Attempted || !Enabled() || !mode || !controller || !actor || !mode.Players()) return; + ERR_PlayerLife life = mode.Players().CurrentActor(actor); + if (!life) return; + ERR_OrdinaryScreenshotRequest request = new ERR_OrdinaryScreenshotRequest(); + request.m_Mode = mode; request.m_Controller = controller; request.m_Actor = actor; + request.m_Life = life; request.m_Account = life.AccountId; request.m_PlayerId = controller.GetPlayerId(); + if (!request.Valid()) return; + s_Attempted = true; s_Request = request; + mode.OnStop().Insert(request.Cancel); + GetGame().GetCallqueue().CallLater(request.Capture, 3000, false); + Print("ERR ORDINARY: optional prisoner screenshot queued after finalized admission"); + } + protected bool Valid() + { + if (!Enabled() || !GetGame() || !m_Mode || m_Mode != ERR_GameMode.Get()) return false; + if (!GetGame().GetWorld() || m_Mode.GetWorld() != GetGame().GetWorld() || !m_Mode.Active() || m_Mode.Phase() != ERR_Phase.PRISON) return false; + if (!m_Controller || m_Controller != GetGame().GetPlayerController() || m_Controller.GetPlayerId() != m_PlayerId || m_PlayerId <= 0) return false; + PlayerManager manager = GetGame().GetPlayerManager(); + if (!manager || manager.GetPlayerController(m_PlayerId) != m_Controller || manager.GetPlayerControlledEntity(m_PlayerId) != m_Actor || m_Controller.GetControlledEntity() != m_Actor) return false; + if (!ERR_Actors.Alive(m_Actor) || !m_Mode.Players()) return false; + ERR_PlayerLife current = m_Mode.Players().CurrentActor(m_Actor); + return current && current == m_Life && current.AccountId == m_Account; + } + void Cancel() + { + if (m_Finished) return; + m_Finished = true; + if (GetGame() && GetGame().GetCallqueue()) GetGame().GetCallqueue().Remove(Capture); + if (m_Mode) m_Mode.OnStop().Remove(Cancel); + m_Mode = null; m_Controller = null; m_Actor = null; m_Life = null; + } + // Read-only projection evidence, only inside the already validated capture. + // World AABB corners transformed to prison space are an envelope, not a + // promise that the material's irregular clutter mask fills that envelope. + protected void YardDiagnostic() + { + array locations = {}; + m_Mode.Locations(locations); + if (locations.Count() > 64) return; + IEntity prison; + foreach (ERR_LocationComponent location : locations) + { + if (!location || location.Kind() != ERR_LocationKind.PRISON || location.Id() != "everon-prison-1") continue; + IEntity owner = location.GetOwner(); + if (!owner || owner.GetWorld() != m_Mode.GetWorld() || !owner.GetPrefabData()) continue; + if (owner.GetPrefabData().GetPrefabName() != "{BE6B8D56349038A6}Prefabs/ERR/Prison.et") continue; + if (prison) { Print("ERR YARD: ambiguous registered prison; no measurement"); return; } + prison = owner; + } + if (!prison) { Print("ERR YARD: exact registered prison missing; no measurement"); return; } + vector prisonTransform[4]; prison.GetWorldTransform(prisonTransform); + PrintFormat("ERR YARD: prison world origin=%1 basisX=%2 basisY=%3 basisZ=%4", prisonTransform[3], prisonTransform[0], prisonTransform[1], prisonTransform[2]); + array entities = {prison}; + array depths = {0}; + int decals; + for (int index = 0; index < entities.Count(); index++) + { + IEntity entity = entities[index]; + if (!entity) { Print("ERR YARD: hierarchy changed; partial measurement"); return; } + DecalEntity decal = DecalEntity.Cast(entity); + if (decal) + { + decals++; + vector mins, maxs; decal.GetWorldBounds(mins, maxs); + vector worldTransform[4]; decal.GetWorldTransform(worldTransform); + string nativeType = decal.Type().ToString(); + ResourceName prefab; + if (decal.GetPrefabData()) prefab = decal.GetPrefabData().GetPrefabName(); + PrintFormat("ERR YARD: decal=%1 type=%2 prefab=%3 worldMin=%4 worldMax=%5", decals, nativeType, prefab, mins, maxs); + PrintFormat("ERR YARD: decal=%1 world origin=%2 basisX=%3 basisY=%4 basisZ=%5", decals, worldTransform[3], worldTransform[0], worldTransform[1], worldTransform[2]); + for (int x = 0; x < 2; x++) + for (int y = 0; y < 2; y++) + for (int z = 0; z < 2; z++) + { + vector corner = mins; + if (x == 1) corner[0] = maxs[0]; + if (y == 1) corner[1] = maxs[1]; + if (z == 1) corner[2] = maxs[2]; + vector localCorner = prison.CoordToLocal(corner); + PrintFormat("ERR YARD: decal=%1 corner=%2/%3/%4 prisonLocal=%5", decals, x, y, z, localCorner); + } + } + IEntity child = entity.GetChildren(); + while (child) + { + if (depths[index] >= 8 || entities.Count() >= 64 || entities.Contains(child)) + { + Print("ERR YARD: hierarchy bound or duplicate reached; partial measurement"); + return; + } + entities.Insert(child); depths.Insert(depths[index] + 1); + child = child.GetSibling(); + } + } + PrintFormat("ERR YARD: measurement complete nodes=%1 decals=%2; bounds do not certify clutter-mask coverage", entities.Count(), decals); + } + protected void Capture() + { + if (m_Finished) return; + bool valid = Valid(); + if (valid) YardDiagnostic(); + Cancel(); + if (!valid) + { + Print("ERR ORDINARY: optional prisoner screenshot cancelled; original admission no longer current"); + return; + } + System.MakeScreenshot("$logs:err-ordinary-prison"); + Print("ERR ORDINARY: optional prisoner screenshot requested without camera or input changes"); + } + static void ClearWorld() + { + if (s_Request) s_Request.Cancel(); + s_Request = null; + s_Attempted = false; + } +} + +modded class ArmaReforgerScripted +{ + protected ref ERR_OrdinaryScenarioLaunchRequest m_ERRDiagnosticLaunchRequest; + protected bool m_ERRDiagnosticLaunchAttempted; + protected string m_ERRDiagnosticProject; + + protected ResourceName ERR_DiagnosticHeader(string project) + { + if (project == "core") return "{AD62322D5213C440}Missions/ERR_Everon_Base.conf"; + return string.Empty; + } + + protected string ERR_DiagnosticAddon(string project) + { + if (project == "core") return "2528466DE220D91C"; + return string.Empty; + } + + override bool OnGameStart() + { + bool started = super.OnGameStart(); + if (!started || !System.GetCLIParam("errOrdinaryScenario", m_ERRDiagnosticProject)) return started; + ResourceName expected = ERR_DiagnosticHeader(m_ERRDiagnosticProject); + if (expected.IsEmpty()) + { + Print("ERR ORDINARY: invalid diagnostic project", LogLevel.ERROR); + return started; + } + // A loaded successor is inspected only; never replace an active mission. + if (ERR_GameMode.Get()) + { + MissionHeader active = GetMissionHeader(); + ResourceName systems = "{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf"; + if (!active || active.GetHeaderResourceName() != expected || active.GetWorldSystemsConfig() != systems || GetSystemsConfig() != systems) + Print("ERR ORDINARY: active scenario header/systems mismatch", LogLevel.ERROR); + else + PrintFormat("ERR ORDINARY: header verified project=%1 systems=MissionSystems", m_ERRDiagnosticProject); + return started; + } + if (m_ERRDiagnosticLaunchAttempted) return started; + m_ERRDiagnosticLaunchAttempted = true; + // OnGameStart runs while the native state is finishing initialization. The + // one queued attempt requires that it actually reached the main menu. + m_ERRDiagnosticLaunchRequest = new ERR_OrdinaryScenarioLaunchRequest(); + m_ERRDiagnosticLaunchRequest.Queue(m_ERRDiagnosticProject, expected, ERR_DiagnosticAddon(m_ERRDiagnosticProject)); + return started; + } + + + override protected void OnBeforeWorldCleanup() + { + ERR_OrdinaryScreenshotRequest.ClearWorld(); + if (m_ERRDiagnosticLaunchRequest) m_ERRDiagnosticLaunchRequest.Cancel(); + m_ERRDiagnosticLaunchRequest = null; + super.OnBeforeWorldCleanup(); + } +} + +// Observe normal finalized admission; this never creates a body or identity. +modded class ERR_GameMode +{ + override void PlayerSpawned(int id, IEntity actor) + { + super.PlayerSpawned(id, actor); + string project; + if (!System.GetCLIParam("errOrdinaryScenario", project) || (project != "core" && project != "chat")) return; + PlayerController local = GetGame().GetPlayerController(); + if (!local || local.GetPlayerId() != id || local.GetControlledEntity() != actor || !ERR_Actors.Alive(actor)) return; + if (!Players().CurrentActor(actor) || Phase() != ERR_Phase.PRISON) return; + PrintFormat("ERR ORDINARY: local participant verified project=%1 phase=prison", project); + ERR_OrdinaryScreenshotRequest.Queue(this, local, actor); + } +} + +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c new file mode 100644 index 0000000..0824111 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c @@ -0,0 +1,61 @@ +modded class SCR_PlayerController +{ + protected ChatCommandInvoker m_ERRCommand; + protected float m_ERRLastRequest = -1000; + protected int m_ERRRegisterAttempts; + + override void OnControlledEntityChanged(IEntity from, IEntity to) + { + super.OnControlledEntityChanged(from, to); + if (this == GetGame().GetPlayerController() && ERR_GameMode.Get()) ERR_Register(); + } + + protected void ERR_Register() + { + if (m_ERRCommand || m_ERRRegisterAttempts++ > 40) return; + SCR_ChatPanelManager manager = SCR_ChatPanelManager.GetInstance(); + if (!manager) { GetGame().GetCallqueue().CallLater(ERR_Register, 250, false); return; } + m_ERRCommand = manager.GetCommandInvoker("esc"); + if (m_ERRCommand) m_ERRCommand.Insert(ERR_OnCommand); + } + protected override void ERR_OnObserverMonitorStarted() + { + super.ERR_OnObserverMonitorStarted(); + ERR_Register(); + } + protected void ERR_OnCommand(SCR_ChatPanel panel, string arguments) + { + string localCommand = arguments.Trim(); localCommand.ToLower(); + if (localCommand == "spectate next" || localCommand == "spectate previous") + { + int direction = 1; + if (localCommand == "spectate previous") direction = -1; + ERR_CycleObserver(direction); + return; + } + Rpc(ERR_Request, arguments); + } + + [RplRpc(RplChannel.Reliable, RplRcver.Server)] + protected void ERR_Request(string arguments) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!Replication.IsServer() || !mode) return; + float now = GetGame().GetWorld().GetWorldTime(); + if (arguments.Length() > 160 || now - m_ERRLastRequest < 250) return; + m_ERRLastRequest = now; + arguments = arguments.Trim(); arguments.ToLower(); + array replies = {}; + mode.Admin().Execute(mode, SCR_Global.IsAdmin(GetPlayerId()), arguments, replies); + foreach (string reply : replies) ERR_Reply(reply); + } + protected void ERR_Reply(string text) { Rpc(ERR_Response, text); } + [RplRpc(RplChannel.Reliable, RplRcver.Owner)] + protected void ERR_Response(string text) { SCR_ChatComponent.RadioProtocolMessage(text); } + + void ~SCR_PlayerController() + { + if (GetGame()) GetGame().GetCallqueue().Remove(ERR_Register); + if (m_ERRCommand) m_ERRCommand.Remove(ERR_OnCommand); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c new file mode 100644 index 0000000..947360c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c @@ -0,0 +1,56 @@ +enum ERR_PersonalEscapeResult { UNKNOWN, ESCAPED, MISSED } + +// Only the server resolves account identities. Clients receive their controller's +// result, never a persistent account ID or a reused end-data connection ID. +modded class SCR_PlayerController +{ + [RplProp(onRplName: "ERR_OnEscapeResultReplicated")] + protected ERR_PersonalEscapeResult m_ERREscapeResult; + [RplProp(onRplName: "ERR_OnEscapeResultReplicated")] + protected RplId m_ERREscapeResultMission = RplId.Invalid(); + protected static ref ScriptInvoker s_ERREscapeResultChanged = new ScriptInvoker(); + + static ScriptInvoker ERR_OnEscapeResultChanged() { return s_ERREscapeResultChanged; } + protected RplId ERR_CurrentResultMission() + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode) return RplId.Invalid(); + RplComponent component = RplComponent.Cast(mode.FindComponent(RplComponent)); + if (!component) return RplId.Invalid(); + return component.Id(); + } + ERR_PersonalEscapeResult ERR_EscapeResult() + { + RplId mission = ERR_CurrentResultMission(); + if (mission == RplId.Invalid() || mission != m_ERREscapeResultMission) return ERR_PersonalEscapeResult.UNKNOWN; + return m_ERREscapeResult; + } + void ERR_ResetEscapeResult() + { + if (!Replication.IsServer()) return; + m_ERREscapeResult = ERR_PersonalEscapeResult.UNKNOWN; + m_ERREscapeResultMission = ERR_CurrentResultMission(); + Replication.BumpMe(); + ERR_OnEscapeResultReplicated(); + } + void ERR_PublishEscapeResult(ERR_PlayerRoster roster, ERR_ExtractionService extraction) + { + if (!Replication.IsServer()) return; + ERR_PersonalEscapeResult result = ERR_PersonalEscapeResult.UNKNOWN; + ERR_PlayerLife life; + if (roster) life = roster.Get(GetPlayerId()); + if (life && life.Connected && life.ConnectionId == GetPlayerId() && life.UsedLife && extraction && extraction.State() == ERR_ExtractionState.ESCAPED) + { + result = ERR_PersonalEscapeResult.MISSED; + if (extraction.DidEscape(life.AccountId)) result = ERR_PersonalEscapeResult.ESCAPED; + } + m_ERREscapeResult = result; + m_ERREscapeResultMission = ERR_CurrentResultMission(); + Replication.BumpMe(); + ERR_OnEscapeResultReplicated(); + } + protected void ERR_OnEscapeResultReplicated() + { + if (GetGame() && this == GetGame().GetPlayerController()) s_ERREscapeResultChanged.Invoke(); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c new file mode 100644 index 0000000..4d0bc21 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c @@ -0,0 +1,41 @@ +// Local presentation reads replicated state; it cannot advance objectives. +modded class SCR_PlayerController +{ + protected int m_ERRGuidePhase = -1; + protected bool m_ERRGuideStarted; + protected string m_ERRGuideMessage; + + override void OnControlledEntityChanged(IEntity from, IEntity to) + { + super.OnControlledEntityChanged(from, to); + ERR_StartGuide(); + } + protected override void ERR_OnObserverMonitorStarted() + { + super.ERR_OnObserverMonitorStarted(); + ERR_StartGuide(); + } + protected void ERR_StartGuide() + { + if (this != GetGame().GetPlayerController() || !ERR_GameMode.Get() || m_ERRGuideStarted) return; + m_ERRGuideStarted = true; + GetGame().GetCallqueue().CallLater(ERR_UpdateGuide, 1000, true); + } + protected void ERR_UpdateGuide() + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode) return; + if (mode.Phase() != ERR_Phase.PREPARING && !GetControlledEntity()) return; + string message = ERR_ObjectiveText.Description(mode, false); + if (m_ERRGuidePhase == mode.Phase() && m_ERRGuideMessage == message) return; + SCR_HintManagerComponent hints = SCR_HintManagerComponent.GetInstance(); + if (!hints) return; + if (!message.IsEmpty()) hints.ShowCustom(message, ERR_ObjectiveText.Title(mode.Phase()), 15); + m_ERRGuidePhase = mode.Phase(); + m_ERRGuideMessage = message; + } + void ~SCR_PlayerController() + { + if (GetGame()) GetGame().GetCallqueue().Remove(ERR_UpdateGuide); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c new file mode 100644 index 0000000..9bc1cbc --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c @@ -0,0 +1,118 @@ +// Round-owned identities survive controller IDs, death and reconnect attempts. +class ERR_PlayerLifeRules +{ + static bool CanEnter(bool usedLife, int phase) + { + return !usedLife && phase >= ERR_Phase.PRISON && phase <= ERR_Phase.RADIO_DEFENCE; + } +} + +class ERR_PlayerLife +{ + UUID AccountId; + int ConnectionId; + bool Connected; + bool UsedLife; + IEntity Actor; +} + +class ERR_PlayerRoster +{ + protected ref map m_Lives = new map(); + protected ref map m_Connections = new map(); + protected ref ScriptInvoker m_OnChanged = new ScriptInvoker(); + + ScriptInvoker OnChanged() { return m_OnChanged; } + bool Bind(int playerId, UUID identity) + { + if (!Replication.IsServer() || playerId <= 0 || identity.IsNull()) return false; + ERR_PlayerLife life; + if (!m_Lives.Find(identity, life)) + { + life = new ERR_PlayerLife(); + life.AccountId = identity; + m_Lives.Insert(identity, life); + } + if (life.Connected && life.ConnectionId != playerId) return false; + // A recycled transient ID cannot inherit the previous connection's record. + UUID previous; + if (m_Connections.Find(playerId, previous) && previous != identity) Disconnect(playerId); + life.ConnectionId = playerId; + life.Connected = true; + m_Connections.Set(playerId, identity); + m_OnChanged.Invoke(playerId); + return true; + } + ERR_PlayerLife Get(int playerId) + { + UUID identity; + if (!m_Connections.Find(playerId, identity)) return null; + return m_Lives.Get(identity); + } + // The roster identity was bound by the audited connection lifecycle. Consumers + // validate its current body rather than requesting a second backend identity. + ERR_PlayerLife CurrentActor(IEntity actor) + { + if (!Replication.IsServer() || !actor || !GetGame() || !GetGame().GetPlayerManager()) return null; + PlayerManager manager = GetGame().GetPlayerManager(); + int connection = manager.GetPlayerIdFromControlledEntity(actor); + if (connection <= 0 || manager.GetPlayerControlledEntity(connection) != actor) return null; + ERR_PlayerLife life = Get(connection); + if (!life || life.AccountId.IsNull() || !life.Connected || !life.UsedLife || life.ConnectionId != connection || life.Actor != actor) return null; + return life; + } + bool CanEnter(int playerId, int phase) + { + ERR_PlayerLife life = Get(playerId); + return life && life.Connected && ERR_PlayerLifeRules.CanEnter(life.UsedLife, phase); + } + void Spawned(int playerId, IEntity actor) + { + if (!Replication.IsServer() || !actor) return; + ERR_PlayerLife life = Get(playerId); + if (!life) return; + life.Actor = actor; + life.UsedLife = true; + m_OnChanged.Invoke(playerId); + } + void Disconnect(int playerId) + { + if (!Replication.IsServer()) return; + ERR_PlayerLife life = Get(playerId); + if (life) life.Connected = false; + m_Connections.Remove(playerId); + m_OnChanged.Invoke(playerId); + } + void Participants(out array lives) + { + lives.Clear(); + foreach (UUID identity, ERR_PlayerLife life : m_Lives) + if (life.UsedLife) lives.Insert(life); + } + bool HasSurvivor() + { + // Native reconnect reservations retain the original actor until expiry. + // A reserved survivor must not lose the round while their client reconnects. + foreach (UUID identity, ERR_PlayerLife life : m_Lives) + if (life.UsedLife && ERR_Actors.Alive(life.Actor)) return true; + return false; + } +} + +modded class SCR_ReconnectComponent +{ + override bool HandlePlayerDisconnect(int playerId, KickCauseCode cause) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode || !mode.Active()) return super.HandlePlayerDisconnect(playerId, cause); + UUID identity = SCR_PlayerIdentityUtils.GetPlayerIdentityId(playerId); + if (identity.IsNull()) return super.HandlePlayerDisconnect(playerId, cause); + // Voluntary and involuntary departures use the same vanilla reservation, + // timeout, character handoff and expiry cleanup. No replacement life is issued. + SCR_ReconnectData data = StoreData(playerId); + if (!IsDataRelevant(data)) return false; + m_mReconnectData.Set(identity, data); + UpdateExpieryCheck(); + return true; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c new file mode 100644 index 0000000..90e745a --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c @@ -0,0 +1,199 @@ +// Physical escape from the authored 12m-square prison, including alternate +// exits. Normal lock picking remains available. No additional timer or respawn. +class ERR_PrisonEscapeRules +{ + static bool Inside(float x, float z, float halfSize) { return Math.AbsFloat(x) <= halfSize && Math.AbsFloat(z) <= halfSize; } + static bool Continuous(float elapsedMs, float displacement) + { + return elapsedMs > 0 && elapsedMs <= 2500 && displacement >= 0 && displacement <= 1.5 + 12.0 * elapsedMs / 1000.0; + } + static bool Registration(bool ownedDefinition, int gates, bool bounded, bool intact) { return ownedDefinition && gates == 1 && bounded && intact; } + static bool Grounded(float gap) { return gap >= -0.5 && gap <= 2.5; } + static bool Crossing(bool armed, float previousX, float previousZ, float x, float z, float elapsedMs, float displacement) + { + return armed && Inside(previousX, previousZ, 8) && !Inside(x, z, 8) && Continuous(elapsedMs, displacement); + } +} +class ERR_PrisonEscapeSample +{ + IEntity Actor; + PlayerController Controller; + int ConnectionId; + vector Position; + float ObservedAt; + bool Armed; +} +class ERR_PrisonEscapeService +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Gate; + protected bool m_Registered; + protected bool m_Stopped; + protected vector m_Center; + protected string m_RegistrationReason = "prison phase not entered"; + protected ref map m_Samples = new map(); + void ERR_PrisonEscapeService(ERR_GameMode mode) { m_Mode = mode; } + IEntity Gate() { return m_Gate; } + bool Registered() { return m_Registered; } + string RegistrationReason() { return m_RegistrationReason; } + bool GateLost() + { + if (!m_Registered) return false; + if (!m_Gate) return true; + SCR_DestructionMultiPhaseComponent damage = SCR_DestructionMultiPhaseComponent.Cast(m_Gate.FindComponent(SCR_DestructionMultiPhaseComponent)); + return damage && (damage.GetDestroyed() || damage.IsDestructionQueued()); + } + protected bool HasSuccessorLock(IEntity entity) + { + BaseActionsManagerComponent manager = BaseActionsManagerComponent.Cast(entity.FindComponent(BaseActionsManagerComponent)); + if (!manager) return false; + array actions = {}; + manager.GetActionsList(actions); + foreach (BaseUserAction action : actions) + { + ERR_UnlockPrisonAction lock = ERR_UnlockPrisonAction.Cast(action); + if (lock && lock.GetOwner() == entity) return true; + } + return false; + } + // Native evaluated child prefabs need not expose the same raw prefab name as + // the authored reference. Follow the owned composition and its actual action. + protected bool FindGate(IEntity prison, out IEntity found, out int matches) + { + found = null; matches = 0; + array pending = {}; pending.Insert(prison); + int visited; + while (!pending.IsEmpty() && visited < 64) + { + IEntity entity = pending[0]; pending.Remove(0); visited++; + if (!entity) continue; + bool lock = HasSuccessorLock(entity); + bool door = entity.FindComponent(BaseDoorComponent) != null; + if (lock || door) + { + ResourceName raw; + if (entity.GetPrefabData()) raw = entity.GetPrefabData().GetPrefabName(); + PrintFormat("Rereintroduced [prison]: gate candidate raw=%1 resolved=%2 lock=%3 door=%4 position=%5", raw, SCR_ResourceNameUtils.GetPrefabName(entity), lock, door, entity.GetOrigin()); + } + if (entity != prison && lock && door) { found = entity; matches++; } + IEntity child = entity.GetChildren(); + while (child) + { + // Both queued and visited nodes count against the fixed scan bound. + if (pending.Count() + visited >= 64) return false; + pending.Insert(child); + child = child.GetSibling(); + } + } + return pending.IsEmpty(); + } + // One initial registration from the prepared, server-owned authored site. + // No world-nearby fallback or later retry can adopt a replacement/lost gate. + void PhaseChanged(ERR_Phase previous, ERR_Phase current) + { + m_Samples.Clear(); + if (!Replication.IsServer() || m_Stopped || current != ERR_Phase.PRISON || m_Registered) return; + m_RegistrationReason = "no unique owned authored prison"; + if (!m_Mode || !m_Mode.Sites()) return; + array locations = {}; + m_Mode.Locations(locations); + IEntity prison; + int prisons; + foreach (ERR_LocationComponent location : locations) + { + if (!location || location.Kind() != ERR_LocationKind.PRISON) continue; + ERR_SiteRuntime site = m_Mode.Sites().Find(location.Id()); + if (!site || site.Location != location || !site.Definition) continue; + if (site.Definition.Kind != ERR_LocationKind.PRISON || site.Definition.Prefab != "{BE6B8D56349038A6}Prefabs/ERR/Prison.et") continue; + IEntity owner = location.GetOwner(); + if (!owner || !m_Mode.Sites().Owns(owner)) continue; + prison = owner; prisons++; + } + if (prisons != 1) return; + ResourceName raw; + if (prison.GetPrefabData()) raw = prison.GetPrefabData().GetPrefabName(); + PrintFormat("Rereintroduced [prison]: owned composition raw=%1 resolved=%2 position=%3", raw, SCR_ResourceNameUtils.GetPrefabName(prison), prison.GetOrigin()); + IEntity found; + int gates; + bool bounded = FindGate(prison, found, gates); + SCR_DestructionMultiPhaseComponent damage; + if (found) damage = SCR_DestructionMultiPhaseComponent.Cast(found.FindComponent(SCR_DestructionMultiPhaseComponent)); + bool intact = damage && damage.GetDefaultHitZone() && !damage.GetDestroyed() && !damage.IsDestructionQueued(); + if (damage) PrintFormat("Rereintroduced [prison]: destruction health=%1 destroyed=%2 queued=%3", damage.GetHealth(), damage.GetDestroyed(), damage.IsDestructionQueued()); + if (!ERR_PrisonEscapeRules.Registration(true, gates, bounded, intact)) + { + m_RegistrationReason = string.Format("gate registration refused: candidates=%1 bounded=%2 intact=%3", gates, bounded, intact); + Print("Rereintroduced [prison]: " + m_RegistrationReason); + return; + } + m_Gate = found; + m_Center = prison.GetOrigin(); + m_Registered = true; + m_RegistrationReason = "one intact successor lock in owned prison"; + Print("Rereintroduced [prison]: " + m_RegistrationReason); + } + void RosterChanged(int connection) + { + // Invalidate only this connection; a simultaneous new join must not erase + // another prisoner's genuine inside-to-outside crossing. + array removed = {}; + foreach (UUID account, ERR_PrisonEscapeSample sample : m_Samples) + if (sample.ConnectionId == connection) removed.Insert(account); + foreach (UUID accountToRemove : removed) m_Samples.Remove(accountToRemove); + } + void Tick(float now) + { + if (!Replication.IsServer() || m_Stopped || !m_Mode || m_Mode.Phase() != ERR_Phase.PRISON || !m_Mode.Active() || !m_Registered) return; + ref map next = new map(); + array lives = {}; + m_Mode.Players().Participants(lives); + PlayerManager manager = GetGame().GetPlayerManager(); + foreach (ERR_PlayerLife life : lives) + { + IEntity actor = life.Actor; + if (!actor || m_Mode.Players().CurrentActor(actor) != life || !ERR_Actors.CanFight(actor) || CompartmentAccessComponent.GetVehicleIn(actor)) continue; + if (!m_Mode.PlayerFaction() || SCR_FactionManager.SGetFaction(actor) != m_Mode.PlayerFaction()) continue; + PlayerController controller = manager.GetPlayerController(life.ConnectionId); + if (!controller || controller.GetControlledEntity() != actor) continue; + vector position = actor.GetOrigin(); + float ground = GetGame().GetWorld().GetSurfaceY(position[0], position[2]); + if (!ERR_PrisonEscapeRules.Grounded(position[1] - ground)) continue; + vector offset = position - m_Center; + ERR_PrisonEscapeSample sample = m_Samples.Get(life.AccountId); + bool armed; + if (sample && sample.Actor == actor && sample.Controller == controller) + { + float elapsed = now - sample.ObservedAt; + float displacement = vector.Distance(position, sample.Position); + bool continuous = ERR_PrisonEscapeRules.Continuous(elapsed, displacement); + vector previousOffset = sample.Position - m_Center; + if (ERR_PrisonEscapeRules.Crossing(sample.Armed, previousOffset[0], previousOffset[2], offset[0], offset[2], elapsed, displacement)) + { + // An actual qualifying exit is sufficient even if the gate remains intact. + // Use the existing authority transition so cache reveal/tasks/HQ events + // remain exactly the same as successful lock picking. + m_Mode.Transition(ERR_Phase.RADIO_SEARCH); + return; + } + armed = continuous && sample.Armed; + } + if (!ERR_PrisonEscapeRules.Inside(offset[0], offset[2], 8)) continue; + if (!armed) armed = ERR_PrisonEscapeRules.Inside(offset[0], offset[2], 5.5); + ERR_PrisonEscapeSample updated = new ERR_PrisonEscapeSample(); + updated.Actor = actor; updated.Controller = controller; updated.ConnectionId = life.ConnectionId; + updated.Position = position; updated.ObservedAt = now; updated.Armed = armed; + next.Insert(life.AccountId, updated); + } + m_Samples = next; + } + void Stop() { m_Stopped = true; m_Samples.Clear(); m_Gate = null; m_Registered = false; } + #ifdef WORKBENCH + bool ProbeArmed(IEntity actor) + { + ERR_PlayerLife life = m_Mode.Players().CurrentActor(actor); + if (!life) return false; + ERR_PrisonEscapeSample sample = m_Samples.Get(life.AccountId); + return sample && sample.Actor == actor && sample.Armed; + } + #endif +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c new file mode 100644 index 0000000..19fa6f0 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c @@ -0,0 +1,137 @@ +enum ERR_RadioDefenceState +{ + IDLE, + DEFENDING, + COMPLETED, + STOPPED +} + +class ERR_RadioDefenceRules +{ + static float DefenceRadius() { return 60; } + static float TuneRadius() { return 5; } + static bool CanTune(int phase, bool registered, bool radio, int knowledge, bool player, bool conscious, float distance) + { + return phase == ERR_Phase.RADIO_SEARCH && registered && radio && knowledge >= 2 && player && conscious && distance >= 0 && distance <= TuneRadius(); + } + static bool Defender(bool player, bool conscious, float distance) + { + return player && conscious && distance >= 0 && distance < DefenceRadius(); + } + static float SinceAfterSample(float since, float previousSample, float now, int defenders) + { + if (now < 0 || defenders <= 0) return -1; + if (since < 0 || now < since || (previousSample >= 0 && now < previousSample)) return now; + return since; + } +} + +// Server-owned radio objective. Emits facts; GameMode alone advances the mission. +// Native tasks replicate presentation; no client can start/tick this service. +class ERR_RadioDefenceService +{ + protected ERR_GameMode m_Mode; + protected ERR_LocationComponent m_Location; + protected ERR_RadioDefenceState m_State; + protected float m_Since = -1; + protected float m_LastSample = -1; + protected int m_Defenders; + protected int m_LastDuration = -1; + protected ref ScriptInvoker m_OnStarted = new ScriptInvoker(); + protected ref ScriptInvoker m_OnProgressChanged = new ScriptInvoker(); + protected ref ScriptInvoker m_OnCompleted = new ScriptInvoker(); + + void ERR_RadioDefenceService(ERR_GameMode mode) { m_Mode = mode; } + static float DefenceRadius() { return ERR_RadioDefenceRules.DefenceRadius(); } + static float TuneRadius() { return ERR_RadioDefenceRules.TuneRadius(); } + ERR_RadioDefenceState State() { return m_State; } + ERR_LocationComponent Location() { return m_Location; } + float Since() { return m_Since; } + int DefenderCount() { return m_Defenders; } + bool Occupied() { return m_State == ERR_RadioDefenceState.DEFENDING && m_Since >= 0; } + ScriptInvoker OnStarted() { return m_OnStarted; } // (ERR_LocationComponent) + ScriptInvoker OnProgressChanged() { return m_OnProgressChanged; } // (ERR_RadioDefenceService) + ScriptInvoker OnCompleted() { return m_OnCompleted; } // (ERR_LocationComponent), once + + int DurationSeconds() + { + if (!m_Mode || !m_Mode.Settings()) return 0; + return m_Mode.Settings().Get("radioDefenceSeconds"); + } + int SecondsRemaining(float now) + { + int duration = DurationSeconds(); + if (m_State == ERR_RadioDefenceState.COMPLETED) return 0; + if (m_Since < 0 || now < m_Since) return duration; + return Math.Max(0, Math.Ceil(duration - (now - m_Since) / 1000.0)); + } + protected bool IsPlayer(IEntity actor) + { + return m_Mode && m_Mode.Players() && m_Mode.Players().CurrentActor(actor) != null; + } + protected bool Friendly(IEntity actor) + { + return m_Mode && m_Mode.PlayerFaction() && SCR_FactionManager.SGetFaction(actor) == m_Mode.PlayerFaction(); + } + protected int ConnectedPlayers() { return GetGame().GetPlayerManager().GetPlayerCount(); } + protected void Players(out array players) { ERR_Actors.Players(players); } + bool CanBegin(IEntity actor, ERR_LocationComponent location) + { + if (!Replication.IsServer() || !m_Mode || !m_Mode.Active() || m_State != ERR_RadioDefenceState.IDLE || !actor || !location) return false; + return ERR_RadioDefenceRules.CanTune(m_Mode.Phase(), m_Mode.HasLocation(location), location.Kind() == ERR_LocationKind.RADIO, location.Knowledge(), IsPlayer(actor) && Friendly(actor), ERR_Actors.CanFight(actor), vector.DistanceXZ(actor.GetOrigin(), location.Position())); + } + bool Begin(IEntity actor, ERR_LocationComponent location) + { + if (!CanBegin(actor, location) || !ERR_Settings.Valid("radioDefenceSeconds", DurationSeconds())) return false; + m_Location = location; + m_State = ERR_RadioDefenceState.DEFENDING; + m_Since = -1; + m_LastSample = -1; + m_Defenders = 0; + m_LastDuration = DurationSeconds(); + m_OnStarted.Invoke(location); + m_OnProgressChanged.Invoke(this); + return m_State == ERR_RadioDefenceState.DEFENDING; + } + bool CanDefend(IEntity actor) + { + if (!Replication.IsServer() || !m_Location || !actor) return false; + return ERR_RadioDefenceRules.Defender(IsPlayer(actor) && Friendly(actor), ERR_Actors.CanFight(actor), vector.DistanceXZ(actor.GetOrigin(), m_Location.Position())); + } + void Tick(float now) + { + if (!Replication.IsServer() || m_State != ERR_RadioDefenceState.DEFENDING || !m_Mode || !m_Mode.Active()) return; + float previousSince = m_Since; + int previousDefenders = m_Defenders; + m_Defenders = 0; + if (ConnectedPlayers() > 0 && m_Location && m_Mode.HasLocation(m_Location)) + { + array players = {}; + Players(players); + foreach (IEntity actor : players) if (CanDefend(actor)) m_Defenders++; + } + m_Since = ERR_RadioDefenceRules.SinceAfterSample(m_Since, m_LastSample, now, m_Defenders); + m_LastSample = now; + int duration = DurationSeconds(); + bool completed = ERR_MissionRules.DefenceComplete(now, m_Since, duration * 1000, m_Defenders > 0); + if (completed) m_State = ERR_RadioDefenceState.COMPLETED; + bool changed = completed || previousSince != m_Since || previousDefenders != m_Defenders || m_LastDuration != duration; + m_LastDuration = duration; + if (changed) m_OnProgressChanged.Invoke(this); + // Latch before callbacks: nested ticks or duplicate calls cannot complete twice. + if (completed) m_OnCompleted.Invoke(m_Location); + } + void PhaseChanged(ERR_Phase previous, ERR_Phase current) + { + if (current > ERR_Phase.RADIO_DEFENCE) Stop(); + } + void Stop() + { + if (!Replication.IsServer() || m_State == ERR_RadioDefenceState.STOPPED || m_State == ERR_RadioDefenceState.COMPLETED) return; + m_State = ERR_RadioDefenceState.STOPPED; + m_Since = -1; + m_Defenders = 0; + m_Location = null; + m_OnProgressChanged.Invoke(this); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c new file mode 100644 index 0000000..7ab0a90 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c @@ -0,0 +1,19 @@ +// Presentation only. The defence service remains the sole owner of progress. +enum ERR_RadioFeedback +{ + INACTIVE, + WAITING, + TRANSMITTING, + INTERRUPTED +} + +class ERR_RadioFeedbackRules +{ + static ERR_RadioFeedback Next(ERR_RadioFeedback previous, bool defending, bool occupied) + { + if (!defending) return ERR_RadioFeedback.INACTIVE; + if (occupied) return ERR_RadioFeedback.TRANSMITTING; + if (previous == ERR_RadioFeedback.TRANSMITTING || previous == ERR_RadioFeedback.INTERRUPTED) return ERR_RadioFeedback.INTERRUPTED; + return ERR_RadioFeedback.WAITING; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_RecoveryService.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_RecoveryService.c new file mode 100644 index 0000000..824bc4c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_RecoveryService.c @@ -0,0 +1,74 @@ +// Observation only: unconsciousness never consumes a life or ends a round here. +class ERR_RecoveryRules +{ + // 0 absent/dead, 1 reserved or awaiting handoff, 2 conscious, 3 incapacitated. + static int SurvivorKind(bool alive, bool connected, bool sameActor, bool canFight) + { + if (!alive) return 0; + if (!connected || !sameActor) return 1; + if (canFight) return 2; + return 3; + } + static bool NeedsRescuer(int conscious, int incapacitated) + { + return conscious == 0 && incapacitated > 0; + } +} + +class ERR_RecoveryService +{ + protected ERR_GameMode m_Mode; + protected bool m_Stopped; + protected int m_Conscious; + protected int m_Incapacitated; + protected int m_Reserved; + protected string m_Message; + protected ref ScriptInvoker m_OnChanged = new ScriptInvoker(); + void ERR_RecoveryService(ERR_GameMode mode) { m_Mode = mode; } + ScriptInvoker OnChanged() { return m_OnChanged; } + int Conscious() { return m_Conscious; } + int Incapacitated() { return m_Incapacitated; } + int Reserved() { return m_Reserved; } + string Message() { return m_Message; } + + void Tick() + { + if (!Replication.IsServer() || m_Stopped || !m_Mode || !m_Mode.Active()) return; + int conscious, incapacitated, reserved; + array lives = {}; + m_Mode.Players().Participants(lives); + foreach (ERR_PlayerLife life : lives) + { + IEntity controlled = null; + if (life.Connected) controlled = GetGame().GetPlayerManager().GetPlayerControlledEntity(life.ConnectionId); + int kind = ERR_RecoveryRules.SurvivorKind(ERR_Actors.Alive(life.Actor), life.Connected, controlled == life.Actor, ERR_Actors.CanFight(life.Actor)); + if (kind == 1) reserved++; + else if (kind == 2) conscious++; + else if (kind == 3) incapacitated++; + } + m_Conscious = conscious; + m_Incapacitated = incapacitated; + m_Reserved = reserved; + string message; + if (ERR_RecoveryRules.NeedsRescuer(conscious, incapacitated)) + { + message = "No conscious prisoner is currently available to help. Natural recovery and treatment can still continue."; + if (reserved > 0) message += " A surviving prisoner's reconnection may provide help."; + message += " An administrator can abandon this round with /esc mission abandon."; + } + Publish(message); + } + protected void Publish(string message) + { + if (m_Message == message) return; + m_Message = message; + m_OnChanged.Invoke(message); + } + void Stop() + { + if (!Replication.IsServer() || m_Stopped) return; + m_Stopped = true; + m_Conscious = 0; m_Incapacitated = 0; m_Reserved = 0; + Publish(""); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Resources.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Resources.c new file mode 100644 index 0000000..421530a --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Resources.c @@ -0,0 +1,10 @@ +// Shared mission resources are independent of the selected factions. +class ERR_Resources +{ + static ResourceName ObjectiveDocument() { return "{554159A6740C3F3E}Prefabs/ERR/ObjectiveDocument.et"; } + static ResourceName SearchWaypoint() { return "{B3E7B8DC2BAB8ACC}Prefabs/AI/Waypoints/AIWaypoint_SearchAndDestroy.et"; } + static ResourceName MoveWaypoint() { return "{750A8D1695BD6998}Prefabs/AI/Waypoints/AIWaypoint_Move.et"; } + static ResourceName CycleWaypoint() { return "{35BD6541CBB8AC08}Prefabs/AI/Waypoints/AIWaypoint_Cycle.et"; } + static ResourceName DefendWaypoint() { return "{93291E72AC23930F}Prefabs/AI/Waypoints/AIWaypoint_Defend.et"; } + static ResourceName IntelFolder() { return "{6D56FED1E55A8F84}Prefabs/Items/Misc/IntelligenceFolder_E_01/IntelligenceFolder_E_01.et"; } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c new file mode 100644 index 0000000..97afabd --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c @@ -0,0 +1,58 @@ +[ComponentEditorProps(category: "Rereintroduced", description: "Authored scenario definition and finite population lifecycle")] +class ERR_ScenarioComponentClass : ScriptComponentClass {} +class ERR_ScenarioComponent : ScriptComponent +{ + [Attribute("", UIWidgets.ResourceNamePicker, "Scenario site definitions", "conf")] + protected ResourceName m_Definition; + protected ref ERR_SiteService m_Sites; + protected bool m_Started; + protected bool m_Finished; + protected bool m_Failed; + + ERR_SiteService Sites() { return m_Sites; } + string FailureReason() + { + if (m_Sites && !m_Sites.FailureReason().IsEmpty()) return m_Sites.FailureReason(); + return "Scenario or additional force preparation failed."; + } + ERR_PrepareResult Prepare() + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!Replication.IsServer() || !mode || m_Failed) return ERR_PrepareResult.FAILED; + if (m_Finished) return ERR_PrepareResult.READY; + if (!m_Started) + { + m_Started = true; + ERR_ScenarioDefinition definition = ERR_ScenarioDefinition.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab(m_Definition)); + m_Sites = new ERR_SiteService(mode); + if (!m_Sites.Begin(definition, FieldMap())) { m_Failed = true; return ERR_PrepareResult.FAILED; } + } + ERR_PrepareResult result = m_Sites.Prepare(); + if (result != ERR_PrepareResult.READY) return result; + if (!PrepareAdditionalForces()) + { + m_Failed = true; + m_Sites.Rollback(); + return ERR_PrepareResult.FAILED; + } + mode.OnPhaseChanged().Insert(m_Sites.PhaseChanged); + mode.OnStop().Insert(m_Sites.Stop); + mode.OnTick().Insert(m_Sites.Tick); + GetGame().GetCallqueue().CallLater(ActivateSites, 2000, false); + m_Finished = true; + return ERR_PrepareResult.READY; + } + protected void ActivateSites() + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode && mode.Active() && m_Sites) m_Sites.Activate(); + } + protected bool PrepareAdditionalForces() { return true; } + protected ResourceName FieldMap() { return ERR_Supplies.Map(); } + protected override void OnDelete(IEntity owner) + { + if (GetGame()) GetGame().GetCallqueue().Remove(ActivateSites); + if (m_Sites) m_Sites.Stop(); + super.OnDelete(owner); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Settings.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Settings.c new file mode 100644 index 0000000..bacd463 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Settings.c @@ -0,0 +1,139 @@ +// One configuration owner; never mutate runtime state after a failed save. +class ERR_Settings +{ + static const string PATH = "$profile:rereintroduced.json"; + protected ref map m_Values = new map(); + protected bool m_ReadOnly; + protected string m_Path; + + static array Keys() + { + return {"reportIntervalSeconds", "supportSquadLimit", "responseRadiusMetres", "aiIntelChancePercent", "intelRevealChancePercent", "radioDefenceSeconds", "startTimeMinutes", "timeMultiplier", "startDateCode", "weatherProfile"}; + } + + static bool Valid(string key, int value) + { + if (key == "reportIntervalSeconds") return value >= 5 && value <= 60; + if (key == "supportSquadLimit") return value >= 0 && value <= 8; + if (key == "responseRadiusMetres") return value >= 500 && value <= 5000; + if (key == "aiIntelChancePercent" || key == "intelRevealChancePercent") return value >= 0 && value <= 100; + if (key == "radioDefenceSeconds") return value >= 30 && value <= 1800; + if (key == "startTimeMinutes") return value >= 0 && value <= 1439; + if (key == "timeMultiplier") return value >= 1 && value <= 24; + if (key == "weatherProfile") return value >= 0 && value <= 3; + if (key == "startDateCode") + { + if (value == 0) return true; + // Compact (year-1900)MMDD stays exactly representable by JSON floats. + if (value < 101 || value > 1501231) return false; + int year = 1900 + value / 10000; + int month = (value % 10000) / 100; + int day = value % 100; + if (month < 1 || month > 12 || day < 1) return false; + int days = 31; + if (month == 4 || month == 6 || month == 9 || month == 11) days = 30; + if (month == 2) + { + days = 28; + if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) days = 29; + } + return day <= days; + } + return false; + } + + static int AddedDefault(string key) + { + if (key == "startTimeMinutes") return 840; + if (key == "timeMultiplier") return 1; + if (key == "startDateCode" || key == "weatherProfile") return 0; + return -1; + } + + void ERR_Settings(string path = PATH) + { + m_Path = path; + m_Values.Set("reportIntervalSeconds", 10); + m_Values.Set("supportSquadLimit", 4); + m_Values.Set("responseRadiusMetres", 2000); + m_Values.Set("aiIntelChancePercent", 60); + m_Values.Set("intelRevealChancePercent", 15); + m_Values.Set("radioDefenceSeconds", 180); + m_Values.Set("startTimeMinutes", AddedDefault("startTimeMinutes")); + m_Values.Set("timeMultiplier", AddedDefault("timeMultiplier")); + m_Values.Set("startDateCode", AddedDefault("startDateCode")); + m_Values.Set("weatherProfile", AddedDefault("weatherProfile")); + if (!Replication.IsServer()) { m_ReadOnly = true; return; } + map loaded; + if (Read(m_Path, loaded) || Read(m_Path + ".bak", loaded)) m_Values = loaded; + else if (FileIO.FileExists(m_Path) || FileIO.FileExists(m_Path + ".bak")) + { + m_ReadOnly = true; + Print("Rereintroduced: invalid settings; defaults active, existing files preserved", LogLevel.ERROR); + } + } + + int Get(string key) { return m_Values.Get(key); } + + protected bool Read(string path, out map values) + { + JsonLoadContext json = new JsonLoadContext(); + if (!json.LoadFromFile(path)) return false; + values = new map(); + foreach (string key : Keys()) + { + // Only newly introduced keys may be absent in an older valid file. + if (!json.DoesKeyExist(key) && AddedDefault(key) >= 0) + { + values.Set(key, AddedDefault(key)); + continue; + } + float number; + if (!json.ReadValue(key, number)) return false; + int value = Math.Round(number); + if (number != value || !Valid(key, value)) return false; + values.Set(key, value); + } + return true; + } + + bool Set(string key, int value) + { + if (!Replication.IsServer() || m_ReadOnly || !Valid(key, value)) return false; + JsonSaveContext json = new JsonSaveContext(); + json.EnableTypeDiscriminator(false); + foreach (string option : Keys()) + { + int saved = Get(option); + if (option == key) saved = value; + json.WriteValue(option, saved); + } + map checked; + if (!json.SaveToFile(m_Path + ".tmp") || !Read(m_Path + ".tmp", checked)) return false; + foreach (string option : Keys()) + { + int expected = Get(option); + if (option == key) expected = value; + if (checked.Get(option) != expected) return false; + } + map previous; + if (Read(m_Path, previous) && !FileIO.CopyFile(m_Path, m_Path + ".bak")) return false; + if (!FileIO.CopyFile(m_Path + ".tmp", m_Path) || !Read(m_Path, checked)) + { + if (FileIO.FileExists(m_Path + ".bak")) FileIO.CopyFile(m_Path + ".bak", m_Path); + return false; + } + foreach (string option : Keys()) + { + int expected = Get(option); + if (option == key) expected = value; + if (checked.Get(option) != expected) + { + if (FileIO.FileExists(m_Path + ".bak")) FileIO.CopyFile(m_Path + ".bak", m_Path); + return false; + } + } + m_Values = checked; + return true; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c new file mode 100644 index 0000000..1298f99 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c @@ -0,0 +1,167 @@ +// Authored scenario data. These definitions contain no runtime entities. +[BaseContainerProps()] +class ERR_SiteStock +{ + [Attribute("", UIWidgets.ResourceNamePicker, "Physical inventory item", "et")] + ResourceName Prefab; + [Attribute("1", UIWidgets.EditBox, "Finite initial count")] + int Count; + [Attribute("", UIWidgets.EditBox, "Objective document's destination location ID")] + string TargetId; +} + +[BaseContainerProps()] +class ERR_SiteProp +{ + [Attribute("", UIWidgets.ResourceNamePicker, "Finite initial scenery", "et")] + ResourceName Prefab; + [Attribute("0 0 0", UIWidgets.Coords)] vector Offset; + [Attribute("0 0 0", UIWidgets.Coords, "Yaw, pitch, roll in degrees")] vector Angles; +} + +[BaseContainerProps()] +class ERR_SiteTransport +{ + [Attribute("", UIWidgets.ResourceNamePicker, "One finite wheeled transport; never replaced", "et")] + ResourceName Prefab; + [Attribute("0 0 0", UIWidgets.Coords, "Parking offset from the site; ground height is sampled")] + vector Offset; + [Attribute("0", UIWidgets.EditBox, "Parking heading in degrees")] + float Heading; + [Attribute("3", UIWidgets.EditBox, "Clear square half-width including vehicle and boarding space")] + float ClearanceRadius; + [Attribute("1", UIWidgets.EditBox, "Maximum terrain height range across parking footprint")] + float MaximumTerrainRange; +} + +[BaseContainerProps()] +class ERR_SitePatrolPoint +{ + [Attribute("0 0 0", UIWidgets.Coords, "Ground waypoint offset from the guard anchor")] + vector Offset; +} + +[BaseContainerProps()] +class ERR_SiteDefinition +{ + [Attribute()] + string Id; + [Attribute()] string Label; + [Attribute("0", UIWidgets.EditBox, "Conscious visual discovery radius: radio up to 8m, optional sites up to 60m") ] + float DiscoverRadius; + [Attribute()] ref array Props; + [Attribute()] ref ERR_SiteTransport Transport; + [Attribute("0", UIWidgets.ComboBox, "Location kind", enums: ParamEnumArray.FromEnum(ERR_LocationKind))] + ERR_LocationKind Kind; + [Attribute("", UIWidgets.ResourceNamePicker, "Successor site composition", "et")] + ResourceName Prefab; + [Attribute("0 0 0", UIWidgets.Coords)] + vector Position; + [Attribute("", UIWidgets.ResourceNamePicker, "Optional physical guard group", "et")] + ResourceName Guards; + [Attribute()] ref array Patrol; + [Attribute("0", UIWidgets.CheckBox, "Populate a finite squad from the faction catalog") ] + bool Guarded; + [Attribute("20 0 0", UIWidgets.Coords)] + vector GuardOffset; + [Attribute("", UIWidgets.ResourceNamePicker, "Finite inventory container", "et")] + ResourceName Container; + [Attribute("0 0 0", UIWidgets.Coords)] + vector ContainerOffset; + [Attribute()] + ref array Stock; + [Attribute("0", UIWidgets.CheckBox, "Show this supply location after prison escape")] + bool RevealOnEscape; +} + +[BaseContainerProps()] +class ERR_ScenarioDefinition +{ + [Attribute()] + ref array Sites; + [Attribute("2", UIWidgets.EditBox, "Independent accessible caches containing enough radio documents") ] + int MinimumRadioSources; + + ERR_SiteDefinition Find(string id) + { + foreach (ERR_SiteDefinition site : Sites) + if (site && site.Id == id) return site; + return null; + } + + bool Valid() + { + if (!Sites || Sites.IsEmpty() || Sites.Count() > 32) return false; + set ids = new set(); + int prisons, radios, extractions, groups, items, sources, maps, props, transports; + array cluePositions = {}; + if (MinimumRadioSources < 1 || MinimumRadioSources > 8) return false; + foreach (ERR_SiteDefinition site : Sites) + { + if (!site || site.Id.IsEmpty() || ids.Contains(site.Id) || site.Prefab.IsEmpty()) return false; + if (site.Label.IsEmpty() || site.Label.Length() > 64) return false; + if (!ERR_SiteDiscoveryRules.ValidRadius(site.Kind, site.DiscoverRadius)) return false; + bool optionalSite = site.Kind == ERR_LocationKind.DEPOT || site.Kind == ERR_LocationKind.OUTPOST; + if (!optionalSite && site.RevealOnEscape) return false; + if (site.Transport) + { + ERR_SiteTransport transport = site.Transport; + if (!optionalSite || transport.Prefab.IsEmpty() || transport.Offset.Length() > 60 || Math.AbsFloat(transport.Offset[1]) > 0.01) return false; + if (transport.Heading < -360 || transport.Heading > 360 || transport.ClearanceRadius < 2 || transport.ClearanceRadius > 8) return false; + if (transport.MaximumTerrainRange < 0 || transport.MaximumTerrainRange > 1.5) return false; + transports++; + } + if (site.Props) + { + if (site.Props.Count() > 12) return false; + props += site.Props.Count(); + foreach (ERR_SiteProp prop : site.Props) + if (!prop || prop.Prefab.IsEmpty() || prop.Offset.Length() > 40) return false; + } + if (site.Kind < ERR_LocationKind.PRISON || site.Kind > ERR_LocationKind.DEPOT) return false; + ids.Insert(site.Id); + if (site.Kind == ERR_LocationKind.PRISON) prisons++; + if (site.Kind == ERR_LocationKind.RADIO) radios++; + if (site.Kind == ERR_LocationKind.EXTRACTION) extractions++; + if (site.Guarded || !site.Guards.IsEmpty()) groups++; + if (site.Patrol && !site.Patrol.IsEmpty()) + { + // Native Move completes within 5m: separate every point by at least 12m. + if (!(site.Guarded || !site.Guards.IsEmpty()) || !optionalSite || site.Patrol.Count() < 2 || site.Patrol.Count() > 6) return false; + for (int pointIndex = 0; pointIndex < site.Patrol.Count(); pointIndex++) + { + ERR_SitePatrolPoint point = site.Patrol[pointIndex]; + if (!point || point.Offset.Length() > 60 || Math.AbsFloat(point.Offset[1]) > 0.01) return false; + for (int previous = 0; previous < pointIndex; previous++) + if (vector.DistanceXZ(point.Offset, site.Patrol[previous].Offset) < 12) return false; + } + } + int documents = 0; + if (!site.Stock) continue; + foreach (ERR_SiteStock stock : site.Stock) + { + if (!stock || stock.Prefab.IsEmpty() || stock.Count < 1 || stock.Count > 64 || site.Container.IsEmpty()) return false; + items += stock.Count; + if (stock.Prefab == ERR_Resources.ObjectiveDocument()) + { + if (stock.TargetId.IsEmpty()) return false; + if (site.RevealOnEscape || site.Kind == ERR_LocationKind.PRISON) documents += stock.Count; + } + if (site.Kind == ERR_LocationKind.PRISON && stock.Prefab == ERR_Supplies.Map()) maps += stock.Count; + if (!stock.TargetId.IsEmpty()) + { + ERR_SiteDefinition target = Find(stock.TargetId); + if (!target || target.Kind != ERR_LocationKind.RADIO || stock.Prefab != ERR_Resources.ObjectiveDocument()) return false; + } + } + if (documents >= 2) + { + foreach (vector position : cluePositions) + if (vector.DistanceXZ(position, site.Position) < 100) return false; + cluePositions.Insert(site.Position); + sources++; + } + } + return prisons == 1 && radios == 1 && extractions == 1 && groups <= 8 && items <= 256 && props <= 64 && transports <= 4 && sources >= MinimumRadioSources && maps >= 1; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c new file mode 100644 index 0000000..8926179 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c @@ -0,0 +1,17 @@ +// Authoring bounds separate close identification of the objective radio from +// broader discovery of optional supply sites. Neither reveals a remote site. +class ERR_SiteDiscoveryRules +{ + static float RadioRadiusLimit() { return 8; } + static bool ValidRadius(int kind, float radius) + { + if (radius < 0 || radius > 60) return false; + if (kind == ERR_LocationKind.RADIO) return radius <= RadioRadiusLimit(); + if (kind == ERR_LocationKind.DEPOT || kind == ERR_LocationKind.OUTPOST) return true; + return (kind == ERR_LocationKind.PRISON || kind == ERR_LocationKind.EXTRACTION) && radius == 0; + } + static bool InRange(float radius, float horizontalDistance, float verticalDistance) + { + return radius > 0 && horizontalDistance >= 0 && horizontalDistance <= radius && verticalDistance >= 0 && verticalDistance <= 8; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SiteService.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SiteService.c new file mode 100644 index 0000000..978353f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SiteService.c @@ -0,0 +1,484 @@ +enum ERR_PrepareResult { FAILED = -1, PENDING, READY } + +class ERR_StockPlacement +{ + IEntity Item; + InventoryStorageManagerComponent Inventory; + bool Accepted; +} + +class ERR_SiteRuntime +{ + ref ERR_SiteDefinition Definition; + ERR_LocationComponent Location; + IEntity Container; + SCR_AIGroup Group; + int InitialGuardCount; + int LastInitialPhysical = -1; + int LastInitialConscious = -1; + Vehicle Transport; + AIWaypointCycle PatrolCycle; + ref array PatrolWaypoints = {}; +} + +// One owner for finite physical site contents. No population or stock refill tick. +class ERR_SiteService +{ + protected ERR_GameMode m_Mode; + protected ref ERR_ExtractionPlacement m_ExtractionPlacement; + ERR_ExtractionPlacement ExtractionPlacement() { return m_ExtractionPlacement; } + protected ref array m_Sites = {}; + protected ref array m_Entities = {}; + protected ref array m_Placements = {}; + protected ERR_PrepareResult m_State = ERR_PrepareResult.PENDING; + protected float m_Deadline; + protected float m_GuardDeadline; + protected bool m_Begun; + protected bool m_Stopped; + protected bool m_Activated; + protected bool m_Obstructed; + protected string m_FailureReason; + protected float m_NextDiscovery; + string FailureReason() { return m_FailureReason; } + + void ERR_SiteService(ERR_GameMode mode) { m_Mode = mode; } + int Count() { return m_Sites.Count(); } + bool Owns(IEntity entity) { return entity && m_Entities.Contains(entity); } + int TransportCount() + { + int count; + foreach (ERR_SiteRuntime site : m_Sites) + if (site.Transport) count++; + return count; + } + ERR_SiteRuntime Find(string id) + { + foreach (ERR_SiteRuntime site : m_Sites) + if (site.Definition.Id == id) return site; + return null; + } + protected bool CheckClearance(IEntity entity) + { + if (entity && entity.GetVObject()) m_Obstructed = true; + return !m_Obstructed; + } + protected bool CacheClearance(vector position) + { + m_Obstructed = false; + vector ground = ERR_Actors.Ground(position); + GetGame().GetWorld().QueryEntitiesByAABB(ground + "-1.3 0.1 -1.3", ground + "1.3 2 1.3", CheckClearance); + PrintFormat("Rereintroduced [sites]: cache clearance position=%1 clear=%2", ground, !m_Obstructed); + return !m_Obstructed; + } + protected bool CreateGuardOrders(ERR_SiteRuntime site, vector anchor) + { + if (!site.Definition.Patrol || site.Definition.Patrol.IsEmpty()) + { + AIWaypoint defend = AIWaypoint.Cast(Spawn(ERR_Resources.DefendWaypoint(), anchor)); + if (!defend) return false; + site.Group.AddWaypoint(defend); + return true; + } + foreach (ERR_SitePatrolPoint point : site.Definition.Patrol) + { + AIWaypoint move = AIWaypoint.Cast(Spawn(ERR_Resources.MoveWaypoint(), anchor + point.Offset)); + if (!move) return false; + site.PatrolWaypoints.Insert(move); + } + site.PatrolCycle = AIWaypointCycle.Cast(Spawn(ERR_Resources.CycleWaypoint(), anchor)); + if (!site.PatrolCycle) return false; + site.PatrolCycle.SetRerunCounter(-1); + site.PatrolCycle.SetWaypoints(site.PatrolWaypoints); + // The native cycle inserts its own children and itself. Adding children here + // would duplicate the route. HQ inserts Search at index 0 above this queue. + site.Group.AddWaypoint(site.PatrolCycle); + return true; + } + protected void StopPatrols() + { + foreach (ERR_SiteRuntime site : m_Sites) + { + array empty = {}; + if (site.PatrolCycle) site.PatrolCycle.SetWaypoints(empty); + if (site.Group) + { + array queued = {}; + site.Group.GetWaypoints(queued); + foreach (AIWaypoint waypoint : queued) + if (waypoint && (waypoint == site.PatrolCycle || site.PatrolWaypoints.Contains(waypoint))) site.Group.RemoveWaypoint(waypoint); + } + foreach (AIWaypoint move : site.PatrolWaypoints) ERR_Actors.DeleteSpawned(move); + ERR_Actors.DeleteSpawned(site.PatrolCycle); + site.PatrolWaypoints.Clear(); + site.PatrolCycle = null; + } + } + protected IEntity Spawn(ResourceName resource, vector position) + { + IEntity entity = ERR_Actors.Spawn(resource, ERR_Actors.Ground(position)); + if (entity) m_Entities.Insert(entity); + return entity; + } + // Read-only placement survey. It neither removes scenery nor searches for a + // replacement position; authors must correct a rejected parking location. + bool TransportClearance(vector position, float radius, float maximumRange) + { + if (radius < 2 || radius > 8 || maximumRange < 0 || maximumRange > 1.5) return false; + vector ground = ERR_Actors.Ground(position); + float lowest = ground[1]; + float highest = ground[1]; + for (int x = -1; x <= 1; x++) + { + for (int z = -1; z <= 1; z++) + { + vector sample = ERR_Actors.Ground(position + Vector(x * radius, 0, z * radius)); + lowest = Math.Min(lowest, sample[1]); + highest = Math.Max(highest, sample[1]); + } + } + m_Obstructed = false; + vector low = Vector(position[0] - radius, lowest + 0.1, position[2] - radius); + vector high = Vector(position[0] + radius, highest + 3, position[2] + radius); + GetGame().GetWorld().QueryEntitiesByAABB(low, high, CheckClearance); + bool clear = lowest >= 1 && highest - lowest <= maximumRange && !m_Obstructed; + PrintFormat("Rereintroduced [sites]: transport parking=%1 radius=%2 terrainRange=%3 obstructed=%4 clear=%5", ERR_Actors.Ground(position), radius, highest - lowest, m_Obstructed, clear); + return clear; + } + protected bool CreateTransport(ERR_SiteRuntime site, vector sitePosition) + { + ERR_SiteTransport spec = site.Definition.Transport; + if (!spec) return true; + vector position = ERR_Actors.Ground(sitePosition + spec.Offset); + if (!TransportClearance(position, spec.ClearanceRadius, spec.MaximumTerrainRange)) return Fail("obstructed or unsafe transport parking: " + site.Definition.Id); + IEntity entity = ERR_Actors.Spawn(spec.Prefab, position, Vector(spec.Heading, 0, 0)); + if (!entity) return Fail("transport prefab: " + site.Definition.Id); + m_Entities.Insert(entity); + site.Transport = Vehicle.Cast(entity); + if (!site.Transport) return Fail("transport must be a vehicle: " + site.Definition.Id); + CarControllerComponent controller = CarControllerComponent.Cast(site.Transport.FindComponent(CarControllerComponent)); + if (!controller) return Fail("transport must be wheeled: " + site.Definition.Id); + controller.SetPersistentHandBrake(true); + return true; + } + protected bool TransportReady(ERR_SiteRuntime site) + { + if (!site.Definition.Transport) return true; + Vehicle vehicle = site.Transport; + if (!ERR_Actors.Alive(vehicle)) return false; + vector low, high; + vehicle.GetWorldBounds(low, high); + vector center = ERR_Actors.Ground(site.Definition.Position + site.Definition.Transport.Offset); + float radius = site.Definition.Transport.ClearanceRadius - 0.5; + if (Math.AbsFloat(low[0] - center[0]) > radius || Math.AbsFloat(high[0] - center[0]) > radius || Math.AbsFloat(low[2] - center[2]) > radius || Math.AbsFloat(high[2] - center[2]) > radius) + { + if (GetGame().GetWorld().GetWorldTime() > m_Deadline) PrintFormat("Rereintroduced [sites]: transport footprint low=%1 high=%2 surveyedCenter=%3 origin=%4 allowedRadius=%5", low, high, center, vehicle.GetOrigin(), radius); + return false; + } + FuelManagerComponent fuel = FuelManagerComponent.Cast(vehicle.FindComponent(FuelManagerComponent)); + if (!fuel || !fuel.HasFuel()) + { + if (GetGame().GetWorld().GetWorldTime() > m_Deadline) PrintFormat("Rereintroduced [sites]: transport fuel manager=%1 hasFuel=%2", fuel != null, fuel && fuel.HasFuel()); + return false; + } + BaseCompartmentManagerComponent manager = BaseCompartmentManagerComponent.Cast(vehicle.FindComponent(BaseCompartmentManagerComponent)); + if (!manager) return false; + array seats = {}; + manager.GetCompartments(seats); + bool driver, passenger; + foreach (BaseCompartmentSlot slot : seats) + { + if (!slot) continue; + ECompartmentType type = SCR_CompartmentAccessComponent.GetCompartmentType(slot); + if (type == ECompartmentType.PILOT) driver = true; + if (type == ECompartmentType.CARGO) passenger = true; + } + if ((!driver || !passenger) && GetGame().GetWorld().GetWorldTime() > m_Deadline) PrintFormat("Rereintroduced [sites]: transport seats=%1 driver=%2 passenger=%3", seats.Count(), driver, passenger); + return driver && passenger; + } + protected bool Fail(string reason) + { + m_FailureReason = reason; + Print("Rereintroduced [sites]: preparation failed: " + reason, LogLevel.ERROR); + Rollback(); + m_State = ERR_PrepareResult.FAILED; + return false; + } + + bool Begin(ERR_ScenarioDefinition definition, ResourceName fieldMap) + { + if (!Replication.IsServer() || m_Begun || m_Stopped) return false; + m_Begun = true; + if (!definition || !definition.Valid()) return Fail("invalid scenario definition"); + m_Deadline = GetGame().GetWorld().GetWorldTime() + 15000; + m_GuardDeadline = GetGame().GetWorld().GetWorldTime() + ERR_InitialGuardRules.TimeoutMilliseconds(); + foreach (ERR_SiteDefinition spec : definition.Sites) + { + vector position = ERR_Actors.Ground(spec.Position); + if (position[1] < 1) return Fail("site below sea level: " + spec.Id); + IEntity root = Spawn(spec.Prefab, position); + if (!root) return Fail("site composition: " + spec.Id); + ERR_SiteRuntime site = new ERR_SiteRuntime(); + site.Definition = spec; + site.Location = ERR_LocationComponent.Cast(root.FindComponent(ERR_LocationComponent)); + if (!site.Location || !site.Location.Configure(spec.Id, spec.Kind, spec.Label)) return Fail("location identity: " + spec.Id); + m_Sites.Insert(site); + if (spec.Kind == ERR_LocationKind.PRISON) m_Mode.ConfigureStart(position); + if (spec.Kind == ERR_LocationKind.EXTRACTION) + { + Vehicle helicopter = Vehicle.Cast(Spawn(m_Mode.Factions().ExtractionPrefab, position + "12 0 0")); + if (!helicopter) return Fail("extraction vehicle"); + if (!m_Mode.SetExtractionVehicle(helicopter)) return Fail("extraction vehicle registration"); + m_ExtractionPlacement = new ERR_ExtractionPlacement(m_Mode, helicopter); + } + if (!spec.Container.IsEmpty()) + { + if (!CacheClearance(position + spec.ContainerOffset)) return Fail("obstructed cache position: " + spec.Id); + site.Container = Spawn(spec.Container, position + spec.ContainerOffset); + if (!site.Container) return Fail("container: " + spec.Id); + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(site.Container.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) return Fail("container inventory: " + spec.Id); + BaseInventoryStorageComponent storage = BaseInventoryStorageComponent.Cast(site.Container.FindComponent(BaseInventoryStorageComponent)); + if (!storage) return Fail("container storage: " + spec.Id); + inventory.AddStorage(storage); + if (spec.Stock) + { + foreach (ERR_SiteStock stock : spec.Stock) + { + ResourceName resource = stock.Prefab; + if (resource == ERR_Supplies.Map()) resource = fieldMap; + for (int i = 0; i < stock.Count; i++) + { + // Created exactly once; insertion retries always use this same entity. + IEntity item = Spawn(resource, site.Container.GetOrigin()); + if (!item) return Fail("stock resource: " + spec.Id); + if (!stock.TargetId.IsEmpty()) + { + ERR_DocumentComponent document = ERR_DocumentComponent.Cast(item.FindComponent(ERR_DocumentComponent)); + if (!document) return Fail("targeted document component"); + document.SetTarget(stock.TargetId); + } + ERR_StockPlacement placement = new ERR_StockPlacement(); + placement.Item = item; + placement.Inventory = inventory; + m_Placements.Insert(placement); + } + } + } + } + if (spec.Props) + { + foreach (ERR_SiteProp prop : spec.Props) + { + vector propPosition = ERR_Actors.Ground(position + prop.Offset); + if (!CacheClearance(propPosition)) return Fail("obstructed scenery position: " + spec.Id); + propPosition[1] = propPosition[1] + prop.Offset[1]; + IEntity scenery = ERR_Actors.Spawn(prop.Prefab, propPosition, prop.Angles); + if (!scenery) return Fail("scenery prefab: " + spec.Id); + m_Entities.Insert(scenery); + } + } + if (!CreateTransport(site, position)) return false; + if (spec.Guarded || !spec.Guards.IsEmpty()) + { + vector guardPosition = position + spec.GuardOffset; + ResourceName groupPrefab = spec.Guards; + if (groupPrefab.IsEmpty()) groupPrefab = m_Mode.Factions().GuardGroupPrefab; + site.Group = SCR_AIGroup.Cast(Spawn(groupPrefab, guardPosition)); + if (!site.Group) return Fail("guard group resource: " + spec.Id); + if (!site.Group.m_aUnitPrefabSlots || site.Group.m_aUnitPrefabSlots.IsEmpty() || !site.Group.GetSpawnImmediately()) return Fail("guard profile must request an initial physical squad: " + spec.Id); + site.InitialGuardCount = site.Group.m_aUnitPrefabSlots.Count(); + foreach (ResourceName member : site.Group.m_aUnitPrefabSlots) + if (member.IsEmpty()) return Fail("guard profile has an empty member resource: " + spec.Id); + if (!CreateGuardOrders(site, guardPosition)) return Fail("guard initial orders: " + spec.Id); + } + PrintFormat("Rereintroduced [sites]: authored %1 at %2", spec.Id, position); + } + return true; + } + + protected ERR_PrepareResult InitialGuards(ERR_SiteRuntime site) + { + bool requested = site.Definition.Guarded || !site.Definition.Guards.IsEmpty(); + if (!requested) return ERR_PrepareResult.READY; + if (!site.Group || site.InitialGuardCount <= 0) + { + Fail("initial guard group disappeared or has no configured members: " + site.Definition.Id); + return m_State; + } + if (site.Group.GetFaction() != m_Mode.EnemyFaction()) + { + Fail("guard group faction disagrees with catalog: " + site.Definition.Id); + return m_State; + } + array agents = {}; + array physical = {}; + site.Group.GetAgents(agents); + int conscious; + foreach (AIAgent agent : agents) + { + if (!agent) continue; + IEntity actor = agent.GetControlledEntity(); + if (!actor || physical.Contains(actor)) continue; + physical.Insert(actor); + if (SCR_FactionManager.SGetFaction(actor) != m_Mode.EnemyFaction()) + { + Fail("initial guard actor faction disagrees with catalog: " + site.Definition.Id); + return m_State; + } + if (ERR_Actors.CanFight(actor)) conscious++; + } + bool complete = site.Group.IsExpandComplete(); + if (site.LastInitialPhysical != physical.Count() || site.LastInitialConscious != conscious) + { + PrintFormat("Rereintroduced [guards]: initial site=%1 requested=%2 physical=%3 conscious=%4 nativeComplete=%5", site.Definition.Id, site.InitialGuardCount, physical.Count(), conscious, complete); + site.LastInitialPhysical = physical.Count(); + site.LastInitialConscious = conscious; + } + ERR_PrepareResult result = ERR_InitialGuardRules.State(site.InitialGuardCount, physical.Count(), conscious, complete, GetGame().GetWorld().GetWorldTime() > m_GuardDeadline); + if (result == ERR_PrepareResult.FAILED) + { + AIPathfindingComponent path = AIPathfindingComponent.Cast(site.Group.FindComponent(AIPathfindingComponent)); + NavmeshWorldComponent navmesh; + if (path) navmesh = path.GetNavmeshComponent(); + bool tileLoaded, tileRequested; + if (navmesh) + { + tileLoaded = navmesh.IsTileLoaded(site.Group.GetOrigin()); + tileRequested = navmesh.IsTileRequested(site.Group.GetOrigin()); + } + PrintFormat("Rereintroduced [guards]: timeout detail site=%1 navmesh=%2 tileLoaded=%3 tileRequested=%4 dormantAlive=%5 dormantDead=%6", site.Definition.Id, navmesh != null, tileLoaded, tileRequested, site.Group.GetDormantAliveCount(), site.Group.GetDormantDeadCount()); + Fail(string.Format("initial guard population incomplete or invalid: site=%1 requested=%2 physical=%3 conscious=%4 nativeComplete=%5; limit=90s; no replacement requested", site.Definition.Id, site.InitialGuardCount, physical.Count(), conscious, complete)); + } + return result; + } + protected void CancelInitialGuardRequests() + { + // Stock DespawnMembers returns early for an empty group; explicitly remove + // its queued initial request before a failed/stopped preparation deletes it. + if (!GetGame()) return; + ChimeraAIWorld world = ChimeraAIWorld.Cast(GetGame().GetAIWorld()); + if (!world) return; + foreach (ERR_SiteRuntime site : m_Sites) + { + if (!site.Group || site.InitialGuardCount <= 0) continue; + // Retire this instance's initial spawn intent as well as its current queue + // entries. A native expansion pass may otherwise schedule the empty capacity + // again. Existing physical members remain until the owner rolls back. + site.Group.SetSpawnImmediately(false); + site.Group.m_aUnitPrefabSlots = new array(); + world.PurgeSpawnRequestsForGroup(site.Group); + } + } + + ERR_PrepareResult Prepare() + { + if (!Replication.IsServer() || !m_Begun || m_Stopped) return ERR_PrepareResult.FAILED; + if (m_State != ERR_PrepareResult.PENDING) return m_State; + if (!m_ExtractionPlacement) { Fail("extraction placement owner missing"); return m_State; } + ERR_PrepareResult aircraftPlacement = m_ExtractionPlacement.Poll(GetGame().GetWorld().GetWorldTime()); + if (aircraftPlacement == ERR_PrepareResult.FAILED) { Fail(m_ExtractionPlacement.FailureReason()); return m_State; } + int pending, accepted, pendingGuards; + foreach (ERR_SiteRuntime site : m_Sites) + { + if (!TransportReady(site)) + { + if (GetGame().GetWorld().GetWorldTime() > m_Deadline) Fail("transport needs fuel, driver/passenger seats and a fitting parking footprint: " + site.Definition.Id); + return m_State; + } + ERR_PrepareResult guards = InitialGuards(site); + if (guards == ERR_PrepareResult.FAILED) return m_State; + if (guards == ERR_PrepareResult.PENDING) pendingGuards++; + } + string firstRejected; + foreach (ERR_StockPlacement placement : m_Placements) + { + if (!placement.Item || !placement.Inventory) { Fail("stock disappeared during initialization"); return m_State; } + array items = {}; + placement.Inventory.GetItems(items); + if (items.Contains(placement.Item)) continue; + pending++; + if (firstRejected.IsEmpty() && placement.Item.GetPrefabData()) firstRejected = placement.Item.GetPrefabData().GetPrefabName(); + if (placement.Accepted) accepted++; + if (!placement.Accepted) placement.Accepted = placement.Inventory.TryInsertItem(placement.Item); + } + if (pending) + { + if (GetGame().GetWorld().GetWorldTime() > m_Deadline) Fail(string.Format("physical stock insertion timed out: pending=%1 accepted=%2 sample=%3", pending, accepted, firstRejected)); + return m_State; + } + if (pendingGuards > 0 || aircraftPlacement == ERR_PrepareResult.PENDING) return m_State; + foreach (IEntity entity : m_Entities) m_Mode.Own(entity); + m_State = ERR_PrepareResult.READY; + PrintFormat("Rereintroduced [sites]: %1 sites and %2 physical stock items ready", m_Sites.Count(), m_Placements.Count()); + m_Placements.Clear(); + return m_State; + } + + void Activate() + { + if (m_State != ERR_PrepareResult.READY || m_Stopped || m_Activated) return; + m_Activated = true; + foreach (ERR_SiteRuntime site : m_Sites) + { + if (site.Definition.Kind == ERR_LocationKind.PRISON && site.Location) site.Location.Discover(0, 100); + if (site.Group) m_Mode.RegisterGroup(site.Group); + } + } + void PhaseChanged(ERR_Phase previous, ERR_Phase current) + { + if (!Replication.IsServer() || current != ERR_Phase.RADIO_SEARCH) return; + foreach (ERR_SiteRuntime site : m_Sites) + if (site.Definition.RevealOnEscape && site.Location) site.Location.Discover(0, 100); + } + bool CanObserve(IEntity player, ERR_SiteRuntime site) + { + if (!Replication.IsServer() || m_Stopped || !m_Mode.Active() || m_Mode.Phase() < ERR_Phase.RADIO_SEARCH) return false; + if (!site || !site.Definition || !m_Sites.Contains(site) || !site.Location || !m_Mode.HasLocation(site.Location) || !ERR_Actors.CanFight(player)) return false; + if (!ERR_Actors.Player(player) || !m_Mode.Players() || !m_Mode.PlayerFaction() || SCR_FactionManager.SGetFaction(player) != m_Mode.PlayerFaction()) return false; + if (!m_Mode.Players().CurrentActor(player)) return false; + vector position = site.Location.Position(); + vector observer = player.GetOrigin(); + if (!ERR_SiteDiscoveryRules.InRange(site.Definition.DiscoverRadius, vector.DistanceXZ(observer, position), Math.AbsFloat(observer[1] - position[1]))) return false; + TraceParam trace = new TraceParam(); + trace.Start = player.GetOrigin() + "0 1.5 0"; + trace.End = position + "0 1.3 0"; + trace.Flags = TraceFlags.WORLD | TraceFlags.ENTS; + trace.LayerMask = TRACE_LAYER_CAMERA; + trace.Exclude = player; + return GetGame().GetWorld().TraceMove(trace, null) >= 1; + } + void Tick(float now) + { + if (!Replication.IsServer() || m_Stopped || now < m_NextDiscovery) return; + m_NextDiscovery = now + 5000; + array players = {}; + ERR_Actors.Players(players, true); + foreach (ERR_SiteRuntime site : m_Sites) + { + if (!site.Location || site.Location.Knowledge() >= 2) continue; + foreach (IEntity player : players) + { + if (!CanObserve(player, site)) continue; + site.Location.Discover(0, 100); + break; + } + } + } + void Rollback() + { + Stop(); + // Children/items are listed after parents; delete them first. + for (int i = m_Entities.Count() - 1; i >= 0; i--) ERR_Actors.DeleteSpawned(m_Entities[i]); + m_Entities.Clear(); + m_Placements.Clear(); + m_Sites.Clear(); + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_ExtractionPlacement) m_ExtractionPlacement.Stop(); + if (m_State == ERR_PrepareResult.PENDING) CancelInitialGuardRequests(); + StopPatrols(); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c new file mode 100644 index 0000000..9bad5e3 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c @@ -0,0 +1,84 @@ +class ERR_SpawnTicket +{ + int ConnectionId; + UUID AccountId; + ERR_GameMode Mode; + SCR_PlayerController Controller; + SCR_SpawnRequestComponent Request; + ref SCR_SpawnData Data; + IEntity Actor; +} + +class ERR_SpawnFinalizationRules +{ + static bool PositionClose(vector actual, vector requested) + { + return vector.DistanceXZ(actual, requested) <= 0.6 && Math.AbsFloat(actual[1] - requested[1]) <= 1; + } + static bool Allows(int phase, bool connected, bool usedLife, UUID expected, UUID current, bool sameController, bool sameRequest, bool noControlledEntity) + { + return connected && ERR_PlayerLifeRules.CanEnter(usedLife, phase) && !expected.IsNull() && expected == current && sameController && sameRequest && noControlledEntity; + } +} + +modded class SCR_SpawnRequestComponent +{ + // Only a successor-owned admission ticket calls this. Disconnect or a mission + // phase change must not leave an old preload callback assigning an actor later. + void ERR_CancelAdmission(SCR_SpawnData data, bool notifyOwner) + { + if (!GetGame()) return; + GetGame().GetCallqueue().Remove(AwaitFinalization_S); + if (!Replication.IsServer()) return; + if (notifyOwner && GetPlayerController() && GetRespawnComponent()) SendResponse_S(SCR_ESpawnResult.SPAWN_NOT_ALLOWED, data); + } +} + +modded class SCR_FreeSpawnHandlerComponent +{ + protected ERR_SpawnLogic ERR_AdmissionLogic() + { + SCR_RespawnSystemComponent system = GetRespawnSystemComponent(); + if (!system) return null; + return ERR_SpawnLogic.Cast(system.GetSpawnLogic()); + } + protected void ERR_RejectOwnedActor(SCR_SpawnRequestComponent request, IEntity entity, SCR_SpawnData data) + { + // A repeated/malformed callback must never delete a currently possessed actor. + if (entity && !ERR_Actors.Player(entity)) HandleSpawnEntityFailure_S(request, entity, data, SCR_ESpawnResult.SPAWN_NOT_ALLOWED); + } + override SCR_ESpawnResult HandleRequest_S(SCR_SpawnRequestComponent requestComponent, SCR_SpawnData data, out IEntity spawnedEntity) + { + ERR_SpawnLogic logic = ERR_AdmissionLogic(); + if (!ERR_GameMode.Get() && !logic) return super.HandleRequest_S(requestComponent, data, spawnedEntity); + ERR_SpawnTicket ticket; + if (logic) ticket = logic.CreateSpawnTicket(requestComponent, data); + if (!ticket) return SCR_ESpawnResult.SPAWN_NOT_ALLOWED; + SCR_ESpawnResult result = super.HandleRequest_S(requestComponent, data, spawnedEntity); + if (result != SCR_ESpawnResult.OK) return result; + ticket.Actor = spawnedEntity; + if (!logic.TrackSpawnTicket(ticket)) + { + ERR_RejectOwnedActor(requestComponent, spawnedEntity, data); + return SCR_ESpawnResult.SPAWN_NOT_ALLOWED; + } + return result; + } + override SCR_ESpawnResult FinalizeRequest_S(SCR_SpawnRequestComponent requestComponent, SCR_SpawnData data, IEntity entity) + { + ERR_SpawnLogic logic = ERR_AdmissionLogic(); + if (!ERR_GameMode.Get() && !logic) return super.FinalizeRequest_S(requestComponent, data, entity); + ERR_SpawnTicket ticket; + if (logic) ticket = logic.TakeSpawnTicket(requestComponent, data, entity); + // No ticket means no ownership proof: reject without deleting arbitrary input. + if (!ticket) return SCR_ESpawnResult.SPAWN_NOT_ALLOWED; + if (!logic.MayFinalizeSpawn(ticket)) + { + ERR_RejectOwnedActor(requestComponent, entity, data); + return SCR_ESpawnResult.SPAWN_NOT_ALLOWED; + } + SCR_ESpawnResult result = super.FinalizeRequest_S(requestComponent, data, entity); + if (result != SCR_ESpawnResult.OK) ERR_RejectOwnedActor(requestComponent, entity, data); + return result; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c new file mode 100644 index 0000000..6712d86 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c @@ -0,0 +1,379 @@ +[BaseContainerProps(category: "Respawn")] +class ERR_SpawnLogic : SCR_SpawnLogic +{ + protected ref map m_Attempts = new map(); + protected ref map m_Identities = new map(); + protected ref map m_Retries = new map(); + protected ref map m_AuthorizedPositions = new map(); + protected ref set m_Pending = new set(); + protected ref ERR_SpawnPlacement m_Placement = new ERR_SpawnPlacement(); + protected ref array m_SpawnTickets = {}; + protected ERR_GameMode m_LifecycleMode; + protected bool m_AdmissionsStopped; + protected ref ERR_LocalAdmission m_LocalAdmission; + protected bool m_LocalAdmissionFailed; + + protected void BindLifecycle(ERR_GameMode mode) + { + if (!mode || m_LifecycleMode == mode) return; + if (m_LifecycleMode) + { + m_LifecycleMode.OnPhaseChanged().Remove(AdmissionPhaseChanged); + m_LifecycleMode.OnStop().Remove(StopAdmissions); + m_LifecycleMode.OnTick().Remove(CheckLocalAdmissionTick); + } + if (m_LocalAdmission && m_LocalAdmission.OfflineMode()) { StopAdmissions(); m_Identities.Clear(); } + if (m_LocalAdmission) m_LocalAdmission.Stop(); + m_LocalAdmission = new ERR_LocalAdmission(mode); + m_LocalAdmissionFailed = false; + m_AdmissionsStopped = false; + m_LifecycleMode = mode; + mode.OnPhaseChanged().Insert(AdmissionPhaseChanged); + mode.OnStop().Insert(StopAdmissions); + mode.OnTick().Insert(CheckLocalAdmissionTick); + } + + override void OnPlayerAuditSuccess_S(int playerId) + { + super.OnPlayerAuditSuccess_S(playerId); + UUID identity = SCR_PlayerIdentityUtils.GetPlayerIdentityId(playerId); + #ifdef WORKBENCH + if (identity.IsNull() && RplSession.Mode() != RplMode.Dedicated) + { + string name = GetGame().GetPlayerManager().GetPlayerName(playerId); + string suffix = Math.AbsInt(name.Hash()).ToString(12, true); + identity = "00e77100-0000-0000-0000-" + suffix; + } + #endif + ERR_GameMode mode = ERR_GameMode.Get(); + BindLifecycle(mode); + SCR_PlayerController resultController = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)); + if (resultController && (!m_LocalAdmission || !m_LocalAdmission.OfflineMode())) resultController.ERR_ResetEscapeResult(); + #ifndef WORKBENCH + string diagnosticProject; + if (System.GetCLIParam("errOrdinaryScenario", diagnosticProject) && (diagnosticProject == "core" || diagnosticProject == "chat")) + { + PrintFormat("ERR ORDINARY ADMISSION: server=%1 sessionMode=%2 modePresent=%3 controllerPresent=%4 identityPresent=%5 nameLength=%6", Replication.IsServer(), RplSession.Mode(), mode != null, resultController != null, !identity.IsNull(), GetGame().GetPlayerManager().GetPlayerName(playerId).Length()); + // Read cached native identity metadata only. Never print identity/name bytes, + // override cached backend identity or change its native utility. + string rawIdentity; + int rawLength = -1; + BackendApi backend = GetGame().GetBackendApi(); + if (backend) + { + rawIdentity = backend.GetPlayerIdentityId(playerId); + rawLength = rawIdentity.Length(); + } + UUID rawUUID = rawIdentity; + PrintFormat("ERR ORDINARY IDENTITY: rawLength=%1 rawEmpty=%2 rawNull=%3 rawFormatValid=%4 rawNullSentinel=%5 helperLength=%6 helperFormatValid=%7 dedicated=%8", rawLength, rawIdentity.IsEmpty(), rawUUID.IsNull(), UUID.IsUUID(rawIdentity), rawIdentity == UUID.NULL_UUID, identity.Length(), UUID.IsUUID(identity), RplSession.Mode() == RplMode.Dedicated); + } + #endif + if (m_LocalAdmission) identity = m_LocalAdmission.Resolve(mode, playerId, resultController, identity); + if (!CheckLocalAdmissionContext()) return; + // Repeated real callbacks retain the existing attempt/body/life and result. + if (m_LocalAdmission && m_LocalAdmission.Selected() && m_Identities.Contains(playerId)) + { + if (m_Identities.Get(playerId) != identity) { m_LocalAdmission.Disconnected(playerId); CheckLocalAdmissionContext(); return; } + if (resultController) resultController.ERR_PublishEscapeResult(mode.Players(), mode.Extraction()); + return; + } + if (!mode || !mode.Players().Bind(playerId, identity)) + { + Print("Rereintroduced: player identity could not be bound; spawn withheld", LogLevel.ERROR); + return; + } + if (resultController) + { + if (m_LocalAdmission && m_LocalAdmission.OfflineMode()) resultController.ERR_ResetEscapeResult(); + resultController.ERR_PublishEscapeResult(mode.Players(), mode.Extraction()); + } + m_Identities.Set(playerId, identity); + if ((!m_LocalAdmission || !m_LocalAdmission.LocalKey()) && ResolveReconnection(playerId)) + { + mode.PlayerSpawned(playerId, GetGame().GetPlayerManager().GetPlayerControlledEntity(playerId)); + SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)).ERR_SetObserver(ERR_ObserverReason.NONE); + return; + } + m_Attempts.Set(playerId, 0); + DoSpawn_S(playerId); + } + + protected override void DoSpawn_S(int playerId) + { + ERR_GameMode mode = ERR_GameMode.Get(); + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)); + if (!controller || !mode || m_AdmissionsStopped || !m_Identities.Contains(playerId) || !m_Attempts.Contains(playerId) || m_Pending.Contains(playerId)) return; + if (!CheckLocalAdmissionContext()) return; + if (controller.GetControlledEntity()) return; + if (ERR_MissionRules.Terminal(mode.Phase())) return; + if (!mode.PreparationError().IsEmpty()) { Observe(playerId, ERR_ObserverReason.SPAWN_UNAVAILABLE); return; } + // Preparing sites is not a failed spawn attempt. Every audited arrival waits + // for the same server preparation result before consuming its retry budget. + if (!mode.Active()) { RetryLater(playerId); return; } + int attempts = m_Attempts.Get(playerId); + if (attempts >= 30) { Observe(playerId, ERR_ObserverReason.SPAWN_UNAVAILABLE); return; } + if (!mode.Players().CanEnter(playerId, mode.Phase())) + { + ERR_ObserverReason reason = ERR_ObserverReason.SPENT_LIFE; + ERR_PlayerLife life = mode.Players().Get(playerId); + if (life && !life.UsedLife) reason = ERR_ObserverReason.LATE_EXTRACTION; + Observe(playerId, reason); + return; + } + // Every active, eligible admission consumes one attempt, even when native + // prerequisites or all safe positions are unavailable. Preparing and an + // already-pending request return above without spending this budget. + m_Attempts.Set(playerId, attempts + 1); + SCR_PlayerFactionAffiliationComponent affiliation = GetPlayerFactionComponent_S(playerId); + SCR_RespawnComponent respawn = GetPlayerRespawnComponent_S(playerId); + Faction faction = mode.PlayerFaction(); + if (!affiliation || !respawn || !faction) { RetryLater(playerId); return; } + affiliation.RequestFaction(faction); + vector position; + if (!SpawnPosition(mode, position)) { RetryLater(playerId); return; } + SCR_FreeSpawnData request = new SCR_FreeSpawnData(mode.Factions().PrisonerPrefab, position); + if (!respawn.CanSpawn(request)) { RetryLater(playerId); return; } + m_AuthorizedPositions.Set(playerId, position); + m_Pending.Insert(playerId); + if (!respawn.RequestSpawn(request)) OnPlayerSpawnFailed_S(playerId); + } + + protected bool SpawnPosition(ERR_GameMode mode, out vector position) + { + if (mode.Phase() == ERR_Phase.PRISON) return m_Placement.Prison(mode.PrisonPosition(), m_AuthorizedPositions, position); + array survivors = {}; + ERR_Actors.Players(survivors, true); + foreach (IEntity survivor : survivors) + { + // A controlled replacement or unfinished preload is not a round survivor. + if (!mode.Players() || !mode.Players().CurrentActor(survivor) || !mode.PlayerFaction() || SCR_FactionManager.SGetFaction(survivor) != mode.PlayerFaction()) continue; + if (m_Placement.Near(survivor, m_AuthorizedPositions, position)) return true; + } + return m_Placement.Prison(mode.PrisonPosition(), m_AuthorizedPositions, position); + } + + ERR_SpawnTicket CreateSpawnTicket(SCR_SpawnRequestComponent request, SCR_SpawnData data) + { + if (!Replication.IsServer() || !request || !data) return null; + int id = request.GetPlayerId(); + if (!Authorizes(id, data)) return null; + ERR_SpawnTicket ticket = new ERR_SpawnTicket(); + ticket.ConnectionId = id; + ticket.AccountId = m_Identities.Get(id); + ticket.Mode = ERR_GameMode.Get(); + ticket.Controller = SCR_PlayerController.Cast(request.GetPlayerController()); + ticket.Request = request; + ticket.Data = data; + return ticket; + } + bool TrackSpawnTicket(ERR_SpawnTicket ticket) + { + if (!Replication.IsServer() || !ticket || !ticket.Actor || ticket.Mode != ERR_GameMode.Get() || !Authorizes(ticket.ConnectionId, ticket.Data)) return false; + foreach (ERR_SpawnTicket existing : m_SpawnTickets) + if (existing.Request == ticket.Request || existing.Actor == ticket.Actor) return false; + m_SpawnTickets.Insert(ticket); + return true; + } + ERR_SpawnTicket TakeSpawnTicket(SCR_SpawnRequestComponent request, SCR_SpawnData data, IEntity entity) + { + if (!Replication.IsServer() || !request || !data || !entity) return null; + for (int i = 0; i < m_SpawnTickets.Count(); i++) + { + ERR_SpawnTicket ticket = m_SpawnTickets[i]; + if (ticket.Request != request || ticket.Data != data || ticket.Actor != entity) continue; + m_SpawnTickets.Remove(i); + return ticket; + } + return null; + } + bool MayFinalizeSpawn(ERR_SpawnTicket ticket) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!Replication.IsServer() || m_AdmissionsStopped || !mode || !ticket || ticket.Mode != mode || !ticket.Actor || !ticket.Request || !ticket.Controller) return false; + if (!CheckLocalAdmissionContext()) return false; + ERR_PlayerLife life = mode.Players().Get(ticket.ConnectionId); + if (!life || !m_Identities.Contains(ticket.ConnectionId)) return false; + PlayerController controller = GetGame().GetPlayerManager().GetPlayerController(ticket.ConnectionId); + bool sameController = controller == ticket.Controller && ticket.Request.GetPlayerController() == ticket.Controller; + bool sameRequest = ticket.Request.GetPlayerId() == ticket.ConnectionId && m_Identities.Get(ticket.ConnectionId) == ticket.AccountId; + if (!ERR_SpawnFinalizationRules.Allows(mode.Phase(), life.Connected, life.UsedLife, ticket.AccountId, life.AccountId, sameController, sameRequest, ticket.Controller.GetControlledEntity() == null)) return false; + if (!ERR_Actors.Alive(ticket.Actor) || !Authorizes(ticket.ConnectionId, ticket.Data)) return false; + // The preloaded body may have fallen or the reserved space become occupied. + if (!ERR_SpawnFinalizationRules.PositionClose(ticket.Actor.GetOrigin(), ticket.Data.GetPosition())) return false; + return m_Placement.Clear(ticket.Data.GetPosition(), m_AuthorizedPositions, ticket.ConnectionId, ticket.Actor); + } + protected void CancelOwnedTickets(int playerId, bool sendResponse) + { + for (int i = m_SpawnTickets.Count() - 1; i >= 0; i--) + { + ERR_SpawnTicket ticket = m_SpawnTickets[i]; + if (ticket.ConnectionId != playerId) continue; + m_SpawnTickets.Remove(i); + bool notify = sendResponse && ticket.Controller && ticket.Controller == GetGame().GetPlayerManager().GetPlayerController(playerId); + if (ticket.Request) ticket.Request.ERR_CancelAdmission(ticket.Data, notify); + ERR_Actors.DeleteSpawned(ticket.Actor); + } + } + protected void CancelAdmission(int playerId, ERR_ObserverReason reason) + { + m_Attempts.Remove(playerId); + m_Retries.Remove(playerId); + ClearPending(playerId); + m_AuthorizedPositions.Remove(playerId); + CancelOwnedTickets(playerId, true); + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)); + if (controller) controller.ERR_SetObserver(reason); + } + protected void AdmissionPhaseChanged(ERR_Phase previous, ERR_Phase current) + { + if (!Replication.IsServer() || current <= ERR_Phase.RADIO_DEFENCE) return; + array pending = {}; + foreach (int id, vector position : m_AuthorizedPositions) pending.Insert(id); + foreach (ERR_SpawnTicket ticket : m_SpawnTickets) + if (!pending.Contains(ticket.ConnectionId)) pending.Insert(ticket.ConnectionId); + foreach (int playerId : pending) + { + ERR_ObserverReason reason = ERR_ObserverReason.NONE; + if (current == ERR_Phase.EXTRACTION) reason = ERR_ObserverReason.LATE_EXTRACTION; + CancelAdmission(playerId, reason); + } + } + protected bool CheckLocalAdmissionContext() + { + if (!m_LocalAdmission || m_LocalAdmission.Validate()) return true; + if (m_LocalAdmissionFailed || m_AdmissionsStopped) return false; + m_LocalAdmissionFailed = true; + StopAdmissions(); + if (m_LifecycleMode) m_LifecycleMode.ERR_FailLocalAdmission(); + return false; + } + protected void CheckLocalAdmissionTick(float now) { CheckLocalAdmissionContext(); } + protected void StopAdmissions() + { + if (!Replication.IsServer()) return; + m_AdmissionsStopped = true; + if (m_LocalAdmission) m_LocalAdmission.Stop(); + array pending = {}; + foreach (int id, vector position : m_AuthorizedPositions) pending.Insert(id); + foreach (ERR_SpawnTicket ticket : m_SpawnTickets) + if (!pending.Contains(ticket.ConnectionId)) pending.Insert(ticket.ConnectionId); + foreach (int playerId : pending) CancelAdmission(playerId, ERR_ObserverReason.NONE); + m_Attempts.Clear(); + m_Retries.Clear(); + GetGame().GetCallqueue().Remove(RetrySpawn); + } + + protected void ClearPending(int playerId) + { + int index = m_Pending.Find(playerId); + if (index >= 0) m_Pending.Remove(index); + } + protected void RetryLater(int playerId) + { + UUID identity; + if (!m_Identities.Find(playerId, identity) || !m_Attempts.Contains(playerId)) return; + if (m_Retries.Contains(playerId) && m_Retries.Get(playerId) == identity) return; + m_Retries.Set(playerId, identity); + GetGame().GetCallqueue().CallLater(RetrySpawn, 1000, false, playerId, identity); + } + protected void RetrySpawn(int playerId, UUID identity) + { + if (!m_Identities.Contains(playerId) || m_Identities.Get(playerId) != identity || m_Retries.Get(playerId) != identity) return; + m_Retries.Remove(playerId); + DoSpawn_S(playerId); + } + protected override void OnPlayerSpawnFailed_S(int playerId) + { + CancelOwnedTickets(playerId, false); + ClearPending(playerId); + m_AuthorizedPositions.Remove(playerId); + RetryLater(playerId); + } + protected void Observe(int playerId, ERR_ObserverReason reason) + { + m_Attempts.Remove(playerId); + m_Retries.Remove(playerId); + ClearPending(playerId); + m_AuthorizedPositions.Remove(playerId); + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)); + if (controller) controller.ERR_SetObserver(reason); + } + protected override void OnPlayerEntityLost_S(int playerId) + { + super.OnPlayerEntityLost_S(playerId); + if (!m_Identities.Contains(playerId)) return; + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)); + GetGame().GetCallqueue().CallLater(ObserveAfterLoss, 100, false, playerId, m_Identities.Get(playerId), controller); + } + protected void ObserveAfterLoss(int playerId, UUID identity, SCR_PlayerController expectedController) + { + if (!expectedController || !m_Identities.Contains(playerId) || m_Identities.Get(playerId) != identity) return; + if (GetGame().GetPlayerManager().GetPlayerController(playerId) != expectedController || ERR_Actors.Alive(expectedController.GetControlledEntity())) return; + ERR_GameMode mode = ERR_GameMode.Get(); + ERR_PlayerLife life; + if (mode) life = mode.Players().Get(playerId); + if (life && life.UsedLife) Observe(playerId, ERR_ObserverReason.SPENT_LIFE); + } + override void OnPlayerSpawned_S(int playerId, IEntity entity) + { + super.OnPlayerSpawned_S(playerId, entity); + ClearPending(playerId); + m_AuthorizedPositions.Remove(playerId); + m_Attempts.Remove(playerId); + m_Retries.Remove(playerId); + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode) mode.PlayerSpawned(playerId, entity); + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)); + if (controller) controller.ERR_SetObserver(ERR_ObserverReason.NONE); + PrintFormat("Rereintroduced [spawn]: player %1 at %2", playerId, entity.GetOrigin()); + } + override void OnPlayerDisconnected_S(int playerId, KickCauseCode cause, int timeout) + { + if (m_LocalAdmission && m_LocalAdmission.Disconnected(playerId)) CheckLocalAdmissionContext(); + CancelAdmission(playerId, ERR_ObserverReason.NONE); + m_Identities.Remove(playerId); + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode) mode.Players().Disconnect(playerId); + if (GetPlayerRespawnComponent_S(playerId)) super.OnPlayerDisconnected_S(playerId, cause, timeout); + } + bool Authorizes(int playerId, SCR_SpawnData data) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!Replication.IsServer() || m_AdmissionsStopped || !mode || !data || !m_Identities.Contains(playerId) || !mode.Players().CanEnter(playerId, mode.Phase())) return false; + if (!CheckLocalAdmissionContext()) return false; + ERR_PlayerLife life = mode.Players().Get(playerId); + if (!life || life.AccountId != m_Identities.Get(playerId)) return false; + if (!m_Pending.Contains(playerId) || !m_AuthorizedPositions.Contains(playerId) || data.GetPrefab() != mode.Factions().PrisonerPrefab) return false; + return vector.Distance(data.GetPosition(), m_AuthorizedPositions.Get(playerId)) < 0.1; + } + void ~ERR_SpawnLogic() + { + if (!GetGame()) return; + StopAdmissions(); + if (m_LifecycleMode) + { + m_LifecycleMode.OnPhaseChanged().Remove(AdmissionPhaseChanged); + m_LifecycleMode.OnStop().Remove(StopAdmissions); + m_LifecycleMode.OnTick().Remove(CheckLocalAdmissionTick); + } + GetGame().GetCallqueue().Remove(RetrySpawn); + GetGame().GetCallqueue().Remove(ObserveAfterLoss); + } +} + +modded class SCR_RespawnSystemComponent +{ + override bool CanRequestSpawn_S(SCR_SpawnRequestComponent requestComponent, SCR_SpawnHandlerComponent handlerComponent, SCR_SpawnData data, out SCR_ESpawnResult result = SCR_ESpawnResult.SPAWN_NOT_ALLOWED) + { + if (ERR_GameMode.Get()) + { + ERR_SpawnLogic logic = ERR_SpawnLogic.Cast(GetSpawnLogic()); + if (!requestComponent || !logic || !logic.Authorizes(requestComponent.GetPlayerId(), data)) + { + result = SCR_ESpawnResult.SPAWN_NOT_ALLOWED; + return false; + } + } + return super.CanRequestSpawn_S(requestComponent, handlerComponent, data, result); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c new file mode 100644 index 0000000..ec23f54 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c @@ -0,0 +1,84 @@ +// Allocation is based on occupied space, never on a transient player ID. +class ERR_SpawnPlacement +{ + protected IEntity m_Exclude; + protected bool m_Blocked; + protected bool Obstacle(IEntity entity) + { + if (!entity || (!entity.GetVObject() && !ChimeraCharacter.Cast(entity))) return true; + IEntity parent = entity; + for (int depth = 0; parent && depth < 32; depth++) + { + if (parent == m_Exclude) return true; + parent = parent.GetParent(); + } + m_Blocked = true; + return false; + } + bool Clear(vector position, map reservations, int ownReservation = -1, IEntity exclude = null) + { + if (!Replication.IsServer()) return false; + if (reservations) + foreach (int id, vector reserved : reservations) + if (id != ownReservation && vector.DistanceXZ(position, reserved) < 1.2 && Math.AbsFloat(position[1] - reserved[1]) < 2) return false; + vector ground = ERR_Actors.Ground(position); + if (ground[1] < 1 || Math.AbsFloat(position[1] - ground[1]) > 0.3) return false; + // Feet need supported, reasonably level terrain across the character width. + for (int x = -1; x <= 1; x++) + for (int z = -1; z <= 1; z++) + { + vector sample = ERR_Actors.Ground(position + Vector(x * 0.45, 0, z * 0.45)); + if (Math.AbsFloat(sample[1] - ground[1]) > 0.3) return false; + } + m_Blocked = false; + m_Exclude = exclude; + GetGame().GetWorld().QueryEntitiesByAABB(ground + "-0.45 0.15 -0.45", ground + "0.45 1.9 0.45", Obstacle); + m_Exclude = null; + return !m_Blocked; + } + bool Prison(vector center, map reservations, out vector position) + { + // Native character query bounds are about 4m wide. A 3m lattice leaves + // clearance between that conservative bound and the 0.9m query column. + // Search the four inner positions, then eight edge positions, then corners. + // All sixteen centers remain at least 1.5m inside the authored +/-6m walls. + for (int band = 0; band <= 2; band++) + for (int row = 0; row < 4; row++) + for (int column = 0; column < 4; column++) + { + int outerAxes = 0; + if (row == 0 || row == 3) outerAxes++; + if (column == 0 || column == 3) outerAxes++; + if (outerAxes != band) continue; + vector candidate = ERR_Actors.Ground(center + Vector(-4.5 + column * 3, 0, -4.5 + row * 3)); + if (!Clear(candidate, reservations)) continue; + position = candidate; + return true; + } + return false; + } + bool Near(IEntity survivor, map reservations, out vector position) + { + if (!ERR_Actors.CanFight(survivor) || CompartmentAccessComponent.GetVehicleIn(survivor)) return false; + vector anchor = survivor.GetOrigin(); + vector floor = ERR_Actors.Ground(anchor); + if (Math.AbsFloat(anchor[1] - floor[1]) > 1.5) return false; + for (int z = -2; z <= 2; z++) + for (int x = -2; x <= 2; x++) + { + if (x == 0 && z == 0) continue; + vector candidate = ERR_Actors.Ground(anchor + Vector(x * 1.5, 0, z * 1.5)); + if (Math.AbsFloat(candidate[1] - anchor[1]) > 1.5 || !Clear(candidate, reservations)) continue; + TraceParam trace = new TraceParam(); + trace.Start = anchor + "0 1 0"; + trace.End = candidate + "0 1 0"; + trace.Flags = TraceFlags.WORLD | TraceFlags.ENTS; + trace.LayerMask = TRACE_LAYER_CAMERA; + trace.Exclude = survivor; + if (GetGame().GetWorld().TraceMove(trace, null) < 1) continue; + position = candidate; + return true; + } + return false; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Supplies.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Supplies.c new file mode 100644 index 0000000..09a2fb0 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_Supplies.c @@ -0,0 +1,7 @@ +class ERR_Supplies +{ + static ResourceName Pistol() { return "{C0F7DD85A86B2900}Prefabs/Weapons/Handguns/PM/Handgun_PM.et"; } + static ResourceName Magazine() { return "{8B853CDD11BA916E}Prefabs/Weapons/Magazines/Magazine_9x18_PM_8rnd_Ball.et"; } + static ResourceName Map() { return "{13772C903CB5E4F7}Prefabs/Items/Equipment/Maps/Map_Paper_01/PaperMap_01_folded.et"; } + static ResourceName IntelTable() { return "{53506DCB398C7EBE}Prefabs/Props/Furniture/Table_01.et"; } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_TimeService.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_TimeService.c new file mode 100644 index 0000000..56b4f6d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/Game/ERR/ERR_TimeService.c @@ -0,0 +1,81 @@ +// The authoritative engine manager owns progression and replication. This +// service sets it once per mission instance; saved changes apply next round. +class ERR_TimeService +{ + protected TimeAndWeatherManagerEntity m_Manager; + protected bool m_Started; + protected int m_StartMinutes; + protected int m_Multiplier; + + static float DayDuration(int multiplier) + { + if (!ERR_Settings.Valid("timeMultiplier", multiplier)) return -1; + return 86400.0 / multiplier; + } + static string Clock(int minutes) + { + if (!ERR_Settings.Valid("startTimeMinutes", minutes)) return "unavailable"; + int hours = minutes / 60; + int remainder = minutes % 60; + string hourText = hours.ToString(); + string minuteText = remainder.ToString(); + if (hours < 10) hourText = "0" + hourText; + if (remainder < 10) minuteText = "0" + minuteText; + return hourText + ":" + minuteText; + } + static bool ParseClock(string text, out int minutes) + { + if (text.Length() != 5 || text.Substring(2, 1) != ":") return false; + int hours; + int remainder; + if (!ERR_CommandArguments.Integer(text.Substring(0, 2), hours) || !ERR_CommandArguments.Integer(text.Substring(3, 2), remainder)) return false; + if (hours > 23 || remainder > 59) return false; + minutes = hours * 60 + remainder; + return true; + } + bool Start(ERR_GameMode mode) + { + if (!Replication.IsServer() || !mode || !mode.Settings()) return false; + if (m_Started) return true; + ChimeraWorld world = ChimeraWorld.CastFrom(mode.GetWorld()); + if (!world) return false; + m_Manager = world.GetTimeAndWeatherManager(); + if (!m_Manager) return false; + int startMinutes = mode.Settings().Get("startTimeMinutes"); + int multiplier = mode.Settings().Get("timeMultiplier"); + if (!ERR_Settings.Valid("startTimeMinutes", startMinutes) || !ERR_Settings.Valid("timeMultiplier", multiplier)) return false; + float previousDuration = m_Manager.GetDayDuration(); + bool previousAdvancement = m_Manager.GetIsDayAutoAdvanced(); + if (!m_Manager.SetDayDuration(DayDuration(multiplier))) return false; + if (!m_Manager.SetIsDayAutoAdvanced(true)) + { + m_Manager.SetDayDuration(previousDuration); + return false; + } + if (!m_Manager.SetTimeOfTheDay(startMinutes / 60.0, true)) + { + m_Manager.SetDayDuration(previousDuration); + m_Manager.SetIsDayAutoAdvanced(previousAdvancement); + return false; + } + m_StartMinutes = startMinutes; + m_Multiplier = multiplier; + m_Started = true; + PrintFormat("Rereintroduced [time]: started at %1 with %2x progression", Clock(m_StartMinutes), m_Multiplier); + return true; + } + bool Started() { return m_Started; } + int StartMinutes() { return m_StartMinutes; } + int Multiplier() { return m_Multiplier; } + int CurrentMinutes() + { + if (!m_Started || !m_Manager) return -1; + int minutes = Math.Floor(m_Manager.GetTimeOfTheDay() * 60); + return minutes % 1440; + } + string Status() + { + if (!m_Started) return "Clock not started."; + return "Clock " + Clock(CurrentMinutes()) + ", " + m_Multiplier.ToString() + "x progression (round started " + Clock(m_StartMinutes) + ")."; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c new file mode 100644 index 0000000..0e2e91c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c @@ -0,0 +1,26 @@ +// Honor noSplash before Game-module widget classes exist, only for the +// explicit ordinary diagnostic. Visible/unflagged startup stays vanilla. +#ifndef WORKBENCH +modded class SplashScreen +{ + protected bool m_ERRDiagnosticSplashSkipped; + + override void Load() + { + string project; + if (!System.IsCLIParam("noSplash") || !System.GetCLIParam("errOrdinaryScenario", project) || (project != "core" && project != "chat")) + { + super.Load(); + return; + } + // BaseLoadingAnim.Show may request Load again while the deliberately absent + // root is null. Preserve the splash sequence counter once per instance. + if (!m_ERRDiagnosticSplashSkipped) + { + m_ERRDiagnosticSplashSkipped = true; + s_iSplashShown++; + Print("ERR ORDINARY: diagnostic noSplash honored before Game compilation"); + } + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c new file mode 100644 index 0000000..ec3ade0 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c @@ -0,0 +1,27 @@ +[WorkbenchPluginAttribute(name: "Validate Rereintroduced base", wbModules: {"WorldEditor"})] +class ERR_ValidateBaseWorldPlugin : WorldEditorPlugin +{ + override void RunCommandline() + { + string play; + WorldEditor editor = Workbench.GetModule(WorldEditor); + if (editor) + { + WorldEditorAPI api = editor.GetApi(); + if (api) + { + float low = 10000; + float high = -10000; + for (int x = -3; x <= 3; x += 3) + for (int z = -3; z <= 3; z += 3) + { + float height = api.GetTerrainSurfaceY(6150 + x, 7050 + z); + low = Math.Min(low, height); + high = Math.Max(high, height); + } + PrintFormat("ERR SITE SURVEY: supply=6150/7050 elevationRange=%1 min=%2 max=%3", high - low, low, high); + } + } + if (editor && System.GetCLIParam("errPlay", play) && play == "1") editor.SwitchToGameMode(); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Worlds/ERR_Everon.ent b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Worlds/ERR_Everon.ent new file mode 100644 index 0000000..8561fb7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Worlds/ERR_Everon.ent @@ -0,0 +1,3 @@ +SubScene { + Parent "{853E92315D1D9EFE}worlds/Eden/Eden.ent" +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Worlds/ERR_Everon.ent.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Worlds/ERR_Everon.ent.meta new file mode 100644 index 0000000..417bfa5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Worlds/ERR_Everon.ent.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{B6C516F86302C679}Worlds/ERR_Everon.ent" + Configurations { + WorldResourceClass PC { + } + WorldResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Worlds/ERR_Everon_Layers/default.layer b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Worlds/ERR_Everon_Layers/default.layer new file mode 100644 index 0000000..b664d8d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/Worlds/ERR_Everon_Layers/default.layer @@ -0,0 +1,35 @@ +ERR_GameMode Rereintroduced : "{978E045E53EF36C8}Prefabs/ERR/GameMode.et" { +} +SCR_AIWorld AIWorld : "{E0A05C76552E7F58}Prefabs/AI/SCR_AIWorld.et" { + components { + NavmeshWorldComponent "{5584F30E67F617AD}" { + NavmeshSettings NavmeshWorld "{50FC63BEBE3973C5}" { + NavmeshFilesConfig BaseNavmeshFilesConfig "{60CA9BE5536BF701}" : "{8BBC73472092902E}Configs/Navmesh/Navmesh_GM_Eden_Soldier.conf" {} + } + } + NavmeshWorldComponent "{5584F30EEFEE1223}" { + NavmeshSettings ChimeraNavmeshWorld "{50FC63BEBE3973C5}" { + NavmeshFilesConfig BaseNavmeshFilesConfig "{60CA9BE5536BF701}" : "{0228A79846FD8A97}Configs/Navmesh/Navmesh_GM_Eden_Vehicle.conf" {} + } + } + NavmeshWorldComponent "{5C8C9B750D124A63}" { + NavmeshSettings NavmeshWorld "{5C8C9B750B60C6E2}" { + NavmeshFilesConfig BaseNavmeshFilesConfig "{5C90BD0EC793647D}" { + NavmeshFile "{5E19E60F26327356}worlds/MP/Navmeshes/LowResEden.nmn" + } + } + } + } +} +PerceptionManager Perception : "{028DAEAD63E056BE}Prefabs/World/Game/PerceptionManager.et" { +} +SCR_FactionManager Factions : "{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" { +} +SCR_LoadoutManager Loadouts : "{97EF4C1A41F63DDB}Prefabs/MP/Managers/Loadouts/LoadoutManager_USxUSSR.et" { +} + +RadioManagerEntity RadioManager : "{B8E09FAB91C4ECCD}Prefabs/Systems/Radio/RadioManager.et" { +} + +ScriptedChatEntity Chat : "{F69BC912AC8236F9}Prefabs/MP/ScriptedChatEntity.et" { +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/addon.gproj b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/addon.gproj new file mode 100644 index 0000000..54287e7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/core/addon.gproj @@ -0,0 +1,8 @@ +GameProject { + ID "ERR_Core" + GUID "2528466DE220D91C" + TITLE "Escapists Rereintroduced - Core" + Dependencies { + "58D0FB3206B6F859" + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/intel/Scripts/Game/ERR/ERR_IntelService.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/intel/Scripts/Game/ERR/ERR_IntelService.c new file mode 100644 index 0000000..0e59973 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/intel/Scripts/Game/ERR/ERR_IntelService.c @@ -0,0 +1,84 @@ +class ERR_IntelRequest +{ + IEntity Actor; + int Attempts; + bool Accepted; +} + +// Optional enemy inventory distribution. Core owns recovery and discovery. +class ERR_IntelService +{ + protected ERR_GameMode m_Mode; + protected ref array m_Requests = {}; + protected ref set m_Rolled = new set(); + + void ERR_IntelService(ERR_GameMode mode) { m_Mode = mode; } + void RegisterGroup(SCR_AIGroup group) + { + if (!Replication.IsServer() || !group) return; + array members = {}; + group.GetAgents(members); + foreach (AIAgent member : members) + { + if (!member) continue; + IEntity actor = member.GetControlledEntity(); + if (!ERR_Actors.Alive(actor) || ERR_Actors.Player(actor) || m_Rolled.Contains(actor)) continue; + m_Rolled.Insert(actor); + if (Math.RandomInt(0, 100) >= m_Mode.Settings().Get("aiIntelChancePercent")) continue; + if (m_Requests.Count() >= 256) continue; + ERR_IntelRequest request = new ERR_IntelRequest(); + request.Actor = actor; + m_Requests.Insert(request); + } + } + + + void Tick(float now) + { + if (!Replication.IsServer()) return; + int budget = 8; + for (int i = m_Requests.Count() - 1; i >= 0 && budget > 0; i--) + { + budget--; + ERR_IntelRequest request = m_Requests[i]; + if (!ERR_Actors.Alive(request.Actor) || ERR_Actors.Player(request.Actor)) { m_Requests.Remove(i); continue; } + SCR_InventoryStorageManagerComponent inventory = SCR_InventoryStorageManagerComponent.Cast(request.Actor.FindComponent(SCR_InventoryStorageManagerComponent)); + array folders = {}; + if (inventory) ERR_DiscoveryService.Folders(inventory, folders); + if (!folders.IsEmpty()) { m_Requests.Remove(i); continue; } + request.Attempts++; + if (request.Attempts > 30) + { + Print("Rereintroduced [intel]: bounded assignment failed", LogLevel.WARNING); + m_Requests.Remove(i); continue; + } + if (inventory && !request.Accepted) + request.Accepted = inventory.TrySpawnPrefabToStorage(ERR_Resources.IntelFolder(), purpose: EStoragePurpose.PURPOSE_ANY); + } + } + + +#ifdef WORKBENCH + // Observation only: a negative carrying decision still counts as its one roll. + bool ERR_ProbeWasRolled(IEntity actor) + { + return Replication.IsServer() && actor && m_Rolled.Contains(actor); + } +#endif + + void Stop() { m_Requests.Clear(); m_Rolled.Clear(); } +} + +modded class ERR_GameMode +{ + protected ref ERR_IntelService m_Intel; + protected override void EOnInit(IEntity owner) + { + super.EOnInit(owner); + if (SCR_Global.IsEditMode() || !Replication.IsServer()) return; + m_Intel = new ERR_IntelService(this); + OnGroup().Insert(m_Intel.RegisterGroup); + OnTick().Insert(m_Intel.Tick); + OnStop().Insert(m_Intel.Stop); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/intel/addon.gproj b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/intel/addon.gproj new file mode 100644 index 0000000..5b29a17 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/intel/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Intel" + GUID "D31039C7C53E348A" + TITLE "Escapists Rereintroduced - Intel" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Materials/ERRM_MapRenderTarget.emat b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Materials/ERRM_MapRenderTarget.emat new file mode 100644 index 0000000..d70697c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Materials/ERRM_MapRenderTarget.emat @@ -0,0 +1,7 @@ +MatPBRBasic { + Color 0.882 0.847 0.792 1 + AlphaTest 0.5 + AllowUserAlphaBias 1 + BCRMap "$rendertarget" + OpacityMap "{A64A8C63E0FBAE87}system/textures/defWhite.edds" "{A64A8C63E0FBAE87}system/textures/defWhite.edds" anim( 0 ) +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Materials/ERRM_MapRenderTarget.emat.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Materials/ERRM_MapRenderTarget.emat.meta new file mode 100644 index 0000000..e99a6d5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Materials/ERRM_MapRenderTarget.emat.meta @@ -0,0 +1,17 @@ +MetaFileClass { + Name "{03D6DE777C8E411C}Materials/ERRM_MapRenderTarget.emat" + Configurations { + ResourceClass PC { + } + ResourceClass XBOX_ONE : PC { + } + ResourceClass XBOX_SERIES : PC { + } + ResourceClass PS4 : PC { + } + ResourceClass PS5 : PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et new file mode 100644 index 0000000..9122e76 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et @@ -0,0 +1,78 @@ +GameEntity : "{C95E11C60810F432}Prefabs/Items/Core/Item_Base.et" { + ID "6FB475409DE44320" + components { + InventoryItemComponent "{5222EB4D0C73006B}" { + Attributes SCR_ItemAttributeCollection "{5222EB4D0A2B466B}" { + ItemDisplayName UIInfo "{7236A6DB18BD574C}" { + Name "Shared Field Map" + Description "A field map whose visible surface can be read by nearby players." + } + ItemPhysAttributes ItemPhysicalAttributes PhysicalAttributes { + Weight 0.1 + SizeSetupStrategy Manual + ItemDimensions 5 5 5 + ItemVolume 200 + DimensionScaler 1 + RestingAdditiveRotationLS 0 0 0 + RestingAdditiveOffsetLS 0 0 0 + } + ItemAnimationAttributes ItemAnimationAttributes "{4AC999738D39BA9A}" { + AnimationAttachments { + AnimationAttachmentInfo "{1D66E5B861D2F00A}" { + AnimGraph "{83675D0B0AB1B2C3}Assets/Items/Equipment/workspaces/paper_map.agr" + AnimInstance "{56794534F6B8C3D7}Assets/Items/Equipment/workspaces/player_map.asi" + BindingName "Gadget" + } + } + AllowInspection 1 + } + CustomAttributes { + PreviewRenderAttributes "{D12878E6C065B83D}" { + CameraPreset Top + CameraOrbitAngles -25 35 -25 + CameraDistanceToItem 2 + CameraOffset -0.01 0 0 + ItemRenderRotation 0 0 180 + FOV 10.5 + AspectRatio 1 + LodModel 1 + } + CharacterModifierAttributes "{78A32EF06ED3CB42}" { + ADSSpeedLimit 1 + } + } + m_eQuickSlotSize SLOT_1x1 + m_SlotType SLOT_GADGETS_STORAGE + } + } + MeshObject "{E66421D681D64AB7}" { + Object "{E443663E5241622A}Assets/Items/Equipment/Maps/Map_Paper_01/Map_Paper_01_folded.xob" + Materials { + MaterialAssignClass "{667CE655A40B0E50}" { + SourceMaterial "01__Default" + AssignedMaterial "{03D6DE777C8E411C}Materials/ERRM_MapRenderTarget.emat" + } + } + InheritVisibility 1 + } + RigidBody "{B29D8B091D657415}" { + Enabled 1 + LinearDamping 0.5 + AngularDamping 0.5 + AngularSleepingThreashold 1 + ModelGeometry 1 + } + ERRM_SharedMapComponent "{B576912A7A69396F}" { + m_sLayoutName "{255E1265F702B4AE}UI/layouts/ERRMap/SharedMapRenderTarget.layout" + m_eAnimVariable MAP + } + SCR_SoundDataComponent "{B6F06259A1F25D94}" { + m_aAudioSourceConfiguration { + SCR_AudioSourceConfiguration "{1F4628334AB3CE95}" { + m_sSoundProject "{13F8D0DE67678118}Sounds/Items/_SharedData/PickUp/Items_PickUp_Map.acp" + } + } + } + } + coords 0 0 0 +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta new file mode 100644 index 0000000..204db41 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta @@ -0,0 +1,17 @@ +MetaFileClass { + Name "{A46500E4A30B653B}Prefabs/Items/Equipment/ERRM_SharedFieldMap.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass XBOX_ONE : PC { + } + EntityTemplateResourceClass XBOX_SERIES : PC { + } + EntityTemplateResourceClass PS4 : PC { + } + EntityTemplateResourceClass PS5 : PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} \ No newline at end of file diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c new file mode 100644 index 0000000..022e963 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c @@ -0,0 +1,7 @@ +modded class ERR_ScenarioComponent +{ + protected override ResourceName FieldMap() + { + return "{A46500E4A30B653B}Prefabs/Items/Equipment/ERRM_SharedFieldMap.et"; + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c new file mode 100644 index 0000000..c871994 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c @@ -0,0 +1,328 @@ +#ifdef WORKBENCH +// Opt-in local UI evidence. These adapters execute production methods and always +// delegate their overrides; no native map/camera operation is intercepted. +modded class ERRM_SharedMapComponent +{ + protected ERRM_NativeMapOwnershipProbe m_ERRMOwnershipProbe; + protected int m_ERRMOwnershipSlot; + void ERRM_ObserveOwnership(ERRM_NativeMapOwnershipProbe probe, int slot) { m_ERRMOwnershipProbe = probe; m_ERRMOwnershipSlot = slot; } + Widget ERRM_OwnershipRoot() { return m_ESMRootWidget; } + bool ERRM_OwnershipReady() { return m_ESMRootWidget && m_ESMRenderTarget; } + bool ERRM_BeginOwnershipCapture(IEntity holder) + { + m_bESMInHand = true; + m_ESMCharacterOwner = holder; + TryCaptureMapSurface(); + // Deliberately delay only these fixture-owned callbacks until the replacement + // map has completed native initialization. The real method bodies run below. + GetGame().GetCallqueue().Remove(CenterMapOnHolder); + GetGame().GetCallqueue().Remove(FinishMapCapture); + return OwnsMapCapture(); + } + void ERRM_StaleOwnershipCenter() { CenterMapOnHolder(); } + void ERRM_QueueStaleOwnershipCallbacks() + { + GetGame().GetCallqueue().CallLater(CenterMapOnHolder, 100, false); + GetGame().GetCallqueue().CallLater(FinishMapCapture, 200, false); + } + void ERRM_StaleOwnershipCamera() { RestoreCharacterCamera(); } + void ERRM_StopOwnershipCapture() + { + StopMapCapture(); + // Include the real successor + vanilla ModeClear chain, even for a spare map. + ModeClear(EGadgetMode.IN_HAND); + } + protected override void OnDelete(IEntity owner) + { + ERRM_NativeMapOwnershipProbe probe = m_ERRMOwnershipProbe; + int slot = m_ERRMOwnershipSlot; + super.OnDelete(owner); + // Observe after the complete production/vanilla chain, without clearing any + // evidence references or overriding the native deletion operation. + if (probe) probe.ObserveDeletion(slot, !m_ESMRootWidget && !m_ESMRenderTarget && !m_ESMMapEntity && !m_ESMMapConfig && !m_ESMCharacterOwner && !m_bESMOwnsMapRenderer && !m_bESMInHand); + } + protected override void CenterMapOnHolder() + { + if (m_ERRMOwnershipProbe) m_ERRMOwnershipProbe.ObserveCenter(); + super.CenterMapOnHolder(); + } + protected override void FinishMapCapture() + { + if (m_ERRMOwnershipProbe) m_ERRMOwnershipProbe.ObserveFinish(); + super.FinishMapCapture(); + } + protected override void RestoreCharacterCamera() + { + if (m_ERRMOwnershipProbe) m_ERRMOwnershipProbe.ObserveRestore(OwnsMapCapture()); + super.RestoreCharacterCamera(); + } + protected override void CompleteMapModeSwitch() + { + if (m_ERRMOwnershipProbe) m_ERRMOwnershipProbe.ObserveCompletion(); + super.CompleteMapModeSwitch(); + } +} + +class ERRM_NativeMapOwnershipProbe +{ + protected static const ResourceName MAP_PREFAB = "{A46500E4A30B653B}Prefabs/Items/Equipment/ERRM_SharedFieldMap.et"; + protected static const ResourceName MAP_LAYOUT = "{255E1265F702B4AE}UI/layouts/ERRMap/SharedMapRenderTarget.layout"; + protected static const ResourceName MAP_CONFIG = "{A786DD4868598F15}Configs/Map/MapPlain.conf"; + protected SCR_MapEntity m_Map; + protected IEntity m_CaptureEntity; + protected IEntity m_SpareEntity; + protected ERRM_SharedMapComponent m_Capture; + protected ERRM_SharedMapComponent m_Spare; + protected IEntity m_Holder; + protected Widget m_ReplacementRoot; + protected ref MapConfiguration m_ReplacementConfig; + protected MapConfiguration m_ReadyConfig; + protected int m_Step; + protected int m_CloseEvents; + protected int m_RestoreCalls; + protected int m_RestoreAuthorized; + protected int m_Completions; + protected int m_CenterCalls; + protected int m_FinishCalls; + protected int m_CenterBaseline; + protected int m_FinishBaseline; + protected int m_CloseBaseline; + protected int m_RestoreBaseline; + protected int m_AuthorizedBaseline; + protected int m_CompletionBaseline; + protected vector m_PanBaseline; + protected float m_ZoomBaseline; + protected bool m_DeleteRequested; + protected bool m_DeleteStateFailed; + protected int m_CaptureDeleted; + protected int m_SpareDeleted; + protected float m_DeleteDeadline; + protected float m_Deadline; + protected float m_WaitUntil; + protected bool m_Stopped; + protected bool m_Done; + static bool Enabled() + { + string enabled, outcome; + return System.GetCLIParam("errSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "map-ownership"; + } + void ObserveRestore(bool authorized) + { + m_RestoreCalls++; + if (authorized) m_RestoreAuthorized++; + } + void ObserveDeletion(int slot, bool released) + { + if (!m_DeleteRequested || !released) m_DeleteStateFailed = true; + if (slot == 1) m_CaptureDeleted++; + else if (slot == 2) m_SpareDeleted++; + else m_DeleteStateFailed = true; + Print(string.Format("ERR MAP DELETE: afterSuper slot=%1 released=%2 captureCallbacks=%3 spareCallbacks=%4", slot, released, m_CaptureDeleted, m_SpareDeleted)); + } + protected bool DeletionComplete() + { + return m_DeleteRequested && !m_SpareEntity && !m_CaptureEntity && !m_Spare && !m_Capture && m_CaptureDeleted == 1 && m_SpareDeleted == 1 && !m_DeleteStateFailed; + } + protected void RequestOwnedDeletion() + { + if (m_DeleteRequested) return; + m_DeleteRequested = true; + if (m_SpareEntity) SCR_EntityHelper.DeleteEntityAndChildren(m_SpareEntity); + if (m_CaptureEntity) SCR_EntityHelper.DeleteEntityAndChildren(m_CaptureEntity); + } + protected void LogDeletionState(string when) + { + Print(string.Format("ERR MAP DELETE: %1 captureEntity=%2 spareEntity=%3 captureComponent=%4 spareComponent=%5 captureCallbacks=%6 spareCallbacks=%7 cleanupFailed=%8", when, m_CaptureEntity != null, m_SpareEntity != null, m_Capture != null, m_Spare != null, m_CaptureDeleted, m_SpareDeleted, m_DeleteStateFailed)); + } + void ObserveCompletion() { m_Completions++; } + void ObserveCenter() { m_CenterCalls++; } + void ObserveFinish() { m_FinishCalls++; } + protected void OnMapClosed(MapConfiguration config) { m_CloseEvents++; } + protected void OnMapReady(MapConfiguration config) { m_ReadyConfig = config; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: shared map ownership " + detail); return true; } + Print("ERR SMOKE FAIL: shared map ownership " + detail, LogLevel.ERROR); + Stop(); return false; + } + protected IEntity SpawnMap(vector origin) + { + EntitySpawnParams params = new EntitySpawnParams(); + params.TransformMode = ETransformMode.WORLD; + params.Transform[3] = origin; + return GetGame().SpawnEntityPrefab(Resource.Load(MAP_PREFAB), GetGame().GetWorld(), params); + } + // A distinct native configuration with the same vanilla plain-map settings. + // It intentionally shares immutable settings/module arrays with the closed + // capture configuration; neither configuration is serialized or resource-edited. + protected MapConfiguration CopyPlainConfig(MapConfiguration source, Widget root) + { + MapConfiguration copy = new MapConfiguration(); + copy.MapEntityMode = source.MapEntityMode; + copy.RootWidgetRef = root; + copy.LayerCount = source.LayerCount; + copy.MapPropsConfig = source.MapPropsConfig; + copy.LayerConfig = source.LayerConfig; + copy.DescriptorVisibilityConfig = source.DescriptorVisibilityConfig; + copy.DescriptorDefsConfig = source.DescriptorDefsConfig; + copy.Modules = source.Modules; + copy.Components = source.Components; + copy.OtherComponents = source.OtherComponents; + return copy; + } + protected bool ReplacementIsCurrent() + { + return m_Map && SCR_MapEntity.GetMapInstance() == m_Map && m_Map.IsOpen() && m_ReplacementConfig && m_Map.GetMapConfig() == m_ReplacementConfig && m_ReplacementConfig.RootWidgetRef == m_ReplacementRoot && m_Map.GetMapMenuRoot() == m_ReplacementRoot; + } + protected void SaveCounters() + { + m_CloseBaseline = m_CloseEvents; + m_RestoreBaseline = m_RestoreCalls; + m_AuthorizedBaseline = m_RestoreAuthorized; + m_CompletionBaseline = m_Completions; + m_CenterBaseline = m_CenterCalls; m_FinishBaseline = m_FinishCalls; + } + protected bool BeginReplacement(bool reuseConfig) + { + if (!Check(m_Map && !m_Map.IsOpen() && m_Capture.ERRM_BeginOwnershipCapture(m_Holder), "actual owned prefab captures its native plain-map root")) return false; + MapConfiguration captured = m_Map.GetMapConfig(); + if (!Check(captured && captured.RootWidgetRef == m_Capture.ERRM_OwnershipRoot(), "capture config belongs to exact fixture component")) return false; + // Close only the just-verified fixture view before replacing it; this also + // avoids the native double-open warning. Delayed callbacks remain stale. + m_Map.CloseMap(); + if (reuseConfig) m_ReplacementConfig = m_Map.SetupMapConfig(EMapEntityMode.PLAIN, MAP_CONFIG, m_ReplacementRoot); + else m_ReplacementConfig = CopyPlainConfig(captured, m_ReplacementRoot); + if (!Check(m_ReplacementConfig && ((reuseConfig && m_ReplacementConfig == captured) || (!reuseConfig && m_ReplacementConfig != captured)), "requested distinct/reused native configuration identity established")) return false; + m_ReadyConfig = null; + m_Map.OpenMap(m_ReplacementConfig); + if (!Check(ReplacementIsCurrent(), "actual replacement root is current native map")) return false; + SaveCounters(); + return true; + } + protected bool ExerciseStaleCallbacks() + { + if (!Check(ReplacementIsCurrent() && m_ReadyConfig == m_ReplacementConfig && !m_Map.IsZooming(), "replacement remains open after native open-complete event")) return false; + vector pan = m_Map.GetCurrentPan(); + float zoom = m_Map.GetTargetZoomPPU(); + m_Capture.ERRM_StaleOwnershipCenter(); + if (!Check(m_Map.GetCurrentPan() == pan && m_Map.GetTargetZoomPPU() == zoom && !m_Map.IsZooming(), "actual stale center callback cannot pan or retarget replacement zoom")) return false; + m_Capture.ERRM_StaleOwnershipCamera(); + if (!Check(m_RestoreCalls == m_RestoreBaseline + 1 && m_RestoreAuthorized == m_AuthorizedBaseline, "stale camera-restore method executes but native-write authorization is denied")) return false; + m_PanBaseline = pan; m_ZoomBaseline = zoom; + m_Capture.ERRM_QueueStaleOwnershipCallbacks(); + return true; + } + protected bool VerifyStaleAndStop() + { + if (!Check(m_CenterCalls == m_CenterBaseline + 2 && m_FinishCalls == m_FinishBaseline + 1, "both real delayed production callbacks ran exactly once")) return false; + if (!Check(ReplacementIsCurrent() && m_Map.GetCurrentPan() == m_PanBaseline && m_Map.GetTargetZoomPPU() == m_ZoomBaseline, "real delayed center and finish leave replacement view unchanged")) return false; + m_Capture.ERRM_StopOwnershipCapture(); + if (!Check(ReplacementIsCurrent() && m_CloseEvents == m_CloseBaseline && m_Completions == m_CompletionBaseline && m_RestoreCalls == m_RestoreBaseline + 1, "actual finish, stop and vanilla mode-clear preserve replacement and do not request camera restore")) return false; + return true; + } + // Returns 0 while waiting, 1 only after cleanup, -1 on failure. now is native + // world time in milliseconds, matching existing Chat smoke probes. + int Tick(float now) + { + if (m_Done) return 1; + if (m_Stopped) return -1; + if (!Enabled()) { Stop(); return -1; } + if (m_Step == 0) + { + m_Map = SCR_MapEntity.GetMapInstance(); + PlayerController controller = GetGame().GetPlayerController(); + if (!Check(m_Map && !m_Map.IsOpen() && controller && controller.GetControlledEntity() && GetGame().GetCameraManager().CurrentCamera() == controller.GetPlayerCamera(), "fixture starts only with closed map and actual local character camera")) return -1; + m_Holder = controller.GetControlledEntity(); + m_Deadline = now + 15000; + m_ReplacementRoot = GetGame().GetWorkspace().CreateWidgets(MAP_LAYOUT); + if (!Check(m_ReplacementRoot != null, "owned replacement native map layout created")) return -1; + m_ReplacementRoot.SetVisible(false); + RTTextureWidget target = RTTextureWidget.Cast(m_ReplacementRoot.FindAnyWidget("RTTexture0")); + if (target) target.SetEnabled(false); + SCR_MapEntity.GetOnMapClose().Insert(OnMapClosed); + SCR_MapEntity.GetOnMapOpenComplete().Insert(OnMapReady); + m_CaptureEntity = SpawnMap(m_Holder.GetOrigin() + Vector(0, 0.2, 0)); + m_SpareEntity = SpawnMap(m_Holder.GetOrigin() + Vector(0.3, 0.2, 0)); + if (!Check(m_CaptureEntity && m_SpareEntity && m_CaptureEntity != m_SpareEntity, "two separate real successor map prefabs spawned without inventory changes")) return -1; + m_WaitUntil = now + 1000; m_Step = 1; return 0; + } + if (now > m_Deadline) { Check(false, "bounded fixture deadline"); return -1; } + if (now < m_WaitUntil) return 0; + if (m_Step == 1) + { + if (!Check(m_CaptureEntity && m_SpareEntity, "both fixture entities survive until native component initialization")) return -1; + m_Capture = ERRM_SharedMapComponent.Cast(m_CaptureEntity.FindComponent(ERRM_SharedMapComponent)); + m_Spare = ERRM_SharedMapComponent.Cast(m_SpareEntity.FindComponent(ERRM_SharedMapComponent)); + if (!Check(m_Capture && m_Spare && m_Capture.ERRM_OwnershipReady() && m_Spare.ERRM_OwnershipReady(), "both native map components initialize actual render roots")) return -1; + m_Capture.ERRM_ObserveOwnership(this, 1); m_Spare.ERRM_ObserveOwnership(this, 2); + if (!BeginReplacement(false)) return -1; + m_WaitUntil = now + 1500; m_Step = 2; return 0; + } + if (m_Step == 2) + { + if (!ExerciseStaleCallbacks()) return -1; + m_WaitUntil = now + 750; m_Step = 3; return 0; + } + if (m_Step == 3) + { + if (!VerifyStaleAndStop()) return -1; + m_Map.CloseMap(); // exact replacement was checked immediately above + if (!BeginReplacement(true)) return -1; + m_WaitUntil = now + 1500; m_Step = 4; return 0; + } + if (m_Step == 4) + { + if (!ExerciseStaleCallbacks()) return -1; + m_WaitUntil = now + 750; m_Step = 5; return 0; + } + if (m_Step == 5) + { + if (!VerifyStaleAndStop()) return -1; + SaveCounters(); + m_Spare.ERRM_StopOwnershipCapture(); + RequestOwnedDeletion(); + LogDeletionState("request returned"); + m_DeleteDeadline = now + 3000; + m_WaitUntil = now + 100; m_Step = 6; return 0; + } + if (m_Step == 6) + { + if (!ReplacementIsCurrent() || m_CloseEvents != m_CloseBaseline || m_RestoreCalls != m_RestoreBaseline) + { + Check(false, "replacement remains unchanged while native deletion finishes"); return -1; + } + if (!DeletionComplete()) + { + if (now >= m_DeleteDeadline) + { + LogDeletionState("bounded deletion timeout"); + Check(false, "both actual entities/components delete and both superclass cleanup callbacks complete within three seconds"); return -1; + } + return 0; + } + LogDeletionState("completed on later tick"); + if (!Check(DeletionComplete(), "actual prefab deletion runs successor and vanilla superclass cleanup")) return -1; + if (!Check(ReplacementIsCurrent() && m_CloseEvents == m_CloseBaseline && m_RestoreCalls == m_RestoreBaseline, "spare and interrupted map deletion preserve replacement without restore calls")) return -1; + m_WaitUntil = now + 1500; m_Step = 7; return 0; + } + if (!Check(ReplacementIsCurrent() && m_CloseEvents == m_CloseBaseline && m_RestoreCalls == m_RestoreBaseline && m_Completions == m_CompletionBaseline && m_CenterCalls == m_CenterBaseline && m_FinishCalls == m_FinishBaseline, "replacement survives delayed native callback window after both deletions")) return -1; + Stop(); m_Done = true; + Print("ERR SMOKE PASS: shared map ownership owned UI removed; camera render flag has no native getter and is not claimed as measured"); + return 1; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_Capture) m_Capture.ERRM_StopOwnershipCapture(); + if (m_Spare) m_Spare.ERRM_StopOwnershipCapture(); + if (ReplacementIsCurrent()) m_Map.CloseMap(); + SCR_MapEntity.GetOnMapClose().Remove(OnMapClosed); + SCR_MapEntity.GetOnMapOpenComplete().Remove(OnMapReady); + RequestOwnedDeletion(); + if (m_ReplacementRoot) m_ReplacementRoot.RemoveFromHierarchy(); + m_ReplacementRoot = null; m_ReplacementConfig = null; m_ReadyConfig = null; m_Map = null; + m_Capture = null; m_Spare = null; m_Holder = null; + } +} +#endif diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c new file mode 100644 index 0000000..33839a4 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c @@ -0,0 +1,231 @@ +[ComponentEditorProps(category: "GameScripted/Gadgets", description: "Vanilla map gadget with a world-visible rendered surface")] +class ERRM_SharedMapComponentClass : SCR_MapGadgetComponentClass +{ + [Attribute("{255E1265F702B4AE}UI/layouts/ERRMap/SharedMapRenderTarget.layout", UIWidgets.ResourcePickerThumbnail, "Off-screen map render target", "layout")] + protected ResourceName m_sLayoutName; + + [Attribute("0.12", UIWidgets.EditBox, "Initial map zoom in pixels per metre", "0.01 20", category: "Shared Map")] + protected float m_fInitialZoom; + + ResourceName GetSharedMapLayout() + { + return m_sLayoutName; + } + + float GetInitialZoom() + { + return m_fInitialZoom; + } +} + +// This remains a real SCR_MapGadgetComponent, so the normal M-key map, +// animations, ruler and faction-specific protractor settings keep working. +// The extra off-screen widget supplies the texture used by the held model. +class ERRM_SharedMapComponent : SCR_MapGadgetComponent +{ + protected const ResourceName MAP_CONFIG = "{A786DD4868598F15}Configs/Map/MapPlain.conf"; + protected const int MAP_SETUP_DELAY_MS = 100; + protected const int MAP_CAPTURE_DELAY_MS = 500; + protected const int MAP_RETRY_DELAY_MS = 250; + + protected Widget m_ESMRootWidget; + protected RTTextureWidget m_ESMRenderTarget; + protected SCR_MapEntity m_ESMMapEntity; + protected ref MapConfiguration m_ESMMapConfig; + protected IEntity m_ESMCharacterOwner; + protected bool m_bESMInHand; + protected bool m_bESMOwnsMapRenderer; + + protected override void EOnInit(IEntity owner) + { + super.EOnInit(owner); + + ERRM_SharedMapComponentClass data = ERRM_SharedMapComponentClass.Cast(GetComponentData(owner)); + WorkspaceWidget workspace = GetGame().GetWorkspace(); + if (!data || !workspace || data.GetSharedMapLayout().IsEmpty()) + return; + + m_ESMRootWidget = workspace.CreateWidgets(data.GetSharedMapLayout()); + if (!m_ESMRootWidget) + return; + + m_ESMRenderTarget = RTTextureWidget.Cast(m_ESMRootWidget.FindAnyWidget("RTTexture0")); + if (!m_ESMRenderTarget) + return; + + m_ESMRenderTarget.SetRenderTarget(owner); + m_ESMRenderTarget.SetEnabled(false); + } + + protected override void ModeSwitch(EGadgetMode mode, IEntity charOwner) + { + if (mode != EGadgetMode.IN_HAND || !m_ESMRootWidget || !m_ESMRenderTarget) + { + super.ModeSwitch(mode, charOwner); + return; + } + + m_bESMInHand = true; + m_ESMCharacterOwner = charOwner; + TryCaptureMapSurface(); + } + + protected override void ModeClear(EGadgetMode mode) + { + if (mode == EGadgetMode.IN_HAND) + StopMapCapture(); + + super.ModeClear(mode); + } + + protected void TryCaptureMapSurface() + { + if (!m_bESMInHand) + return; + + if (!m_ESMRootWidget || !m_ESMRenderTarget) + { + CompleteMapModeSwitch(); + return; + } + + m_ESMMapEntity = SCR_MapEntity.GetMapInstance(); + if (!m_ESMMapEntity) + { + CompleteMapModeSwitch(); + return; + } + + // The owner's normal map has priority. Capture only after it closes; + // otherwise this auxiliary render would replace or close the M-key UI. + if (m_ESMMapEntity.IsOpen()) + { + GetGame().GetCallqueue().CallLater(TryCaptureMapSurface, MAP_RETRY_DELAY_MS, false); + return; + } + + m_ESMRenderTarget.SetEnabled(true); + MapConfiguration mapConfig = m_ESMMapEntity.SetupMapConfig(EMapEntityMode.PLAIN, MAP_CONFIG, m_ESMRootWidget); + if (!mapConfig) + { + ReleaseMapCapture(); + CompleteMapModeSwitch(); + return; + } + + m_ESMMapConfig = mapConfig; + m_bESMOwnsMapRenderer = true; + m_ESMMapEntity.OpenMap(mapConfig); + if (!OwnsMapCapture()) + { + ReleaseMapCapture(); + if (m_bESMInHand && GetGame()) + GetGame().GetCallqueue().CallLater(TryCaptureMapSurface, MAP_RETRY_DELAY_MS, false); + return; + } + RestoreCharacterCamera(); + + GetGame().GetCallqueue().CallLater(CenterMapOnHolder, MAP_SETUP_DELAY_MS, false); + GetGame().GetCallqueue().CallLater(FinishMapCapture, MAP_CAPTURE_DELAY_MS, false); + } + + protected void CenterMapOnHolder() + { + if (!OwnsMapCapture() || !m_ESMCharacterOwner) + return; + + ERRM_SharedMapComponentClass data = ERRM_SharedMapComponentClass.Cast(GetComponentData(GetOwner())); + if (!data) + return; + + vector holderPosition = m_ESMCharacterOwner.GetOrigin(); + m_ESMMapEntity.ZoomPanSmooth(data.GetInitialZoom(), holderPosition[0], holderPosition[2], 0.1); + } + + protected void FinishMapCapture() + { + if (!m_bESMOwnsMapRenderer) + return; + if (!OwnsMapCapture()) + { + ReleaseMapCapture(); + // A native UI replaced this capture. Do not close, pan, fade or + // focus that UI; use the existing retry path after it closes. + if (m_bESMInHand && GetGame()) + GetGame().GetCallqueue().CallLater(TryCaptureMapSurface, MAP_RETRY_DELAY_MS, false); + return; + } + + ReleaseMapCapture(); + CompleteMapModeSwitch(); + } + + protected bool OwnsMapCapture() + { + if (!GetGame() || !m_bESMOwnsMapRenderer || !m_ESMMapEntity || !m_ESMMapConfig || !m_ESMRootWidget) + return false; + if (SCR_MapEntity.GetMapInstance() != m_ESMMapEntity || !m_ESMMapEntity.IsOpen()) + return false; + // Vanilla reuses the same config object for equal map modes and changes + // RootWidgetRef, so pointer identity alone cannot establish ownership. + return m_ESMMapEntity.GetMapConfig() == m_ESMMapConfig && m_ESMMapConfig.RootWidgetRef == m_ESMRootWidget; + } + + protected void ReleaseMapCapture() + { + bool ownsRenderer = OwnsMapCapture(); + // Freeze our own target even on interruption or foreign replacement. + if (m_ESMRenderTarget) + m_ESMRenderTarget.SetEnabled(false); + m_bESMOwnsMapRenderer = false; + m_ESMMapConfig = null; + if (ownsRenderer) + m_ESMMapEntity.CloseMap(); // vanilla also restores its character camera + } + + protected void CompleteMapModeSwitch() + { + if (!m_bESMInHand || !m_ESMCharacterOwner) + return; + + // Start the stock map only after the world-visible surface owns a frame. + super.ModeSwitch(EGadgetMode.IN_HAND, m_ESMCharacterOwner); + } + + protected void StopMapCapture() + { + m_bESMInHand = false; + if (GetGame()) + { + GetGame().GetCallqueue().Remove(TryCaptureMapSurface); + GetGame().GetCallqueue().Remove(CenterMapOnHolder); + GetGame().GetCallqueue().Remove(FinishMapCapture); + } + ReleaseMapCapture(); + m_ESMCharacterOwner = null; + m_ESMMapEntity = null; + } + + protected void RestoreCharacterCamera() + { + if (!OwnsMapCapture()) return; + PlayerController playerController = GetGame().GetPlayerController(); + if (playerController) + playerController.SetCharacterCameraRenderActive(true); + } + + protected override void OnDelete(IEntity owner) + { + StopMapCapture(); + + // The entity may already be destroyed when this callback runs during a + // world restart. Destroying the widget releases its render binding without + // passing the deleted entity back into the native renderer. + if (m_ESMRootWidget) + m_ESMRootWidget.RemoveFromHierarchy(); + + m_ESMRenderTarget = null; + m_ESMRootWidget = null; + super.OnDelete(owner); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout new file mode 100644 index 0000000..bcefcb9 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout @@ -0,0 +1,39 @@ +FrameWidgetClass { + Name "rootFrame" + Slot FrameWidgetSlot { + SizeX 1024 + OffsetRight -1024 + SizeY 1024 + OffsetBottom -1024 + } + { + RTTextureWidgetClass { + Name "RTTexture0" + Slot FrameWidgetSlot { + Anchor 0 0 1 1 + SizeX -1024 + OffsetRight 0 + SizeY -1024 + OffsetBottom 0 + } + { + MapWidgetClass { + Name "MapWidget" + Slot FrameWidgetSlot { + Anchor 0 0 1 1 + SizeX -1024 + OffsetRight 0 + SizeY -1024 + OffsetBottom 0 + } + Clipping False + Color 1 1 1 1 + SizeInUnits 1024 1024 + OffsetPixels 0 0 + Clear 1 + ClearColor 0.78 0.74 0.62 1 + } + } + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta new file mode 100644 index 0000000..84e4dae --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta @@ -0,0 +1,17 @@ +MetaFileClass { + Name "{255E1265F702B4AE}UI/layouts/ERRMap/SharedMapRenderTarget.layout" + Configurations { + LayoutResourceClass PC { + } + LayoutResourceClass XBOX_ONE : PC { + } + LayoutResourceClass XBOX_SERIES : PC { + } + LayoutResourceClass PS4 : PC { + } + LayoutResourceClass PS5 : PC { + } + LayoutResourceClass HEADLESS : PC { + } + } +} \ No newline at end of file diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/addon.gproj b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/addon.gproj new file mode 100644 index 0000000..5d0a4d2 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/source/addons/map/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Map" + GUID "9AAEE9041D79809E" + TITLE "Escapists Rereintroduced - Map" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/dedicated-2026-09-19-131458-missing-databases/stdout.log b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/stdout.log new file mode 100644 index 0000000..8d2edc7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-131458-missing-databases/stdout.log @@ -0,0 +1,285 @@ +ERR ISOLATION {"netns": "net:[4026534801]", "interfaces": [[1, "lo"]], "routes": "Iface\tDestination\tGateway \tFlags\tRefCnt\tUse\tMetric\tMask\t\tMTU\tWindow\tIRTT \n", "ipv6Routes": "00000000000000000000000000000000 00 00000000000000000000000000000000 00 00000000000000000000000000000000 ffffffff 00000001 00000000 00200200 lo\n00000000000000000000000000000001 80 00000000000000000000000000000000 00 00000000000000000000000000000000 00000000 00000002 00000000 80200001 lo\n00000000000000000000000000000000 00 00000000000000000000000000000000 00 00000000000000000000000000000000 ffffffff 00000001 00000000 00200200 lo\n"} +RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/chat/resourceDatabase.rdb' +RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/map/resourceDatabase.rdb' +RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/intel/resourceDatabase.rdb' +RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/ai/resourceDatabase.rdb' +RESOURCES (W): ResourceDB: could not open the cache file '/tmp/source/addons/core/resourceDatabase.rdb' +ENGINE : Creating engine. +ENGINE : FileSystem: Adding relative directory '/tmp/work/profile/logs/logs_2026-09-19_13-14-58' to filesystem under name logs +ENGINE : FileSystem: Adding relative directory '/tmp/work/profile/profile' to filesystem under name profile +ENGINE : FileSystem: Current working directory: '/tmp/runtime/' +ENGINE : Initializing engine, version 192142 +ENGINE : CLI Params: -profile /tmp/work/profile -noBackend -noSound -noSplash -noThrow -bindIP 127.0.0.1 -bindPort 2001 -maxFPS 30 -logStats 5000 -addonsDir /tmp/source/addons -addons FA804F411BDDF2C6 -server {C1E20667DCE324ED}Missions/ERR_Everon.conf +ENGINE : Addon dirs: + ENGINE : dir: '/tmp/source/addons' + ENGINE : dir: './addons' + ENGINE : dir: '/tmp/work/profile/addons' +ENGINE : Available addons: + ENGINE : gproj: '/tmp/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' + ENGINE : gproj: '/tmp/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' + ENGINE : gproj: '/tmp/source/addons/core/addon.gproj' guid: '2528466DE220D91C' + ENGINE : gproj: '/tmp/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' + ENGINE : gproj: '/tmp/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' + ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) + ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +ENGINE : FileSystem: Adding relative directory '/tmp/source/addons/chat' to filesystem under name ERR_Chat +ENGINE : FileSystem: Adding relative directory '/tmp/source/addons/map' to filesystem under name ERR_Map +ENGINE : FileSystem: Adding relative directory '/tmp/source/addons/intel' to filesystem under name ERR_Intel +ENGINE : FileSystem: Adding relative directory '/tmp/source/addons/ai' to filesystem under name ERR_Ai +ENGINE : FileSystem: Adding relative directory '/tmp/source/addons/core' to filesystem under name ERR_Core +ENGINE : FileSystem: Adding package './addons/data/' (pak count: 6) to filesystem under name ArmaReforger +ENGINE : FileSystem: Adding package './addons/core/' (pak count: 1) to filesystem under name core +ENGINE : CPU vendor : AuthenticAMD +ENGINE : CPU type : 2 +ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +ENGINE : CPU cache info : Unknown cache +ENGINE : CPU count logical : 16 +ENGINE : CPU count physical : 8 +ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=/tmp/source/addons/chat/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=/tmp/source/addons/map/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=/tmp/source/addons/intel/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=/tmp/source/addons/ai/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=/tmp/source/addons/core/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=7 name=profile path=/tmp/work/profile/profile/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=8 name=logs path=/tmp/work/profile/logs/logs_2026-09-19_13-14-58/resourceDatabase.rdb) +ENGINE : GameProject load + ENGINE : Loaded addons: + ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' + ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' + ENGINE : gproj: '/tmp/source/addons/core/addon.gproj' guid: '2528466DE220D91C' + ENGINE : gproj: '/tmp/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' + ENGINE : gproj: '/tmp/source/addons/intel/addon.gproj' guid: 'SCRIPT : Compiling Game scripts + SCRIPT (W): @"scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete + SCRIPT (W): @"scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete + SCRIPT (W): @"scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed + SCRIPT (W): @"scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete + SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete + SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete + SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete + SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete + SCRIPT (W): @"scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete + SCRIPT (W): @"scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete + SCRIPT (W): @"scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete + SCRIPT (W): @"scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. + SCRIPT (W): @"scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. + SCRIPT (W): @"scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +RESOURCES : GetResourceObject @"{C1E20667DCE324ED}Missions/ERR_Everon.conf" + DEFAULT : Config load @"{C1E20667DCE324ED}Missions/ERR_Everon.conf" + RESOURCES (E): Wrong GUID/name for resource @"{B6C516F86302C679}Worlds/ERR_Everon.ent" in property "World" +RESOURCES : GetResourceObject @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" + WORLD : Entity prefab load @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" + RESOURCES (E): Wrong GUID/name for resource @"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob" in property "Object" +WORLD : Entities load 'Worlds/ERR_Everon.ent' + WORLD : Subscene load @"{853E92315D1D9EFE}worlds/Eden/Eden.ent" + RESOURCES : GetResourceObject @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" + WORLD : Entity prefab load @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" + RESOURCES (E): Wrong GUID/name for resource @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" in property "AssignedMaterial" + WORLD : Entity layer load @"Worlds/ERR_Everon_Layers/default.layer" + RESOURCES (E): Wrong GUID/name for resource @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" in property "inherited-name" + WORLD (E): Unknown class 'ERR_GameMode' at offset 73(0x49) + RESOURCES (E): Wrong GUID/name for resource @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" in property "inherited-name" + RESOURCES : GetResourceObject @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" + WORLD : Entity prefab load @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" + RESOURCES (E): Wrong GUID/name for resource @"{5C67A1DDE0044806}Configs/ERR/Factions/US.conf" in property "inherited-name" + RESOURCES : GetResourceObject @"{5C67A1DDE0044806}Configs/ERR/Factions/US.conf" + DEFAULT : Config load @"{5C67A1DDE0044806}Configs/ERR/Factions/US.conf" + RESOURCES (E): Wrong GUID/name for resource @"{E4785D3AF1D043C2}Configs/ERR/Factions/MissionVehicles.conf" in property "inherited-name" + RESOURCES (E): Wrong GUID/name for resource @"{D7A5CFA62A36480D}Configs/ERR/Factions/USSR.conf" in property "inherited-name" + RESOURCES : GetResourceObject @"{D7A5CFA62A36480D}Configs/ERR/Factions/USSR.conf" + DEFAULT : Config load @"{D7A5CFA62A36480D}Configs/ERR/Factions/USSR.conf" + RESOURCES (E): Wrong GUID/name for resource @"{E4785D3AF1D043C2}Configs/ERR/Factions/MissionVehicles.conf" in property "inherited-name" +WORLD : Game::LoadEntities + WORLD : CreateEntities + WORLD : CreateEntities + WORLD : NotifyBeforeEntitiesCreated + RESOURCES : GetResourceObject '$ERR_Chat:Missions/ERR_Everon.conf' + DEFAULT : Config load '$ERR_Chat:Missions/ERR_Everon.conf' + RESOURCES (E): Wrong GUID/name for resource @"{B6C516F86302C679}Worlds/ERR_Everon.ent" in property "World" + RESOURCES : GetResourceObject '$ERR_Core:Missions/ERR_Everon_Base.conf' + DEFAULT : Config load '$ERR_Core:Missions/ERR_Everon_Base.conf' + RESOURCES (E): Wrong GUID/name for resource @"{B6C516F86302C679}Worlds/ERR_Everon.ent" in property "World" +D31039C7C53E348A' + ENGINE : gproj: '/tmp/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' + ENGINE : gproj: '/tmp/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +ENGINE : Loading custom engine user config '$profile:.save/settings/ReforgerEngineSettings.conf' +ENGINE : No Enfusion settings file loaded. Continuing with defaults +RENDER : Basic screen setup: +RENDER : Back buffer width x height: 0x0 +RENDER : Back buffer format : TEXFMT_UNKNOWN (0) +RENDER : MSAA : none +RENDER : GPU_DUMMY (0xFFFF) (Enfusion dummy render) with 1 GPU detected, VRAM 128MB (fast 128MB), shared 128MB, driver version Unknown version +RENDER : Detected output devices: +RENDER : * 1 device/s connected to Dummy: +RENDER : Dummy output (Dummy device for our dummy render.), 1920x1080 (offset 0x0), 60Hz +RENDER : Concurrent frames limit 2 +ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7 +PROFILING : Settings changed took: 0.025000 ms +ENGINE : Initializing inputs. +NETWORK : Initializing networking. +NETWORK : Using new GameRplScheduler. + SCRIPT : SCRIPT : Initializing scripts + SCRIPT : SCRIPT : ScriptProjectManager init + PROFILING : ScriptProjectManager init took: 0.009000 ms +PROFILING : Initializing scripts took: 20.561000 ms +BACKEND : Backend Services are disabled. +ENGINE : Enfusion engine successfully created. +GUI : Using default language (en_us) +GUI : Loading 'en_us' localization file. + INIT : INIT : Loading StringTable +PROFILING : Loading StringTable took: 20.762000 ms + SCRIPT : SCRIPT : Compiling GameLib scripts + SCRIPT : Module: GameLib; loaded 465x files; 607x classes; used 654K of static memory; defines: "PLATFORM_LINUX,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 4507af04 +PROFILING : Compiling GameLib scripts took: 33.527000 ms + SCRIPT : SCRIPT : Compiling Game scripts + SCRIPT : Module: Game; loaded 5660x files; 11004x classes; used 25508K 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"; CRC32: 931a2d4d +PROFILING : Compiling Game scripts took: 1425.231000 ms +INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +ENGINE : Game successfully created. +PLATFORM : Save data from container 'settings' have been loaded +PLATFORM : Save data from container 'sessions' have been loaded +PLATFORM : System language differs from the saved one - using new language {new: 'en_us'; old: ''} +PLATFORM : Save data transaction to 'settings' started. +NETWORK : Starting local multiplayer server using command line args. +DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{C1E20667DCE324ED}Missions/ERR_Everon.conf'. + WORLD : WORLD : Entities load 'Worlds/ERR_Everon.ent' +PROFILING : Entities load took: 739.507000 ms + WORLD : WORLD : Game::LoadEntities + WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" + NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. + WORLD : WORLD : CreateEntities + WORLD : WORLD : CreateEntities + WORLD : WORLD : NotifyBeforeEntitiesCreated + RESOURCES : Loaded mission headers from 7 addon(s)! + PROFILING : NotifyBeforeEntitiesCreated took: 1.522000 ms + WORLD : WORLD : Wait for preloading data + PROFILING : Wait for preloading data took: 1072.274000 ms + ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD9243 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" + ENTITY : CreateComponent 'ScriptedRadioComponent' + DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. + ENTITY : Create entity @"ENTITY:1104061" ('StaticModelEntity') at <8831.291016 95.934265 2673.487061> + ENTITY : EntityPrefabUse @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" + RESOURCES : CreateComponentData @"{904345715F67BBAC}Assets/Structures/Cultural/Calvaries/CalvaryLarge_01/CalvaryLarge_01.xob" + MATERIAL : Material load @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" + MATERIAL (E): Material file not found + MATERIAL (E): Cannot load material @"system/wbdata/PreviewWindow/TransparentMat.emat", creating default one (class MatPBRBasic) + WORLD : InitEntities 'world' + ENTITY : Init entity @"ENTITY:3" ('SCR_MapEntity1', SCR_MapEntity) at <6400.000000 0.000000 6400.000000> @"{E1B88C66BF6CA1F9}Prefabs/World/Game/Eden/MapEntity_Everon.et" + SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default. + ENTITY : Init entity @"ENTITY:2305843009213693955" ('Factions', SCR_FactionManager) at <0.000000 0.000000 0.000000> @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" + RPL (E): Attempting to insert an entity with invalid prefab resource GUID @"{5414041A15DC4B54}". + SCRIPT (E): Virtual Machine Exception + +Reason: NULL pointer to instance. Variable 'm_OnPlayerDisconnected' + +Class: 'SCR_FactionManager' +Entity name:'Factions' id:2305843009213693955 + +Function: 'EOnInit' +Stack trace: +scripts/Game/GameMode/FactionManager/SCR_FactionManager.c:439 Function EOnInit +DEFAULT (W): No GameMode present in the world, using fallback logic! +SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager! +SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +SCRIPT (W): 'SCR_BaseSupportStationComponent' Support station on entity that exists in world when loaded has range but no 'SCR_SupportStationManagerComponent' availible on GameMode. So it won't work! +74E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" + PROFILING : PROFILING : Terrain load + PROFILING : Terrain load took: 1193.704000 ms + WORLD : WORLD : NotifyBeforeEntitiesInitialized + PROFILING : NotifyBeforeEntitiesInitialized took: 0.034000 ms + WORLD : WORLD : NotifyEntitiesInitialized + TERRAIN : TERRAIN : Initializing road networks... + PROFILING : Initializing road networks... took: 1.845000 ms + DEFAULT : DEFAULT : WorldVolumesCollection + PROFILING : WorldVolumesCollection took: 56.663000 ms + INIT : INIT : SoundWorldInit + PROFILING : SoundWorldInit took: 7.453000 ms + PROFILING : NotifyEntitiesInitialized took: 66.060000 ms + PROFILING : CreateEntities took: 10246.394000 ms + PROFILING : CreateEntities took: 10246.400000 ms + WORLD : WORLD : EOnActivate + PROFILING : EOnActivate took: 33.366000 ms +PROFILING : Game::LoadEntities took: 10280.968000 ms +NETWORK : Starting RPL server, listening on address 0.0.0.0:2001, fastValidation=false +DEFAULT : Entered online game state. +PROFILING : Settings changed took: 0.491000 ms +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 29.7, frame time (avg: 33.6 ms, min: 23.4 ms, max: 96.0 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.0 ms, max: 35.2 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.4 ms, max: 34.3 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 30.8 ms, max: 36.3 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.2 ms, max: 34.3 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.4 ms, max: 34.3 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.4 ms, max: 34.2 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.3 ms, max: 34.4 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57589, Disabled: 16 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.0 ms, max: 35.3 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 985260 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, \ No newline at end of file diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/archive-sha256.json b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/archive-sha256.json new file mode 100644 index 0000000..777ea95 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/archive-sha256.json @@ -0,0 +1,30 @@ +{ + "command.json": "697d91bfffc3dec88bcf2f7d6dec321fb4962978ef5469b72c0dacccf4f7b611", + "isolation-preflight.json": "d093ec5e3335480712e8cce155211b97576dae69bf3f04d038546ba38c992b39", + "profile/logs/logs_2026-09-19_13-24-56/console.log": "30f3d57bd395f6aaff64af4fd1eb4d14292d88f40e20d216458f5ff889cf93d7", + "profile/logs/logs_2026-09-19_13-24-56/error.log": "b6219af2e041f542791a3b7e50b44380744489eb694b77bdee8466f78097c9bd", + "profile/logs/logs_2026-09-19_13-24-56/script.log": "397d8070e40b7100ba744bbb834b398ce4da051250b0dfbfd7953b591c4985dd", + "profile/profile/.save/settings/ReforgerEngineSettings.conf": "7e30196519b21a7b4c20f48572ae493cb7f5ddfaca0fdde32e7ad5e6e6fca0ad", + "profile/profile/.save/settings/ReforgerGameSettings.conf": "1656680640c178239490ffbf9b3ddae04d3ac0993cd84471c0d27b28b76abf13", + "result.json": "6d1b50e4abb31e21ead9f1e3cbf54154ef5ac698d14fe730b4adb8dad8edf7eb", + "review.json": "b8089445001ee0b3f40d58025e5e33d9d8dd3caa9af517f386a9952b7ecaf8cf", + "runner.py": "a232492833d19d6fba4ccabf83c295f5dde24f42c45269858003056c21fbc525", + "source/addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "source/addons/ai/data.pak": "627b7389f0656a78f90acc5ead405e494b27b8bcb0cfb85dc812e177bc0f04f6", + "source/addons/ai/resourceDatabase.rdb": "7dc88e5e7a9dfc6d3ddf9f046d211b083c1f379b61cdc32f6d93084add37e53f", + "source/addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "source/addons/chat/data.pak": "26fa2ce81dada224fcb0c24ea3e2ebca01eb67c149bd06bf77f04c6b5faeca53", + "source/addons/chat/resourceDatabase.rdb": "42820c285d135a00f44be372b5611f568d0030aaa45b05091f59e723eec46dc4", + "source/addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "source/addons/core/data.pak": "3f84b9622afe2ff1683f05917a1e8e190f4f7dcf62f48a8c29adde95ce8a1b50", + "source/addons/core/resourceDatabase.rdb": "e85f078208a86591a4b0f791d2b56661018bf46e4b14b5405b183df0baf485f3", + "source/addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "source/addons/intel/data.pak": "5396732e193eb36d4ce86f9999f3cb112b5e1766f0e1b1911b6baa5e761fa37a", + "source/addons/intel/resourceDatabase.rdb": "062996b9102e99d19eb680bed04880b0e087d9f8789681c0f3ff8ab6772339ba", + "source/addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a", + "source/addons/map/data.pak": "211835e6afd1b9b18f0a0e4ebd235afa03b1436810c355d6cfeec636c8935dd0", + "source/addons/map/resourceDatabase.rdb": "9b7f50a84d4fb2d390e42c25ecb68d264038bb81926065653e3e9f87556b2462", + "source-manifest-after.json": "f7477cd7b28ba06cd9ab36ffd472462ae76fbd7fcb205662523094f261d8fc96", + "source-manifest.json": "f7477cd7b28ba06cd9ab36ffd472462ae76fbd7fcb205662523094f261d8fc96", + "stdout.log": "db7f72ac3cc24c7fd7804e70c6b2fd12da8efca142b8d2a42bfefd21a7c1fe3e" +} diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/command.json b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/command.json new file mode 100644 index 0000000..0452e55 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/command.json @@ -0,0 +1,114 @@ +{ + "command": [ + "bwrap", + "--unshare-net", + "--unshare-pid", + "--unshare-ipc", + "--unshare-uts", + "--die-with-parent", + "--cap-drop", + "ALL", + "--clearenv", + "--ro-bind", + "/", + "/", + "--tmpfs", + "/home", + "--tmpfs", + "/tmp", + "--tmpfs", + "/run", + "--proc", + "/proc", + "--dev", + "/dev", + "--ro-bind", + "/tmp/erri-dedicated-runtime/server", + "/tmp/runtime", + "--bind", + "/tmp/erri-dedicated-packed-chat-20260919-1322/source", + "/tmp/source", + "--bind", + "/tmp/erri-dedicated-packed-chat-20260919-1322", + "/tmp/work", + "--setenv", + "HOME", + "/tmp/work/home", + "--setenv", + "TMPDIR", + "/tmp/work/tmp", + "--setenv", + "XDG_CONFIG_HOME", + "/tmp/work/home/.config", + "--setenv", + "XDG_DATA_HOME", + "/tmp/work/home/.local/share", + "--setenv", + "XDG_CACHE_HOME", + "/tmp/work/home/.cache", + "--setenv", + "PATH", + "/usr/bin:/bin", + "--setenv", + "LANG", + "C.UTF-8", + "--chdir", + "/tmp/runtime", + "/usr/bin/python3", + "-c", + "import json,os,socket,sys\nstate={\"netns\":os.readlink(\"/proc/self/ns/net\"),\"interfaces\":socket.if_nameindex(),\"routes\":open(\"/proc/net/route\").read(),\"ipv6Routes\":open(\"/proc/net/ipv6_route\").read()}\nprint(\"ERR ISOLATION \"+json.dumps(state),flush=True)\nassert state[\"netns\"] != sys.argv[1], \"network namespace was not isolated\"\nassert [name for _,name in state[\"interfaces\"]] == [\"lo\"], \"non-loopback interface present\"\nassert len(state[\"routes\"].splitlines()) == 1, \"IPv4 route present\"\nassert all(line.split()[-1] == \"lo\" for line in state[\"ipv6Routes\"].splitlines()), \"non-loopback IPv6 route present\"\nif len(sys.argv)>2: os.execv(sys.argv[2],sys.argv[2:])\n", + "net:[4026531833]", + "/tmp/runtime/ArmaReforgerServer", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-addonsDir", + "/tmp/source/addons", + "-addons", + "FA804F411BDDF2C6", + "-server", + "{C1E20667DCE324ED}Missions/ERR_Everon.conf" + ], + "engine": [ + "/tmp/runtime/ArmaReforgerServer", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-addonsDir", + "/tmp/source/addons", + "-addons", + "FA804F411BDDF2C6", + "-server", + "{C1E20667DCE324ED}Missions/ERR_Everon.conf" + ], + "seconds": 90, + "route": "header", + "project": "chat", + "binarySHA256": "91fdf333ec49c266d309be358aabab4244a93a2f9cfa11853a600e026104001f", + "serverLaunched": false, + "realPlayers": 0, + "multiplayerProven": false, + "scope": "successor chat empty-server startup" +} diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/isolation-preflight.json b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/isolation-preflight.json new file mode 100644 index 0000000..35152f3 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/isolation-preflight.json @@ -0,0 +1,65 @@ +{ + "command": [ + "bwrap", + "--unshare-net", + "--unshare-pid", + "--unshare-ipc", + "--unshare-uts", + "--die-with-parent", + "--cap-drop", + "ALL", + "--clearenv", + "--ro-bind", + "/", + "/", + "--tmpfs", + "/home", + "--tmpfs", + "/tmp", + "--tmpfs", + "/run", + "--proc", + "/proc", + "--dev", + "/dev", + "--ro-bind", + "/tmp/erri-dedicated-runtime/server", + "/tmp/runtime", + "--bind", + "/tmp/erri-dedicated-packed-chat-20260919-1322/source", + "/tmp/source", + "--bind", + "/tmp/erri-dedicated-packed-chat-20260919-1322", + "/tmp/work", + "--setenv", + "HOME", + "/tmp/work/home", + "--setenv", + "TMPDIR", + "/tmp/work/tmp", + "--setenv", + "XDG_CONFIG_HOME", + "/tmp/work/home/.config", + "--setenv", + "XDG_DATA_HOME", + "/tmp/work/home/.local/share", + "--setenv", + "XDG_CACHE_HOME", + "/tmp/work/home/.cache", + "--setenv", + "PATH", + "/usr/bin:/bin", + "--setenv", + "LANG", + "C.UTF-8", + "--chdir", + "/tmp/runtime", + "/usr/bin/python3", + "-c", + "import json,os,socket,sys\nstate={\"netns\":os.readlink(\"/proc/self/ns/net\"),\"interfaces\":socket.if_nameindex(),\"routes\":open(\"/proc/net/route\").read(),\"ipv6Routes\":open(\"/proc/net/ipv6_route\").read()}\nprint(\"ERR ISOLATION \"+json.dumps(state),flush=True)\nassert state[\"netns\"] != sys.argv[1], \"network namespace was not isolated\"\nassert [name for _,name in state[\"interfaces\"]] == [\"lo\"], \"non-loopback interface present\"\nassert len(state[\"routes\"].splitlines()) == 1, \"IPv4 route present\"\nassert all(line.split()[-1] == \"lo\" for line in state[\"ipv6Routes\"].splitlines()), \"non-loopback IPv6 route present\"\nif len(sys.argv)>2: os.execv(sys.argv[2],sys.argv[2:])\n", + "net:[4026531833]" + ], + "exit": 0, + "stdout": "ERR ISOLATION {\"netns\": \"net:[4026534801]\", \"interfaces\": [[1, \"lo\"]], \"routes\": \"Iface\\tDestination\\tGateway \\tFlags\\tRefCnt\\tUse\\tMetric\\tMask\\t\\tMTU\\tWindow\\tIRTT \\n\", \"ipv6Routes\": \"00000000000000000000000000000000 00 00000000000000000000000000000000 00 00000000000000000000000000000000 ffffffff 00000001 00000000 00200200 lo\\n00000000000000000000000000000001 80 00000000000000000000000000000000 00 00000000000000000000000000000000 00000000 00000002 00000000 80200001 lo\\n00000000000000000000000000000000 00 00000000000000000000000000000000 00 00000000000000000000000000000000 ffffffff 00000001 00000000 00200200 lo\\n\"}\n", + "stderr": "" +} diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/logs/logs_2026-09-19_13-24-56/console.log b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/logs/logs_2026-09-19_13-24-56/console.log new file mode 100644 index 0000000..c334261 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/logs/logs_2026-09-19_13-24-56/console.log @@ -0,0 +1,367 @@ +--------------------------------------------- +Log /tmp/work/profile/logs/logs_2026-09-19_13-24-56/console.log started at 2026-09-19 13:24:56 (2026-09-19 11:24:56 UTC) + +13:24:56.726 ENGINE : FileSystem: Adding relative directory '/tmp/work/profile/logs/logs_2026-09-19_13-24-56' to filesystem under name logs +13:24:56.726 ENGINE : FileSystem: Adding relative directory '/tmp/work/profile/profile' to filesystem under name profile +13:24:56.726 ENGINE : FileSystem: Current working directory: '/tmp/runtime/' +13:24:56.727 ENGINE : Initializing engine, version 192142 +13:24:56.727 ENGINE : CLI Params: -profile /tmp/work/profile -noBackend -noSound -noSplash -noThrow -bindIP 127.0.0.1 -bindPort 2001 -maxFPS 30 -logStats 5000 -addonsDir /tmp/source/addons -addons FA804F411BDDF2C6 -server {C1E20667DCE324ED}Missions/ERR_Everon.conf +13:24:56.728 ENGINE : Addon dirs: +13:24:56.728 ENGINE : dir: '/tmp/source/addons' +13:24:56.728 ENGINE : dir: './addons' +13:24:56.728 ENGINE : dir: '/tmp/work/profile/addons' +13:24:56.728 ENGINE : Available addons: +13:24:56.728 ENGINE : gproj: '/tmp/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' (packed) +13:24:56.728 ENGINE : gproj: '/tmp/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' (packed) +13:24:56.728 ENGINE : gproj: '/tmp/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' (packed) +13:24:56.728 ENGINE : gproj: '/tmp/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' (packed) +13:24:56.728 ENGINE : gproj: '/tmp/source/addons/core/addon.gproj' guid: '2528466DE220D91C' (packed) +13:24:56.728 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +13:24:56.728 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +13:24:56.728 ENGINE : FileSystem: Adding package '/tmp/source/addons/chat/' (pak count: 1) to filesystem under name ERR_Chat +13:24:56.728 ENGINE : FileSystem: Adding package '/tmp/source/addons/map/' (pak count: 1) to filesystem under name ERR_Map +13:24:56.728 ENGINE : FileSystem: Adding package '/tmp/source/addons/intel/' (pak count: 1) to filesystem under name ERR_Intel +13:24:56.728 ENGINE : FileSystem: Adding package '/tmp/source/addons/ai/' (pak count: 1) to filesystem under name ERR_Ai +13:24:56.728 ENGINE : FileSystem: Adding package '/tmp/source/addons/core/' (pak count: 1) to filesystem under name ERR_Core +13:24:56.811 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 6) to filesystem under name ArmaReforger +13:24:56.811 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 1) to filesystem under name core +13:24:56.811 ENGINE : CPU vendor : AuthenticAMD +13:24:56.811 ENGINE : CPU type : 2 +13:24:56.811 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +13:24:56.811 ENGINE : CPU cache info : Unknown cache +13:24:56.811 ENGINE : CPU count logical : 16 +13:24:56.811 ENGINE : CPU count physical : 8 +13:24:56.811 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +13:24:56.811 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=/tmp/source/addons/chat/resourceDatabase.rdb) +13:24:56.811 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=/tmp/source/addons/map/resourceDatabase.rdb) +13:24:56.811 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=/tmp/source/addons/intel/resourceDatabase.rdb) +13:24:56.811 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=/tmp/source/addons/ai/resourceDatabase.rdb) +13:24:56.811 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=/tmp/source/addons/core/resourceDatabase.rdb) +13:24:56.811 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +13:24:56.929 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +13:24:56.929 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=/tmp/work/profile/profile/resourceDatabase.rdb) +13:24:56.929 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=/tmp/work/profile/logs/logs_2026-09-19_13-24-56/resourceDatabase.rdb) +13:24:57.080 ENGINE : GameProject load +13:24:57.080 ENGINE : Loaded addons: +13:24:57.080 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +13:24:57.080 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +13:24:57.080 ENGINE : gproj: '/tmp/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:24:57.080 ENGINE : gproj: '/tmp/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:24:57.080 ENGINE : gproj: '/tmp/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:24:57.080 ENGINE : gproj: '/tmp/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:24:57.080 ENGINE : gproj: '/tmp/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:24:57.080 ENGINE : Loading custom engine user config '$profile:.save/settings/ReforgerEngineSettings.conf' +13:24:57.080 ENGINE : No Enfusion settings file loaded. Continuing with defaults +13:24:57.081 RENDER : Basic screen setup: +13:24:57.081 RENDER : Back buffer width x height: 0x0 +13:24:57.081 RENDER : Back buffer format : TEXFMT_UNKNOWN (0) +13:24:57.081 RENDER : MSAA : none +13:24:57.081 RENDER : GPU_DUMMY (0xFFFF) (Enfusion dummy render) with 1 GPU detected, VRAM 128MB (fast 128MB), shared 128MB, driver version Unknown version +13:24:57.081 RENDER : Detected output devices: +13:24:57.081 RENDER : * 1 device/s connected to Dummy: +13:24:57.081 RENDER : Dummy output (Dummy device for our dummy render.), 1920x1080 (offset 0x0), 60Hz +13:24:57.081 RENDER : Concurrent frames limit 2 +13:24:57.081 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7 +13:24:57.093 PROFILING : Settings changed took: 0.020000 ms +13:24:57.096 ENGINE : Initializing inputs. +13:24:57.103 NETWORK : Initializing networking. +13:24:57.103 NETWORK : Using new GameRplScheduler. +13:24:57.103 SCRIPT : SCRIPT : Initializing scripts +13:24:57.104 SCRIPT : SCRIPT : ScriptProjectManager init +13:24:57.104 PROFILING : ScriptProjectManager init took: 0.010000 ms +13:24:57.120 PROFILING : Initializing scripts took: 16.496000 ms +13:24:57.120 BACKEND : Backend Services are disabled. +13:24:57.120 ENGINE : Enfusion engine successfully created. +13:24:57.122 GUI : Using default language (en_us) +13:24:57.122 GUI : Loading 'en_us' localization file. +13:24:57.122 INIT : INIT : Loading StringTable +13:24:57.144 PROFILING : Loading StringTable took: 22.000000 ms +13:24:57.144 SCRIPT : SCRIPT : Compiling GameLib scripts +13:24:57.172 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 +13:24:57.173 PROFILING : Compiling GameLib scripts took: 28.645000 ms +13:24:57.173 SCRIPT : SCRIPT : Compiling Game scripts +13:24:58.032 SCRIPT : Compiling Game scripts +13:24:58.032 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:24:58.032 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:24:58.247 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:24:58.257 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:24:58.281 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:24:58.373 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:24:58.373 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:24:58.373 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:24:58.373 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:24:58.405 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:24:58.448 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +13:24:58.460 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:24:58.460 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:24:58.462 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:24:58.501 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:24:58.501 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:24:58.502 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:24:58.503 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:24:58.553 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:24:58.656 SCRIPT : Module: Game; loaded 5780x files; 11202x classes; used 26151K 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"; CRC32: 6264db09 +13:24:58.671 PROFILING : Compiling Game scripts took: 1498.686000 ms +13:24:58.672 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:24:58.693 ENGINE : Game successfully created. +13:24:58.707 PLATFORM : Save data from container 'settings' have been loaded +13:24:58.807 PLATFORM : Save data from container 'sessions' have been loaded +13:24:58.807 PLATFORM : System language differs from the saved one - using new language {new: 'en_us'; old: ''} +13:24:58.807 PLATFORM : Save data transaction to 'settings' started. +13:24:58.807 NETWORK : Starting local multiplayer server using command line args. +13:24:58.906 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{C1E20667DCE324ED}Missions/ERR_Everon.conf'. +13:24:58.907 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +13:24:59.544 WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +13:24:59.544 WORLD : Subscene load @"{853E92315D1D9EFE}worlds/Eden/Eden.ent" +13:24:59.544 RESOURCES : GetResourceObject @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +13:24:59.544 WORLD : Entity prefab load @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +13:24:59.544 RESOURCES (E): Wrong GUID/name for resource @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" in property "AssignedMaterial" +13:24:59.612 RESOURCES : GetResourceObject @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +13:24:59.612 WORLD : Entity prefab load @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +13:24:59.612 RESOURCES (E): Wrong GUID/name for resource @"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob" in property "Object" +13:24:59.700 PROFILING : Entities load took: 793.592000 ms +13:24:59.702 WORLD : WORLD : Game::LoadEntities +13:24:59.702 WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" +13:24:59.704 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +13:24:59.704 WORLD : WORLD : CreateEntities +13:24:59.704 WORLD : WORLD : CreateEntities +13:24:59.704 WORLD : WORLD : NotifyBeforeEntitiesCreated +13:24:59.705 RESOURCES : Loaded mission headers from 7 addon(s)! +13:24:59.705 PROFILING : NotifyBeforeEntitiesCreated took: 1.518000 ms +13:24:59.705 WORLD : WORLD : Wait for preloading data +13:25:01.475 PROFILING : Wait for preloading data took: 1769.292000 ms +13:25:01.540 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +13:25:01.540 PROFILING : PROFILING : Terrain load +13:25:02.665 PROFILING : Terrain load took: 1124.553000 ms +13:25:05.142 WORLD : Game::LoadEntities +13:25:05.142 WORLD : CreateEntities +13:25:05.142 WORLD : CreateEntities +13:25:05.142 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" +13:25:05.142 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:25:05.142 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:25:07.303 ENTITY : Create entity @"ENTITY:1104061" ('StaticModelEntity') at <8831.291016 95.934265 2673.487061> +13:25:07.303 ENTITY : EntityPrefabUse @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +13:25:07.303 RESOURCES : CreateComponentData @"{904345715F67BBAC}Assets/Structures/Cultural/Calvaries/CalvaryLarge_01/CalvaryLarge_01.xob" +13:25:07.303 MATERIAL : Material load @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" +13:25:07.303 MATERIAL (E): Material file not found +13:25:07.303 MATERIAL (E): Cannot load material @"system/wbdata/PreviewWindow/TransparentMat.emat", creating default one (class MatPBRBasic) +13:25:09.987 WORLD : WORLD : NotifyBeforeEntitiesInitialized +13:25:09.987 PROFILING : NotifyBeforeEntitiesInitialized took: 0.034000 ms +13:25:09.987 WORLD : InitEntities 'world' +13:25:09.987 ENTITY : Init entity @"ENTITY:3" ('SCR_MapEntity1', SCR_MapEntity) at <6400.000000 0.000000 6400.000000> @"{E1B88C66BF6CA1F9}Prefabs/World/Game/Eden/MapEntity_Everon.et" +13:25:09.987 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default. +13:25:10.508 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:25:10.508 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:25:10.508 WORLD : WORLD : NotifyEntitiesInitialized +13:25:10.508 TERRAIN : TERRAIN : Initializing road networks... +13:25:10.510 PROFILING : Initializing road networks... took: 1.887000 ms +13:25:10.510 DEFAULT : DEFAULT : WorldVolumesCollection +13:25:10.566 PROFILING : WorldVolumesCollection took: 55.879000 ms +13:25:10.566 INIT : INIT : SoundWorldInit +13:25:10.574 PROFILING : SoundWorldInit took: 7.852000 ms +13:25:10.574 PROFILING : NotifyEntitiesInitialized took: 65.743000 ms +13:25:10.574 PROFILING : CreateEntities took: 10870.120000 ms +13:25:10.574 PROFILING : CreateEntities took: 10870.128000 ms +13:25:10.574 WORLD : WORLD : EOnActivate +13:25:10.603 PROFILING : EOnActivate took: 29.074000 ms +13:25:10.603 PROFILING : Game::LoadEntities took: 10901.237000 ms +13:25:10.699 NETWORK : Starting RPL server, listening on address 0.0.0.0:2001, fastValidation=false +13:25:11.165 DEFAULT : Entered online game state. +13:25:11.166 PROFILING : Settings changed took: 0.427000 ms +13:25:11.176 WORLD : Frame start +13:25:11.176 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +13:25:11.182 WORLD : UpdateEntities +13:25:11.182 WORLD : Frame +13:25:11.182 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +13:25:12.551 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +13:25:12.554 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +13:25:12.555 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +13:25:12.559 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +13:25:12.560 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +13:25:12.579 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +13:25:12.579 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +13:25:12.581 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +13:25:12.599 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +13:25:12.600 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +13:25:12.601 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +13:25:12.601 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +13:25:12.602 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +13:25:12.602 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +13:25:12.602 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +13:25:12.603 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +13:25:12.603 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +13:25:12.603 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +13:25:12.604 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +13:25:12.604 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +13:25:12.604 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +13:25:12.604 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:25:12.604 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +13:25:12.604 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +13:25:12.604 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:25:12.604 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +13:25:12.604 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +13:25:12.604 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:25:12.604 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:25:12.604 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:25:12.604 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:25:12.604 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:25:12.604 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +13:25:12.604 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:25:13.225 WORLD : UpdateEntities +13:25:13.225 WORLD : AfterPostSimulate +13:25:13.225 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +13:25:13.349 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:25:13.349 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:25:13.349 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:25:13.349 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:25:13.616 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5477,7499.7> up=0.995587 +13:25:13.616 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.370167 angularSpeed=0.0724636 +13:25:13.616 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:25:13.616 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6082,7501.98> +13:25:13.616 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3082,7501.98> terrainY=63.3159 tireTerrainGap=-0.00771713 +13:25:13.616 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6082,7501.98> radius=0.3 bottom=<7012.07,63.3082,7501.98> fraction=0.419608 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00768661 +13:25:13.616 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.5842,7497.71> +13:25:13.616 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1342,7497.71> terrainY=64.1557 tireTerrainGap=-0.0215302 +13:25:13.616 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.5842,7497.71> radius=0.45 bottom=<7009.88,64.1342,7497.71> fraction=0.356702 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.0215225 +13:25:13.616 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.261,7497.74> +13:25:13.616 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.811,7497.74> terrainY=63.8182 tireTerrainGap=-0.0071373 +13:25:13.616 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.261,7497.74> radius=0.45 bottom=<7014.42,63.811,7497.74> fraction=0.421944 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00717163 +13:25:13.616 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:25:13.882 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:25:13.882 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:25:13.882 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +13:25:13.883 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:25:14.415 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:25:14.416 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +13:25:14.416 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:25:14.683 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5339,7499.72> up=0.994186 +13:25:14.683 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0982479 angularSpeed=0.0247414 +13:25:14.683 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:25:14.683 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6222,7501.99> +13:25:14.683 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3222,7501.99> terrainY=63.3135 tireTerrainGap=0.00865555 +13:25:14.683 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6222,7501.99> radius=0.3 bottom=<7012.08,63.3222,7501.99> fraction=0.494395 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00876617 +13:25:14.683 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6042,7497.73> +13:25:14.683 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1542,7497.73> terrainY=64.1496 tireTerrainGap=0.00456238 +13:25:14.683 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6042,7497.73> radius=0.45 bottom=<7009.92,64.1542,7497.73> fraction=0.475603 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00463104 +13:25:14.683 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2685,7497.78> +13:25:14.683 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8185,7497.78> terrainY=63.8156 tireTerrainGap=0.00291061 +13:25:14.683 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2685,7497.78> radius=0.45 bottom=<7014.46,63.8185,7497.78> fraction=0.467778 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.00291061 +13:25:14.683 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:25:14.949 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:25:14.950 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:25:14.950 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:25:14.950 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:25:15.215 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +13:25:15.483 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:25:15.483 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:25:15.483 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:25:15.483 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +13:25:15.749 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5304,7499.74> up=0.99389 +13:25:15.749 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.045081 angularSpeed=0.0602025 +13:25:15.749 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:25:15.749 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6125,7502.01> +13:25:15.750 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3125,7502.01> terrainY=63.3114 tireTerrainGap=0.00107956 +13:25:15.750 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6125,7502.01> radius=0.3 bottom=<7012.07,63.3125,7502.01> fraction=0.459377 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.0010643 +13:25:15.750 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.5944,7497.73> +13:25:15.750 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.1444,7497.73> terrainY=64.1436 tireTerrainGap=0.000801086 +13:25:15.750 SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.5944,7497.73> radius=0.45 bottom=<7009.96,64.1444,7497.73> fraction=0.45852 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00087738 +13:25:15.750 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.2593,7497.83> +13:25:15.750 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.8093,7497.83> terrainY=63.8128 tireTerrainGap=-0.00353622 +13:25:15.750 SCRIPT : ERR GEAR SUPPORT: center=<7014.5,64.2593,7497.83> radius=0.45 bottom=<7014.5,63.8093,7497.83> fraction=0.438333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00356674 +13:25:15.750 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:25:16.016 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:25:16.016 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:25:16.016 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:25:16.016 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +13:25:16.186 WORLD : UpdateEntities +13:25:16.186 WORLD : Frame +13:25:16.186 DEFAULT : FPS: 29.7, frame time (avg: 33.7 ms, min: 3.6 ms, max: 94.8 ms, mean: 32.9 ms, median: 33.3 ms), Mem: 996591 kB, Player: 0, AI: 32, AIChar: 23, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Freezes(cnt: 1, max: 90.6 ms, len: 1), Streaming(Dynam: 708, Static: 57591, Disabled: 30 | New: 0, Del: 0, Bump: 16) +13:25:16.299 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:25:16.299 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:25:16.299 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:25:16.300 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:25:16.818 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.529,7499.75> up=0.993729 +13:25:16.818 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:25:16.818 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:25:16.818 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6126,7502.02> +13:25:16.818 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3126,7502.02> terrainY=63.3112 tireTerrainGap=0.00144577 +13:25:16.818 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6126,7502.02> radius=0.3 bottom=<7012.07,63.3126,7502.02> fraction=0.461046 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00143051 +13:25:16.818 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.73> +13:25:16.818 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.73> terrainY=64.1422 tireTerrainGap=0.00249481 +13:25:16.818 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5946,7497.73> radius=0.45 bottom=<7009.97,64.1446,7497.73> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +13:25:16.818 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +13:25:16.818 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8121 tireTerrainGap=-0.00188065 +13:25:16.818 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.445833 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00191498 +13:25:16.818 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:25:16.819 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:25:16.819 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:25:16.819 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +13:25:16.819 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:25:17.352 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:25:17.352 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:25:17.352 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +13:25:17.352 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:25:17.915 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.529,7499.75> up=0.993729 +13:25:17.915 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:25:17.915 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:25:17.915 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6126,7502.02> +13:25:17.916 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3126,7502.02> terrainY=63.3112 tireTerrainGap=0.00144577 +13:25:17.916 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6126,7502.02> radius=0.3 bottom=<7012.07,63.3126,7502.02> fraction=0.461046 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00143051 +13:25:17.916 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.73> +13:25:17.916 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.73> terrainY=64.1422 tireTerrainGap=0.00249481 +13:25:17.916 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5946,7497.73> radius=0.45 bottom=<7009.97,64.1446,7497.73> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +13:25:17.916 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +13:25:17.916 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8121 tireTerrainGap=-0.00188065 +13:25:17.916 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.445833 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00191498 +13:25:17.916 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:25:17.916 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:25:17.916 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +13:25:17.922 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +13:25:17.923 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +13:25:17.923 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +13:25:17.923 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +13:25:17.923 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +13:25:17.923 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +13:25:17.923 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +13:25:21.217 WORLD : UpdateEntities +13:25:21.217 WORLD : Frame +13:25:21.217 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 8.4 ms, max: 74.4 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1002922 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +13:25:26.217 WORLD : UpdateEntities +13:25:26.217 WORLD : Frame +13:25:26.217 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.6 ms, max: 34.7 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1003095 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +13:25:31.218 WORLD : UpdateEntities +13:25:31.218 WORLD : Frame +13:25:31.218 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.1 ms, max: 34.7 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1003173 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +13:25:36.251 WORLD : UpdateEntities +13:25:36.251 WORLD : Frame +13:25:36.251 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.0 ms, max: 36.0 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 1003269 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +13:25:41.283 WORLD : UpdateEntities +13:25:41.283 WORLD : Frame +13:25:41.283 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.3 ms, max: 36.9 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 1003216 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +13:25:46.284 WORLD : UpdateEntities +13:25:46.284 WORLD : Frame +13:25:46.284 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.2 ms, max: 34.5 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 1003273 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +13:25:51.317 WORLD : UpdateEntities +13:25:51.317 WORLD : Frame +13:25:51.317 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 28.8 ms, max: 38.1 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 1003252 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +13:25:56.317 WORLD : UpdateEntities +13:25:56.317 WORLD : Frame +13:25:56.317 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.7 ms, max: 35.1 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1003271 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +13:26:01.351 WORLD : UpdateEntities +13:26:01.351 WORLD : Frame +13:26:01.351 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.0 ms, max: 34.5 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1003225 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +13:26:06.384 WORLD : UpdateEntities +13:26:06.384 WORLD : Frame +13:26:06.384 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.1 ms, max: 35.1 ms, mean: 33.3 ms, median: 33.2 ms), Mem: 1003242 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +13:26:11.416 WORLD : UpdateEntities +13:26:11.416 WORLD : Frame +13:26:11.416 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.0 ms, max: 34.3 ms, mean: 33.3 ms, median: 33.2 ms), Mem: 1003279 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +13:26:16.417 WORLD : UpdateEntities +13:26:16.417 WORLD : Frame +13:26:16.417 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.9 ms, max: 34.5 ms, mean: 33.3 ms, median: 33.2 ms), Mem: 1003232 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +13:26:21.450 WORLD : UpdateEntities +13:26:21.450 WORLD : Frame +13:26:21.450 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 27.4 ms, max: 36.9 ms, mean: 33.3 ms, median: 33.2 ms), Mem: 1003279 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +13:26:26.450 WORLD : UpdateEntities +13:26:26.450 WORLD : Frame +13:26:26.450 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.9 ms, max: 35.0 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1003247 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/logs/logs_2026-09-19_13-24-56/error.log b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/logs/logs_2026-09-19_13-24-56/error.log new file mode 100644 index 0000000..ea8a16c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/logs/logs_2026-09-19_13-24-56/error.log @@ -0,0 +1,51 @@ +--------------------------------------------- +Log /tmp/work/profile/logs/logs_2026-09-19_13-24-56/error.log started at 2026-09-19 13:24:58 (2026-09-19 11:24:58 UTC) + +13:24:58.032 SCRIPT : Compiling Game scripts +13:24:58.032 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:24:58.032 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:24:58.247 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:24:58.257 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:24:58.281 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:24:58.373 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:24:58.373 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:24:58.373 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:24:58.373 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:24:58.405 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:24:58.448 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +13:24:58.460 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:24:58.460 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:24:58.462 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:24:58.501 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:24:58.501 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:24:58.502 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:24:58.503 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:24:58.553 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:24:59.544 WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +13:24:59.544 WORLD : Subscene load @"{853E92315D1D9EFE}worlds/Eden/Eden.ent" +13:24:59.544 RESOURCES : GetResourceObject @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +13:24:59.544 WORLD : Entity prefab load @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +13:24:59.544 RESOURCES (E): Wrong GUID/name for resource @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" in property "AssignedMaterial" +13:24:59.612 RESOURCES : GetResourceObject @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +13:24:59.612 WORLD : Entity prefab load @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +13:24:59.612 RESOURCES (E): Wrong GUID/name for resource @"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob" in property "Object" +13:25:05.142 WORLD : Game::LoadEntities +13:25:05.142 WORLD : CreateEntities +13:25:05.142 WORLD : CreateEntities +13:25:05.142 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" +13:25:05.142 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:25:05.142 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:25:07.303 ENTITY : Create entity @"ENTITY:1104061" ('StaticModelEntity') at <8831.291016 95.934265 2673.487061> +13:25:07.303 ENTITY : EntityPrefabUse @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +13:25:07.303 RESOURCES : CreateComponentData @"{904345715F67BBAC}Assets/Structures/Cultural/Calvaries/CalvaryLarge_01/CalvaryLarge_01.xob" +13:25:07.303 MATERIAL : Material load @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" +13:25:07.303 MATERIAL (E): Material file not found +13:25:07.303 MATERIAL (E): Cannot load material @"system/wbdata/PreviewWindow/TransparentMat.emat", creating default one (class MatPBRBasic) +13:25:09.987 WORLD : InitEntities 'world' +13:25:09.987 ENTITY : Init entity @"ENTITY:3" ('SCR_MapEntity1', SCR_MapEntity) at <6400.000000 0.000000 6400.000000> @"{E1B88C66BF6CA1F9}Prefabs/World/Game/Eden/MapEntity_Everon.et" +13:25:09.987 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default. +13:25:10.508 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:25:10.508 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:25:13.225 WORLD : UpdateEntities +13:25:13.225 WORLD : AfterPostSimulate +13:25:13.225 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/logs/logs_2026-09-19_13-24-56/script.log b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/logs/logs_2026-09-19_13-24-56/script.log new file mode 100644 index 0000000..842b691 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/logs/logs_2026-09-19_13-24-56/script.log @@ -0,0 +1,177 @@ +--------------------------------------------- +Log /tmp/work/profile/logs/logs_2026-09-19_13-24-56/script.log started at 2026-09-19 13:24:57 (2026-09-19 11:24:57 UTC) + +13:24:57.103 SCRIPT : SCRIPT : Initializing scripts +13:24:57.104 SCRIPT : SCRIPT : ScriptProjectManager init +13:24:57.144 SCRIPT : SCRIPT : Compiling GameLib scripts +13:24:57.172 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 +13:24:57.173 SCRIPT : SCRIPT : Compiling Game scripts +13:24:58.032 SCRIPT : Compiling Game scripts +13:24:58.032 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:24:58.032 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:24:58.247 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:24:58.257 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:24:58.281 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:24:58.373 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:24:58.373 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:24:58.373 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:24:58.373 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:24:58.405 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:24:58.448 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +13:24:58.460 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:24:58.460 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:24:58.462 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:24:58.501 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:24:58.501 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:24:58.503 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:24:58.503 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:24:58.553 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:24:58.656 SCRIPT : Module: Game; loaded 5780x files; 11202x classes; used 26151K 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"; CRC32: 6264db09 +13:25:09.987 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default. +13:25:10.508 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:25:11.176 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +13:25:11.182 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +13:25:12.551 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +13:25:12.554 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +13:25:12.555 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +13:25:12.559 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +13:25:12.560 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +13:25:12.579 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +13:25:12.579 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +13:25:12.581 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +13:25:12.599 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +13:25:12.600 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +13:25:12.601 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +13:25:12.601 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +13:25:12.602 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +13:25:12.602 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +13:25:12.602 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +13:25:12.603 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +13:25:12.603 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +13:25:12.604 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +13:25:12.604 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +13:25:12.604 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +13:25:12.604 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +13:25:12.604 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:25:12.604 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +13:25:12.604 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +13:25:12.604 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:25:12.604 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +13:25:12.604 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +13:25:12.604 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:25:12.604 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:25:12.604 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:25:12.604 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:25:12.604 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:25:12.604 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +13:25:12.604 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:25:13.349 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:25:13.349 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:25:13.349 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:25:13.349 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:25:13.616 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5477,7499.7> up=0.995587 +13:25:13.616 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.370167 angularSpeed=0.0724636 +13:25:13.616 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:25:13.616 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6082,7501.98> +13:25:13.616 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3082,7501.98> terrainY=63.3159 tireTerrainGap=-0.00771713 +13:25:13.616 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6082,7501.98> radius=0.3 bottom=<7012.07,63.3082,7501.98> fraction=0.419608 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00768661 +13:25:13.616 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.5842,7497.71> +13:25:13.616 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1342,7497.71> terrainY=64.1557 tireTerrainGap=-0.0215302 +13:25:13.616 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.5842,7497.71> radius=0.45 bottom=<7009.88,64.1342,7497.71> fraction=0.356702 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.0215225 +13:25:13.616 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.261,7497.74> +13:25:13.616 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.811,7497.74> terrainY=63.8182 tireTerrainGap=-0.0071373 +13:25:13.616 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.261,7497.74> radius=0.45 bottom=<7014.42,63.811,7497.74> fraction=0.421944 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00717163 +13:25:13.616 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:25:13.882 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:25:13.882 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:25:13.882 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +13:25:13.883 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:25:14.415 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:25:14.416 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +13:25:14.416 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:25:14.683 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5339,7499.72> up=0.994186 +13:25:14.683 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0982479 angularSpeed=0.0247414 +13:25:14.683 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:25:14.683 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6222,7501.99> +13:25:14.683 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3222,7501.99> terrainY=63.3135 tireTerrainGap=0.00865555 +13:25:14.683 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6222,7501.99> radius=0.3 bottom=<7012.08,63.3222,7501.99> fraction=0.494395 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00876617 +13:25:14.683 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6042,7497.73> +13:25:14.683 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1542,7497.73> terrainY=64.1496 tireTerrainGap=0.00456238 +13:25:14.683 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6042,7497.73> radius=0.45 bottom=<7009.92,64.1542,7497.73> fraction=0.475603 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00463104 +13:25:14.683 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2685,7497.78> +13:25:14.683 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8185,7497.78> terrainY=63.8156 tireTerrainGap=0.00291061 +13:25:14.683 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2685,7497.78> radius=0.45 bottom=<7014.46,63.8185,7497.78> fraction=0.467778 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.00291061 +13:25:14.683 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:25:14.950 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:25:14.950 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:25:14.950 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:25:14.950 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:25:15.215 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +13:25:15.483 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:25:15.483 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:25:15.483 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:25:15.483 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +13:25:15.749 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5304,7499.74> up=0.99389 +13:25:15.749 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.045081 angularSpeed=0.0602025 +13:25:15.749 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:25:15.749 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6125,7502.01> +13:25:15.750 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3125,7502.01> terrainY=63.3114 tireTerrainGap=0.00107956 +13:25:15.750 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6125,7502.01> radius=0.3 bottom=<7012.07,63.3125,7502.01> fraction=0.459377 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.0010643 +13:25:15.750 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.5944,7497.73> +13:25:15.750 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.1444,7497.73> terrainY=64.1436 tireTerrainGap=0.000801086 +13:25:15.750 SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.5944,7497.73> radius=0.45 bottom=<7009.96,64.1444,7497.73> fraction=0.45852 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00087738 +13:25:15.750 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.2593,7497.83> +13:25:15.750 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.8093,7497.83> terrainY=63.8128 tireTerrainGap=-0.00353622 +13:25:15.750 SCRIPT : ERR GEAR SUPPORT: center=<7014.5,64.2593,7497.83> radius=0.45 bottom=<7014.5,63.8093,7497.83> fraction=0.438333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00356674 +13:25:15.750 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:25:16.016 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:25:16.016 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:25:16.016 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:25:16.016 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +13:25:16.299 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:25:16.299 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:25:16.299 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:25:16.300 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:25:16.818 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.529,7499.75> up=0.993729 +13:25:16.818 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:25:16.818 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:25:16.818 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6126,7502.02> +13:25:16.818 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3126,7502.02> terrainY=63.3112 tireTerrainGap=0.00144577 +13:25:16.818 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6126,7502.02> radius=0.3 bottom=<7012.07,63.3126,7502.02> fraction=0.461046 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00143051 +13:25:16.818 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.73> +13:25:16.818 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.73> terrainY=64.1422 tireTerrainGap=0.00249481 +13:25:16.818 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5946,7497.73> radius=0.45 bottom=<7009.97,64.1446,7497.73> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +13:25:16.818 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +13:25:16.818 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8121 tireTerrainGap=-0.00188065 +13:25:16.818 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.445833 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00191498 +13:25:16.818 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:25:16.819 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:25:16.819 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:25:16.819 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +13:25:16.819 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:25:17.352 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:25:17.352 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:25:17.352 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +13:25:17.352 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:25:17.915 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.529,7499.75> up=0.993729 +13:25:17.915 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:25:17.915 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:25:17.915 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6126,7502.02> +13:25:17.916 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3126,7502.02> terrainY=63.3112 tireTerrainGap=0.00144577 +13:25:17.916 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6126,7502.02> radius=0.3 bottom=<7012.07,63.3126,7502.02> fraction=0.461046 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00143051 +13:25:17.916 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.73> +13:25:17.916 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.73> terrainY=64.1422 tireTerrainGap=0.00249481 +13:25:17.916 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5946,7497.73> radius=0.45 bottom=<7009.97,64.1446,7497.73> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +13:25:17.916 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +13:25:17.916 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8121 tireTerrainGap=-0.00188065 +13:25:17.916 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.445833 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00191498 +13:25:17.916 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:25:17.916 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:25:17.916 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +13:25:17.922 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +13:25:17.923 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +13:25:17.923 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +13:25:17.923 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +13:25:17.923 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +13:25:17.923 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +13:25:17.923 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/profile/.save/settings/ReforgerEngineSettings.conf b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/profile/.save/settings/ReforgerEngineSettings.conf new file mode 100644 index 0000000..54685f7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/profile/.save/settings/ReforgerEngineSettings.conf @@ -0,0 +1,96 @@ +EngineUserSettings { + GameProjectUserSettings GameProjectUserSettings { + } + GraphicsQualitySettings GraphicsQualitySettings { + } + GrassMaterialSettings GrassMaterialSettings { + } + InputDeviceUserSettings InputDeviceUserSettings { + GamepadProfile InputProfileGamepad "{6A66B63849B30FE6}" { + LeftThumbHorizontal InputProfileKey "{6A66B63849B30FE0}" { + Transition CurveCubicSplineFloat "{6A66B63849B30FE1}" { + } + } + LeftThumbVertical InputProfileKey "{6A66B63849B30FE2}" { + Transition CurveCubicSplineFloat "{6A66B63849B30FE3}" { + } + } + RightThumbHorizontal InputProfileKey "{6A66B63849B2FC25}" { + Transition CurveCubicSplineFloat "{6A66B63849B2806B}" { + } + } + RightThumbVertical InputProfileKey "{6A66B63849B210FD}" { + Transition CurveCubicSplineFloat "{6A66B63849AD9292}" { + } + } + LeftTrigger InputProfileKey "{6A66B63849AD929D}" { + Transition CurveCubicSplineFloat "{6A66B63849AD8A60}" { + } + } + RightTrigger InputProfileKey "{6A66B63849AD4FAF}" { + Transition CurveCubicSplineFloat "{6A66B63849AD2AD1}" { + } + } + } + JoystickProfile InputProfileJoystick "{6A66B63849AD2AD0}" { + Axis00 InputProfileKey "{6A66B63849ACF836}" { + Transition CurveCubicSplineFloat "{6A66B63849ACAB44}" { + } + } + Axis01 InputProfileKey "{6A66B63849ACAB47}" { + Transition CurveCubicSplineFloat "{6A66B63849AC4AC2}" { + } + } + Axis02 InputProfileKey "{6A66B63849AC13B4}" { + Transition CurveCubicSplineFloat "{6A66B63849AC1387}" { + } + } + Axis03 InputProfileKey "{6A66B63849AC2289}" { + Transition CurveCubicSplineFloat "{6A66B63849AFF7CD}" { + } + } + Axis04 InputProfileKey "{6A66B63849AFB21A}" { + Transition CurveCubicSplineFloat "{6A66B63849AF6A21}" { + } + } + Axis05 InputProfileKey "{6A66B63849AF3BEE}" { + Transition CurveCubicSplineFloat "{6A66B63849AF3BED}" { + } + } + Axis06 InputProfileKey "{6A66B63849AEE023}" { + Transition CurveCubicSplineFloat "{6A66B63849AEBDC5}" { + } + } + Axis07 InputProfileKey "{6A66B63849AE4D3B}" { + Transition CurveCubicSplineFloat "{6A66B63849AE68DB}" { + } + } + Axis08 InputProfileKey "{6A66B63849AE11DB}" { + Transition CurveCubicSplineFloat "{6A66B63849AE0DDF}" { + } + } + Axis09 InputProfileKey "{6A66B63849AE2CDD}" { + Transition CurveCubicSplineFloat "{6A66B63849A9ACFE}" { + } + } + } + } + MaterialSystemUserSettings MaterialSystemUserSettings { + } + PostprocessUserSettings PostprocessUserSettings { + } + ResourceManagerUserSettings ResourceManagerUserSettings { + } + TerrainGenMaterialSettings TerrainGenMaterialSettings { + } + UserInterfaceSettings UserInterfaceSettings { + LanguageCode "en_us" + SystemLanguageCode "en_us" + } + VideoUserSettings VideoUserSettings { + WindowPosX -640 + WindowPosY -360 + } + WaterPoolMaterialSettings WaterPoolMaterialSettings { + } +} \ No newline at end of file diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/profile/.save/settings/ReforgerGameSettings.conf b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/profile/.save/settings/ReforgerGameSettings.conf new file mode 100644 index 0000000..c7eec71 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/profile/profile/.save/settings/ReforgerGameSettings.conf @@ -0,0 +1,2 @@ +GameUserSettings { +} \ No newline at end of file diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/result.json b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/result.json new file mode 100644 index 0000000..fe7eebb --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/result.json @@ -0,0 +1,119 @@ +{ + "command": [ + "bwrap", + "--unshare-net", + "--unshare-pid", + "--unshare-ipc", + "--unshare-uts", + "--die-with-parent", + "--cap-drop", + "ALL", + "--clearenv", + "--ro-bind", + "/", + "/", + "--tmpfs", + "/home", + "--tmpfs", + "/tmp", + "--tmpfs", + "/run", + "--proc", + "/proc", + "--dev", + "/dev", + "--ro-bind", + "/tmp/erri-dedicated-runtime/server", + "/tmp/runtime", + "--bind", + "/tmp/erri-dedicated-packed-chat-20260919-1322/source", + "/tmp/source", + "--bind", + "/tmp/erri-dedicated-packed-chat-20260919-1322", + "/tmp/work", + "--setenv", + "HOME", + "/tmp/work/home", + "--setenv", + "TMPDIR", + "/tmp/work/tmp", + "--setenv", + "XDG_CONFIG_HOME", + "/tmp/work/home/.config", + "--setenv", + "XDG_DATA_HOME", + "/tmp/work/home/.local/share", + "--setenv", + "XDG_CACHE_HOME", + "/tmp/work/home/.cache", + "--setenv", + "PATH", + "/usr/bin:/bin", + "--setenv", + "LANG", + "C.UTF-8", + "--chdir", + "/tmp/runtime", + "/usr/bin/python3", + "-c", + "import json,os,socket,sys\nstate={\"netns\":os.readlink(\"/proc/self/ns/net\"),\"interfaces\":socket.if_nameindex(),\"routes\":open(\"/proc/net/route\").read(),\"ipv6Routes\":open(\"/proc/net/ipv6_route\").read()}\nprint(\"ERR ISOLATION \"+json.dumps(state),flush=True)\nassert state[\"netns\"] != sys.argv[1], \"network namespace was not isolated\"\nassert [name for _,name in state[\"interfaces\"]] == [\"lo\"], \"non-loopback interface present\"\nassert len(state[\"routes\"].splitlines()) == 1, \"IPv4 route present\"\nassert all(line.split()[-1] == \"lo\" for line in state[\"ipv6Routes\"].splitlines()), \"non-loopback IPv6 route present\"\nif len(sys.argv)>2: os.execv(sys.argv[2],sys.argv[2:])\n", + "net:[4026531833]", + "/tmp/runtime/ArmaReforgerServer", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-addonsDir", + "/tmp/source/addons", + "-addons", + "FA804F411BDDF2C6", + "-server", + "{C1E20667DCE324ED}Missions/ERR_Everon.conf" + ], + "engine": [ + "/tmp/runtime/ArmaReforgerServer", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-addonsDir", + "/tmp/source/addons", + "-addons", + "FA804F411BDDF2C6", + "-server", + "{C1E20667DCE324ED}Missions/ERR_Everon.conf" + ], + "seconds": 90, + "route": "header", + "project": "chat", + "binarySHA256": "91fdf333ec49c266d309be358aabab4244a93a2f9cfa11853a600e026104001f", + "serverLaunched": true, + "realPlayers": 0, + "multiplayerProven": false, + "scope": "successor chat empty-server startup", + "supervisorPid": 3599703, + "startedUTC": "2026-09-19T11:24:56Z", + "timeout": true, + "exit": -15, + "finishedUTC": "2026-09-19T11:26:26Z" +} diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/review.json b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/review.json new file mode 100644 index 0000000..cb11116 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/review.json @@ -0,0 +1,322 @@ +{ + "schema_version": 1, + "kind": "independent-packed-linux-startup-review", + "reviewed_utc": "2026-09-19T11:28:10.748097+00:00", + "run_directory": "/tmp/erri-dedicated-packed-chat-20260919-1322", + "result": { + "command": [ + "bwrap", + "--unshare-net", + "--unshare-pid", + "--unshare-ipc", + "--unshare-uts", + "--die-with-parent", + "--cap-drop", + "ALL", + "--clearenv", + "--ro-bind", + "/", + "/", + "--tmpfs", + "/home", + "--tmpfs", + "/tmp", + "--tmpfs", + "/run", + "--proc", + "/proc", + "--dev", + "/dev", + "--ro-bind", + "/tmp/erri-dedicated-runtime/server", + "/tmp/runtime", + "--bind", + "/tmp/erri-dedicated-packed-chat-20260919-1322/source", + "/tmp/source", + "--bind", + "/tmp/erri-dedicated-packed-chat-20260919-1322", + "/tmp/work", + "--setenv", + "HOME", + "/tmp/work/home", + "--setenv", + "TMPDIR", + "/tmp/work/tmp", + "--setenv", + "XDG_CONFIG_HOME", + "/tmp/work/home/.config", + "--setenv", + "XDG_DATA_HOME", + "/tmp/work/home/.local/share", + "--setenv", + "XDG_CACHE_HOME", + "/tmp/work/home/.cache", + "--setenv", + "PATH", + "/usr/bin:/bin", + "--setenv", + "LANG", + "C.UTF-8", + "--chdir", + "/tmp/runtime", + "/usr/bin/python3", + "-c", + "import json,os,socket,sys\nstate={\"netns\":os.readlink(\"/proc/self/ns/net\"),\"interfaces\":socket.if_nameindex(),\"routes\":open(\"/proc/net/route\").read(),\"ipv6Routes\":open(\"/proc/net/ipv6_route\").read()}\nprint(\"ERR ISOLATION \"+json.dumps(state),flush=True)\nassert state[\"netns\"] != sys.argv[1], \"network namespace was not isolated\"\nassert [name for _,name in state[\"interfaces\"]] == [\"lo\"], \"non-loopback interface present\"\nassert len(state[\"routes\"].splitlines()) == 1, \"IPv4 route present\"\nassert all(line.split()[-1] == \"lo\" for line in state[\"ipv6Routes\"].splitlines()), \"non-loopback IPv6 route present\"\nif len(sys.argv)>2: os.execv(sys.argv[2],sys.argv[2:])\n", + "net:[4026531833]", + "/tmp/runtime/ArmaReforgerServer", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-addonsDir", + "/tmp/source/addons", + "-addons", + "FA804F411BDDF2C6", + "-server", + "{C1E20667DCE324ED}Missions/ERR_Everon.conf" + ], + "engine": [ + "/tmp/runtime/ArmaReforgerServer", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-addonsDir", + "/tmp/source/addons", + "-addons", + "FA804F411BDDF2C6", + "-server", + "{C1E20667DCE324ED}Missions/ERR_Everon.conf" + ], + "seconds": 90, + "route": "header", + "project": "chat", + "binarySHA256": "91fdf333ec49c266d309be358aabab4244a93a2f9cfa11853a600e026104001f", + "serverLaunched": true, + "realPlayers": 0, + "multiplayerProven": false, + "scope": "successor chat empty-server startup", + "supervisorPid": 3599703, + "startedUTC": "2026-09-19T11:24:56Z", + "timeout": true, + "exit": -15, + "finishedUTC": "2026-09-19T11:26:26Z" + }, + "conclusion": "Packed five-addon Linux Game compilation, scenario-header/MissionSystems loading and empty-server prison preparation observed; not clean runtime qualification.", + "qualified_release": false, + "multiplayer_proven": false, + "performance_improvement_proven": false, + "source": { + "manifest_files": 15, + "exact_fifteen_runtime_files": true, + "before_after_equal": true, + "current_frozen_files_equal_manifest": true, + "all_fifteen_match_current_1317_package_artifacts": true, + "source_manifest_sha256": "f7477cd7b28ba06cd9ab36ffd472462ae76fbd7fcb205662523094f261d8fc96", + "source_manifest_after_sha256": "f7477cd7b28ba06cd9ab36ffd472462ae76fbd7fcb205662523094f261d8fc96" + }, + "loaded_addons": [ + { + "path": "./addons/core/core.gproj", + "guid": "5614BBCCBB55ED1C" + }, + { + "path": "./addons/data/ArmaReforger.gproj", + "guid": "58D0FB3206B6F859" + }, + { + "path": "/tmp/source/addons/core/addon.gproj", + "guid": "2528466DE220D91C" + }, + { + "path": "/tmp/source/addons/ai/addon.gproj", + "guid": "5192138CB9D5B911" + }, + { + "path": "/tmp/source/addons/intel/addon.gproj", + "guid": "D31039C7C53E348A" + }, + { + "path": "/tmp/source/addons/map/addon.gproj", + "guid": "9AAEE9041D79809E" + }, + { + "path": "/tmp/source/addons/chat/addon.gproj", + "guid": "FA804F411BDDF2C6" + } + ], + "exact_expected_seven_guids": true, + "package_mounts": [ + { + "line": 21, + "raw": "13:24:56.728 ENGINE : FileSystem: Adding package '/tmp/source/addons/chat/' (pak count: 1) to filesystem under name ERR_Chat" + }, + { + "line": 22, + "raw": "13:24:56.728 ENGINE : FileSystem: Adding package '/tmp/source/addons/map/' (pak count: 1) to filesystem under name ERR_Map" + }, + { + "line": 23, + "raw": "13:24:56.728 ENGINE : FileSystem: Adding package '/tmp/source/addons/intel/' (pak count: 1) to filesystem under name ERR_Intel" + }, + { + "line": 24, + "raw": "13:24:56.728 ENGINE : FileSystem: Adding package '/tmp/source/addons/ai/' (pak count: 1) to filesystem under name ERR_Ai" + }, + { + "line": 25, + "raw": "13:24:56.728 ENGINE : FileSystem: Adding package '/tmp/source/addons/core/' (pak count: 1) to filesystem under name ERR_Core" + } + ], + "database_loads": [ + { + "line": 35, + "raw": "13:24:56.811 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=/tmp/source/addons/chat/resourceDatabase.rdb)" + }, + { + "line": 36, + "raw": "13:24:56.811 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=/tmp/source/addons/map/resourceDatabase.rdb)" + }, + { + "line": 37, + "raw": "13:24:56.811 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=/tmp/source/addons/intel/resourceDatabase.rdb)" + }, + { + "line": 38, + "raw": "13:24:56.811 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=/tmp/source/addons/ai/resourceDatabase.rdb)" + }, + { + "line": 39, + "raw": "13:24:56.811 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=/tmp/source/addons/core/resourceDatabase.rdb)" + } + ], + "missing_database_warnings": [], + "game_compilation": [ + { + "line": 103, + "raw": "13:24:58.656 SCRIPT : Module: Game; loaded 5780x files; 11202x classes; used 26151K 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\"; CRC32: 6264db09" + } + ], + "header": [ + { + "line": 112, + "raw": "13:24:58.906 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{C1E20667DCE324ED}Missions/ERR_Everon.conf'." + } + ], + "systems": [ + { + "line": 124, + "raw": "13:24:59.702 WORLD : WORLD : Initializing world systems @\"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf\"" + } + ], + "prepared_sites": [ + { + "line": 318, + "raw": "13:25:17.916 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready" + } + ], + "prison_transition": [ + { + "line": 321, + "raw": "13:25:17.923 SCRIPT : Rereintroduced [mission]: phase 0 -> 1" + } + ], + "captured_console_errors": [ + { + "line": 118, + "raw": "13:24:59.544 RESOURCES (E): Wrong GUID/name for resource @\"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat\" in property \"AssignedMaterial\"" + }, + { + "line": 121, + "raw": "13:24:59.612 RESOURCES (E): Wrong GUID/name for resource @\"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob\" in property \"Object\"" + }, + { + "line": 146, + "raw": "13:25:07.303 MATERIAL (E): Material file not found" + }, + { + "line": 147, + "raw": "13:25:07.303 MATERIAL (E): Cannot load material @\"system/wbdata/PreviewWindow/TransparentMat.emat\", creating default one (class MatPBRBasic)" + } + ], + "error_line_count": 4, + "captured_script_vm_patterns": [], + "vanilla_comparison": { + "console": "/tmp/erri-next-build/docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/logs/logs_2026-09-19_08-40-40/console.log", + "sha256": "99663069b32ad193b11032486c049745d9e2fd79ab69dc523ec125ec69856eaa", + "baseline_error_line_count": 21, + "normalization": "Remove HH:MM:SS.mmm prefix; collapse whitespace; preserve category, message and resource identity.", + "all_current_errors_reproduced_in_vanilla": true, + "current_normalized_errors": { + "RESOURCES (E): Wrong GUID/name for resource @\"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat\" in property \"AssignedMaterial\"": 1, + "RESOURCES (E): Wrong GUID/name for resource @\"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob\" in property \"Object\"": 1, + "MATERIAL (E): Material file not found": 1, + "MATERIAL (E): Cannot load material @\"system/wbdata/PreviewWindow/TransparentMat.emat\", creating default one (class MatPBRBasic)": 1 + }, + "current_errors_absent_from_control": {}, + "note": "Subset match, not equal total error sets. Vanilla also has catalog-schema and empty-resource errors; none are suppressed or converted into success." + }, + "cleanup": { + "isolation_preflight_exit": 0, + "bounded_timeout": true, + "native_supervisor_exit": -15, + "recorded_supervisor_absent_at_review": true, + "server_executables_visible_at_review": [], + "native_graceful_shutdown_proven": false + }, + "native_statistics": { + "records": 15, + "examples": [ + { + "line": 278, + "raw": "13:25:16.186 DEFAULT : FPS: 29.7, frame time (avg: 33.7 ms, min: 3.6 ms, max: 94.8 ms, mean: 32.9 ms, median: 33.3 ms), Mem: 996591 kB, Player: 0, AI: 32, AIChar: 23, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Freezes(cnt: 1, max: 90.6 ms, len: 1), Streaming(Dynam: 708, Static: 57591, Disabled: 30 | New: 0, Del: 0, Bump: 16)" + }, + { + "line": 328, + "raw": "13:25:21.217 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 8.4 ms, max: 74.4 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1002922 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16)" + } + ], + "note": "Zero-player 30-FPS-capped coarse windows, not matched-workload or raw-frame comparison. First real line includes optional Freezes fields unsupported by initial parser." + }, + "raw_log_hashes": { + "profile/logs/logs_2026-09-19_13-24-56/error.log": { + "sha256": "b6219af2e041f542791a3b7e50b44380744489eb694b77bdee8466f78097c9bd", + "bytes": 5853 + }, + "profile/logs/logs_2026-09-19_13-24-56/script.log": { + "sha256": "397d8070e40b7100ba744bbb834b398ce4da051250b0dfbfd7953b591c4985dd", + "bytes": 22787 + }, + "profile/logs/logs_2026-09-19_13-24-56/console.log": { + "sha256": "30f3d57bd395f6aaff64af4fd1eb4d14292d88f40e20d216458f5ff889cf93d7", + "bytes": 41631 + } + }, + "limitations": [ + "No genuine client joined; authentication, remote replication, reconnect and seat contention were not exercised.", + "No held-input ordinary escape loop or gameplay completion was performed.", + "Timeout/SIGTERM is owned bounded diagnostic cleanup, not a native graceful-shutdown test.", + "Native compilation and preparation do not remove the four captured installed-resource errors or the packaging shutdown errors.", + "The observations bind to these hashed packed artifacts; no assertion about newer or unarchived sources." + ] +} diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/runner.py b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/runner.py new file mode 100644 index 0000000..da15392 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/runner.py @@ -0,0 +1,202 @@ +#!/usr/bin/env python3 +"""Bounded Linux server diagnostic: isolated network, frozen sources, no clients.""" +import argparse +import fcntl +import hashlib +import json +import os +import re +import stat +from pathlib import Path +import shutil +import signal +import subprocess +import time + +PROBE = '''import json,os,socket,sys +state={"netns":os.readlink("/proc/self/ns/net"),"interfaces":socket.if_nameindex(),"routes":open("/proc/net/route").read(),"ipv6Routes":open("/proc/net/ipv6_route").read()} +print("ERR ISOLATION "+json.dumps(state),flush=True) +assert state["netns"] != sys.argv[1], "network namespace was not isolated" +assert [name for _,name in state["interfaces"]] == ["lo"], "non-loopback interface present" +assert len(state["routes"].splitlines()) == 1, "IPv4 route present" +assert all(line.split()[-1] == "lo" for line in state["ipv6Routes"].splitlines()), "non-loopback IPv6 route present" +if len(sys.argv)>2: os.execv(sys.argv[2],sys.argv[2:]) +''' + + +def manifest(source): + result = {} + for path in sorted(source.rglob('*')): + if path.is_symlink(): + raise ValueError('Linked source entry is not allowed: ' + str(path)) + if path.is_file(): + result[str(path.relative_to(source))] = hashlib.sha256(path.read_bytes()).hexdigest() + return result + + +def sandbox(runtime, source, run): + return ['bwrap', '--unshare-net', '--unshare-pid', '--unshare-ipc', '--unshare-uts', + '--die-with-parent', '--cap-drop', 'ALL', '--clearenv', + '--ro-bind', '/', '/', '--tmpfs', '/home', '--tmpfs', '/tmp', '--tmpfs', '/run', + '--proc', '/proc', '--dev', '/dev', '--ro-bind', str(runtime), '/tmp/runtime', + '--bind', str(source), '/tmp/source', '--bind', str(run), '/tmp/work', + '--setenv', 'HOME', '/tmp/work/home', '--setenv', 'TMPDIR', '/tmp/work/tmp', + '--setenv', 'XDG_CONFIG_HOME', '/tmp/work/home/.config', + '--setenv', 'XDG_DATA_HOME', '/tmp/work/home/.local/share', + '--setenv', 'XDG_CACHE_HOME', '/tmp/work/home/.cache', + '--setenv', 'PATH', '/usr/bin:/bin', '--setenv', 'LANG', 'C.UTF-8', + '--chdir', '/tmp/runtime'] + + +PROJECTS = { + 'core': ('2528466DE220D91C', '{AD62322D5213C440}Missions/ERR_Everon_Base.conf'), + 'chat': ('FA804F411BDDF2C6', '{C1E20667DCE324ED}Missions/ERR_Everon.conf'), +} +ADDON_GUIDS = { + 'core': PROJECTS['core'][0], + 'ai': '5192138CB9D5B911', + 'intel': 'D31039C7C53E348A', + 'map': '9AAEE9041D79809E', + 'chat': PROJECTS['chat'][0], +} +WORLD = '{B6C516F86302C679}Worlds/ERR_Everon.ent' +SYSTEMS = '{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf' + + +def engine_args(route, project='core'): + if route not in ('header', 'diag-world', 'vanilla-everon') or project not in PROJECTS: + raise ValueError('Unsupported diagnostic route or project') + if route == 'vanilla-everon' and project != 'core': + raise ValueError('vanilla-everon cannot be combined with --project chat') + args = ['/tmp/runtime/ArmaReforgerServer' + ('Diag' if route == 'diag-world' else ''), + '-profile', '/tmp/work/profile', '-noBackend', '-noSound', '-noSplash', '-noThrow', + '-bindIP', '127.0.0.1', '-bindPort', '2001', '-maxFPS', '30', '-logStats', '5000'] + if route == 'vanilla-everon': + return args + ['-server', 'Missions/21_GM_Eden.conf'] + addon, header = PROJECTS[project] + args += ['-addonsDir', '/tmp/source/addons', '-addons', addon] + if route == 'header': + return args + ['-server', header] + return args + ['-server', WORLD, '-worldSystemsConfig', SYSTEMS] + + +def preflight_addons(source, route, project='core'): + """Presence/identity checks only; native loading must validate RDB contents.""" + engine_args(route, project) # also reject incompatible direct helper calls + if route == 'vanilla-everon': + return + addons = source / 'addons' + if addons.is_symlink() or not addons.is_dir(): + raise ValueError('Expected a regular addons directory in diagnostic source') + closure = ('core',) if project == 'core' else tuple(ADDON_GUIDS) + for addon in closure: + folder = addons / addon + if folder.is_symlink() or not folder.is_dir(): + raise ValueError('Missing or linked required addon directory: ' + addon) + for name in ('addon.gproj', 'resourceDatabase.rdb'): + path = folder / name + try: + info = path.lstat() + except FileNotFoundError as error: + raise ValueError('Missing required addon input: ' + str(path)) from error + if not stat.S_ISREG(info.st_mode) or info.st_size <= 0: + raise ValueError('Required addon input must be a nonempty regular file: ' + str(path)) + project_file = folder / 'addon.gproj' + if project_file.stat().st_size > 65536: + raise ValueError('Unsupported oversized addon project: ' + str(project_file)) + try: + definition = project_file.read_text(encoding='utf-8') + except UnicodeDecodeError as error: + raise ValueError('Addon project is not UTF-8: ' + str(project_file)) from error + if re.findall(r'\bGUID\s+"([A-Fa-f0-9]{16})"', definition) != [ADDON_GUIDS[addon]]: + raise ValueError('Required addon identity mismatch: ' + str(project_file)) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--source', type=Path, required=True) + parser.add_argument('--runtime', type=Path, default=Path('/tmp/erri-dedicated-runtime/server')) + parser.add_argument('--archive', type=Path, required=True) + parser.add_argument('--route', choices=['header', 'diag-world', 'vanilla-everon'], default='header') + parser.add_argument('--project', choices=['core', 'chat'], default='core', + help='Core base (default) or Chat with all five declared successor addons') + parser.add_argument('--seconds', type=int, default=90) + args = parser.parse_args() + if args.route == 'vanilla-everon' and args.project != 'core': + parser.error('vanilla-everon cannot be combined with --project chat') + if not 1 <= args.seconds <= 110: + parser.error('Runtime bound must be 1..110 seconds (plus at most 10 seconds owned cleanup)') + source, runtime, archive = args.source.resolve(), args.runtime.resolve(), args.archive.resolve() + if not source.is_relative_to('/tmp') or not runtime.is_relative_to('/tmp') or not archive.is_relative_to('/tmp'): + parser.error('Sources, runtime and archive must be isolated /tmp paths') + if archive == source or source in archive.parents or archive in source.parents or archive == runtime or runtime in archive.parents or archive in runtime.parents: + parser.error('Source, archive and runtime must not overlap') + if archive.exists() or archive.is_symlink(): + parser.error('Archive must be new') + try: + preflight_addons(source, args.route, args.project) + except (ValueError, OSError) as error: + parser.error(str(error)) + origin = runtime.parent / 'runtime-origin.json' + if not origin.is_file() or json.loads(origin.read_text()).get('app_id') != 1874900: + parser.error('Stable private runtime origin missing') + binary = runtime / Path(engine_args(args.route, args.project)[0]).name + with binary.open('rb') as stream: + elf = stream.read(20) + if binary.is_symlink() or len(elf) != 20 or elf[:6] != b'\x7fELF\x02\x01' or int.from_bytes(elf[18:20], 'little') != 62: + parser.error('Expected real native x86-64 ELF server') + archive.mkdir(mode=0o700, parents=True) + (archive / 'runner.py').write_bytes(Path(__file__).read_bytes()) + for child in ['home', 'profile', 'tmp']: + (archive / child).mkdir() + # Reject links before copytree follows them into the isolated source snapshot. + manifest(source) + frozen = archive / 'source' + shutil.copytree(source, frozen, ignore=shutil.ignore_patterns('.git', '__pycache__', 'evidence', 'generated')) + preflight_addons(frozen, args.route, args.project) + initial = manifest(frozen) + (archive / 'source-manifest.json').write_text(json.dumps(initial, indent=2)+'\n') + base = sandbox(runtime, frozen, archive) + netns = os.readlink('/proc/self/ns/net') + check = base + ['/usr/bin/python3', '-c', PROBE, netns] + preflight = subprocess.run(check, capture_output=True, text=True, timeout=15) + (archive / 'isolation-preflight.json').write_text(json.dumps({'command':check,'exit':preflight.returncode,'stdout':preflight.stdout,'stderr':preflight.stderr}, indent=2)+'\n') + if preflight.returncode: + print('Isolation refused; no server launched:', archive) + return 2 + command = base + ['/usr/bin/python3', '-c', PROBE, netns] + engine_args(args.route, args.project) + record = {'command': command, 'engine': engine_args(args.route, args.project), 'seconds':args.seconds, + 'route': args.route, 'project': None if args.route == 'vanilla-everon' else args.project, + 'binarySHA256':hashlib.sha256(binary.read_bytes()).hexdigest(), + 'serverLaunched':False,'realPlayers':0,'multiplayerProven':False, + 'scope':'vanilla Everon control; no successor loaded' if args.route == 'vanilla-everon' else f'successor {args.project} empty-server startup'} + (archive / 'command.json').write_text(json.dumps(record, indent=2)+'\n') + lock_fd = os.open('/tmp/erri-dedicated-native-diagnostic.lock', os.O_WRONLY | os.O_CREAT | os.O_NOFOLLOW, 0o600) + with os.fdopen(lock_fd, 'a') as lock: + fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + with (archive / 'stdout.log').open('wb') as log: + process = subprocess.Popen(command, stdout=log, stderr=subprocess.STDOUT, start_new_session=True) + record['serverLaunched'] = True + record['supervisorPid'] = process.pid + record['startedUTC'] = time.strftime('%Y-%m-%dT%H:%M:%SZ',time.gmtime()) + try: + record['exit'] = process.wait(timeout=args.seconds) + record['timeout'] = False + except subprocess.TimeoutExpired: + record['timeout'] = True + finally: + if process.poll() is None: + os.killpg(process.pid, signal.SIGTERM) + try: process.wait(timeout=5) + except subprocess.TimeoutExpired: + os.killpg(process.pid, signal.SIGKILL) + process.wait(timeout=5) + record['exit'] = process.returncode + record['finishedUTC'] = time.strftime('%Y-%m-%dT%H:%M:%SZ',time.gmtime()) + (archive / 'result.json').write_text(json.dumps(record, indent=2)+'\n') + (archive / 'source-manifest-after.json').write_text(json.dumps(manifest(frozen), indent=2)+'\n') + print('Diagnostic archived; inspect actual compilation/header/systems/errors:',archive) + return 0 + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source-manifest-after.json b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source-manifest-after.json new file mode 100644 index 0000000..8eb3abc --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source-manifest-after.json @@ -0,0 +1,17 @@ +{ + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/ai/data.pak": "627b7389f0656a78f90acc5ead405e494b27b8bcb0cfb85dc812e177bc0f04f6", + "addons/ai/resourceDatabase.rdb": "7dc88e5e7a9dfc6d3ddf9f046d211b083c1f379b61cdc32f6d93084add37e53f", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/chat/data.pak": "26fa2ce81dada224fcb0c24ea3e2ebca01eb67c149bd06bf77f04c6b5faeca53", + "addons/chat/resourceDatabase.rdb": "42820c285d135a00f44be372b5611f568d0030aaa45b05091f59e723eec46dc4", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/core/data.pak": "3f84b9622afe2ff1683f05917a1e8e190f4f7dcf62f48a8c29adde95ce8a1b50", + "addons/core/resourceDatabase.rdb": "e85f078208a86591a4b0f791d2b56661018bf46e4b14b5405b183df0baf485f3", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/intel/data.pak": "5396732e193eb36d4ce86f9999f3cb112b5e1766f0e1b1911b6baa5e761fa37a", + "addons/intel/resourceDatabase.rdb": "062996b9102e99d19eb680bed04880b0e087d9f8789681c0f3ff8ab6772339ba", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a", + "addons/map/data.pak": "211835e6afd1b9b18f0a0e4ebd235afa03b1436810c355d6cfeec636c8935dd0", + "addons/map/resourceDatabase.rdb": "9b7f50a84d4fb2d390e42c25ecb68d264038bb81926065653e3e9f87556b2462" +} diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source-manifest.json b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source-manifest.json new file mode 100644 index 0000000..8eb3abc --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source-manifest.json @@ -0,0 +1,17 @@ +{ + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/ai/data.pak": "627b7389f0656a78f90acc5ead405e494b27b8bcb0cfb85dc812e177bc0f04f6", + "addons/ai/resourceDatabase.rdb": "7dc88e5e7a9dfc6d3ddf9f046d211b083c1f379b61cdc32f6d93084add37e53f", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/chat/data.pak": "26fa2ce81dada224fcb0c24ea3e2ebca01eb67c149bd06bf77f04c6b5faeca53", + "addons/chat/resourceDatabase.rdb": "42820c285d135a00f44be372b5611f568d0030aaa45b05091f59e723eec46dc4", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/core/data.pak": "3f84b9622afe2ff1683f05917a1e8e190f4f7dcf62f48a8c29adde95ce8a1b50", + "addons/core/resourceDatabase.rdb": "e85f078208a86591a4b0f791d2b56661018bf46e4b14b5405b183df0baf485f3", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/intel/data.pak": "5396732e193eb36d4ce86f9999f3cb112b5e1766f0e1b1911b6baa5e761fa37a", + "addons/intel/resourceDatabase.rdb": "062996b9102e99d19eb680bed04880b0e087d9f8789681c0f3ff8ab6772339ba", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a", + "addons/map/data.pak": "211835e6afd1b9b18f0a0e4ebd235afa03b1436810c355d6cfeec636c8935dd0", + "addons/map/resourceDatabase.rdb": "9b7f50a84d4fb2d390e42c25ecb68d264038bb81926065653e3e9f87556b2462" +} diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/ai/addon.gproj b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/ai/addon.gproj new file mode 100644 index 0000000..ec3100b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/ai/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Ai" + GUID "5192138CB9D5B911" + TITLE "Escapists Rereintroduced - Ai" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/ai/data.pak b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/ai/data.pak new file mode 100644 index 0000000..0acdb2a Binary files /dev/null and b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/ai/data.pak differ diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/ai/resourceDatabase.rdb b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/ai/resourceDatabase.rdb new file mode 100644 index 0000000..c0fa6b4 Binary files /dev/null and b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/ai/resourceDatabase.rdb differ diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/chat/addon.gproj b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/chat/addon.gproj new file mode 100644 index 0000000..d2e277c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/chat/addon.gproj @@ -0,0 +1,12 @@ +GameProject { + ID "ERR_Chat" + GUID "FA804F411BDDF2C6" + TITLE "Escapists Rereintroduced - Chat" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + "5192138CB9D5B911" + "D31039C7C53E348A" + "9AAEE9041D79809E" + } +} diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/chat/data.pak b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/chat/data.pak new file mode 100644 index 0000000..eca7712 Binary files /dev/null and b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/chat/data.pak differ diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/chat/resourceDatabase.rdb b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/chat/resourceDatabase.rdb new file mode 100644 index 0000000..4f59ccb Binary files /dev/null and b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/chat/resourceDatabase.rdb differ diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/core/addon.gproj b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/core/addon.gproj new file mode 100644 index 0000000..54287e7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/core/addon.gproj @@ -0,0 +1,8 @@ +GameProject { + ID "ERR_Core" + GUID "2528466DE220D91C" + TITLE "Escapists Rereintroduced - Core" + Dependencies { + "58D0FB3206B6F859" + } +} diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/core/data.pak b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/core/data.pak new file mode 100644 index 0000000..e511470 Binary files /dev/null and b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/core/data.pak differ diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/core/resourceDatabase.rdb b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/core/resourceDatabase.rdb new file mode 100644 index 0000000..2198e69 Binary files /dev/null and b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/core/resourceDatabase.rdb differ diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/intel/addon.gproj b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/intel/addon.gproj new file mode 100644 index 0000000..5b29a17 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/intel/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Intel" + GUID "D31039C7C53E348A" + TITLE "Escapists Rereintroduced - Intel" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/intel/data.pak b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/intel/data.pak new file mode 100644 index 0000000..73d3dab Binary files /dev/null and b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/intel/data.pak differ diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/intel/resourceDatabase.rdb b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/intel/resourceDatabase.rdb new file mode 100644 index 0000000..8747de6 Binary files /dev/null and b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/intel/resourceDatabase.rdb differ diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/map/addon.gproj b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/map/addon.gproj new file mode 100644 index 0000000..5d0a4d2 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/map/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Map" + GUID "9AAEE9041D79809E" + TITLE "Escapists Rereintroduced - Map" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/map/data.pak b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/map/data.pak new file mode 100644 index 0000000..0e7fd67 Binary files /dev/null and b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/map/data.pak differ diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/map/resourceDatabase.rdb b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/map/resourceDatabase.rdb new file mode 100644 index 0000000..72364c1 Binary files /dev/null and b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/source/addons/map/resourceDatabase.rdb differ diff --git a/docs/evidence/dedicated-2026-09-19-132456-packed-chat/stdout.log b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/stdout.log new file mode 100644 index 0000000..d7c7f60 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-132456-packed-chat/stdout.log @@ -0,0 +1,339 @@ +ERR ISOLATION {"netns": "net:[4026534803]", "interfaces": [[1, "lo"]], "routes": "Iface\tDestination\tGateway \tFlags\tRefCnt\tUse\tMetric\tMask\t\tMTU\tWindow\tIRTT \n", "ipv6Routes": "00000000000000000000000000000000 00 00000000000000000000000000000000 00 00000000000000000000000000000000 ffffffff 00000001 00000000 00200200 lo\n00000000000000000000000000000001 80 00000000000000000000000000000000 00 00000000000000000000000000000000 00000000 00000002 00000000 80200001 lo\n00000000000000000000000000000000 00 00000000000000000000000000000000 00 00000000000000000000000000000000 ffffffff 00000001 00000000 00200200 lo\n"} +ENGINE : Creating engine. +ENGINE : FileSystem: Adding relative directory '/tmp/work/profile/logs/logs_2026-09-19_13-24-56' to filesystem under name logs +ENGINE : FileSystem: Adding relative directory '/tmp/work/profile/profile' to filesystem under name profile +ENGINE : FileSystem: Current working directory: '/tmp/runtime/' +ENGINE : Initializing engine, version 192142 +ENGINE : CLI Params: -profile /tmp/work/profile -noBackend -noSound -noSplash -noThrow -bindIP 127.0.0.1 -bindPort 2001 -maxFPS 30 -logStats 5000 -addonsDir /tmp/source/addons -addons FA804F411BDDF2C6 -server {C1E20667DCE324ED}Missions/ERR_Everon.conf +ENGINE : Addon dirs: + ENGINE : dir: '/tmp/source/addons' + ENGINE : dir: './addons' + ENGINE : dir: '/tmp/work/profile/addons' +ENGINE : Available addons: + ENGINE : gproj: '/tmp/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' (packed) + ENGINE : gproj: '/tmp/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' (packed) + ENGINE : gproj: '/tmp/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' (packed) + ENGINE : gproj: '/tmp/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' (packed) + ENGINE : gproj: '/tmp/source/addons/core/addon.gproj' guid: '2528466DE220D91C' (packed) + ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) + ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +ENGINE : FileSystem: Adding package '/tmp/source/addons/chat/' (pak count: 1) to filesystem under name ERR_Chat +ENGINE : FileSystem: Adding package '/tmp/source/addons/map/' (pak count: 1) to filesystem under name ERR_Map +ENGINE : FileSystem: Adding package '/tmp/source/addons/intel/' (pak count: 1) to filesystem under name ERR_Intel +ENGINE : FileSystem: Adding package '/tmp/source/addons/ai/' (pak count: 1) to filesystem under name ERR_Ai +ENGINE : FileSystem: Adding package '/tmp/source/addons/core/' (pak count: 1) to filesystem under name ERR_Core +ENGINE : FileSystem: Adding package './addons/data/' (pak count: 6) to filesystem under name ArmaReforger +ENGINE : FileSystem: Adding package './addons/core/' (pak count: 1) to filesystem under name core +ENGINE : CPU vendor : AuthenticAMD +ENGINE : CPU type : 2 +ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +ENGINE : CPU cache info : Unknown cache +ENGINE : CPU count logical : 16 +ENGINE : CPU count physical : 8 +ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=/tmp/source/addons/chat/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=/tmp/source/addons/map/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=/tmp/source/addons/intel/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=/tmp/source/addons/ai/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=/tmp/source/addons/core/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=7 name=profile path=/tmp/work/profile/profile/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=8 name=logs path=/tmp/work/profile/logs/logs_2026-09-19_13-24-56/resourceDatabase.rdb) +ENGINE : GameProject load + ENGINE : Loaded addons: + ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' + ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' + ENGINE : gproj: '/tmp/source/addons/core/addon.gproj' guid: '2528466DE220D91C' + ENGINE : gproj: '/tmp/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +SCRIPT : Compiling Game scripts + SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete + SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete + SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. + SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed + SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete + SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete + SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete + SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete + SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete + SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead + SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete + SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete + SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete + SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete + SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. + SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. + SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. + SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. + SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' + WORLD : Subscene load @"{853E92315D1D9EFE}worlds/Eden/Eden.ent" + RESOURCES : GetResourceObject @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" + WORLD : Entity prefab load @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" + RESOURCES (E): Wrong GUID/name for resource @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" in property "AssignedMaterial" +RESOURCES : GetResourceObject @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" + WORLD : Entity prefab load @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" + RESOURCES (E): Wrong GUID/name for resource @"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob" in property "Object" + ENGINE : gproj: '/tmp/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' + ENGINE : gproj: '/tmp/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' + ENGINE : gproj: '/tmp/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +ENGINE : Loading custom engine user config '$profile:.save/settings/ReforgerEngineSettings.conf' +ENGINE : No Enfusion settings file loaded. Continuing with defaults +RENDER : Basic screen setup: +RENDER : Back buffer width x height: 0x0 +RENDER : Back buffer format : TEXFMT_UNKNOWN (0) +RENDER : MSAA : none +RENDER : GPU_DUMMY (0xFFFF) (Enfusion dummy render) with 1 GPU detected, VRAM 128MB (fast 128MB), shared 128MB, driver version Unknown version +RENDER : Detected output devices: +RENDER : * 1 device/s connected to Dummy: +RENDER : Dummy output (Dummy device for our dummy render.), 1920x1080 (offset 0x0), 60Hz +RENDER : Concurrent frames limit 2 +ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7 +PROFILING : Settings changed took: 0.020000 ms +ENGINE : Initializing inputs. +NETWORK : Initializing networking. +NETWORK : Using new GameRplScheduler. + SCRIPT : SCRIPT : Initializing scripts + SCRIPT : SCRIPT : ScriptProjectManager init + PROFILING : ScriptProjectManager init took: 0.010000 ms +PROFILING : Initializing scripts took: 16.496000 ms +BACKEND : Backend Services are disabled. +ENGINE : Enfusion engine successfully created. +GUI : Using default language (en_us) +GUI : Loading 'en_us' localization file. + INIT : INIT : Loading StringTable +PROFILING : Loading StringTable took: 22.000000 ms + SCRIPT : SCRIPT : Compiling GameLib scripts + 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 +PROFILING : Compiling GameLib scripts took: 28.645000 ms + SCRIPT : SCRIPT : Compiling Game scripts + SCRIPT : Module: Game; loaded 5780x files; 11202x classes; used 26151K 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"; CRC32: 6264db09 +PROFILING : Compiling Game scripts took: 1498.686000 ms +INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +ENGINE : Game successfully created. +PLATFORM : Save data from container 'settings' have been loaded +PLATFORM : Save data from container 'sessions' have been loaded +PLATFORM : System language differs from the saved one - using new language {new: 'en_us'; old: ''} +PLATFORM : Save data transaction to 'settings' started. +NETWORK : Starting local multiplayer server using command line args. +DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{C1E20667DCE324ED}Missions/ERR_Everon.conf'. + WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +PROFILING : Entities load took: 793.592000 ms + WORLD : WORLD : Game::LoadEntities + WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" + NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. + WORLD : WORLD : CreateEntities + WORLD : WORLD : CreateEntities + WORLD : WORLD : NotifyBeforeEntitiesCreated + RESOURCES : Loaded mission headers from 7 addon(s)! + PROFILING : NotifyBeforeEntitiesCreated took: 1.518000 ms + WORLD : WORLD : Wait for preloading data + PROFILING : Wait for preloading data took: 1769.292000 ms + ENTITY : Create entity @"ENTWORLD : Game::LoadEntities + WORLD : CreateEntities + WORLD : CreateEntities + 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" + ENTITY : CreateComponent 'ScriptedRadioComponent' + DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. + ENTITY : Create entity @"ENTITY:1104061" ('StaticModelEntity') at <8831.291016 95.934265 2673.487061> + ENTITY : EntityPrefabUse @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" + RESOURCES : CreateComponentData @"{904345715F67BBAC}Assets/Structures/Cultural/Calvaries/CalvaryLarge_01/CalvaryLarge_01.xob" + MATERIAL : Material load @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" + MATERIAL (E): Material file not found + MATERIAL (E): Cannot load material @"system/wbdata/PreviewWindow/TransparentMat.emat", creating default one (class MatPBRBasic) + WORLD : InitEntities 'world' + ENTITY : Init entity @"ENTITY:3" ('SCR_MapEntity1', SCR_MapEntity) at <6400.000000 0.000000 6400.000000> @"{E1B88C66BF6CA1F9}Prefabs/World/Game/Eden/MapEntity_Everon.et" + SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default. + ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" + SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +ITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" + PROFILING : PROFILING : Terrain load + PROFILING : Terrain load took: 1124.553000 ms + WORLD : WORLD : NotifyBeforeEntitiesInitialized + PROFILING : NotifyBeforeEntitiesInitialized took: 0.034000 ms + WORLD : WORLD : NotifyEntitiesInitialized + TERRAIN : TERRAIN : Initializing road networks... + PROFILING : Initializing road networks... took: 1.887000 ms + DEFAULT : DEFAULT : WorldVolumesCollection + PROFILING : WorldVolumesCollection took: 55.879000 ms + INIT : INIT : SoundWorldInit + PROFILING : SoundWorldInit took: 7.852000 ms + PROFILING : NotifyEntitiesInitialized took: 65.743000 ms + PROFILING : CreateEntities took: 10870.120000 ms + PROFILING : CreateEntities took: 10870.128000 ms + WORLD : WORLD : EOnActivate + PROFILING : EOnActivate took: 29.074000 ms +PROFILING : Game::LoadEntities took: 10901.237000 ms +NETWORK : Starting RPL server, listening on address 0.0.0.0:2001, fastValidation=false +DEFAULT : Entered online game state. +PROFILING : Settings changed took: 0.427000 ms +WORLD : Frame start + SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +WORLD : UpdateEntities + WORLD : Frame + SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 cWORLD : UpdateEntities + WORLD : AfterPostSimulate + DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +enter=<7014.28,64.4898,7497.97> +SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5477,7499.7> up=0.995587 +SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.370167 angularSpeed=0.0724636 +SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6082,7501.98> +SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3082,7501.98> terrainY=63.3159 tireTerrainGap=-0.00771713 +SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6082,7501.98> radius=0.3 bottom=<7012.07,63.3082,7501.98> fraction=0.419608 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00768661 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.5842,7497.71> +SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1342,7497.71> terrainY=64.1557 tireTerrainGap=-0.0215302 +SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.5842,7497.71> radius=0.45 bottom=<7009.88,64.1342,7497.71> fraction=0.356702 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.0215225 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.261,7497.74> +SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.811,7497.74> terrainY=63.8182 tireTerrainGap=-0.0071373 +SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.261,7497.74> radius=0.45 bottom=<7014.42,63.811,7497.74> fraction=0.421944 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00717163 +SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5339,7499.72> up=0.994186 +SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0982479 angularSpeed=0.0247414 +SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6222,7501.99> +SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3222,7501.99> terrainY=63.3135 tireTerrainGap=0.00865555 +SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6222,7501.99> radius=0.3 bottom=<7012.08,63.3222,7501.99> fraction=0.494395 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00876617 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6042,7497.73> +SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1542,7497.73> terrainY=64.1496 tireTerrainGap=0.00456238 +SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6042,7497.73> radius=0.45 bottom=<7009.92,64.1542,7497.73> fraction=0.475603 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00463104 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2685,7497.78> +SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8185,7497.78> terrainY=63.8156 tireTerrainGap=0.00291061 +SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2685,7497.78> radius=0.45 bottom=<7014.46,63.8185,7497.78> fraction=0.467778 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.00291061 +SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5304,7499.74> up=0.99389 +SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.045081 angularSpeed=0.0602025 +SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6125,7502.01> +SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3125,7502.01> terrainY=63.3114 tireTerrainGap=0.00107956 +SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6125,7502.01> radius=0.3 bottom=<7012.07,63.3125,7502.01> fraction=0.459377 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.0010643 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.5944,7497.73> +SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.1444,7497.73> terrainY=64.1436 tireTerrainGap=0.000801086 +SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.5944,7497.73> radius=0.45 bottom=<7009.96,64.1444,7497.73> fraction=0.45852 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00087738 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.2593,7497.83> +SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.8093,7497.83> terrainY=63.8128 tireTerrainGap=-0.00353622 +SCRIPT : ERR GEAR SUPPORT: center=<7014.5,64.2593,7497.83> radius=0.45 bottom=<7014.5,63.8093,7497.83> fraction=0.438333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00356674 +SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 29.7, frame time (avg: 33.7 ms, min: 3.6 ms, max: 94.8 ms, mean: 32.9 ms, median: 33.3 ms), Mem: 996591 kB, Player: 0, AI: 32, AIChar: 23, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Freezes(cnt: 1, max: 90.6 ms, len: 1), Streaming(Dynam: 708, Static: 57591, Disabled: 30 | New: 0, Del: 0, Bump: 16) +SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.529,7499.75> up=0.993729 +SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6126,7502.02> +SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3126,7502.02> terrainY=63.3112 tireTerrainGap=0.00144577 +SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6126,7502.02> radius=0.3 bottom=<7012.07,63.3126,7502.02> fraction=0.461046 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00143051 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.73> +SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.73> terrainY=64.1422 tireTerrainGap=0.00249481 +SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5946,7497.73> radius=0.45 bottom=<7009.97,64.1446,7497.73> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8121 tireTerrainGap=-0.00188065 +SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.445833 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00191498 +SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.529,7499.75> up=0.993729 +SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6126,7502.02> +SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3126,7502.02> terrainY=63.3112 tireTerrainGap=0.00144577 +SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6126,7502.02> radius=0.3 bottom=<7012.07,63.3126,7502.02> fraction=0.461046 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00143051 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.73> +SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.73> terrainY=64.1422 tireTerrainGap=0.00249481 +SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5946,7497.73> radius=0.45 bottom=<7009.97,64.1446,7497.73> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8121 tireTerrainGap=-0.00188065 +SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.445833 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00191498 +SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +SCRIPT : Rereintroduced [environment]: date=authored weather=authored +SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 8.4 ms, max: 74.4 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1002922 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.6 ms, max: 34.7 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1003095 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.1 ms, max: 34.7 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1003173 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.0 ms, max: 36.0 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 1003269 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.3 ms, max: 36.9 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 1003216 kB, Player: 0, AI: 51, AIChar: 40, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 833, Static: 57591, Disabled: 32 | New: \ No newline at end of file diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/console.log.txt b/docs/evidence/game-2026-09-19-121730-prison-view/console.log.txt new file mode 100644 index 0000000..d9de2d1 --- /dev/null +++ b/docs/evidence/game-2026-09-19-121730-prison-view/console.log.txt @@ -0,0 +1,491 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-17-30\console.log started at 2026-09-19 12:17:30 (2026-09-19 10:17:30 UTC) + +12:17:30.627 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-17-30' to filesystem under name logs +12:17:30.627 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-game-profile\profile' to filesystem under name profile +12:17:30.627 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger\' +12:17:30.628 ENGINE : Initializing engine, version 192142 +12:17:30.628 ENGINE : CLI Params: -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/addons -addons FA804F411BDDF2C6 -profile Z:/tmp/erri-game-profile -errOrdinaryScenario chat -noSplash -errOrdinaryScreenshot 1 -noBackend -noSound -noThrow -disableCrashReporter -logconsole +12:17:30.636 ENGINE : Addon dirs: +12:17:30.636 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +12:17:30.636 ENGINE : dir: './addons' +12:17:30.636 ENGINE : dir: 'Z:/tmp/erri-game-profile/addons' +12:17:30.636 ENGINE : Available addons: +12:17:30.636 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:17:30.636 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:17:30.636 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:17:30.636 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:17:30.636 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:17:30.636 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +12:17:30.636 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +12:17:30.636 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +12:17:30.636 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +12:17:30.636 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +12:17:30.636 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +12:17:30.637 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +12:17:30.773 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +12:17:30.777 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +12:17:30.777 ENGINE : CPU vendor : AuthenticAMD +12:17:30.777 ENGINE : CPU type : 2 +12:17:30.777 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +12:17:30.777 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +12:17:30.777 ENGINE : CPU count logical : 16 +12:17:30.777 ENGINE : CPU count physical : 8 +12:17:30.777 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +12:17:30.777 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:17:30.778 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:17:30.778 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:17:30.778 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:17:30.779 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:17:30.779 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +12:17:30.946 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +12:17:30.947 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-game-profile\profile/resourceDatabase.rdb) +12:17:30.947 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-17-30/resourceDatabase.rdb) +12:17:31.094 ENGINE : GameProject load +12:17:31.094 ENGINE : Loaded addons: +12:17:31.094 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +12:17:31.094 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +12:17:31.094 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:17:31.094 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:17:31.094 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:17:31.094 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:17:31.094 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:17:31.097 ENGINE : Loading custom engine user config '$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf' +12:17:31.097 INIT : GameProject engine user settings load @"$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf" +12:17:31.097 ENGINE : Engine user settings config loaded +12:17:31.097 PROFILING : Settings changed took: 0.001500 ms +12:17:31.097 ENGINE : Locale info: system en-US (English), user en-US (English) +12:17:31.219 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +12:17:31.220 RENDER : Basic screen setup: +12:17:31.220 RENDER : Back buffer width x height: 1280x720 +12:17:31.220 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +12:17:31.220 RENDER : MSAA : none +12:17:31.234 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +12:17:31.234 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +12:17:31.234 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +12:17:31.234 RENDER : * core clocks 2720 MHz, memory 1124 MHz +12:17:31.234 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +12:17:31.234 RENDER : AMD AGS correctly initialized +12:17:31.234 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +12:17:31.234 RENDER : Detected output devices: +12:17:31.234 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +12:17:31.234 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +12:17:31.234 RENDER : Concurrent frames limit 2 +12:17:31.321 RENDER : DX12 device successfully created by AMD AGS library +12:17:31.321 RENDER : * user markers not supported in this version AMD SW +12:17:31.321 RENDER : Graphics device features +12:17:31.321 RENDER : Needed: +12:17:31.321 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +12:17:31.321 RENDER : Optional: +12:17:31.321 RENDER : * Allow tearing (VSYNC) : 1 +12:17:31.321 RENDER : * 16 bits : 1 +12:17:31.321 RENDER : * Resource heap tier : 3 +12:17:31.321 RENDER : * Persistent heaps (DRED) : 1 +12:17:31.321 RENDER : * DRED 1.2 is supported by compiler +12:17:31.343 RENDER : Main RT format setup. +12:17:31.343 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +12:17:31.343 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +12:17:31.348 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7 +12:17:31.374 PROFILING : Settings changed took: 1.060600 ms +12:17:31.382 RENDER : RENDER : Reload shaders +12:17:31.383 RENDER : Enfusion shader version 13 +12:17:31.383 INIT : INIT : ShaderListReload +12:17:31.383 PROFILING : ShaderListReload took: 0.000400 ms +12:17:32.543 RENDER : Loaded 3383 newer shader binaries +12:17:32.543 PROFILING : Reload shaders took: 1160.715900 ms +12:17:32.546 ENGINE : Initializing inputs. +12:17:32.560 NETWORK : Initializing networking. +12:17:32.560 NETWORK : Using new GameRplScheduler. +12:17:32.560 SCRIPT : SCRIPT : Initializing scripts +12:17:32.561 SCRIPT : SCRIPT : ScriptProjectManager init +12:17:32.561 PROFILING : ScriptProjectManager init took: 0.008300 ms +12:17:32.645 PROFILING : Initializing scripts took: 83.940800 ms +12:17:32.645 BACKEND : Backend Services are disabled. +12:17:32.645 ENGINE : Enfusion engine successfully created. +12:17:32.651 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:17:32.674 GUI : Using default language (en_us) +12:17:32.674 GUI : Loading 'en_us' localization file. +12:17:32.674 INIT : INIT : Loading StringTable +12:17:32.699 PROFILING : Loading StringTable took: 24.230000 ms +12:17:32.699 SCRIPT : SCRIPT : Compiling GameLib scripts +12:17:32.752 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 666K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:17:32.753 PROFILING : Compiling GameLib scripts took: 54.182600 ms +12:17:32.753 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:17:32.753 SCRIPT : SCRIPT : Compiling Game scripts +12:17:33.872 SCRIPT : Compiling Game scripts +12:17:33.872 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:17:33.872 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:17:34.103 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:34.113 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:17:34.139 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:17:34.233 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:17:34.233 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:17:34.233 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:17:34.233 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:17:34.265 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:17:34.309 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:17:34.320 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:17:34.320 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:17:34.321 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:17:34.363 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:34.363 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:34.364 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:17:34.364 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:17:34.416 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:17:34.532 SCRIPT : Module: Game; loaded 5777x files; 11194x classes; used 26983K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 59fec84d +12:17:34.561 PROFILING : Compiling Game scripts took: 1807.818700 ms +12:17:34.561 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:17:34.598 ENGINE : Game successfully created. +12:17:34.638 PLATFORM : Save data from container 'settings' have been loaded +12:17:34.737 PLATFORM : Save data from container 'sessions' have been loaded +12:17:35.140 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +12:17:35.140 ENGINE : Game user settings config loaded +12:17:35.236 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission 'worlds/MainMenuWorld/MainMenuWorld.ent'. +12:17:35.237 WORLD : WORLD : Entities load 'worlds/MainMenuWorld/MainMenuWorld.ent' +12:17:35.238 PROFILING : Entities load took: 0.739400 ms +12:17:35.239 WORLD : WORLD : Game::LoadEntities +12:17:35.239 WORLD : WORLD : Initializing world systems +12:17:35.240 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +12:17:35.241 WORLD : WORLD : CreateEntities +12:17:35.241 WORLD : WORLD : CreateEntities +12:17:35.241 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:17:35.254 RESOURCES : Loaded mission headers from 7 addon(s)! +12:17:35.254 PROFILING : NotifyBeforeEntitiesCreated took: 13.649100 ms +12:17:35.254 WORLD : WORLD : Wait for preloading data +12:17:35.254 PROFILING : Wait for preloading data took: 0.001100 ms +12:17:35.255 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:17:35.255 PROFILING : NotifyBeforeEntitiesInitialized took: 0.018800 ms +12:17:35.255 WORLD : InitEntities 'world' +12:17:35.255 ENTITY : Init entity @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> +12:17:35.255 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +12:17:35.265 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +12:17:35.265 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +12:17:35.265 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +12:17:35.265 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +12:17:35.265 WORLD : WORLD : NotifyEntitiesInitialized +12:17:35.266 DEFAULT : DEFAULT : WorldVolumesCollection +12:17:35.266 PROFILING : WorldVolumesCollection took: 0.005800 ms +12:17:35.266 PROFILING : NotifyEntitiesInitialized took: 0.077800 ms +12:17:35.266 PROFILING : CreateEntities took: 24.791400 ms +12:17:35.266 PROFILING : CreateEntities took: 24.802300 ms +12:17:35.266 WORLD : WORLD : EOnActivate +12:17:35.266 PROFILING : EOnActivate took: 0.004400 ms +12:17:35.266 PROFILING : Game::LoadEntities took: 26.373100 ms +12:17:35.436 DEFAULT : Entered main menu. +12:17:35.535 DEFAULT (W): No GameMode present in the world, using fallback logic! +12:17:35.536 SCRIPT : ERR ORDINARY: requesting header project=chat +12:17:36.060 ENGINE : Game destroyed. +12:17:36.196 ENGINE : Addon dirs: +12:17:36.196 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +12:17:36.196 ENGINE : dir: './addons' +12:17:36.196 ENGINE : dir: 'Z:/tmp/erri-game-profile/addons' +12:17:36.196 ENGINE : dir: '$profile:../addons/' +12:17:36.196 ENGINE : Available addons: +12:17:36.196 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:17:36.196 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:17:36.196 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:17:36.196 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:17:36.196 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:17:36.196 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +12:17:36.196 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +12:17:36.196 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +12:17:36.196 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +12:17:36.197 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +12:17:36.197 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +12:17:36.197 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +12:17:36.296 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +12:17:36.300 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +12:17:36.300 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:17:36.300 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:17:36.301 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:17:36.301 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:17:36.301 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:17:36.301 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +12:17:36.457 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +12:17:36.458 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-game-profile\profile/resourceDatabase.rdb) +12:17:36.458 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-17-30/resourceDatabase.rdb) +12:17:36.606 ENGINE : GameProject load +12:17:36.606 ENGINE : Loaded addons: +12:17:36.606 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +12:17:36.606 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +12:17:36.606 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:17:36.606 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:17:36.606 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:17:36.606 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:17:36.606 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:17:36.627 GUI : Using default language (en_us) +12:17:36.627 GUI : Loading 'en_us' localization file. +12:17:36.627 INIT : INIT : Loading StringTable +12:17:36.646 PROFILING : Loading StringTable took: 18.990700 ms +12:17:36.646 SCRIPT : SCRIPT : Compiling GameLib scripts +12:17:36.698 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 664K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:17:36.698 PROFILING : Compiling GameLib scripts took: 52.523400 ms +12:17:36.699 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:17:36.699 SCRIPT : SCRIPT : Compiling Game scripts +12:17:37.806 SCRIPT : Compiling Game scripts +12:17:37.806 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:17:37.806 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:17:38.057 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:38.069 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:17:38.097 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:17:38.200 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:17:38.200 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:17:38.200 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:17:38.200 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:17:38.236 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:17:38.281 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:17:38.293 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:17:38.293 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:17:38.295 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:17:38.340 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:38.340 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:38.342 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:17:38.342 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:17:38.397 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:17:38.511 SCRIPT : Module: Game; loaded 5777x files; 11194x classes; used 26958K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 59fec84d +12:17:38.542 PROFILING : Compiling Game scripts took: 1843.643100 ms +12:17:38.542 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:17:38.563 ENGINE : Game successfully created. +12:17:38.618 PLATFORM : Save data from container 'settings' have been loaded +12:17:38.717 PLATFORM : Save data from container 'sessions' have been loaded +12:17:38.717 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +12:17:38.717 ENGINE : Game user settings config loaded +12:17:38.817 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{C1E20667DCE324ED}Missions/ERR_Everon.conf'. +12:17:38.818 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +12:17:39.824 PROFILING : Entities load took: 1006.610300 ms +12:17:39.827 WORLD : WORLD : Game::LoadEntities +12:17:39.827 WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" +12:17:39.829 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +12:17:39.829 WORLD : WORLD : CreateEntities +12:17:39.829 WORLD : WORLD : CreateEntities +12:17:39.829 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:17:39.841 RESOURCES : Loaded mission headers from 7 addon(s)! +12:17:39.841 PROFILING : NotifyBeforeEntitiesCreated took: 12.535100 ms +12:17:39.841 WORLD : WORLD : Wait for preloading data +12:17:39.849 PROFILING : Wait for preloading data took: 7.258500 ms +12:17:39.970 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +12:17:39.970 PROFILING : PROFILING : Terrain load +12:17:41.993 PROFILING : Terrain load took: 2023.577000 ms +12:17:44.720 WORLD : Game::LoadEntities +12:17:44.720 WORLD : CreateEntities +12:17:44.720 WORLD : CreateEntities +12:17:44.720 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" +12:17:44.720 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:17:44.720 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:17:50.575 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:17:50.576 PROFILING : NotifyBeforeEntitiesInitialized took: 0.122500 ms +12:17:51.149 WORLD : InitEntities 'world' +12:17:51.149 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:17:51.149 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:17:51.168 WORLD : WORLD : NotifyEntitiesInitialized +12:17:51.168 TERRAIN : TERRAIN : Initializing road networks... +12:17:51.171 PROFILING : Initializing road networks... took: 2.928700 ms +12:17:51.171 DEFAULT : DEFAULT : WorldVolumesCollection +12:17:51.232 PROFILING : WorldVolumesCollection took: 60.641800 ms +12:17:51.232 INIT : INIT : SoundWorldInit +12:17:51.249 PROFILING : SoundWorldInit took: 17.136400 ms +12:17:51.249 PROFILING : NotifyEntitiesInitialized took: 80.904700 ms +12:17:51.249 PROFILING : CreateEntities took: 11419.671300 ms +12:17:51.249 PROFILING : CreateEntities took: 11419.843900 ms +12:17:51.250 WORLD : WORLD : Wait for preloading data around camera +12:17:51.500 PROFILING : Wait for preloading data around camera took: 250.316900 ms +12:17:51.500 WORLD : WORLD : EOnActivate +12:17:51.531 PROFILING : EOnActivate took: 30.695000 ms +12:17:51.531 PROFILING : Game::LoadEntities took: 11703.267900 ms +12:17:52.027 DEFAULT : Entered offline game state. +12:17:52.131 SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems +12:17:52.131 NETWORK : Player connected: connectionID=2147483646 +12:17:52.131 NETWORK : ### Connecting player: connectionID=2147483646, Name= +12:17:52.132 NETWORK : ### Creating player: PlayerId=1, Name=jakub +12:17:52.136 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:17:52.136 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:17:52.136 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:17:52.136 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:17:52.136 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:17:52.137 SCRIPT (W): Can't open config file "" +12:17:52.137 SCRIPT (W): Cannot update game blocklist. Backend is offline. +12:17:52.138 WORLD : InitEntities 'world' +12:17:52.138 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:17:52.138 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:17:52.138 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:17:52.138 SCRIPT (W): Slot_Chat Has no Content! +12:17:52.138 SCRIPT (W): Slot_VON Has no Content! +12:17:52.138 SCRIPT (W): Slot_AvailableActions Has no Content! +12:17:52.138 SCRIPT (W): Slot_Vehicle Has no Content! +12:17:52.138 SCRIPT (W): Slot_GameVersion Has no Content! +12:17:52.138 SCRIPT (W): Slot_Notifications Has no Content! +12:17:52.138 SCRIPT (W): Slot_Hints Has no Content! +12:17:52.144 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +12:17:52.145 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +12:17:52.145 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +12:17:52.145 SCRIPT : Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged. +12:17:52.145 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:17:52.145 NETWORK : Players connecting: 0 +12:17:52.145 NETWORK : Players connected: 1 / 1 +12:17:52.155 WORLD : Frame start +12:17:52.155 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:17:52.165 WORLD : UpdateEntities +12:17:52.165 WORLD : Frame +12:17:52.165 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:17:52.316 WORLD : UpdateEntities +12:17:52.316 WORLD : PostFrame +12:17:52.316 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:17:52.316 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:17:52.361 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:17:52.361 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:17:52.361 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:17:52.361 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +12:17:52.495 RENDER : RENDER : ObjectsHeightMap::Build +12:17:52.495 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +12:17:52.629 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 133.796300 ms +12:17:52.637 PROFILING : ObjectsHeightMap::Build took: 141.265600 ms +12:17:53.633 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:17:53.647 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:17:53.648 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:17:53.674 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:17:53.676 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:17:53.727 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:17:53.727 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:17:53.733 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:17:53.772 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:17:53.772 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:17:53.774 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:17:53.774 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:17:53.778 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:17:53.780 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:17:53.780 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:17:53.781 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:17:53.781 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:17:53.781 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:17:53.781 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:17:53.781 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:17:53.781 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:17:53.781 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:17:53.781 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:17:53.781 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:17:53.781 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:17:53.781 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:17:53.781 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:17:53.781 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:17:53.781 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:17:53.781 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:17:53.781 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:17:53.781 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:17:53.781 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:17:53.781 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:17:54.690 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:17:54.690 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:17:54.690 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:17:54.690 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:17:54.963 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.06,63.5116,7499.69> up=0.995284 +12:17:54.963 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.151315 angularSpeed=0.099362 +12:17:54.963 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.3 +12:17:54.963 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.03,63.6074,7501.96> +12:17:54.963 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.03,63.3074,7501.96> terrainY=63.3178 tireTerrainGap=-0.010437 +12:17:54.963 SCRIPT : ERR GEAR SUPPORT: center=<7012.03,63.6074,7501.96> radius=0.3 bottom=<7012.03,63.3074,7501.96> fraction=0.407075 normal=<0.0154358,0.987894,0.154358> self=0 dynamic=0 supported=1 gap=-0.0104446 +12:17:54.963 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.87,64.6095,7497.69> +12:17:54.963 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.87,64.1595,7497.69> terrainY=64.1572 tireTerrainGap=0.00228119 +12:17:54.963 SCRIPT : ERR GEAR SUPPORT: center=<7009.87,64.6095,7497.69> radius=0.45 bottom=<7009.87,64.1595,7497.69> fraction=0.464947 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00228882 +12:17:54.963 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2575,7497.76> +12:17:54.963 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8075,7497.76> terrainY=63.8174 tireTerrainGap=-0.00993729 +12:17:54.963 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2575,7497.76> radius=0.45 bottom=<7014.42,63.8075,7497.76> fraction=0.409444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00992203 +12:17:54.963 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:17:55.208 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:17:55.208 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:17:55.208 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:17:55.208 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:17:55.763 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:17:55.764 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:17:55.764 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:17:56.030 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5432,7499.72> up=0.994193 +12:17:56.030 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0742717 angularSpeed=0.0608579 +12:17:56.030 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:17:56.030 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6158,7501.99> +12:17:56.030 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3158,7501.99> terrainY=63.3138 tireTerrainGap=0.00202942 +12:17:56.030 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6158,7501.99> radius=0.3 bottom=<7012.06,63.3158,7501.99> fraction=0.463866 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00205231 +12:17:56.030 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6067,7497.71> +12:17:56.030 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1567,7497.71> terrainY=64.1494 tireTerrainGap=0.00727844 +12:17:56.030 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6067,7497.71> radius=0.45 bottom=<7009.92,64.1567,7497.71> fraction=0.487381 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00722504 +12:17:56.030 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2658,7497.79> +12:17:56.030 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8158,7497.79> terrainY=63.8152 tireTerrainGap=0.000514984 +12:17:56.030 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2658,7497.79> radius=0.45 bottom=<7014.46,63.8158,7497.79> fraction=0.456667 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.000465393 +12:17:56.030 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:17:56.030 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:17:56.298 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:17:56.298 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:17:56.298 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:17:56.298 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:17:56.830 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:17:56.830 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:17:56.830 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:17:56.830 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:17:57.097 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.528,7499.75> up=0.994198 +12:17:57.097 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0905053 angularSpeed=0.0382754 +12:17:57.097 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:17:57.097 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6106,7502.02> +12:17:57.097 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3106,7502.02> terrainY=63.3108 tireTerrainGap=-0.000183105 +12:17:57.097 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6106,7502.02> radius=0.3 bottom=<7012.07,63.3106,7502.02> fraction=0.45366 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=-0.00019455 +12:17:57.097 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.596,7497.73> +12:17:57.097 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.146,7497.73> terrainY=64.1425 tireTerrainGap=0.00357056 +12:17:57.097 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.596,7497.73> radius=0.45 bottom=<7009.97,64.146,7497.73> fraction=0.47138 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00370789 +12:17:57.097 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2605,7497.84> +12:17:57.097 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8105,7497.84> terrainY=63.8123 tireTerrainGap=-0.00175095 +12:17:57.097 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2605,7497.84> radius=0.45 bottom=<7014.51,63.8105,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +12:17:57.097 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:17:57.363 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:17:57.363 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:17:57.363 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:17:57.364 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:17:57.897 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:17:57.897 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:17:57.897 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:17:57.897 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:17:58.163 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5289,7499.75> up=0.994119 +12:17:58.163 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:17:58.163 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:17:58.163 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6118,7502.03> +12:17:58.163 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3118,7502.03> terrainY=63.3104 tireTerrainGap=0.00144958 +12:17:58.163 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6118,7502.03> radius=0.3 bottom=<7012.07,63.3118,7502.03> fraction=0.460896 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00139618 +12:17:58.163 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5941,7497.73> +12:17:58.163 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1441,7497.73> terrainY=64.1416 tireTerrainGap=0.00247955 +12:17:58.163 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5941,7497.73> radius=0.45 bottom=<7009.97,64.1441,7497.73> fraction=0.466068 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00254059 +12:17:58.163 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.26,7497.84> +12:17:58.163 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.81,7497.84> terrainY=63.8119 tireTerrainGap=-0.0018959 +12:17:58.163 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.26,7497.84> radius=0.45 bottom=<7014.51,63.81,7497.84> fraction=0.445833 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00191498 +12:17:58.163 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:17:58.430 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:17:58.430 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:17:58.430 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:17:58.430 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:17:58.963 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:17:58.963 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:17:58.963 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:17:58.963 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:17:59.230 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5289,7499.75> up=0.994119 +12:17:59.230 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:17:59.230 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:17:59.230 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6118,7502.03> +12:17:59.230 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3118,7502.03> terrainY=63.3104 tireTerrainGap=0.00144958 +12:17:59.230 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6118,7502.03> radius=0.3 bottom=<7012.07,63.3118,7502.03> fraction=0.460896 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00139618 +12:17:59.230 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5941,7497.73> +12:17:59.230 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1441,7497.73> terrainY=64.1416 tireTerrainGap=0.00247955 +12:17:59.230 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5941,7497.73> radius=0.45 bottom=<7009.97,64.1441,7497.73> fraction=0.466068 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00254059 +12:17:59.230 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.26,7497.84> +12:17:59.230 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.81,7497.84> terrainY=63.8119 tireTerrainGap=-0.0018959 +12:17:59.230 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.26,7497.84> radius=0.45 bottom=<7014.51,63.81,7497.84> fraction=0.445833 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00191498 +12:17:59.230 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:17:59.497 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:17:59.498 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:17:59.509 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:17:59.510 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:17:59.510 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:17:59.510 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:17:59.510 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:17:59.510 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:17:59.510 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:18:00.165 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:18:00.201 SCRIPT : ERR ORDINARY: local participant verified project=chat phase=prison +12:18:00.201 SCRIPT : ERR ORDINARY: optional prisoner screenshot queued after finalized admission +12:18:00.201 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +12:18:03.248 ENGINE : Screenshot successfully saved into $logs:err-ordinary-prison (1280x720) +12:18:03.248 SCRIPT : ERR ORDINARY: optional prisoner screenshot requested without camera or input changes diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/err-ordinary-prison.bmp b/docs/evidence/game-2026-09-19-121730-prison-view/err-ordinary-prison.bmp new file mode 100644 index 0000000..5e13f9d Binary files /dev/null and b/docs/evidence/game-2026-09-19-121730-prison-view/err-ordinary-prison.bmp differ diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/error.log.txt b/docs/evidence/game-2026-09-19-121730-prison-view/error.log.txt new file mode 100644 index 0000000..ace51d7 --- /dev/null +++ b/docs/evidence/game-2026-09-19-121730-prison-view/error.log.txt @@ -0,0 +1,81 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-17-30\error.log started at 2026-09-19 12:17:32 (2026-09-19 10:17:32 UTC) + +12:17:32.651 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:17:33.872 SCRIPT : Compiling Game scripts +12:17:33.872 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:17:33.872 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:17:34.103 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:34.113 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:17:34.139 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:17:34.233 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:17:34.233 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:17:34.233 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:17:34.233 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:17:34.265 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:17:34.309 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:17:34.320 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:17:34.320 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:17:34.321 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:17:34.362 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:34.363 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:34.364 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:17:34.364 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:17:34.416 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:17:35.535 DEFAULT (W): No GameMode present in the world, using fallback logic! +12:17:37.806 SCRIPT : Compiling Game scripts +12:17:37.806 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:17:37.806 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:17:38.057 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:38.069 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:17:38.097 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:17:38.200 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:17:38.200 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:17:38.200 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:17:38.200 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:17:38.236 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:17:38.281 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:17:38.293 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:17:38.293 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:17:38.295 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:17:38.340 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:38.340 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:38.342 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:17:38.342 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:17:38.397 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:17:44.720 WORLD : Game::LoadEntities +12:17:44.720 WORLD : CreateEntities +12:17:44.720 WORLD : CreateEntities +12:17:44.720 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" +12:17:44.720 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:17:44.720 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:17:51.149 WORLD : InitEntities 'world' +12:17:51.149 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:17:51.149 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:17:52.136 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:17:52.136 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:17:52.136 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:17:52.136 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:17:52.136 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:17:52.137 SCRIPT (W): Can't open config file "" +12:17:52.137 SCRIPT (W): Cannot update game blocklist. Backend is offline. +12:17:52.138 WORLD : InitEntities 'world' +12:17:52.138 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:17:52.138 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:17:52.138 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:17:52.138 SCRIPT (W): Slot_Chat Has no Content! +12:17:52.138 SCRIPT (W): Slot_VON Has no Content! +12:17:52.138 SCRIPT (W): Slot_AvailableActions Has no Content! +12:17:52.138 SCRIPT (W): Slot_Vehicle Has no Content! +12:17:52.138 SCRIPT (W): Slot_GameVersion Has no Content! +12:17:52.138 SCRIPT (W): Slot_Notifications Has no Content! +12:17:52.138 SCRIPT (W): Slot_Hints Has no Content! +12:17:52.145 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:17:52.316 WORLD : UpdateEntities +12:17:52.316 WORLD : PostFrame +12:17:52.316 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:17:52.316 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:17:52.361 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:17:52.361 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:17:52.361 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:17:52.361 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/game-startup-report.json.txt b/docs/evidence/game-2026-09-19-121730-prison-view/game-startup-report.json.txt new file mode 100644 index 0000000..82f8203 --- /dev/null +++ b/docs/evidence/game-2026-09-19-121730-prison-view/game-startup-report.json.txt @@ -0,0 +1,24 @@ +{ + "log": "console.log", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "ordinary local game startup only; no player input, full escape, multiplayer or FPS proof", + "local_participant_verified": true, + "scenario_header_verified": true, + "verified_header_projects": [ + "chat" + ], + "game_module_defines": [ + "PLATFORM_WINDOWS,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", + "PLATFORM_WINDOWS,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" + ], + "workbench_undefined": true, + "normal_mission_ready": true, + "unexpected_smoke_fixture": false, + "failed": false, + "ready": true, + "failure_observed_during_polling": false +} diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/headless-launch.log.txt b/docs/evidence/game-2026-09-19-121730-prison-view/headless-launch.log.txt new file mode 100644 index 0000000..01a8101 --- /dev/null +++ b/docs/evidence/game-2026-09-19-121730-prison-view/headless-launch.log.txt @@ -0,0 +1,139 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 148 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerSteam.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: (null) + applicationVersion: 0 + pEngineName: (null) + engineVersion: 0 + apiVersion: 4198400 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: (null) + applicationVersion: 0 + pEngineName: (null) + engineVersion: 0 + apiVersion: 4198400 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a00030 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a00030 +[Gamescope WSI] Surface state: + steam app id: 1874880 + window xid: 0x1a00030 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating swapchain for xid: 0x1a00030 - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_R8G8B8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true +[Gamescope WSI] Created swapchain for xid: 0x1a00030 swapchain: 0x7f56dc10dd60 - imageCount: 3 +[Gamescope WSI] Destroying swapchain: 0x7f56dc10dd60 +[Gamescope WSI] Destroyed swapchain: 0x7f56dc10dd60 +[Gamescope WSI] Creating swapchain for xid: 0x1a00030 - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_R8G8B8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true +[Gamescope WSI] Created swapchain for xid: 0x1a00030 swapchain: 0x7f56dc10dd60 - imageCount: 3 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/image-conversion.json b/docs/evidence/game-2026-09-19-121730-prison-view/image-conversion.json new file mode 100644 index 0000000..8a39095 --- /dev/null +++ b/docs/evidence/game-2026-09-19-121730-prison-view/image-conversion.json @@ -0,0 +1,7 @@ +{ + "source": "err-ordinary-prison.bmp", + "source_sha256": "82e94d830014c8b02b74f647703479195a7e2e089bf479bdf0fa5539aa107db1", + "derivative": "ordinary-prison-view.png", + "derivative_sha256": "6e64d221eb9e2cd8422b46c87d81dda51dc90a84a0ea8845a363e7cf4aebfbcb", + "operation": "Lossless BMP to PNG format conversion for viewing. No pixel edits, resize or overlays." +} diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/launch-source-sha256.json b/docs/evidence/game-2026-09-19-121730-prison-view/launch-source-sha256.json new file mode 100644 index 0000000..08c8d59 --- /dev/null +++ b/docs/evidence/game-2026-09-19-121730-prison-view/launch-source-sha256.json @@ -0,0 +1,182 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "34f8e1730824850ea64f43dcd442e753d079a9795b3b9246813070ed36bb8430", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "1503db1441d8cd7a4f0b45c27ba9623b9fa39f0f81016e180bd2aa1379e1f42a", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "d4fe3cffaa188244db254b197a0165ae18f2b5b808b54e20ce888359147940fd", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "3ff1c9e9191f20769fed1e4d7a1363e4109512af76e02aa5e1e6a8766b711951", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/launch-source.json b/docs/evidence/game-2026-09-19-121730-prison-view/launch-source.json new file mode 100644 index 0000000..f306789 --- /dev/null +++ b/docs/evidence/game-2026-09-19-121730-prison-view/launch-source.json @@ -0,0 +1,42 @@ +{ + "schema_version": 1, + "launch_id": "e417810c-bebe-4197-9205-2bbf0e497035", + "captured_unix": 1789813048.9268577, + "source_root": "/home/jakub/devel/escapistsrereintroduced", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/ArmaReforgerSteam.exe", + "-addonsDir", + "Z:/home/jakub/devel/escapistsrereintroduced/addons", + "-addons", + "FA804F411BDDF2C6", + "-profile", + "Z:/tmp/erri-game-profile", + "-errOrdinaryScenario", + "chat", + "-noSplash", + "-errOrdinaryScreenshot", + "1", + "-noBackend", + "-noSound", + "-noThrow", + "-disableCrashReporter", + "-logconsole" + ], + "manifest_sha256": "8d0af1ad31eb2d9c571fa931b81b19a604033c4c8d46e5c159d157ffff29ae24" +} diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/ordinary-prison-view.png b/docs/evidence/game-2026-09-19-121730-prison-view/ordinary-prison-view.png new file mode 100644 index 0000000..974401b Binary files /dev/null and b/docs/evidence/game-2026-09-19-121730-prison-view/ordinary-prison-view.png differ diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/report.json b/docs/evidence/game-2026-09-19-121730-prison-view/report.json new file mode 100644 index 0000000..f8f10d7 --- /dev/null +++ b/docs/evidence/game-2026-09-19-121730-prison-view/report.json @@ -0,0 +1,24 @@ +{ + "log": "docs/evidence/game-2026-09-19-121730-prison-view/console.log.txt", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "ordinary local game startup only; no player input, full escape, multiplayer or FPS proof", + "local_participant_verified": true, + "scenario_header_verified": true, + "verified_header_projects": [ + "chat" + ], + "game_module_defines": [ + "PLATFORM_WINDOWS,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", + "PLATFORM_WINDOWS,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" + ], + "workbench_undefined": true, + "normal_mission_ready": true, + "unexpected_smoke_fixture": false, + "failed": false, + "ready": true, + "control_metadata_consistent": true +} diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/rereintroduced-hq.log.txt b/docs/evidence/game-2026-09-19-121730-prison-view/rereintroduced-hq.log.txt new file mode 100644 index 0000000..12c3af6 --- /dev/null +++ b/docs/evidence/game-2026-09-19-121730-prison-view/rereintroduced-hq.log.txt @@ -0,0 +1,10 @@ +#1 t=6.9s M0 REGISTER group 1 [session=1789813071-1] +#2 t=6.9s M0 MORTAR DEPLOY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; authored gun and four-person crew; finite ammunition initialization pending [session=1789813071-1] +#3 t=7.6s M0 COURIER READY trip=0 state=1 delivered=0; 12 distinct original HE shells physically confirmed in existing western cache [session=1789813071-1] +#4 t=9s M0 REGISTER group 2 [session=1789813071-1] +#5 t=9s M0 REGISTER group 3 [session=1789813071-1] +#6 t=9s M0 REGISTER group 4 [session=1789813071-1] +#7 t=9s M0 REGISTER group 5 [session=1789813071-1] +#8 t=9s M0 REGISTER group 6 [session=1789813071-1] +#9 t=9s M0 REGISTER group 7 [session=1789813071-1] +#10 t=18.8s M0 MORTAR CREW READY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; four original physical members, one manpack, 27 confirmed HE; new shell requests=27; allocation permanently closed [session=1789813071-1] diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/runner.json.txt b/docs/evidence/game-2026-09-19-121730-prison-view/runner.json.txt new file mode 100644 index 0000000..12f8206 --- /dev/null +++ b/docs/evidence/game-2026-09-19-121730-prison-view/runner.json.txt @@ -0,0 +1,27 @@ +{ + "stopped_unix": 1789813096.1077302, + "console_sha256": "64f00ef008c6f154a89a7668e7a5d3084f4a25268bb4bc2ebc5ebbcfe67d1dc8", + "end_source_sha256": "8d0af1ad31eb2d9c571fa931b81b19a604033c4c8d46e5c159d157ffff29ae24", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "e417810c-bebe-4197-9205-2bbf0e497035", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "8d0af1ad31eb2d9c571fa931b81b19a604033c4c8d46e5c159d157ffff29ae24", + "started_unix": 1789813048.9269235, + "result": "game-started", + "session": "/tmp/erri-game-profile/logs/logs_2026-09-19_12-17-30", + "project": "chat", + "cleanup_confirmed": true, + "runner_error": null, + "failure_grace_seconds": 0, + "failure_observed_during_polling": false, + "first_failure_elapsed_seconds": null, + "executable": "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/ArmaReforgerSteam.exe", + "dedicated_server": false, + "display": "headless Gamescope", + "audio": "-noSound plus own silent sink", + "control_only": false, + "source_manifest_scope": "successor addon sources", + "scope": "ordinary local game startup only; no player input, full escape, multiplayer or FPS proof" +} diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/script.log.txt b/docs/evidence/game-2026-09-19-121730-prison-view/script.log.txt new file mode 100644 index 0000000..dc0b1d2 --- /dev/null +++ b/docs/evidence/game-2026-09-19-121730-prison-view/script.log.txt @@ -0,0 +1,231 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-17-30\script.log started at 2026-09-19 12:17:32 (2026-09-19 10:17:32 UTC) + +12:17:32.561 SCRIPT : SCRIPT : Initializing scripts +12:17:32.561 SCRIPT : SCRIPT : ScriptProjectManager init +12:17:32.699 SCRIPT : SCRIPT : Compiling GameLib scripts +12:17:32.752 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 666K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:17:32.753 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:17:32.753 SCRIPT : SCRIPT : Compiling Game scripts +12:17:33.872 SCRIPT : Compiling Game scripts +12:17:33.872 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:17:33.872 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:17:34.103 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:34.113 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:17:34.139 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:17:34.233 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:17:34.233 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:17:34.233 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:17:34.233 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:17:34.265 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:17:34.309 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:17:34.320 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:17:34.320 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:17:34.321 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:17:34.363 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:34.363 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:34.364 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:17:34.364 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:17:34.416 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:17:34.532 SCRIPT : Module: Game; loaded 5777x files; 11194x classes; used 26983K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 59fec84d +12:17:35.255 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +12:17:35.265 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +12:17:35.265 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +12:17:35.265 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +12:17:35.265 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +12:17:35.536 SCRIPT : ERR ORDINARY: requesting header project=chat +12:17:36.646 SCRIPT : SCRIPT : Compiling GameLib scripts +12:17:36.698 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 664K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:17:36.699 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:17:36.699 SCRIPT : SCRIPT : Compiling Game scripts +12:17:37.806 SCRIPT : Compiling Game scripts +12:17:37.806 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:17:37.806 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:17:38.057 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:38.069 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:17:38.097 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:17:38.200 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:17:38.200 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:17:38.200 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:17:38.200 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:17:38.236 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:17:38.281 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:17:38.293 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:17:38.293 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:17:38.295 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:17:38.340 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:38.340 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:17:38.342 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:17:38.342 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:17:38.397 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:17:38.511 SCRIPT : Module: Game; loaded 5777x files; 11194x classes; used 26958K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 59fec84d +12:17:51.149 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:17:52.131 SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems +12:17:52.136 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:17:52.136 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:17:52.137 SCRIPT (W): Can't open config file "" +12:17:52.137 SCRIPT (W): Cannot update game blocklist. Backend is offline. +12:17:52.138 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:17:52.138 SCRIPT (W): Slot_Chat Has no Content! +12:17:52.138 SCRIPT (W): Slot_VON Has no Content! +12:17:52.138 SCRIPT (W): Slot_AvailableActions Has no Content! +12:17:52.138 SCRIPT (W): Slot_Vehicle Has no Content! +12:17:52.138 SCRIPT (W): Slot_GameVersion Has no Content! +12:17:52.138 SCRIPT (W): Slot_Notifications Has no Content! +12:17:52.138 SCRIPT (W): Slot_Hints Has no Content! +12:17:52.145 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +12:17:52.145 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +12:17:52.145 SCRIPT : Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged. +12:17:52.145 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:17:52.155 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:17:52.165 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:17:52.316 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:17:53.633 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:17:53.647 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:17:53.648 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:17:53.674 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:17:53.676 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:17:53.727 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:17:53.727 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:17:53.733 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:17:53.772 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:17:53.772 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:17:53.774 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:17:53.774 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:17:53.778 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:17:53.780 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:17:53.780 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:17:53.781 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:17:53.781 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:17:53.781 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:17:53.781 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:17:53.781 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:17:53.781 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:17:53.781 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:17:53.781 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:17:53.781 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:17:53.781 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:17:53.781 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:17:53.781 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:17:53.781 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:17:53.781 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:17:53.781 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:17:53.781 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:17:53.781 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:17:53.781 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:17:53.781 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:17:54.690 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:17:54.690 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:17:54.690 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:17:54.690 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:17:54.963 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.06,63.5116,7499.69> up=0.995284 +12:17:54.963 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.151315 angularSpeed=0.099362 +12:17:54.963 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.3 +12:17:54.963 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.03,63.6074,7501.96> +12:17:54.963 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.03,63.3074,7501.96> terrainY=63.3178 tireTerrainGap=-0.010437 +12:17:54.963 SCRIPT : ERR GEAR SUPPORT: center=<7012.03,63.6074,7501.96> radius=0.3 bottom=<7012.03,63.3074,7501.96> fraction=0.407075 normal=<0.0154358,0.987894,0.154358> self=0 dynamic=0 supported=1 gap=-0.0104446 +12:17:54.963 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.87,64.6095,7497.69> +12:17:54.963 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.87,64.1595,7497.69> terrainY=64.1572 tireTerrainGap=0.00228119 +12:17:54.963 SCRIPT : ERR GEAR SUPPORT: center=<7009.87,64.6095,7497.69> radius=0.45 bottom=<7009.87,64.1595,7497.69> fraction=0.464947 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00228882 +12:17:54.963 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2575,7497.76> +12:17:54.963 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8075,7497.76> terrainY=63.8174 tireTerrainGap=-0.00993729 +12:17:54.963 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2575,7497.76> radius=0.45 bottom=<7014.42,63.8075,7497.76> fraction=0.409444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00992203 +12:17:54.963 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:17:55.208 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:17:55.208 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:17:55.208 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:17:55.208 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:17:55.763 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:17:55.764 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:17:55.764 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:17:56.030 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5432,7499.72> up=0.994193 +12:17:56.030 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0742717 angularSpeed=0.0608579 +12:17:56.030 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:17:56.030 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6158,7501.99> +12:17:56.030 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3158,7501.99> terrainY=63.3138 tireTerrainGap=0.00202942 +12:17:56.030 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6158,7501.99> radius=0.3 bottom=<7012.06,63.3158,7501.99> fraction=0.463866 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00205231 +12:17:56.030 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6067,7497.71> +12:17:56.030 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1567,7497.71> terrainY=64.1494 tireTerrainGap=0.00727844 +12:17:56.030 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6067,7497.71> radius=0.45 bottom=<7009.92,64.1567,7497.71> fraction=0.487381 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00722504 +12:17:56.030 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2658,7497.79> +12:17:56.030 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8158,7497.79> terrainY=63.8152 tireTerrainGap=0.000514984 +12:17:56.030 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2658,7497.79> radius=0.45 bottom=<7014.46,63.8158,7497.79> fraction=0.456667 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.000465393 +12:17:56.030 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:17:56.030 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:17:56.298 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:17:56.298 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:17:56.298 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:17:56.298 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:17:56.830 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:17:56.830 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:17:56.830 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:17:56.830 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:17:57.097 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.528,7499.75> up=0.994198 +12:17:57.097 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0905053 angularSpeed=0.0382754 +12:17:57.097 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:17:57.097 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6106,7502.02> +12:17:57.097 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3106,7502.02> terrainY=63.3108 tireTerrainGap=-0.000183105 +12:17:57.097 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6106,7502.02> radius=0.3 bottom=<7012.07,63.3106,7502.02> fraction=0.45366 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=-0.00019455 +12:17:57.097 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.596,7497.73> +12:17:57.097 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.146,7497.73> terrainY=64.1425 tireTerrainGap=0.00357056 +12:17:57.097 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.596,7497.73> radius=0.45 bottom=<7009.97,64.146,7497.73> fraction=0.47138 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00370789 +12:17:57.097 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2605,7497.84> +12:17:57.097 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8105,7497.84> terrainY=63.8123 tireTerrainGap=-0.00175095 +12:17:57.097 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2605,7497.84> radius=0.45 bottom=<7014.51,63.8105,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +12:17:57.097 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:17:57.363 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:17:57.363 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:17:57.363 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:17:57.364 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:17:57.897 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:17:57.897 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:17:57.897 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:17:57.897 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:17:58.163 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5289,7499.75> up=0.994119 +12:17:58.163 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:17:58.163 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:17:58.163 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6118,7502.03> +12:17:58.163 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3118,7502.03> terrainY=63.3104 tireTerrainGap=0.00144958 +12:17:58.163 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6118,7502.03> radius=0.3 bottom=<7012.07,63.3118,7502.03> fraction=0.460896 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00139618 +12:17:58.163 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5941,7497.73> +12:17:58.163 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1441,7497.73> terrainY=64.1416 tireTerrainGap=0.00247955 +12:17:58.163 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5941,7497.73> radius=0.45 bottom=<7009.97,64.1441,7497.73> fraction=0.466068 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00254059 +12:17:58.163 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.26,7497.84> +12:17:58.163 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.81,7497.84> terrainY=63.8119 tireTerrainGap=-0.0018959 +12:17:58.163 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.26,7497.84> radius=0.45 bottom=<7014.51,63.81,7497.84> fraction=0.445833 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00191498 +12:17:58.163 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:17:58.430 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:17:58.430 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:17:58.430 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:17:58.430 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:17:58.963 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:17:58.963 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:17:58.963 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:17:58.963 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:17:59.230 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5289,7499.75> up=0.994119 +12:17:59.230 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:17:59.230 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:17:59.230 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6118,7502.03> +12:17:59.230 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3118,7502.03> terrainY=63.3104 tireTerrainGap=0.00144958 +12:17:59.230 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6118,7502.03> radius=0.3 bottom=<7012.07,63.3118,7502.03> fraction=0.460896 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00139618 +12:17:59.230 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5941,7497.73> +12:17:59.230 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1441,7497.73> terrainY=64.1416 tireTerrainGap=0.00247955 +12:17:59.230 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5941,7497.73> radius=0.45 bottom=<7009.97,64.1441,7497.73> fraction=0.466068 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00254059 +12:17:59.230 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.26,7497.84> +12:17:59.230 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.81,7497.84> terrainY=63.8119 tireTerrainGap=-0.0018959 +12:17:59.230 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.26,7497.84> radius=0.45 bottom=<7014.51,63.81,7497.84> fraction=0.445833 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00191498 +12:17:59.230 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:17:59.497 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:17:59.498 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:17:59.509 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:17:59.510 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:17:59.510 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:17:59.510 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:17:59.510 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:17:59.510 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:17:59.510 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:18:00.165 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:18:00.201 SCRIPT : ERR ORDINARY: local participant verified project=chat phase=prison +12:18:00.201 SCRIPT : ERR ORDINARY: optional prisoner screenshot queued after finalized admission +12:18:00.201 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +12:18:03.248 SCRIPT : ERR ORDINARY: optional prisoner screenshot requested without camera or input changes diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/source-provenance.json b/docs/evidence/game-2026-09-19-121730-prison-view/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/game-2026-09-19-121730-prison-view/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/game-2026-09-19-121730-prison-view/source-sha256.json b/docs/evidence/game-2026-09-19-121730-prison-view/source-sha256.json new file mode 100644 index 0000000..08c8d59 --- /dev/null +++ b/docs/evidence/game-2026-09-19-121730-prison-view/source-sha256.json @@ -0,0 +1,182 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "34f8e1730824850ea64f43dcd442e753d079a9795b3b9246813070ed36bb8430", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "1503db1441d8cd7a4f0b45c27ba9623b9fa39f0f81016e180bd2aa1379e1f42a", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "d4fe3cffaa188244db254b197a0165ae18f2b5b808b54e20ce888359147940fd", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "3ff1c9e9191f20769fed1e4d7a1363e4109512af76e02aa5e1e6a8766b711951", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/console.log.txt b/docs/evidence/game-2026-09-19-122353-yard-candidate/console.log.txt new file mode 100644 index 0000000..a97b8cb --- /dev/null +++ b/docs/evidence/game-2026-09-19-122353-yard-candidate/console.log.txt @@ -0,0 +1,491 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-23-53\console.log started at 2026-09-19 12:23:53 (2026-09-19 10:23:53 UTC) + +12:23:53.109 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-23-53' to filesystem under name logs +12:23:53.109 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-game-profile\profile' to filesystem under name profile +12:23:53.109 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger\' +12:23:53.110 ENGINE : Initializing engine, version 192142 +12:23:53.110 ENGINE : CLI Params: -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/addons -addons FA804F411BDDF2C6 -profile Z:/tmp/erri-game-profile -errOrdinaryScenario chat -noSplash -errOrdinaryScreenshot 1 -noBackend -noSound -noThrow -disableCrashReporter -logconsole +12:23:53.119 ENGINE : Addon dirs: +12:23:53.119 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +12:23:53.119 ENGINE : dir: './addons' +12:23:53.119 ENGINE : dir: 'Z:/tmp/erri-game-profile/addons' +12:23:53.119 ENGINE : Available addons: +12:23:53.119 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:23:53.119 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:23:53.119 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:23:53.119 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:23:53.119 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:23:53.119 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +12:23:53.119 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +12:23:53.119 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +12:23:53.119 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +12:23:53.119 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +12:23:53.120 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +12:23:53.120 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +12:23:53.242 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +12:23:53.246 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +12:23:53.246 ENGINE : CPU vendor : AuthenticAMD +12:23:53.246 ENGINE : CPU type : 2 +12:23:53.246 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +12:23:53.246 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +12:23:53.246 ENGINE : CPU count logical : 16 +12:23:53.246 ENGINE : CPU count physical : 8 +12:23:53.246 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +12:23:53.246 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:23:53.246 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:23:53.246 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:23:53.247 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:23:53.247 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:23:53.247 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +12:23:53.387 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +12:23:53.388 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-game-profile\profile/resourceDatabase.rdb) +12:23:53.388 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-23-53/resourceDatabase.rdb) +12:23:53.532 ENGINE : GameProject load +12:23:53.532 ENGINE : Loaded addons: +12:23:53.532 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +12:23:53.532 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +12:23:53.532 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:23:53.532 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:23:53.532 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:23:53.532 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:23:53.532 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:23:53.535 ENGINE : Loading custom engine user config '$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf' +12:23:53.535 INIT : GameProject engine user settings load @"$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf" +12:23:53.535 ENGINE : Engine user settings config loaded +12:23:53.535 PROFILING : Settings changed took: 0.001500 ms +12:23:53.535 ENGINE : Locale info: system en-US (English), user en-US (English) +12:23:53.665 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +12:23:53.667 RENDER : Basic screen setup: +12:23:53.667 RENDER : Back buffer width x height: 1280x720 +12:23:53.667 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +12:23:53.667 RENDER : MSAA : none +12:23:53.683 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +12:23:53.683 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +12:23:53.683 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +12:23:53.683 RENDER : * core clocks 2720 MHz, memory 1124 MHz +12:23:53.683 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +12:23:53.683 RENDER : AMD AGS correctly initialized +12:23:53.683 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +12:23:53.683 RENDER : Detected output devices: +12:23:53.683 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +12:23:53.683 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +12:23:53.683 RENDER : Concurrent frames limit 2 +12:23:53.775 RENDER : DX12 device successfully created by AMD AGS library +12:23:53.775 RENDER : * user markers not supported in this version AMD SW +12:23:53.775 RENDER : Graphics device features +12:23:53.775 RENDER : Needed: +12:23:53.775 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +12:23:53.775 RENDER : Optional: +12:23:53.775 RENDER : * Allow tearing (VSYNC) : 1 +12:23:53.775 RENDER : * 16 bits : 1 +12:23:53.775 RENDER : * Resource heap tier : 3 +12:23:53.775 RENDER : * Persistent heaps (DRED) : 1 +12:23:53.775 RENDER : * DRED 1.2 is supported by compiler +12:23:53.797 RENDER : Main RT format setup. +12:23:53.797 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +12:23:53.797 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +12:23:53.802 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7 +12:23:53.828 PROFILING : Settings changed took: 1.221500 ms +12:23:53.835 RENDER : RENDER : Reload shaders +12:23:53.835 RENDER : Enfusion shader version 13 +12:23:53.835 INIT : INIT : ShaderListReload +12:23:53.835 PROFILING : ShaderListReload took: 0.000400 ms +12:23:55.043 RENDER : Loaded 3383 newer shader binaries +12:23:55.043 PROFILING : Reload shaders took: 1208.369600 ms +12:23:55.046 ENGINE : Initializing inputs. +12:23:55.058 NETWORK : Initializing networking. +12:23:55.058 NETWORK : Using new GameRplScheduler. +12:23:55.059 SCRIPT : SCRIPT : Initializing scripts +12:23:55.059 SCRIPT : SCRIPT : ScriptProjectManager init +12:23:55.059 PROFILING : ScriptProjectManager init took: 0.009400 ms +12:23:55.142 PROFILING : Initializing scripts took: 82.604500 ms +12:23:55.142 BACKEND : Backend Services are disabled. +12:23:55.142 ENGINE : Enfusion engine successfully created. +12:23:55.149 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:23:55.172 GUI : Using default language (en_us) +12:23:55.172 GUI : Loading 'en_us' localization file. +12:23:55.172 INIT : INIT : Loading StringTable +12:23:55.196 PROFILING : Loading StringTable took: 24.244500 ms +12:23:55.196 SCRIPT : SCRIPT : Compiling GameLib scripts +12:23:55.249 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 666K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:23:55.250 PROFILING : Compiling GameLib scripts took: 53.551900 ms +12:23:55.250 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:23:55.250 SCRIPT : SCRIPT : Compiling Game scripts +12:23:56.410 SCRIPT : Compiling Game scripts +12:23:56.410 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:23:56.410 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:23:56.654 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:23:56.665 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:23:56.691 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:23:56.790 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:23:56.790 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:23:56.790 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:23:56.790 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:23:56.822 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:23:56.868 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:23:56.881 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:23:56.881 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:23:56.882 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:23:56.924 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:23:56.924 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:23:56.926 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:23:56.926 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:23:56.979 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:23:57.099 SCRIPT : Module: Game; loaded 5779x files; 11201x classes; used 27027K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 228d8bca +12:23:57.128 PROFILING : Compiling Game scripts took: 1877.820700 ms +12:23:57.128 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:23:57.170 ENGINE : Game successfully created. +12:23:57.235 PLATFORM : Save data from container 'settings' have been loaded +12:23:57.335 PLATFORM : Save data from container 'sessions' have been loaded +12:23:57.736 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +12:23:57.736 ENGINE : Game user settings config loaded +12:23:57.834 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission 'worlds/MainMenuWorld/MainMenuWorld.ent'. +12:23:57.835 WORLD : WORLD : Entities load 'worlds/MainMenuWorld/MainMenuWorld.ent' +12:23:57.836 PROFILING : Entities load took: 1.202300 ms +12:23:57.839 WORLD : WORLD : Game::LoadEntities +12:23:57.839 WORLD : WORLD : Initializing world systems +12:23:57.840 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +12:23:57.840 WORLD : WORLD : CreateEntities +12:23:57.840 WORLD : WORLD : CreateEntities +12:23:57.840 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:23:57.856 RESOURCES : Loaded mission headers from 7 addon(s)! +12:23:57.856 PROFILING : NotifyBeforeEntitiesCreated took: 15.834000 ms +12:23:57.856 WORLD : WORLD : Wait for preloading data +12:23:57.856 PROFILING : Wait for preloading data took: 0.001100 ms +12:23:57.857 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:23:57.857 PROFILING : NotifyBeforeEntitiesInitialized took: 0.087400 ms +12:23:57.857 WORLD : InitEntities 'world' +12:23:57.857 ENTITY : Init entity @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> +12:23:57.857 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +12:23:57.871 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +12:23:57.871 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +12:23:57.871 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +12:23:57.871 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +12:23:57.871 WORLD : WORLD : NotifyEntitiesInitialized +12:23:57.871 DEFAULT : DEFAULT : WorldVolumesCollection +12:23:57.871 PROFILING : WorldVolumesCollection took: 0.007400 ms +12:23:57.871 PROFILING : NotifyEntitiesInitialized took: 0.109200 ms +12:23:57.871 PROFILING : CreateEntities took: 30.631000 ms +12:23:57.871 PROFILING : CreateEntities took: 30.640800 ms +12:23:57.871 WORLD : WORLD : EOnActivate +12:23:57.871 PROFILING : EOnActivate took: 0.003200 ms +12:23:57.871 PROFILING : Game::LoadEntities took: 32.808400 ms +12:23:58.033 DEFAULT : Entered main menu. +12:23:58.132 DEFAULT (W): No GameMode present in the world, using fallback logic! +12:23:58.133 SCRIPT : ERR ORDINARY: requesting header project=chat +12:23:58.658 ENGINE : Game destroyed. +12:23:58.794 ENGINE : Addon dirs: +12:23:58.794 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +12:23:58.794 ENGINE : dir: './addons' +12:23:58.794 ENGINE : dir: 'Z:/tmp/erri-game-profile/addons' +12:23:58.794 ENGINE : dir: '$profile:../addons/' +12:23:58.794 ENGINE : Available addons: +12:23:58.794 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:23:58.794 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:23:58.794 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:23:58.794 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:23:58.794 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:23:58.794 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +12:23:58.795 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +12:23:58.795 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +12:23:58.795 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +12:23:58.795 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +12:23:58.796 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +12:23:58.796 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +12:23:58.898 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +12:23:58.901 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +12:23:58.901 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:23:58.901 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:23:58.902 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:23:58.902 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:23:58.902 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:23:58.902 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +12:23:59.022 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +12:23:59.023 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-game-profile\profile/resourceDatabase.rdb) +12:23:59.023 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-23-53/resourceDatabase.rdb) +12:23:59.166 ENGINE : GameProject load +12:23:59.166 ENGINE : Loaded addons: +12:23:59.166 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +12:23:59.166 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +12:23:59.166 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:23:59.166 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:23:59.166 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:23:59.166 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:23:59.166 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:23:59.186 GUI : Using default language (en_us) +12:23:59.186 GUI : Loading 'en_us' localization file. +12:23:59.186 INIT : INIT : Loading StringTable +12:23:59.206 PROFILING : Loading StringTable took: 19.963600 ms +12:23:59.207 SCRIPT : SCRIPT : Compiling GameLib scripts +12:23:59.258 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 664K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:23:59.259 PROFILING : Compiling GameLib scripts took: 52.556900 ms +12:23:59.259 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:23:59.259 SCRIPT : SCRIPT : Compiling Game scripts +12:24:00.368 SCRIPT : Compiling Game scripts +12:24:00.368 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:24:00.368 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:24:00.611 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:24:00.623 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:24:00.650 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:24:00.759 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:24:00.759 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:24:00.759 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:24:00.759 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:24:00.791 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:24:00.834 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:24:00.846 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:24:00.846 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:24:00.847 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:24:00.891 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:24:00.891 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:24:00.893 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:24:00.893 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:24:00.945 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:24:01.050 SCRIPT : Module: Game; loaded 5779x files; 11201x classes; used 27003K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 228d8bca +12:24:01.076 PROFILING : Compiling Game scripts took: 1816.648200 ms +12:24:01.076 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:24:01.096 ENGINE : Game successfully created. +12:24:01.119 PLATFORM : Save data from container 'settings' have been loaded +12:24:01.218 PLATFORM : Save data from container 'sessions' have been loaded +12:24:01.218 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +12:24:01.218 ENGINE : Game user settings config loaded +12:24:01.318 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{C1E20667DCE324ED}Missions/ERR_Everon.conf'. +12:24:01.319 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +12:24:02.290 PROFILING : Entities load took: 970.845700 ms +12:24:02.293 WORLD : WORLD : Game::LoadEntities +12:24:02.293 WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" +12:24:02.294 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +12:24:02.294 WORLD : WORLD : CreateEntities +12:24:02.294 WORLD : WORLD : CreateEntities +12:24:02.294 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:24:02.308 RESOURCES : Loaded mission headers from 7 addon(s)! +12:24:02.308 PROFILING : NotifyBeforeEntitiesCreated took: 14.522000 ms +12:24:02.308 WORLD : WORLD : Wait for preloading data +12:24:02.932 PROFILING : Wait for preloading data took: 623.357000 ms +12:24:03.051 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +12:24:03.051 PROFILING : PROFILING : Terrain load +12:24:05.006 PROFILING : Terrain load took: 1954.516000 ms +12:24:07.623 WORLD : Game::LoadEntities +12:24:07.623 WORLD : CreateEntities +12:24:07.623 WORLD : CreateEntities +12:24:07.623 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" +12:24:07.623 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:24:07.623 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:24:13.323 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:24:13.323 PROFILING : NotifyBeforeEntitiesInitialized took: 0.045000 ms +12:24:13.897 WORLD : InitEntities 'world' +12:24:13.897 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:24:13.897 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:24:13.915 WORLD : WORLD : NotifyEntitiesInitialized +12:24:13.915 TERRAIN : TERRAIN : Initializing road networks... +12:24:13.918 PROFILING : Initializing road networks... took: 3.425000 ms +12:24:13.918 DEFAULT : DEFAULT : WorldVolumesCollection +12:24:13.976 PROFILING : WorldVolumesCollection took: 57.463300 ms +12:24:13.976 INIT : INIT : SoundWorldInit +12:24:13.989 PROFILING : SoundWorldInit took: 13.475600 ms +12:24:13.989 PROFILING : NotifyEntitiesInitialized took: 74.546300 ms +12:24:13.989 PROFILING : CreateEntities took: 11695.241000 ms +12:24:13.990 PROFILING : CreateEntities took: 11695.436400 ms +12:24:13.990 WORLD : WORLD : Wait for preloading data around camera +12:24:14.241 PROFILING : Wait for preloading data around camera took: 250.340900 ms +12:24:14.241 WORLD : WORLD : EOnActivate +12:24:14.267 PROFILING : EOnActivate took: 26.436100 ms +12:24:14.267 PROFILING : Game::LoadEntities took: 11974.616200 ms +12:24:14.671 DEFAULT : Entered offline game state. +12:24:14.776 SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems +12:24:14.776 NETWORK : Player connected: connectionID=2147483646 +12:24:14.776 NETWORK : ### Connecting player: connectionID=2147483646, Name= +12:24:14.776 NETWORK : ### Creating player: PlayerId=1, Name=jakub +12:24:14.780 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:24:14.780 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:24:14.780 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:24:14.780 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:24:14.780 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:24:14.781 SCRIPT (W): Can't open config file "" +12:24:14.782 SCRIPT (W): Cannot update game blocklist. Backend is offline. +12:24:14.782 WORLD : InitEntities 'world' +12:24:14.782 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:24:14.782 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:24:14.782 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:24:14.782 SCRIPT (W): Slot_Chat Has no Content! +12:24:14.782 SCRIPT (W): Slot_VON Has no Content! +12:24:14.782 SCRIPT (W): Slot_AvailableActions Has no Content! +12:24:14.782 SCRIPT (W): Slot_Vehicle Has no Content! +12:24:14.782 SCRIPT (W): Slot_GameVersion Has no Content! +12:24:14.782 SCRIPT (W): Slot_Notifications Has no Content! +12:24:14.782 SCRIPT (W): Slot_Hints Has no Content! +12:24:14.788 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +12:24:14.788 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +12:24:14.788 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +12:24:14.788 SCRIPT : Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged. +12:24:14.788 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:24:14.788 NETWORK : Players connecting: 0 +12:24:14.788 NETWORK : Players connected: 1 / 1 +12:24:14.800 WORLD : Frame start +12:24:14.800 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:24:14.809 WORLD : UpdateEntities +12:24:14.809 WORLD : Frame +12:24:14.809 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:24:14.973 WORLD : UpdateEntities +12:24:14.973 WORLD : PostFrame +12:24:14.973 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:24:14.973 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:24:15.013 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:24:15.013 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:24:15.013 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:24:15.013 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +12:24:15.147 RENDER : RENDER : ObjectsHeightMap::Build +12:24:15.147 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +12:24:15.277 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 130.573200 ms +12:24:15.285 PROFILING : ObjectsHeightMap::Build took: 138.321400 ms +12:24:16.269 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:24:16.282 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:24:16.283 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:24:16.307 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:24:16.309 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:24:16.353 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:24:16.353 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:24:16.360 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:24:16.398 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:24:16.398 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:24:16.399 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:24:16.399 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:24:16.403 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:24:16.404 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:24:16.404 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:24:16.405 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:24:16.405 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:24:16.405 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:24:16.405 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:24:16.405 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:24:16.405 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:24:16.405 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:24:16.405 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:24:16.405 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:24:16.405 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:24:16.405 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:24:16.405 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:24:16.405 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:24:16.405 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:24:16.405 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:24:16.405 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:24:16.405 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:24:16.405 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:24:16.405 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:24:17.318 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:24:17.318 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:24:17.318 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:24:17.318 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:24:17.600 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.06,63.5103,7499.69> up=0.99519 +12:24:17.600 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.116481 angularSpeed=0.0835165 +12:24:17.600 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.3 +12:24:17.600 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.03,63.6097,7501.96> +12:24:17.600 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.03,63.3097,7501.96> terrainY=63.318 tireTerrainGap=-0.00827789 +12:24:17.600 SCRIPT : ERR GEAR SUPPORT: center=<7012.03,63.6097,7501.96> radius=0.3 bottom=<7012.03,63.3097,7501.96> fraction=0.416854 normal=<0.0154358,0.987894,0.154358> self=0 dynamic=0 supported=1 gap=-0.00829315 +12:24:17.600 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.87,64.612,7497.69> +12:24:17.600 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.87,64.162,7497.69> terrainY=64.1573 tireTerrainGap=0.00468445 +12:24:17.600 SCRIPT : ERR GEAR SUPPORT: center=<7009.87,64.612,7497.69> radius=0.45 bottom=<7009.87,64.162,7497.69> fraction=0.47587 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00469208 +12:24:17.600 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2592,7497.76> +12:24:17.600 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8092,7497.76> terrainY=63.8174 tireTerrainGap=-0.00822067 +12:24:17.600 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2592,7497.76> radius=0.45 bottom=<7014.42,63.8092,7497.76> fraction=0.417106 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00823593 +12:24:17.600 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:24:17.845 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:24:17.845 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:24:17.845 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:24:17.845 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:24:18.399 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:24:18.400 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:24:18.400 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:24:18.666 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5432,7499.72> up=0.994161 +12:24:18.666 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0826066 angularSpeed=0.0524362 +12:24:18.666 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:24:18.666 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6156,7501.99> +12:24:18.666 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3156,7501.99> terrainY=63.3139 tireTerrainGap=0.00172424 +12:24:18.666 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6156,7501.99> radius=0.3 bottom=<7012.06,63.3156,7501.99> fraction=0.462745 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00180435 +12:24:18.666 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6057,7497.71> +12:24:18.666 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1557,7497.71> terrainY=64.1494 tireTerrainGap=0.00632477 +12:24:18.666 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6057,7497.71> radius=0.45 bottom=<7009.92,64.1557,7497.71> fraction=0.483455 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00636292 +12:24:18.666 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2651,7497.79> +12:24:18.666 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8151,7497.79> terrainY=63.8153 tireTerrainGap=-0.000171661 +12:24:18.666 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2651,7497.79> radius=0.45 bottom=<7014.46,63.8151,7497.79> fraction=0.453889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000144958 +12:24:18.666 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:24:18.934 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:24:18.934 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:24:18.934 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:24:18.934 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:24:19.199 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:24:19.467 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:24:19.467 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:24:19.467 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:24:19.467 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:24:19.733 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.528,7499.75> up=0.994187 +12:24:19.733 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0947671 angularSpeed=0.0470851 +12:24:19.733 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:24:19.733 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6111,7502.02> +12:24:19.733 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3111,7502.02> terrainY=63.3108 tireTerrainGap=0.000350952 +12:24:19.733 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6111,7502.02> radius=0.3 bottom=<7012.07,63.3111,7502.02> fraction=0.456165 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000354767 +12:24:19.733 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5962,7497.73> +12:24:19.733 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1462,7497.73> terrainY=64.1424 tireTerrainGap=0.00376892 +12:24:19.733 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5962,7497.73> radius=0.45 bottom=<7009.97,64.1462,7497.73> fraction=0.471677 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00376892 +12:24:19.733 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2604,7497.84> +12:24:19.733 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8104,7497.84> terrainY=63.8122 tireTerrainGap=-0.00175095 +12:24:19.733 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2604,7497.84> radius=0.45 bottom=<7014.51,63.8104,7497.84> fraction=0.446543 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00175858 +12:24:19.733 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:24:20.000 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:24:20.000 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:24:20.000 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:24:20.000 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:24:20.533 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:24:20.533 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:24:20.533 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:24:20.533 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:24:20.799 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.529,7499.76> up=0.994199 +12:24:20.799 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:24:20.799 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:24:20.799 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6106,7502.03> +12:24:20.800 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3106,7502.03> terrainY=63.3103 tireTerrainGap=0.000263214 +12:24:20.800 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6106,7502.03> radius=0.3 bottom=<7012.08,63.3106,7502.03> fraction=0.45576 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000267029 +12:24:20.800 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.73> +12:24:20.800 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.73> terrainY=64.1417 tireTerrainGap=0.00302887 +12:24:20.800 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.73> radius=0.45 bottom=<7009.97,64.1448,7497.73> fraction=0.46861 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00309753 +12:24:20.800 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:24:20.800 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00177383 +12:24:20.800 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +12:24:20.800 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:24:21.066 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:24:21.067 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:24:21.067 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:24:21.067 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:24:21.600 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:24:21.600 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:24:21.600 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:24:21.600 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:24:21.866 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.529,7499.76> up=0.994199 +12:24:21.866 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:24:21.866 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:24:21.866 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6106,7502.03> +12:24:21.866 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3106,7502.03> terrainY=63.3103 tireTerrainGap=0.000263214 +12:24:21.866 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6106,7502.03> radius=0.3 bottom=<7012.08,63.3106,7502.03> fraction=0.45576 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000267029 +12:24:21.866 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.73> +12:24:21.866 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.73> terrainY=64.1417 tireTerrainGap=0.00302887 +12:24:21.866 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.73> radius=0.45 bottom=<7009.97,64.1448,7497.73> fraction=0.46861 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00309753 +12:24:21.866 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:24:21.866 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00177383 +12:24:21.866 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +12:24:21.866 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:24:22.133 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:24:22.134 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:24:22.146 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:24:22.147 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:24:22.147 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:24:22.147 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:24:22.147 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:24:22.147 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:24:22.147 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:24:22.803 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:24:22.844 SCRIPT : ERR ORDINARY: local participant verified project=chat phase=prison +12:24:22.844 SCRIPT : ERR ORDINARY: optional prisoner screenshot queued after finalized admission +12:24:22.844 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +12:24:25.884 ENGINE : Screenshot successfully saved into $logs:err-ordinary-prison (1280x720) +12:24:25.884 SCRIPT : ERR ORDINARY: optional prisoner screenshot requested without camera or input changes diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/err-ordinary-prison.bmp b/docs/evidence/game-2026-09-19-122353-yard-candidate/err-ordinary-prison.bmp new file mode 100644 index 0000000..09f4dc3 Binary files /dev/null and b/docs/evidence/game-2026-09-19-122353-yard-candidate/err-ordinary-prison.bmp differ diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/error.log.txt b/docs/evidence/game-2026-09-19-122353-yard-candidate/error.log.txt new file mode 100644 index 0000000..c25c664 --- /dev/null +++ b/docs/evidence/game-2026-09-19-122353-yard-candidate/error.log.txt @@ -0,0 +1,81 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-23-53\error.log started at 2026-09-19 12:23:55 (2026-09-19 10:23:55 UTC) + +12:23:55.149 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:23:56.410 SCRIPT : Compiling Game scripts +12:23:56.410 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:23:56.410 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:23:56.654 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:23:56.665 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:23:56.691 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:23:56.790 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:23:56.790 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:23:56.790 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:23:56.790 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:23:56.822 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:23:56.868 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:23:56.881 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:23:56.881 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:23:56.882 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:23:56.924 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:23:56.924 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:23:56.926 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:23:56.926 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:23:56.979 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:23:58.132 DEFAULT (W): No GameMode present in the world, using fallback logic! +12:24:00.368 SCRIPT : Compiling Game scripts +12:24:00.368 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:24:00.368 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:24:00.611 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:24:00.623 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:24:00.650 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:24:00.759 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:24:00.759 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:24:00.759 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:24:00.759 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:24:00.791 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:24:00.834 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:24:00.846 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:24:00.846 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:24:00.847 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:24:00.891 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:24:00.891 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:24:00.893 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:24:00.893 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:24:00.945 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:24:07.623 WORLD : Game::LoadEntities +12:24:07.623 WORLD : CreateEntities +12:24:07.623 WORLD : CreateEntities +12:24:07.623 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" +12:24:07.623 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:24:07.623 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:24:13.897 WORLD : InitEntities 'world' +12:24:13.897 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:24:13.897 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:24:14.780 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:24:14.780 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:24:14.780 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:24:14.780 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:24:14.780 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:24:14.781 SCRIPT (W): Can't open config file "" +12:24:14.782 SCRIPT (W): Cannot update game blocklist. Backend is offline. +12:24:14.782 WORLD : InitEntities 'world' +12:24:14.782 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:24:14.782 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:24:14.782 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:24:14.782 SCRIPT (W): Slot_Chat Has no Content! +12:24:14.782 SCRIPT (W): Slot_VON Has no Content! +12:24:14.782 SCRIPT (W): Slot_AvailableActions Has no Content! +12:24:14.782 SCRIPT (W): Slot_Vehicle Has no Content! +12:24:14.782 SCRIPT (W): Slot_GameVersion Has no Content! +12:24:14.782 SCRIPT (W): Slot_Notifications Has no Content! +12:24:14.782 SCRIPT (W): Slot_Hints Has no Content! +12:24:14.788 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:24:14.973 WORLD : UpdateEntities +12:24:14.973 WORLD : PostFrame +12:24:14.973 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:24:14.973 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:24:15.013 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:24:15.013 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:24:15.013 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:24:15.013 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/game-startup-report.json.txt b/docs/evidence/game-2026-09-19-122353-yard-candidate/game-startup-report.json.txt new file mode 100644 index 0000000..82f8203 --- /dev/null +++ b/docs/evidence/game-2026-09-19-122353-yard-candidate/game-startup-report.json.txt @@ -0,0 +1,24 @@ +{ + "log": "console.log", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "ordinary local game startup only; no player input, full escape, multiplayer or FPS proof", + "local_participant_verified": true, + "scenario_header_verified": true, + "verified_header_projects": [ + "chat" + ], + "game_module_defines": [ + "PLATFORM_WINDOWS,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", + "PLATFORM_WINDOWS,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" + ], + "workbench_undefined": true, + "normal_mission_ready": true, + "unexpected_smoke_fixture": false, + "failed": false, + "ready": true, + "failure_observed_during_polling": false +} diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/headless-launch.log.txt b/docs/evidence/game-2026-09-19-122353-yard-candidate/headless-launch.log.txt new file mode 100644 index 0000000..7e33176 --- /dev/null +++ b/docs/evidence/game-2026-09-19-122353-yard-candidate/headless-launch.log.txt @@ -0,0 +1,139 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 178 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerSteam.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: (null) + applicationVersion: 0 + pEngineName: (null) + engineVersion: 0 + apiVersion: 4198400 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: (null) + applicationVersion: 0 + pEngineName: (null) + engineVersion: 0 + apiVersion: 4198400 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a00030 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a00030 +[Gamescope WSI] Surface state: + steam app id: 1874880 + window xid: 0x1a00030 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating swapchain for xid: 0x1a00030 - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_R8G8B8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true +[Gamescope WSI] Created swapchain for xid: 0x1a00030 swapchain: 0x7f8a781815c0 - imageCount: 3 +[Gamescope WSI] Destroying swapchain: 0x7f8a781815c0 +[Gamescope WSI] Destroyed swapchain: 0x7f8a781815c0 +[Gamescope WSI] Creating swapchain for xid: 0x1a00030 - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_R8G8B8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true +[Gamescope WSI] Created swapchain for xid: 0x1a00030 swapchain: 0x7f8a781815c0 - imageCount: 3 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/image-conversion.json b/docs/evidence/game-2026-09-19-122353-yard-candidate/image-conversion.json new file mode 100644 index 0000000..871a802 --- /dev/null +++ b/docs/evidence/game-2026-09-19-122353-yard-candidate/image-conversion.json @@ -0,0 +1,7 @@ +{ + "source": "err-ordinary-prison.bmp", + "source_sha256": "3e91da3a4fc7391b8c1e8031a4817ccea5a98fd4d7d1a79c65d8fabe6bd742af", + "derivative": "ordinary-prison-view.png", + "derivative_sha256": "95710fb12c3471dfeb555e81e555b61ca36a29cedccf6a25ae5f37ba8f5cd575", + "operation": "Lossless BMP to PNG format conversion for viewing. No pixel edits, resize or overlays." +} diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/launch-source-sha256.json b/docs/evidence/game-2026-09-19-122353-yard-candidate/launch-source-sha256.json new file mode 100644 index 0000000..2d60cb9 --- /dev/null +++ b/docs/evidence/game-2026-09-19-122353-yard-candidate/launch-source-sha256.json @@ -0,0 +1,184 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "417e9b6ab3f2207412fa388fb4ec9ed921db38820982aa811d6dcfa6e1d62054", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "34f8e1730824850ea64f43dcd442e753d079a9795b3b9246813070ed36bb8430", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dd01a9d7d8860f8e0051e275236bdc1a2718906324f0fc9089f0d483ebb791c2", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "d4fe3cffaa188244db254b197a0165ae18f2b5b808b54e20ce888359147940fd", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "3ff1c9e9191f20769fed1e4d7a1363e4109512af76e02aa5e1e6a8766b711951", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/launch-source.json b/docs/evidence/game-2026-09-19-122353-yard-candidate/launch-source.json new file mode 100644 index 0000000..649220c --- /dev/null +++ b/docs/evidence/game-2026-09-19-122353-yard-candidate/launch-source.json @@ -0,0 +1,42 @@ +{ + "schema_version": 1, + "launch_id": "2dec1400-0799-4db3-9da6-c8649fca8373", + "captured_unix": 1789813431.322434, + "source_root": "/home/jakub/devel/escapistsrereintroduced", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/ArmaReforgerSteam.exe", + "-addonsDir", + "Z:/home/jakub/devel/escapistsrereintroduced/addons", + "-addons", + "FA804F411BDDF2C6", + "-profile", + "Z:/tmp/erri-game-profile", + "-errOrdinaryScenario", + "chat", + "-noSplash", + "-errOrdinaryScreenshot", + "1", + "-noBackend", + "-noSound", + "-noThrow", + "-disableCrashReporter", + "-logconsole" + ], + "manifest_sha256": "70861b5b5dc39f9f7facb6f3432ed162fb6a05322fcd2c0ac64616a81c163ad9" +} diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/ordinary-prison-view.png b/docs/evidence/game-2026-09-19-122353-yard-candidate/ordinary-prison-view.png new file mode 100644 index 0000000..305c153 Binary files /dev/null and b/docs/evidence/game-2026-09-19-122353-yard-candidate/ordinary-prison-view.png differ diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/report.json b/docs/evidence/game-2026-09-19-122353-yard-candidate/report.json new file mode 100644 index 0000000..a209a14 --- /dev/null +++ b/docs/evidence/game-2026-09-19-122353-yard-candidate/report.json @@ -0,0 +1,24 @@ +{ + "log": "docs/evidence/game-2026-09-19-122353-yard-candidate/console.log.txt", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "ordinary local game startup only; no player input, full escape, multiplayer or FPS proof", + "local_participant_verified": true, + "scenario_header_verified": true, + "verified_header_projects": [ + "chat" + ], + "game_module_defines": [ + "PLATFORM_WINDOWS,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", + "PLATFORM_WINDOWS,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" + ], + "workbench_undefined": true, + "normal_mission_ready": true, + "unexpected_smoke_fixture": false, + "failed": false, + "ready": true, + "control_metadata_consistent": true +} diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/rereintroduced-hq.log.txt b/docs/evidence/game-2026-09-19-122353-yard-candidate/rereintroduced-hq.log.txt new file mode 100644 index 0000000..f7a3bd0 --- /dev/null +++ b/docs/evidence/game-2026-09-19-122353-yard-candidate/rereintroduced-hq.log.txt @@ -0,0 +1,10 @@ +#1 t=7s M0 REGISTER group 1 [session=1789813453-1] +#2 t=7s M0 MORTAR DEPLOY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; authored gun and four-person crew; finite ammunition initialization pending [session=1789813453-1] +#3 t=7.6s M0 COURIER READY trip=0 state=1 delivered=0; 12 distinct original HE shells physically confirmed in existing western cache [session=1789813453-1] +#4 t=9s M0 REGISTER group 2 [session=1789813453-1] +#5 t=9s M0 REGISTER group 3 [session=1789813453-1] +#6 t=9s M0 REGISTER group 4 [session=1789813453-1] +#7 t=9s M0 REGISTER group 5 [session=1789813453-1] +#8 t=9s M0 REGISTER group 6 [session=1789813453-1] +#9 t=9s M0 REGISTER group 7 [session=1789813453-1] +#10 t=18.8s M0 MORTAR CREW READY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; four original physical members, one manpack, 27 confirmed HE; new shell requests=27; allocation permanently closed [session=1789813453-1] diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/runner.json.txt b/docs/evidence/game-2026-09-19-122353-yard-candidate/runner.json.txt new file mode 100644 index 0000000..65da0bf --- /dev/null +++ b/docs/evidence/game-2026-09-19-122353-yard-candidate/runner.json.txt @@ -0,0 +1,27 @@ +{ + "stopped_unix": 1789813478.5450907, + "console_sha256": "0c2f2457f025c531eef8d27c1594ad5ded771da0c0f26f89bf935cd5daedf627", + "end_source_sha256": "70861b5b5dc39f9f7facb6f3432ed162fb6a05322fcd2c0ac64616a81c163ad9", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "2dec1400-0799-4db3-9da6-c8649fca8373", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "70861b5b5dc39f9f7facb6f3432ed162fb6a05322fcd2c0ac64616a81c163ad9", + "started_unix": 1789813431.3225086, + "result": "game-started", + "session": "/tmp/erri-game-profile/logs/logs_2026-09-19_12-23-53", + "project": "chat", + "cleanup_confirmed": true, + "runner_error": null, + "failure_grace_seconds": 0, + "failure_observed_during_polling": false, + "first_failure_elapsed_seconds": null, + "executable": "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/ArmaReforgerSteam.exe", + "dedicated_server": false, + "display": "headless Gamescope", + "audio": "-noSound plus own silent sink", + "control_only": false, + "source_manifest_scope": "successor addon sources", + "scope": "ordinary local game startup only; no player input, full escape, multiplayer or FPS proof" +} diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/script.log.txt b/docs/evidence/game-2026-09-19-122353-yard-candidate/script.log.txt new file mode 100644 index 0000000..93c57f0 --- /dev/null +++ b/docs/evidence/game-2026-09-19-122353-yard-candidate/script.log.txt @@ -0,0 +1,231 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-23-53\script.log started at 2026-09-19 12:23:55 (2026-09-19 10:23:55 UTC) + +12:23:55.059 SCRIPT : SCRIPT : Initializing scripts +12:23:55.059 SCRIPT : SCRIPT : ScriptProjectManager init +12:23:55.196 SCRIPT : SCRIPT : Compiling GameLib scripts +12:23:55.249 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 666K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:23:55.250 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:23:55.250 SCRIPT : SCRIPT : Compiling Game scripts +12:23:56.410 SCRIPT : Compiling Game scripts +12:23:56.410 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:23:56.410 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:23:56.654 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:23:56.665 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:23:56.691 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:23:56.790 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:23:56.790 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:23:56.790 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:23:56.790 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:23:56.822 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:23:56.868 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:23:56.881 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:23:56.881 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:23:56.882 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:23:56.924 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:23:56.924 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:23:56.926 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:23:56.926 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:23:56.979 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:23:57.099 SCRIPT : Module: Game; loaded 5779x files; 11201x classes; used 27027K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 228d8bca +12:23:57.857 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +12:23:57.871 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +12:23:57.871 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +12:23:57.871 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +12:23:57.871 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +12:23:58.133 SCRIPT : ERR ORDINARY: requesting header project=chat +12:23:59.207 SCRIPT : SCRIPT : Compiling GameLib scripts +12:23:59.258 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 664K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:23:59.259 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:23:59.259 SCRIPT : SCRIPT : Compiling Game scripts +12:24:00.368 SCRIPT : Compiling Game scripts +12:24:00.368 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:24:00.368 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:24:00.611 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:24:00.623 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:24:00.650 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:24:00.759 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:24:00.759 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:24:00.759 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:24:00.759 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:24:00.791 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:24:00.834 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:24:00.846 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:24:00.846 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:24:00.847 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:24:00.891 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:24:00.891 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:24:00.893 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:24:00.893 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:24:00.945 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:24:01.050 SCRIPT : Module: Game; loaded 5779x files; 11201x classes; used 27003K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 228d8bca +12:24:13.897 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:24:14.776 SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems +12:24:14.780 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:24:14.780 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:24:14.781 SCRIPT (W): Can't open config file "" +12:24:14.782 SCRIPT (W): Cannot update game blocklist. Backend is offline. +12:24:14.782 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:24:14.782 SCRIPT (W): Slot_Chat Has no Content! +12:24:14.782 SCRIPT (W): Slot_VON Has no Content! +12:24:14.782 SCRIPT (W): Slot_AvailableActions Has no Content! +12:24:14.782 SCRIPT (W): Slot_Vehicle Has no Content! +12:24:14.782 SCRIPT (W): Slot_GameVersion Has no Content! +12:24:14.782 SCRIPT (W): Slot_Notifications Has no Content! +12:24:14.782 SCRIPT (W): Slot_Hints Has no Content! +12:24:14.788 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +12:24:14.788 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +12:24:14.788 SCRIPT : Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged. +12:24:14.788 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:24:14.800 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:24:14.809 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:24:14.973 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:24:16.269 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:24:16.282 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:24:16.283 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:24:16.307 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:24:16.309 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:24:16.353 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:24:16.353 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:24:16.360 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:24:16.398 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:24:16.398 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:24:16.399 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:24:16.399 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:24:16.403 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:24:16.404 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:24:16.404 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:24:16.405 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:24:16.405 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:24:16.405 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:24:16.405 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:24:16.405 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:24:16.405 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:24:16.405 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:24:16.405 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:24:16.405 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:24:16.405 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:24:16.405 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:24:16.405 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:24:16.405 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:24:16.405 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:24:16.405 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:24:16.405 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:24:16.405 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:24:16.405 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:24:16.405 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:24:17.318 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:24:17.318 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:24:17.318 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:24:17.318 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:24:17.600 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.06,63.5103,7499.69> up=0.99519 +12:24:17.600 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.116481 angularSpeed=0.0835165 +12:24:17.600 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.3 +12:24:17.600 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.03,63.6097,7501.96> +12:24:17.600 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.03,63.3097,7501.96> terrainY=63.318 tireTerrainGap=-0.00827789 +12:24:17.600 SCRIPT : ERR GEAR SUPPORT: center=<7012.03,63.6097,7501.96> radius=0.3 bottom=<7012.03,63.3097,7501.96> fraction=0.416854 normal=<0.0154358,0.987894,0.154358> self=0 dynamic=0 supported=1 gap=-0.00829315 +12:24:17.600 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.87,64.612,7497.69> +12:24:17.600 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.87,64.162,7497.69> terrainY=64.1573 tireTerrainGap=0.00468445 +12:24:17.600 SCRIPT : ERR GEAR SUPPORT: center=<7009.87,64.612,7497.69> radius=0.45 bottom=<7009.87,64.162,7497.69> fraction=0.47587 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00469208 +12:24:17.600 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2592,7497.76> +12:24:17.600 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8092,7497.76> terrainY=63.8174 tireTerrainGap=-0.00822067 +12:24:17.600 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2592,7497.76> radius=0.45 bottom=<7014.42,63.8092,7497.76> fraction=0.417106 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00823593 +12:24:17.600 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:24:17.845 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:24:17.845 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:24:17.845 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:24:17.845 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:24:18.399 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:24:18.400 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:24:18.400 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:24:18.666 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5432,7499.72> up=0.994161 +12:24:18.666 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0826066 angularSpeed=0.0524362 +12:24:18.666 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:24:18.666 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6156,7501.99> +12:24:18.666 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3156,7501.99> terrainY=63.3139 tireTerrainGap=0.00172424 +12:24:18.666 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6156,7501.99> radius=0.3 bottom=<7012.06,63.3156,7501.99> fraction=0.462745 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00180435 +12:24:18.666 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6057,7497.71> +12:24:18.666 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1557,7497.71> terrainY=64.1494 tireTerrainGap=0.00632477 +12:24:18.666 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6057,7497.71> radius=0.45 bottom=<7009.92,64.1557,7497.71> fraction=0.483455 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00636292 +12:24:18.666 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2651,7497.79> +12:24:18.666 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8151,7497.79> terrainY=63.8153 tireTerrainGap=-0.000171661 +12:24:18.666 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2651,7497.79> radius=0.45 bottom=<7014.46,63.8151,7497.79> fraction=0.453889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000144958 +12:24:18.666 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:24:18.934 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:24:18.934 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:24:18.934 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:24:18.934 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:24:19.199 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:24:19.467 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:24:19.467 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:24:19.467 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:24:19.467 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:24:19.733 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.528,7499.75> up=0.994187 +12:24:19.733 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0947671 angularSpeed=0.0470851 +12:24:19.733 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:24:19.733 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6111,7502.02> +12:24:19.733 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3111,7502.02> terrainY=63.3108 tireTerrainGap=0.000350952 +12:24:19.733 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6111,7502.02> radius=0.3 bottom=<7012.07,63.3111,7502.02> fraction=0.456165 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000354767 +12:24:19.733 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5962,7497.73> +12:24:19.733 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1462,7497.73> terrainY=64.1424 tireTerrainGap=0.00376892 +12:24:19.733 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5962,7497.73> radius=0.45 bottom=<7009.97,64.1462,7497.73> fraction=0.471677 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00376892 +12:24:19.733 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2604,7497.84> +12:24:19.733 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8104,7497.84> terrainY=63.8122 tireTerrainGap=-0.00175095 +12:24:19.733 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2604,7497.84> radius=0.45 bottom=<7014.51,63.8104,7497.84> fraction=0.446543 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00175858 +12:24:19.733 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:24:20.000 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:24:20.000 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:24:20.000 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:24:20.000 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:24:20.533 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:24:20.533 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:24:20.533 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:24:20.533 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:24:20.799 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.529,7499.76> up=0.994199 +12:24:20.799 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:24:20.799 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:24:20.799 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6106,7502.03> +12:24:20.800 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3106,7502.03> terrainY=63.3103 tireTerrainGap=0.000263214 +12:24:20.800 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6106,7502.03> radius=0.3 bottom=<7012.08,63.3106,7502.03> fraction=0.45576 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000267029 +12:24:20.800 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.73> +12:24:20.800 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.73> terrainY=64.1417 tireTerrainGap=0.00302887 +12:24:20.800 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.73> radius=0.45 bottom=<7009.97,64.1448,7497.73> fraction=0.46861 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00309753 +12:24:20.800 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:24:20.800 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00177383 +12:24:20.800 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +12:24:20.800 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:24:21.066 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:24:21.067 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:24:21.067 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:24:21.067 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:24:21.600 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:24:21.600 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:24:21.600 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:24:21.600 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:24:21.866 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.529,7499.76> up=0.994199 +12:24:21.866 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:24:21.866 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:24:21.866 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6106,7502.03> +12:24:21.866 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3106,7502.03> terrainY=63.3103 tireTerrainGap=0.000263214 +12:24:21.866 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6106,7502.03> radius=0.3 bottom=<7012.08,63.3106,7502.03> fraction=0.45576 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000267029 +12:24:21.866 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.73> +12:24:21.866 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.73> terrainY=64.1417 tireTerrainGap=0.00302887 +12:24:21.866 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.73> radius=0.45 bottom=<7009.97,64.1448,7497.73> fraction=0.46861 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00309753 +12:24:21.866 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:24:21.866 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00177383 +12:24:21.866 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +12:24:21.866 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:24:22.133 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:24:22.134 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:24:22.146 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:24:22.147 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:24:22.147 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:24:22.147 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:24:22.147 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:24:22.147 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:24:22.147 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:24:22.803 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:24:22.844 SCRIPT : ERR ORDINARY: local participant verified project=chat phase=prison +12:24:22.844 SCRIPT : ERR ORDINARY: optional prisoner screenshot queued after finalized admission +12:24:22.844 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +12:24:25.884 SCRIPT : ERR ORDINARY: optional prisoner screenshot requested without camera or input changes diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/source-provenance.json b/docs/evidence/game-2026-09-19-122353-yard-candidate/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/game-2026-09-19-122353-yard-candidate/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/game-2026-09-19-122353-yard-candidate/source-sha256.json b/docs/evidence/game-2026-09-19-122353-yard-candidate/source-sha256.json new file mode 100644 index 0000000..2d60cb9 --- /dev/null +++ b/docs/evidence/game-2026-09-19-122353-yard-candidate/source-sha256.json @@ -0,0 +1,184 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "417e9b6ab3f2207412fa388fb4ec9ed921db38820982aa811d6dcfa6e1d62054", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "34f8e1730824850ea64f43dcd442e753d079a9795b3b9246813070ed36bb8430", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dd01a9d7d8860f8e0051e275236bdc1a2718906324f0fc9089f0d483ebb791c2", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "d4fe3cffaa188244db254b197a0165ae18f2b5b808b54e20ce888359147940fd", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "3ff1c9e9191f20769fed1e4d7a1363e4109512af76e02aa5e1e6a8766b711951", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/game-2026-09-19-123226-yard-bounds/console.log.txt b/docs/evidence/game-2026-09-19-123226-yard-bounds/console.log.txt new file mode 100644 index 0000000..8c14359 --- /dev/null +++ b/docs/evidence/game-2026-09-19-123226-yard-bounds/console.log.txt @@ -0,0 +1,503 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-32-26\console.log started at 2026-09-19 12:32:26 (2026-09-19 10:32:26 UTC) + +12:32:26.016 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-32-26' to filesystem under name logs +12:32:26.016 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-game-profile\profile' to filesystem under name profile +12:32:26.016 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger\' +12:32:26.018 ENGINE : Initializing engine, version 192142 +12:32:26.018 ENGINE : CLI Params: -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/addons -addons FA804F411BDDF2C6 -profile Z:/tmp/erri-game-profile -errOrdinaryScenario chat -noSplash -errOrdinaryScreenshot 1 -noBackend -noSound -noThrow -disableCrashReporter -logconsole +12:32:26.027 ENGINE : Addon dirs: +12:32:26.027 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +12:32:26.028 ENGINE : dir: './addons' +12:32:26.028 ENGINE : dir: 'Z:/tmp/erri-game-profile/addons' +12:32:26.028 ENGINE : Available addons: +12:32:26.028 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:32:26.028 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:32:26.028 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:32:26.028 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:32:26.028 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:32:26.028 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +12:32:26.028 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +12:32:26.028 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +12:32:26.028 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +12:32:26.028 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +12:32:26.028 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +12:32:26.029 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +12:32:26.168 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +12:32:26.172 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +12:32:26.172 ENGINE : CPU vendor : AuthenticAMD +12:32:26.172 ENGINE : CPU type : 2 +12:32:26.172 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +12:32:26.172 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +12:32:26.172 ENGINE : CPU count logical : 16 +12:32:26.172 ENGINE : CPU count physical : 8 +12:32:26.172 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +12:32:26.172 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:32:26.173 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:32:26.173 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:32:26.173 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:32:26.174 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:32:26.174 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +12:32:26.329 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +12:32:26.330 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-game-profile\profile/resourceDatabase.rdb) +12:32:26.330 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-32-26/resourceDatabase.rdb) +12:32:26.496 ENGINE : GameProject load +12:32:26.496 ENGINE : Loaded addons: +12:32:26.496 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +12:32:26.496 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +12:32:26.496 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:32:26.496 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:32:26.496 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:32:26.496 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:32:26.496 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:32:26.499 ENGINE : Loading custom engine user config '$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf' +12:32:26.499 INIT : GameProject engine user settings load @"$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf" +12:32:26.499 ENGINE : Engine user settings config loaded +12:32:26.499 PROFILING : Settings changed took: 0.001500 ms +12:32:26.499 ENGINE : Locale info: system en-US (English), user en-US (English) +12:32:26.630 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +12:32:26.631 RENDER : Basic screen setup: +12:32:26.631 RENDER : Back buffer width x height: 1280x720 +12:32:26.631 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +12:32:26.631 RENDER : MSAA : none +12:32:26.645 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +12:32:26.645 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +12:32:26.645 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +12:32:26.645 RENDER : * core clocks 2720 MHz, memory 1124 MHz +12:32:26.645 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +12:32:26.645 RENDER : AMD AGS correctly initialized +12:32:26.646 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +12:32:26.646 RENDER : Detected output devices: +12:32:26.646 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +12:32:26.646 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +12:32:26.646 RENDER : Concurrent frames limit 2 +12:32:26.732 RENDER : DX12 device successfully created by AMD AGS library +12:32:26.732 RENDER : * user markers not supported in this version AMD SW +12:32:26.732 RENDER : Graphics device features +12:32:26.732 RENDER : Needed: +12:32:26.732 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +12:32:26.732 RENDER : Optional: +12:32:26.732 RENDER : * Allow tearing (VSYNC) : 1 +12:32:26.732 RENDER : * 16 bits : 1 +12:32:26.732 RENDER : * Resource heap tier : 3 +12:32:26.732 RENDER : * Persistent heaps (DRED) : 1 +12:32:26.732 RENDER : * DRED 1.2 is supported by compiler +12:32:26.756 RENDER : Main RT format setup. +12:32:26.756 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +12:32:26.756 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +12:32:26.761 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7 +12:32:26.789 PROFILING : Settings changed took: 1.155900 ms +12:32:26.794 RENDER : RENDER : Reload shaders +12:32:26.795 RENDER : Enfusion shader version 13 +12:32:26.795 INIT : INIT : ShaderListReload +12:32:26.795 PROFILING : ShaderListReload took: 0.000500 ms +12:32:28.027 RENDER : Loaded 3383 newer shader binaries +12:32:28.027 PROFILING : Reload shaders took: 1232.999100 ms +12:32:28.030 ENGINE : Initializing inputs. +12:32:28.044 NETWORK : Initializing networking. +12:32:28.044 NETWORK : Using new GameRplScheduler. +12:32:28.045 SCRIPT : SCRIPT : Initializing scripts +12:32:28.045 SCRIPT : SCRIPT : ScriptProjectManager init +12:32:28.045 PROFILING : ScriptProjectManager init took: 0.008500 ms +12:32:28.131 PROFILING : Initializing scripts took: 86.422700 ms +12:32:28.131 BACKEND : Backend Services are disabled. +12:32:28.131 ENGINE : Enfusion engine successfully created. +12:32:28.138 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:32:28.162 GUI : Using default language (en_us) +12:32:28.162 GUI : Loading 'en_us' localization file. +12:32:28.162 INIT : INIT : Loading StringTable +12:32:28.185 PROFILING : Loading StringTable took: 22.742600 ms +12:32:28.185 SCRIPT : SCRIPT : Compiling GameLib scripts +12:32:28.240 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 666K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:32:28.241 PROFILING : Compiling GameLib scripts took: 56.221100 ms +12:32:28.241 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:32:28.241 SCRIPT : SCRIPT : Compiling Game scripts +12:32:29.382 SCRIPT : Compiling Game scripts +12:32:29.382 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:32:29.382 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:32:29.614 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:29.624 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:32:29.649 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:32:29.748 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:32:29.748 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:32:29.748 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:32:29.748 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:32:29.780 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:32:29.825 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:32:29.837 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:32:29.837 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:32:29.838 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:32:29.881 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:29.881 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:29.882 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:32:29.882 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:32:29.935 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:32:30.056 SCRIPT : Module: Game; loaded 5779x files; 11201x classes; used 27032K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 68ff9c52 +12:32:30.085 PROFILING : Compiling Game scripts took: 1843.603500 ms +12:32:30.085 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:32:30.121 ENGINE : Game successfully created. +12:32:30.124 PLATFORM : Save data from container 'settings' have been loaded +12:32:30.224 PLATFORM : Save data from container 'sessions' have been loaded +12:32:30.626 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +12:32:30.626 ENGINE : Game user settings config loaded +12:32:30.722 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission 'worlds/MainMenuWorld/MainMenuWorld.ent'. +12:32:30.723 WORLD : WORLD : Entities load 'worlds/MainMenuWorld/MainMenuWorld.ent' +12:32:30.724 PROFILING : Entities load took: 0.927700 ms +12:32:30.726 WORLD : WORLD : Game::LoadEntities +12:32:30.726 WORLD : WORLD : Initializing world systems +12:32:30.727 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +12:32:30.728 WORLD : WORLD : CreateEntities +12:32:30.728 WORLD : WORLD : CreateEntities +12:32:30.728 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:32:30.739 RESOURCES : Loaded mission headers from 7 addon(s)! +12:32:30.739 PROFILING : NotifyBeforeEntitiesCreated took: 11.326300 ms +12:32:30.739 WORLD : WORLD : Wait for preloading data +12:32:30.739 PROFILING : Wait for preloading data took: 0.001000 ms +12:32:30.740 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:32:30.740 PROFILING : NotifyBeforeEntitiesInitialized took: 0.021600 ms +12:32:30.740 WORLD : InitEntities 'world' +12:32:30.740 ENTITY : Init entity @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> +12:32:30.740 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +12:32:30.750 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +12:32:30.750 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +12:32:30.750 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +12:32:30.750 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +12:32:30.750 WORLD : WORLD : NotifyEntitiesInitialized +12:32:30.750 DEFAULT : DEFAULT : WorldVolumesCollection +12:32:30.750 PROFILING : WorldVolumesCollection took: 0.005300 ms +12:32:30.750 PROFILING : NotifyEntitiesInitialized took: 0.073000 ms +12:32:30.750 PROFILING : CreateEntities took: 22.333000 ms +12:32:30.750 PROFILING : CreateEntities took: 22.340500 ms +12:32:30.750 WORLD : WORLD : EOnActivate +12:32:30.750 PROFILING : EOnActivate took: 0.002600 ms +12:32:30.750 PROFILING : Game::LoadEntities took: 24.041400 ms +12:32:30.922 DEFAULT : Entered main menu. +12:32:31.022 DEFAULT (W): No GameMode present in the world, using fallback logic! +12:32:31.023 SCRIPT : ERR ORDINARY: requesting header project=chat +12:32:31.547 ENGINE : Game destroyed. +12:32:31.686 ENGINE : Addon dirs: +12:32:31.686 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +12:32:31.686 ENGINE : dir: './addons' +12:32:31.686 ENGINE : dir: 'Z:/tmp/erri-game-profile/addons' +12:32:31.686 ENGINE : dir: '$profile:../addons/' +12:32:31.686 ENGINE : Available addons: +12:32:31.686 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:32:31.686 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:32:31.686 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:32:31.686 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:32:31.686 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:32:31.686 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +12:32:31.686 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +12:32:31.686 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +12:32:31.686 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +12:32:31.687 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +12:32:31.687 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +12:32:31.687 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +12:32:31.803 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +12:32:31.806 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +12:32:31.806 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:32:31.806 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:32:31.806 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:32:31.808 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:32:31.809 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:32:31.809 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +12:32:31.927 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +12:32:31.928 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-game-profile\profile/resourceDatabase.rdb) +12:32:31.928 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-32-26/resourceDatabase.rdb) +12:32:32.069 ENGINE : GameProject load +12:32:32.069 ENGINE : Loaded addons: +12:32:32.069 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +12:32:32.069 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +12:32:32.069 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:32:32.069 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:32:32.069 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:32:32.069 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:32:32.069 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:32:32.088 GUI : Using default language (en_us) +12:32:32.089 GUI : Loading 'en_us' localization file. +12:32:32.089 INIT : INIT : Loading StringTable +12:32:32.109 PROFILING : Loading StringTable took: 20.637800 ms +12:32:32.109 SCRIPT : SCRIPT : Compiling GameLib scripts +12:32:32.160 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 664K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:32:32.161 PROFILING : Compiling GameLib scripts took: 51.449600 ms +12:32:32.161 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:32:32.161 SCRIPT : SCRIPT : Compiling Game scripts +12:32:33.309 SCRIPT : Compiling Game scripts +12:32:33.309 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:32:33.309 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:32:33.548 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:33.560 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:32:33.590 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:32:33.699 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:32:33.699 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:32:33.699 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:32:33.699 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:32:33.731 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:32:33.776 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:32:33.787 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:32:33.787 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:32:33.789 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:32:33.831 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:33.831 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:33.833 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:32:33.833 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:32:33.888 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:32:33.998 SCRIPT : Module: Game; loaded 5779x files; 11201x classes; used 27007K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 68ff9c52 +12:32:34.027 PROFILING : Compiling Game scripts took: 1866.603900 ms +12:32:34.027 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:32:34.048 ENGINE : Game successfully created. +12:32:34.107 PLATFORM : Save data from container 'settings' have been loaded +12:32:34.206 PLATFORM : Save data from container 'sessions' have been loaded +12:32:34.206 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +12:32:34.206 ENGINE : Game user settings config loaded +12:32:34.307 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{C1E20667DCE324ED}Missions/ERR_Everon.conf'. +12:32:34.308 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +12:32:35.314 PROFILING : Entities load took: 1006.336600 ms +12:32:35.317 WORLD : WORLD : Game::LoadEntities +12:32:35.317 WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" +12:32:35.318 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +12:32:35.318 WORLD : WORLD : CreateEntities +12:32:35.318 WORLD : WORLD : CreateEntities +12:32:35.318 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:32:35.330 RESOURCES : Loaded mission headers from 7 addon(s)! +12:32:35.330 PROFILING : NotifyBeforeEntitiesCreated took: 11.357900 ms +12:32:35.330 WORLD : WORLD : Wait for preloading data +12:32:36.212 PROFILING : Wait for preloading data took: 882.251400 ms +12:32:36.322 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +12:32:36.322 PROFILING : PROFILING : Terrain load +12:32:38.278 PROFILING : Terrain load took: 1956.291900 ms +12:32:40.962 WORLD : Game::LoadEntities +12:32:40.962 WORLD : CreateEntities +12:32:40.962 WORLD : CreateEntities +12:32:40.962 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" +12:32:40.962 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:32:40.962 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:32:46.844 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:32:46.844 PROFILING : NotifyBeforeEntitiesInitialized took: 0.045300 ms +12:32:47.408 WORLD : InitEntities 'world' +12:32:47.408 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:32:47.408 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:32:47.431 WORLD : WORLD : NotifyEntitiesInitialized +12:32:47.431 TERRAIN : TERRAIN : Initializing road networks... +12:32:47.434 PROFILING : Initializing road networks... took: 3.087900 ms +12:32:47.435 DEFAULT : DEFAULT : WorldVolumesCollection +12:32:47.494 PROFILING : WorldVolumesCollection took: 59.131500 ms +12:32:47.494 INIT : INIT : SoundWorldInit +12:32:47.509 PROFILING : SoundWorldInit took: 14.753600 ms +12:32:47.509 PROFILING : NotifyEntitiesInitialized took: 77.176900 ms +12:32:47.509 PROFILING : CreateEntities took: 12190.038600 ms +12:32:47.509 PROFILING : CreateEntities took: 12190.229200 ms +12:32:47.510 WORLD : WORLD : Wait for preloading data around camera +12:32:47.810 PROFILING : Wait for preloading data around camera took: 300.466300 ms +12:32:47.810 WORLD : WORLD : EOnActivate +12:32:47.835 PROFILING : EOnActivate took: 25.378400 ms +12:32:47.836 PROFILING : Game::LoadEntities took: 12518.480500 ms +12:32:48.301 DEFAULT : Entered offline game state. +12:32:48.405 SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems +12:32:48.405 NETWORK : Player connected: connectionID=2147483646 +12:32:48.405 NETWORK : ### Connecting player: connectionID=2147483646, Name= +12:32:48.406 NETWORK : ### Creating player: PlayerId=1, Name=jakub +12:32:48.411 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:32:48.411 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:32:48.411 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:32:48.411 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:32:48.411 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:32:48.412 SCRIPT (W): Can't open config file "" +12:32:48.412 SCRIPT (W): Cannot update game blocklist. Backend is offline. +12:32:48.413 WORLD : InitEntities 'world' +12:32:48.413 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:32:48.413 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:32:48.413 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:32:48.413 SCRIPT (W): Slot_Chat Has no Content! +12:32:48.413 SCRIPT (W): Slot_VON Has no Content! +12:32:48.413 SCRIPT (W): Slot_AvailableActions Has no Content! +12:32:48.413 SCRIPT (W): Slot_Vehicle Has no Content! +12:32:48.413 SCRIPT (W): Slot_GameVersion Has no Content! +12:32:48.413 SCRIPT (W): Slot_Notifications Has no Content! +12:32:48.413 SCRIPT (W): Slot_Hints Has no Content! +12:32:48.420 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +12:32:48.420 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +12:32:48.420 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +12:32:48.420 SCRIPT : Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged. +12:32:48.420 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:32:48.420 NETWORK : Players connecting: 0 +12:32:48.420 NETWORK : Players connected: 1 / 1 +12:32:48.431 WORLD : Frame start +12:32:48.431 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:32:48.441 WORLD : UpdateEntities +12:32:48.441 WORLD : Frame +12:32:48.441 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:32:48.599 WORLD : UpdateEntities +12:32:48.599 WORLD : PostFrame +12:32:48.599 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:32:48.599 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:32:48.647 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:32:48.647 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:32:48.647 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:32:48.647 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +12:32:48.799 RENDER : RENDER : ObjectsHeightMap::Build +12:32:48.799 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +12:32:48.954 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 155.306500 ms +12:32:48.962 PROFILING : ObjectsHeightMap::Build took: 163.494000 ms +12:32:49.951 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:32:49.965 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:32:49.965 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:32:49.993 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:32:49.995 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:32:50.038 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:32:50.038 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:32:50.045 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:32:50.083 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:32:50.083 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:32:50.084 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:32:50.084 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:32:50.089 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:32:50.090 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:32:50.090 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:32:50.092 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:32:50.092 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:32:50.092 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:32:50.092 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:32:50.092 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:32:50.092 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:32:50.092 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:32:50.092 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:32:50.092 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:32:50.092 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:32:50.092 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:32:50.092 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:32:50.092 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:32:50.092 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:32:50.092 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:32:50.092 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:32:50.092 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:32:50.092 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:32:50.092 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:32:50.998 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:32:50.998 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:32:50.998 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:32:50.998 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:32:51.280 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.06,63.5105,7499.69> up=0.995206 +12:32:51.280 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.116481 angularSpeed=0.0835165 +12:32:51.280 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.3 +12:32:51.280 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.03,63.6102,7501.96> +12:32:51.280 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.03,63.3102,7501.96> terrainY=63.318 tireTerrainGap=-0.00780869 +12:32:51.280 SCRIPT : ERR GEAR SUPPORT: center=<7012.03,63.6102,7501.96> radius=0.3 bottom=<7012.03,63.3102,7501.96> fraction=0.419101 normal=<0.0154358,0.987894,0.154358> self=0 dynamic=0 supported=1 gap=-0.00779724 +12:32:51.280 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.87,64.6117,7497.69> +12:32:51.280 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.87,64.1617,7497.69> terrainY=64.1573 tireTerrainGap=0.00445557 +12:32:51.280 SCRIPT : ERR GEAR SUPPORT: center=<7009.87,64.6117,7497.69> radius=0.45 bottom=<7009.87,64.1617,7497.69> fraction=0.474747 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00444794 +12:32:51.280 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2594,7497.76> +12:32:51.280 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8094,7497.76> terrainY=63.8174 tireTerrainGap=-0.00797653 +12:32:51.280 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2594,7497.76> radius=0.45 bottom=<7014.42,63.8094,7497.76> fraction=0.418333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00796509 +12:32:51.280 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:32:51.518 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:32:51.518 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:32:51.518 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:32:51.518 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:32:52.080 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:32:52.080 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:32:52.081 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:32:52.347 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5432,7499.72> up=0.994166 +12:32:52.347 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0826066 angularSpeed=0.0524362 +12:32:52.347 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:32:52.347 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6157,7501.99> +12:32:52.347 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3157,7501.99> terrainY=63.3138 tireTerrainGap=0.00190735 +12:32:52.347 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6157,7501.99> radius=0.3 bottom=<7012.06,63.3157,7501.99> fraction=0.463305 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00192642 +12:32:52.347 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6056,7497.71> +12:32:52.347 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1556,7497.71> terrainY=64.1494 tireTerrainGap=0.00623322 +12:32:52.347 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6056,7497.71> radius=0.45 bottom=<7009.92,64.1556,7497.71> fraction=0.483184 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00630188 +12:32:52.347 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2651,7497.79> +12:32:52.347 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8151,7497.79> terrainY=63.8153 tireTerrainGap=-0.00019455 +12:32:52.347 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2651,7497.79> radius=0.45 bottom=<7014.46,63.8151,7497.79> fraction=0.453611 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000205994 +12:32:52.347 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:32:52.614 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:32:52.614 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:32:52.614 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:32:52.614 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:32:52.880 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:32:53.147 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:32:53.147 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:32:53.147 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:32:53.147 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:32:53.414 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.528,7499.75> up=0.994188 +12:32:53.414 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0947671 angularSpeed=0.0470851 +12:32:53.414 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:32:53.414 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6112,7502.02> +12:32:53.414 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3112,7502.02> terrainY=63.3108 tireTerrainGap=0.000335693 +12:32:53.414 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6112,7502.02> radius=0.3 bottom=<7012.07,63.3112,7502.02> fraction=0.455886 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000293732 +12:32:53.414 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5961,7497.73> +12:32:53.414 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1461,7497.73> terrainY=64.1424 tireTerrainGap=0.00373077 +12:32:53.414 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5961,7497.73> radius=0.45 bottom=<7009.97,64.1461,7497.73> fraction=0.471677 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00376892 +12:32:53.414 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2605,7497.84> +12:32:53.414 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8105,7497.84> terrainY=63.8123 tireTerrainGap=-0.00179672 +12:32:53.414 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2605,7497.84> radius=0.45 bottom=<7014.51,63.8105,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +12:32:53.414 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:32:53.680 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:32:53.680 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:32:53.681 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:32:53.681 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:32:54.214 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:32:54.214 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:32:54.214 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:32:54.214 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:32:54.480 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.529,7499.76> up=0.994199 +12:32:54.480 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:32:54.480 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:32:54.480 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6106,7502.03> +12:32:54.480 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3106,7502.03> terrainY=63.3103 tireTerrainGap=0.000255585 +12:32:54.480 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6106,7502.03> radius=0.3 bottom=<7012.08,63.3106,7502.03> fraction=0.455608 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000232697 +12:32:54.480 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.73> +12:32:54.480 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.73> terrainY=64.1418 tireTerrainGap=0.00296783 +12:32:54.480 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.73> radius=0.45 bottom=<7009.97,64.1448,7497.73> fraction=0.468013 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00296783 +12:32:54.480 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:32:54.480 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00178146 +12:32:54.480 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +12:32:54.480 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:32:54.747 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:32:54.747 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:32:54.747 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:32:54.747 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:32:55.280 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:32:55.280 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:32:55.280 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:32:55.281 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:32:55.547 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.529,7499.76> up=0.994199 +12:32:55.547 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:32:55.547 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:32:55.547 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6106,7502.03> +12:32:55.547 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3106,7502.03> terrainY=63.3103 tireTerrainGap=0.000255585 +12:32:55.547 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6106,7502.03> radius=0.3 bottom=<7012.08,63.3106,7502.03> fraction=0.455608 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000232697 +12:32:55.547 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.73> +12:32:55.547 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.73> terrainY=64.1418 tireTerrainGap=0.00296783 +12:32:55.547 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.73> radius=0.45 bottom=<7009.97,64.1448,7497.73> fraction=0.468013 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00296783 +12:32:55.547 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:32:55.547 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00178146 +12:32:55.547 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +12:32:55.547 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:32:55.813 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:32:55.814 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:32:55.826 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:32:55.827 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:32:55.827 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:32:55.827 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:32:55.827 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:32:55.827 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:32:55.827 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:32:56.517 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:32:56.556 SCRIPT : ERR ORDINARY: local participant verified project=chat phase=prison +12:32:56.556 SCRIPT : ERR ORDINARY: optional prisoner screenshot queued after finalized admission +12:32:56.556 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +12:32:59.583 SCRIPT : ERR YARD: prison world origin=<6090,211.444,7160> basisX=<1,-0,0> basisY=<0,1,-0> basisZ=<0,0,1> +12:32:59.584 SCRIPT : ERR YARD: decal=1 type=DecalEntity prefab= worldMin=<6090,211.444,7160> worldMax=<6090,211.444,7160> +12:32:59.584 SCRIPT : ERR YARD: decal=1 world origin=<6090,211.444,7160> basisX=<3,0,0> basisY=<0,-1.31134e-07,3> basisZ=<-0,-3,-1.31134e-07> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=0/0/0 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=0/0/1 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=0/1/0 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=0/1/1 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=1/0/0 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=1/0/1 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=1/1/0 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=1/1/1 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: measurement complete nodes=18 decals=1; bounds do not certify clutter-mask coverage +12:32:59.597 ENGINE : Screenshot successfully saved into $logs:err-ordinary-prison (1280x720) +12:32:59.597 SCRIPT : ERR ORDINARY: optional prisoner screenshot requested without camera or input changes diff --git a/docs/evidence/game-2026-09-19-123226-yard-bounds/err-ordinary-prison.bmp b/docs/evidence/game-2026-09-19-123226-yard-bounds/err-ordinary-prison.bmp new file mode 100644 index 0000000..2c4b9da Binary files /dev/null and b/docs/evidence/game-2026-09-19-123226-yard-bounds/err-ordinary-prison.bmp differ diff --git a/docs/evidence/game-2026-09-19-123226-yard-bounds/error.log.txt b/docs/evidence/game-2026-09-19-123226-yard-bounds/error.log.txt new file mode 100644 index 0000000..b946529 --- /dev/null +++ b/docs/evidence/game-2026-09-19-123226-yard-bounds/error.log.txt @@ -0,0 +1,81 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-32-26\error.log started at 2026-09-19 12:32:28 (2026-09-19 10:32:28 UTC) + +12:32:28.138 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:32:29.382 SCRIPT : Compiling Game scripts +12:32:29.382 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:32:29.382 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:32:29.614 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:29.624 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:32:29.649 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:32:29.747 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:32:29.748 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:32:29.748 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:32:29.748 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:32:29.780 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:32:29.825 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:32:29.837 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:32:29.837 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:32:29.838 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:32:29.881 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:29.881 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:29.882 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:32:29.882 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:32:29.935 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:32:31.022 DEFAULT (W): No GameMode present in the world, using fallback logic! +12:32:33.309 SCRIPT : Compiling Game scripts +12:32:33.309 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:32:33.309 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:32:33.548 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:33.560 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:32:33.590 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:32:33.699 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:32:33.699 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:32:33.699 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:32:33.699 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:32:33.730 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:32:33.776 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:32:33.787 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:32:33.787 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:32:33.789 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:32:33.831 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:33.831 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:33.833 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:32:33.833 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:32:33.888 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:32:40.962 WORLD : Game::LoadEntities +12:32:40.962 WORLD : CreateEntities +12:32:40.962 WORLD : CreateEntities +12:32:40.962 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" +12:32:40.962 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:32:40.962 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:32:47.408 WORLD : InitEntities 'world' +12:32:47.408 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:32:47.408 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:32:48.411 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:32:48.411 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:32:48.411 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:32:48.411 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:32:48.411 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:32:48.412 SCRIPT (W): Can't open config file "" +12:32:48.412 SCRIPT (W): Cannot update game blocklist. Backend is offline. +12:32:48.413 WORLD : InitEntities 'world' +12:32:48.413 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:32:48.413 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:32:48.413 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:32:48.413 SCRIPT (W): Slot_Chat Has no Content! +12:32:48.413 SCRIPT (W): Slot_VON Has no Content! +12:32:48.413 SCRIPT (W): Slot_AvailableActions Has no Content! +12:32:48.413 SCRIPT (W): Slot_Vehicle Has no Content! +12:32:48.413 SCRIPT (W): Slot_GameVersion Has no Content! +12:32:48.413 SCRIPT (W): Slot_Notifications Has no Content! +12:32:48.413 SCRIPT (W): Slot_Hints Has no Content! +12:32:48.420 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:32:48.599 WORLD : UpdateEntities +12:32:48.599 WORLD : PostFrame +12:32:48.599 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:32:48.599 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:32:48.647 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:32:48.647 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:32:48.647 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:32:48.647 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab diff --git a/docs/evidence/game-2026-09-19-123226-yard-bounds/game-startup-report.json.txt b/docs/evidence/game-2026-09-19-123226-yard-bounds/game-startup-report.json.txt new file mode 100644 index 0000000..82f8203 --- /dev/null +++ b/docs/evidence/game-2026-09-19-123226-yard-bounds/game-startup-report.json.txt @@ -0,0 +1,24 @@ +{ + "log": "console.log", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "ordinary local game startup only; no player input, full escape, multiplayer or FPS proof", + "local_participant_verified": true, + "scenario_header_verified": true, + "verified_header_projects": [ + "chat" + ], + "game_module_defines": [ + "PLATFORM_WINDOWS,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", + "PLATFORM_WINDOWS,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" + ], + "workbench_undefined": true, + "normal_mission_ready": true, + "unexpected_smoke_fixture": false, + "failed": false, + "ready": true, + "failure_observed_during_polling": false +} diff --git a/docs/evidence/game-2026-09-19-123226-yard-bounds/headless-launch.log.txt b/docs/evidence/game-2026-09-19-123226-yard-bounds/headless-launch.log.txt new file mode 100644 index 0000000..d32209b --- /dev/null +++ b/docs/evidence/game-2026-09-19-123226-yard-bounds/headless-launch.log.txt @@ -0,0 +1,139 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 178 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerSteam.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: (null) + applicationVersion: 0 + pEngineName: (null) + engineVersion: 0 + apiVersion: 4198400 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: (null) + applicationVersion: 0 + pEngineName: (null) + engineVersion: 0 + apiVersion: 4198400 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a00030 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a00030 +[Gamescope WSI] Surface state: + steam app id: 1874880 + window xid: 0x1a00030 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating swapchain for xid: 0x1a00030 - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_R8G8B8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true +[Gamescope WSI] Created swapchain for xid: 0x1a00030 swapchain: 0x7f59281815c0 - imageCount: 3 +[Gamescope WSI] Destroying swapchain: 0x7f59281815c0 +[Gamescope WSI] Destroyed swapchain: 0x7f59281815c0 +[Gamescope WSI] Creating swapchain for xid: 0x1a00030 - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_R8G8B8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true +[Gamescope WSI] Created swapchain for xid: 0x1a00030 swapchain: 0x7f59281815c0 - imageCount: 3 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/game-2026-09-19-123226-yard-bounds/launch-source-sha256.json b/docs/evidence/game-2026-09-19-123226-yard-bounds/launch-source-sha256.json new file mode 100644 index 0000000..44e9bd8 --- /dev/null +++ b/docs/evidence/game-2026-09-19-123226-yard-bounds/launch-source-sha256.json @@ -0,0 +1,184 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "417e9b6ab3f2207412fa388fb4ec9ed921db38820982aa811d6dcfa6e1d62054", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "34f8e1730824850ea64f43dcd442e753d079a9795b3b9246813070ed36bb8430", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dd01a9d7d8860f8e0051e275236bdc1a2718906324f0fc9089f0d483ebb791c2", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "3ff1c9e9191f20769fed1e4d7a1363e4109512af76e02aa5e1e6a8766b711951", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/game-2026-09-19-123226-yard-bounds/launch-source.json b/docs/evidence/game-2026-09-19-123226-yard-bounds/launch-source.json new file mode 100644 index 0000000..5ae1c41 --- /dev/null +++ b/docs/evidence/game-2026-09-19-123226-yard-bounds/launch-source.json @@ -0,0 +1,42 @@ +{ + "schema_version": 1, + "launch_id": "93fb0689-374e-4012-9e73-5ed97cdeda8a", + "captured_unix": 1789813944.283383, + "source_root": "/home/jakub/devel/escapistsrereintroduced", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/ArmaReforgerSteam.exe", + "-addonsDir", + "Z:/home/jakub/devel/escapistsrereintroduced/addons", + "-addons", + "FA804F411BDDF2C6", + "-profile", + "Z:/tmp/erri-game-profile", + "-errOrdinaryScenario", + "chat", + "-noSplash", + "-errOrdinaryScreenshot", + "1", + "-noBackend", + "-noSound", + "-noThrow", + "-disableCrashReporter", + "-logconsole" + ], + "manifest_sha256": "3212dfac19d22170caf69d2102b7809b1a1ac18528bd4d5f58090e481c999803" +} diff --git a/docs/evidence/game-2026-09-19-123226-yard-bounds/report.json b/docs/evidence/game-2026-09-19-123226-yard-bounds/report.json new file mode 100644 index 0000000..357eef5 --- /dev/null +++ b/docs/evidence/game-2026-09-19-123226-yard-bounds/report.json @@ -0,0 +1,24 @@ +{ + "log": "docs/evidence/game-2026-09-19-123226-yard-bounds/console.log.txt", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "ordinary local game startup only; no player input, full escape, multiplayer or FPS proof", + "local_participant_verified": true, + "scenario_header_verified": true, + "verified_header_projects": [ + "chat" + ], + "game_module_defines": [ + "PLATFORM_WINDOWS,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", + "PLATFORM_WINDOWS,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" + ], + "workbench_undefined": true, + "normal_mission_ready": true, + "unexpected_smoke_fixture": false, + "failed": false, + "ready": true, + "control_metadata_consistent": true +} diff --git a/docs/evidence/game-2026-09-19-123226-yard-bounds/rereintroduced-hq.log.txt b/docs/evidence/game-2026-09-19-123226-yard-bounds/rereintroduced-hq.log.txt new file mode 100644 index 0000000..7dd07d8 --- /dev/null +++ b/docs/evidence/game-2026-09-19-123226-yard-bounds/rereintroduced-hq.log.txt @@ -0,0 +1,10 @@ +#1 t=7s M0 REGISTER group 1 [session=1789813967-1] +#2 t=7s M0 MORTAR DEPLOY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; authored gun and four-person crew; finite ammunition initialization pending [session=1789813967-1] +#3 t=7.7s M0 COURIER READY trip=0 state=1 delivered=0; 12 distinct original HE shells physically confirmed in existing western cache [session=1789813967-1] +#4 t=9s M0 REGISTER group 2 [session=1789813967-1] +#5 t=9s M0 REGISTER group 3 [session=1789813967-1] +#6 t=9s M0 REGISTER group 4 [session=1789813967-1] +#7 t=9s M0 REGISTER group 5 [session=1789813967-1] +#8 t=9s M0 REGISTER group 6 [session=1789813967-1] +#9 t=9s M0 REGISTER group 7 [session=1789813967-1] +#10 t=18.9s M0 MORTAR CREW READY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; four original physical members, one manpack, 27 confirmed HE; new shell requests=27; allocation permanently closed [session=1789813967-1] diff --git a/docs/evidence/game-2026-09-19-123226-yard-bounds/runner.json.txt b/docs/evidence/game-2026-09-19-123226-yard-bounds/runner.json.txt new file mode 100644 index 0000000..ce0896a --- /dev/null +++ b/docs/evidence/game-2026-09-19-123226-yard-bounds/runner.json.txt @@ -0,0 +1,27 @@ +{ + "stopped_unix": 1789813992.5776913, + "console_sha256": "a0605a7f54a09d69682d2e60693787b153fec330f069b0de319af662d822e849", + "end_source_sha256": "3212dfac19d22170caf69d2102b7809b1a1ac18528bd4d5f58090e481c999803", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "93fb0689-374e-4012-9e73-5ed97cdeda8a", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "3212dfac19d22170caf69d2102b7809b1a1ac18528bd4d5f58090e481c999803", + "started_unix": 1789813944.2834482, + "result": "game-started", + "session": "/tmp/erri-game-profile/logs/logs_2026-09-19_12-32-26", + "project": "chat", + "cleanup_confirmed": true, + "runner_error": null, + "failure_grace_seconds": 0, + "failure_observed_during_polling": false, + "first_failure_elapsed_seconds": null, + "executable": "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/ArmaReforgerSteam.exe", + "dedicated_server": false, + "display": "headless Gamescope", + "audio": "-noSound plus own silent sink", + "control_only": false, + "source_manifest_scope": "successor addon sources", + "scope": "ordinary local game startup only; no player input, full escape, multiplayer or FPS proof" +} diff --git a/docs/evidence/game-2026-09-19-123226-yard-bounds/script.log.txt b/docs/evidence/game-2026-09-19-123226-yard-bounds/script.log.txt new file mode 100644 index 0000000..eeb5101 --- /dev/null +++ b/docs/evidence/game-2026-09-19-123226-yard-bounds/script.log.txt @@ -0,0 +1,243 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-32-26\script.log started at 2026-09-19 12:32:28 (2026-09-19 10:32:28 UTC) + +12:32:28.045 SCRIPT : SCRIPT : Initializing scripts +12:32:28.045 SCRIPT : SCRIPT : ScriptProjectManager init +12:32:28.185 SCRIPT : SCRIPT : Compiling GameLib scripts +12:32:28.240 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 666K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:32:28.241 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:32:28.241 SCRIPT : SCRIPT : Compiling Game scripts +12:32:29.382 SCRIPT : Compiling Game scripts +12:32:29.382 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:32:29.382 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:32:29.614 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:29.624 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:32:29.649 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:32:29.748 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:32:29.748 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:32:29.748 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:32:29.748 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:32:29.780 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:32:29.825 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:32:29.837 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:32:29.837 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:32:29.838 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:32:29.881 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:29.881 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:29.882 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:32:29.882 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:32:29.935 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:32:30.056 SCRIPT : Module: Game; loaded 5779x files; 11201x classes; used 27032K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 68ff9c52 +12:32:30.740 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +12:32:30.750 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +12:32:30.750 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +12:32:30.750 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +12:32:30.750 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +12:32:31.023 SCRIPT : ERR ORDINARY: requesting header project=chat +12:32:32.109 SCRIPT : SCRIPT : Compiling GameLib scripts +12:32:32.160 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 664K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:32:32.161 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:32:32.161 SCRIPT : SCRIPT : Compiling Game scripts +12:32:33.309 SCRIPT : Compiling Game scripts +12:32:33.309 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:32:33.309 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:32:33.548 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:33.560 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:32:33.590 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:32:33.699 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:32:33.699 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:32:33.699 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:32:33.699 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:32:33.731 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:32:33.776 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:32:33.787 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:32:33.787 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:32:33.789 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:32:33.831 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:33.831 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:32:33.833 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:32:33.833 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:32:33.888 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:32:33.998 SCRIPT : Module: Game; loaded 5779x files; 11201x classes; used 27007K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 68ff9c52 +12:32:47.408 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:32:48.405 SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems +12:32:48.411 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:32:48.411 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:32:48.412 SCRIPT (W): Can't open config file "" +12:32:48.412 SCRIPT (W): Cannot update game blocklist. Backend is offline. +12:32:48.413 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:32:48.413 SCRIPT (W): Slot_Chat Has no Content! +12:32:48.413 SCRIPT (W): Slot_VON Has no Content! +12:32:48.413 SCRIPT (W): Slot_AvailableActions Has no Content! +12:32:48.413 SCRIPT (W): Slot_Vehicle Has no Content! +12:32:48.413 SCRIPT (W): Slot_GameVersion Has no Content! +12:32:48.413 SCRIPT (W): Slot_Notifications Has no Content! +12:32:48.413 SCRIPT (W): Slot_Hints Has no Content! +12:32:48.420 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +12:32:48.420 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +12:32:48.420 SCRIPT : Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged. +12:32:48.420 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:32:48.431 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:32:48.441 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:32:48.599 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:32:49.951 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:32:49.965 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:32:49.965 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:32:49.993 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:32:49.995 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:32:50.038 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:32:50.038 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:32:50.045 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:32:50.083 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:32:50.083 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:32:50.084 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:32:50.084 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:32:50.089 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:32:50.090 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:32:50.090 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:32:50.092 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:32:50.092 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:32:50.092 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:32:50.092 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:32:50.092 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:32:50.092 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:32:50.092 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:32:50.092 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:32:50.092 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:32:50.092 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:32:50.092 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:32:50.092 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:32:50.092 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:32:50.092 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:32:50.092 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:32:50.092 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:32:50.092 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:32:50.092 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:32:50.092 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:32:50.998 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:32:50.998 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:32:50.998 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:32:50.998 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:32:51.280 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.06,63.5105,7499.69> up=0.995206 +12:32:51.280 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.116481 angularSpeed=0.0835165 +12:32:51.280 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.3 +12:32:51.280 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.03,63.6102,7501.96> +12:32:51.280 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.03,63.3102,7501.96> terrainY=63.318 tireTerrainGap=-0.00780869 +12:32:51.280 SCRIPT : ERR GEAR SUPPORT: center=<7012.03,63.6102,7501.96> radius=0.3 bottom=<7012.03,63.3102,7501.96> fraction=0.419101 normal=<0.0154358,0.987894,0.154358> self=0 dynamic=0 supported=1 gap=-0.00779724 +12:32:51.280 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.87,64.6117,7497.69> +12:32:51.280 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.87,64.1617,7497.69> terrainY=64.1573 tireTerrainGap=0.00445557 +12:32:51.280 SCRIPT : ERR GEAR SUPPORT: center=<7009.87,64.6117,7497.69> radius=0.45 bottom=<7009.87,64.1617,7497.69> fraction=0.474747 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00444794 +12:32:51.280 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2594,7497.76> +12:32:51.280 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8094,7497.76> terrainY=63.8174 tireTerrainGap=-0.00797653 +12:32:51.280 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2594,7497.76> radius=0.45 bottom=<7014.42,63.8094,7497.76> fraction=0.418333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00796509 +12:32:51.280 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:32:51.518 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:32:51.518 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:32:51.518 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:32:51.518 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:32:52.080 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:32:52.080 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:32:52.081 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:32:52.347 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5432,7499.72> up=0.994166 +12:32:52.347 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0826066 angularSpeed=0.0524362 +12:32:52.347 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:32:52.347 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6157,7501.99> +12:32:52.347 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3157,7501.99> terrainY=63.3138 tireTerrainGap=0.00190735 +12:32:52.347 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6157,7501.99> radius=0.3 bottom=<7012.06,63.3157,7501.99> fraction=0.463305 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00192642 +12:32:52.347 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6056,7497.71> +12:32:52.347 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1556,7497.71> terrainY=64.1494 tireTerrainGap=0.00623322 +12:32:52.347 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6056,7497.71> radius=0.45 bottom=<7009.92,64.1556,7497.71> fraction=0.483184 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00630188 +12:32:52.347 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2651,7497.79> +12:32:52.347 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8151,7497.79> terrainY=63.8153 tireTerrainGap=-0.00019455 +12:32:52.347 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2651,7497.79> radius=0.45 bottom=<7014.46,63.8151,7497.79> fraction=0.453611 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000205994 +12:32:52.347 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:32:52.614 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:32:52.614 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:32:52.614 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:32:52.614 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:32:52.880 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:32:53.147 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:32:53.147 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:32:53.147 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:32:53.147 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:32:53.414 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.528,7499.75> up=0.994188 +12:32:53.414 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0947671 angularSpeed=0.0470851 +12:32:53.414 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:32:53.414 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6112,7502.02> +12:32:53.414 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3112,7502.02> terrainY=63.3108 tireTerrainGap=0.000335693 +12:32:53.414 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6112,7502.02> radius=0.3 bottom=<7012.07,63.3112,7502.02> fraction=0.455886 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000293732 +12:32:53.414 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5961,7497.73> +12:32:53.414 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1461,7497.73> terrainY=64.1424 tireTerrainGap=0.00373077 +12:32:53.414 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5961,7497.73> radius=0.45 bottom=<7009.97,64.1461,7497.73> fraction=0.471677 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00376892 +12:32:53.414 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2605,7497.84> +12:32:53.414 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8105,7497.84> terrainY=63.8123 tireTerrainGap=-0.00179672 +12:32:53.414 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2605,7497.84> radius=0.45 bottom=<7014.51,63.8105,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +12:32:53.414 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:32:53.680 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:32:53.680 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:32:53.681 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:32:53.681 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:32:54.214 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:32:54.214 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:32:54.214 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:32:54.214 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:32:54.480 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.529,7499.76> up=0.994199 +12:32:54.480 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:32:54.480 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:32:54.480 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6106,7502.03> +12:32:54.480 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3106,7502.03> terrainY=63.3103 tireTerrainGap=0.000255585 +12:32:54.480 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6106,7502.03> radius=0.3 bottom=<7012.08,63.3106,7502.03> fraction=0.455608 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000232697 +12:32:54.480 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.73> +12:32:54.480 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.73> terrainY=64.1418 tireTerrainGap=0.00296783 +12:32:54.480 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.73> radius=0.45 bottom=<7009.97,64.1448,7497.73> fraction=0.468013 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00296783 +12:32:54.480 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:32:54.480 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00178146 +12:32:54.480 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +12:32:54.480 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:32:54.747 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:32:54.747 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:32:54.747 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:32:54.747 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:32:55.280 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:32:55.280 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:32:55.280 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:32:55.281 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:32:55.547 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.529,7499.76> up=0.994199 +12:32:55.547 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:32:55.547 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:32:55.547 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6106,7502.03> +12:32:55.547 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3106,7502.03> terrainY=63.3103 tireTerrainGap=0.000255585 +12:32:55.547 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6106,7502.03> radius=0.3 bottom=<7012.08,63.3106,7502.03> fraction=0.455608 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000232697 +12:32:55.547 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.73> +12:32:55.547 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.73> terrainY=64.1418 tireTerrainGap=0.00296783 +12:32:55.547 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.73> radius=0.45 bottom=<7009.97,64.1448,7497.73> fraction=0.468013 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00296783 +12:32:55.547 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:32:55.547 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00178146 +12:32:55.547 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +12:32:55.547 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:32:55.813 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:32:55.814 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:32:55.826 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:32:55.827 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:32:55.827 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:32:55.827 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:32:55.827 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:32:55.827 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:32:55.827 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:32:56.517 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:32:56.556 SCRIPT : ERR ORDINARY: local participant verified project=chat phase=prison +12:32:56.556 SCRIPT : ERR ORDINARY: optional prisoner screenshot queued after finalized admission +12:32:56.556 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +12:32:59.583 SCRIPT : ERR YARD: prison world origin=<6090,211.444,7160> basisX=<1,-0,0> basisY=<0,1,-0> basisZ=<0,0,1> +12:32:59.584 SCRIPT : ERR YARD: decal=1 type=DecalEntity prefab= worldMin=<6090,211.444,7160> worldMax=<6090,211.444,7160> +12:32:59.584 SCRIPT : ERR YARD: decal=1 world origin=<6090,211.444,7160> basisX=<3,0,0> basisY=<0,-1.31134e-07,3> basisZ=<-0,-3,-1.31134e-07> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=0/0/0 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=0/0/1 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=0/1/0 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=0/1/1 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=1/0/0 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=1/0/1 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=1/1/0 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: decal=1 corner=1/1/1 prisonLocal=<0,0,0> +12:32:59.584 SCRIPT : ERR YARD: measurement complete nodes=18 decals=1; bounds do not certify clutter-mask coverage +12:32:59.597 SCRIPT : ERR ORDINARY: optional prisoner screenshot requested without camera or input changes diff --git a/docs/evidence/game-2026-09-19-123226-yard-bounds/source-provenance.json b/docs/evidence/game-2026-09-19-123226-yard-bounds/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/game-2026-09-19-123226-yard-bounds/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/game-2026-09-19-123226-yard-bounds/source-sha256.json b/docs/evidence/game-2026-09-19-123226-yard-bounds/source-sha256.json new file mode 100644 index 0000000..44e9bd8 --- /dev/null +++ b/docs/evidence/game-2026-09-19-123226-yard-bounds/source-sha256.json @@ -0,0 +1,184 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "417e9b6ab3f2207412fa388fb4ec9ed921db38820982aa811d6dcfa6e1d62054", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "34f8e1730824850ea64f43dcd442e753d079a9795b3b9246813070ed36bb8430", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dd01a9d7d8860f8e0051e275236bdc1a2718906324f0fc9089f0d483ebb791c2", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "3ff1c9e9191f20769fed1e4d7a1363e4109512af76e02aa5e1e6a8766b711951", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/console.log.txt b/docs/evidence/game-2026-09-19-125906-integrated-prison/console.log.txt new file mode 100644 index 0000000..3e76792 --- /dev/null +++ b/docs/evidence/game-2026-09-19-125906-integrated-prison/console.log.txt @@ -0,0 +1,506 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-59-06\console.log started at 2026-09-19 12:59:06 (2026-09-19 10:59:06 UTC) + +12:59:06.736 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-59-06' to filesystem under name logs +12:59:06.736 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-game-profile\profile' to filesystem under name profile +12:59:06.736 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger\' +12:59:06.738 ENGINE : Initializing engine, version 192142 +12:59:06.738 ENGINE : CLI Params: -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/addons -addons FA804F411BDDF2C6 -profile Z:/tmp/erri-game-profile -errOrdinaryScenario chat -noSplash -errOrdinaryScreenshot 1 -noBackend -noSound -noThrow -disableCrashReporter -logconsole +12:59:06.747 ENGINE : Addon dirs: +12:59:06.747 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +12:59:06.747 ENGINE : dir: './addons' +12:59:06.747 ENGINE : dir: 'Z:/tmp/erri-game-profile/addons' +12:59:06.747 ENGINE : Available addons: +12:59:06.747 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:59:06.747 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:59:06.747 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:59:06.747 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:59:06.747 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:59:06.747 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +12:59:06.747 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +12:59:06.748 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +12:59:06.748 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +12:59:06.748 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +12:59:06.748 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +12:59:06.749 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +12:59:06.879 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +12:59:06.882 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +12:59:06.882 ENGINE : CPU vendor : AuthenticAMD +12:59:06.882 ENGINE : CPU type : 2 +12:59:06.882 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +12:59:06.882 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +12:59:06.882 ENGINE : CPU count logical : 16 +12:59:06.882 ENGINE : CPU count physical : 8 +12:59:06.882 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +12:59:06.882 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:59:06.882 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:59:06.882 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:59:06.883 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:59:06.883 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:59:06.883 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +12:59:07.021 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +12:59:07.023 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-game-profile\profile/resourceDatabase.rdb) +12:59:07.023 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-59-06/resourceDatabase.rdb) +12:59:07.171 ENGINE : GameProject load +12:59:07.171 ENGINE : Loaded addons: +12:59:07.171 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +12:59:07.171 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +12:59:07.171 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:59:07.171 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:59:07.171 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:59:07.171 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:59:07.171 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:59:07.174 ENGINE : Loading custom engine user config '$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf' +12:59:07.174 INIT : GameProject engine user settings load @"$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf" +12:59:07.174 ENGINE : Engine user settings config loaded +12:59:07.174 PROFILING : Settings changed took: 0.001600 ms +12:59:07.174 ENGINE : Locale info: system en-US (English), user en-US (English) +12:59:07.313 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +12:59:07.314 RENDER : Basic screen setup: +12:59:07.314 RENDER : Back buffer width x height: 1280x720 +12:59:07.314 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +12:59:07.314 RENDER : MSAA : none +12:59:07.329 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +12:59:07.329 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +12:59:07.329 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +12:59:07.329 RENDER : * core clocks 2720 MHz, memory 1124 MHz +12:59:07.329 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +12:59:07.329 RENDER : AMD AGS correctly initialized +12:59:07.330 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +12:59:07.330 RENDER : Detected output devices: +12:59:07.330 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +12:59:07.330 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +12:59:07.330 RENDER : Concurrent frames limit 2 +12:59:07.424 RENDER : DX12 device successfully created by AMD AGS library +12:59:07.424 RENDER : * user markers not supported in this version AMD SW +12:59:07.424 RENDER : Graphics device features +12:59:07.424 RENDER : Needed: +12:59:07.424 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +12:59:07.424 RENDER : Optional: +12:59:07.424 RENDER : * Allow tearing (VSYNC) : 1 +12:59:07.424 RENDER : * 16 bits : 1 +12:59:07.424 RENDER : * Resource heap tier : 3 +12:59:07.424 RENDER : * Persistent heaps (DRED) : 1 +12:59:07.424 RENDER : * DRED 1.2 is supported by compiler +12:59:07.448 RENDER : Main RT format setup. +12:59:07.448 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +12:59:07.448 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +12:59:07.454 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7 +12:59:07.481 PROFILING : Settings changed took: 1.080000 ms +12:59:07.489 RENDER : RENDER : Reload shaders +12:59:07.489 RENDER : Enfusion shader version 13 +12:59:07.489 INIT : INIT : ShaderListReload +12:59:07.489 PROFILING : ShaderListReload took: 0.000400 ms +12:59:08.701 RENDER : Loaded 3383 newer shader binaries +12:59:08.701 PROFILING : Reload shaders took: 1212.321900 ms +12:59:08.704 ENGINE : Initializing inputs. +12:59:08.717 NETWORK : Initializing networking. +12:59:08.717 NETWORK : Using new GameRplScheduler. +12:59:08.717 SCRIPT : SCRIPT : Initializing scripts +12:59:08.718 SCRIPT : SCRIPT : ScriptProjectManager init +12:59:08.718 PROFILING : ScriptProjectManager init took: 0.011600 ms +12:59:08.802 PROFILING : Initializing scripts took: 84.225700 ms +12:59:08.802 BACKEND : Backend Services are disabled. +12:59:08.802 ENGINE : Enfusion engine successfully created. +12:59:08.808 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:59:08.831 GUI : Using default language (en_us) +12:59:08.831 GUI : Loading 'en_us' localization file. +12:59:08.831 INIT : INIT : Loading StringTable +12:59:08.857 PROFILING : Loading StringTable took: 25.477600 ms +12:59:08.857 SCRIPT : SCRIPT : Compiling GameLib scripts +12:59:08.911 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 666K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:59:08.911 PROFILING : Compiling GameLib scripts took: 54.656000 ms +12:59:08.911 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:59:08.912 SCRIPT : SCRIPT : Compiling Game scripts +12:59:10.066 SCRIPT : Compiling Game scripts +12:59:10.066 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:59:10.066 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:59:10.303 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:10.314 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:59:10.340 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:59:10.444 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:59:10.444 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:59:10.444 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:59:10.444 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:59:10.477 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:59:10.533 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:59:10.550 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:59:10.550 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:59:10.551 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:59:10.594 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:10.594 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:10.596 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:59:10.596 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:59:10.648 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:59:10.765 SCRIPT : Module: Game; loaded 5780x files; 11202x classes; used 27041K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 6264db09 +12:59:10.794 PROFILING : Compiling Game scripts took: 1882.087000 ms +12:59:10.794 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:59:10.832 ENGINE : Game successfully created. +12:59:10.895 PLATFORM : Save data from container 'settings' have been loaded +12:59:10.994 PLATFORM : Save data from container 'sessions' have been loaded +12:59:11.397 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +12:59:11.397 ENGINE : Game user settings config loaded +12:59:11.494 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission 'worlds/MainMenuWorld/MainMenuWorld.ent'. +12:59:11.495 WORLD : WORLD : Entities load 'worlds/MainMenuWorld/MainMenuWorld.ent' +12:59:11.495 PROFILING : Entities load took: 0.706200 ms +12:59:11.497 WORLD : WORLD : Game::LoadEntities +12:59:11.497 WORLD : WORLD : Initializing world systems +12:59:11.498 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +12:59:11.498 WORLD : WORLD : CreateEntities +12:59:11.498 WORLD : WORLD : CreateEntities +12:59:11.498 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:59:11.510 RESOURCES : Loaded mission headers from 7 addon(s)! +12:59:11.510 PROFILING : NotifyBeforeEntitiesCreated took: 11.925800 ms +12:59:11.510 WORLD : WORLD : Wait for preloading data +12:59:11.510 PROFILING : Wait for preloading data took: 0.000800 ms +12:59:11.511 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:59:11.511 PROFILING : NotifyBeforeEntitiesInitialized took: 0.025800 ms +12:59:11.511 WORLD : InitEntities 'world' +12:59:11.511 ENTITY : Init entity @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> +12:59:11.511 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +12:59:11.521 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +12:59:11.521 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +12:59:11.521 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +12:59:11.521 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +12:59:11.521 WORLD : WORLD : NotifyEntitiesInitialized +12:59:11.521 DEFAULT : DEFAULT : WorldVolumesCollection +12:59:11.521 PROFILING : WorldVolumesCollection took: 0.006600 ms +12:59:11.521 PROFILING : NotifyEntitiesInitialized took: 0.092000 ms +12:59:11.521 PROFILING : CreateEntities took: 22.469100 ms +12:59:11.521 PROFILING : CreateEntities took: 22.476700 ms +12:59:11.521 WORLD : WORLD : EOnActivate +12:59:11.521 PROFILING : EOnActivate took: 0.002500 ms +12:59:11.521 PROFILING : Game::LoadEntities took: 23.978100 ms +12:59:11.694 DEFAULT : Entered main menu. +12:59:11.793 DEFAULT (W): No GameMode present in the world, using fallback logic! +12:59:11.795 SCRIPT : ERR ORDINARY: requesting header project=chat +12:59:12.317 ENGINE : Game destroyed. +12:59:12.453 ENGINE : Addon dirs: +12:59:12.453 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +12:59:12.453 ENGINE : dir: './addons' +12:59:12.453 ENGINE : dir: 'Z:/tmp/erri-game-profile/addons' +12:59:12.453 ENGINE : dir: '$profile:../addons/' +12:59:12.453 ENGINE : Available addons: +12:59:12.453 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:59:12.453 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:59:12.453 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:59:12.453 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:59:12.453 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:59:12.453 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +12:59:12.453 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +12:59:12.453 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +12:59:12.454 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +12:59:12.454 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +12:59:12.454 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +12:59:12.454 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +12:59:12.562 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +12:59:12.565 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +12:59:12.565 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:59:12.566 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:59:12.566 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:59:12.566 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:59:12.567 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:59:12.567 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +12:59:12.692 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +12:59:12.693 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-game-profile\profile/resourceDatabase.rdb) +12:59:12.693 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-59-06/resourceDatabase.rdb) +12:59:12.843 ENGINE : GameProject load +12:59:12.843 ENGINE : Loaded addons: +12:59:12.843 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +12:59:12.843 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +12:59:12.843 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:59:12.843 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:59:12.843 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:59:12.843 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:59:12.843 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:59:12.866 GUI : Using default language (en_us) +12:59:12.866 GUI : Loading 'en_us' localization file. +12:59:12.866 INIT : INIT : Loading StringTable +12:59:12.886 PROFILING : Loading StringTable took: 19.908400 ms +12:59:12.886 SCRIPT : SCRIPT : Compiling GameLib scripts +12:59:12.940 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 664K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:59:12.940 PROFILING : Compiling GameLib scripts took: 53.996800 ms +12:59:12.940 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:59:12.940 SCRIPT : SCRIPT : Compiling Game scripts +12:59:14.099 SCRIPT : Compiling Game scripts +12:59:14.099 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:59:14.099 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:59:14.355 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:14.367 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:59:14.397 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:59:14.494 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:59:14.494 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:59:14.494 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:59:14.494 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:59:14.529 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:59:14.578 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:59:14.596 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:59:14.596 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:59:14.599 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:59:14.665 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:14.665 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:14.668 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:59:14.668 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:59:14.757 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:59:14.930 SCRIPT : Module: Game; loaded 5780x files; 11202x classes; used 27014K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 6264db09 +12:59:14.969 PROFILING : Compiling Game scripts took: 2028.536200 ms +12:59:14.969 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:59:15.002 ENGINE : Game successfully created. +12:59:15.079 PLATFORM : Save data from container 'settings' have been loaded +12:59:15.181 PLATFORM : Save data from container 'sessions' have been loaded +12:59:15.181 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +12:59:15.181 ENGINE : Game user settings config loaded +12:59:15.276 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{C1E20667DCE324ED}Missions/ERR_Everon.conf'. +12:59:15.277 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +12:59:16.246 PROFILING : Entities load took: 969.485400 ms +12:59:16.249 WORLD : WORLD : Game::LoadEntities +12:59:16.249 WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" +12:59:16.250 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +12:59:16.250 WORLD : WORLD : CreateEntities +12:59:16.250 WORLD : WORLD : CreateEntities +12:59:16.250 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:59:16.263 RESOURCES : Loaded mission headers from 7 addon(s)! +12:59:16.263 PROFILING : NotifyBeforeEntitiesCreated took: 12.452400 ms +12:59:16.263 WORLD : WORLD : Wait for preloading data +12:59:16.880 PROFILING : Wait for preloading data took: 617.586600 ms +12:59:16.990 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +12:59:16.990 PROFILING : PROFILING : Terrain load +12:59:18.967 PROFILING : Terrain load took: 1976.251400 ms +12:59:21.647 WORLD : Game::LoadEntities +12:59:21.647 WORLD : CreateEntities +12:59:21.647 WORLD : CreateEntities +12:59:21.647 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" +12:59:21.647 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:59:21.647 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:59:27.581 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:59:27.581 PROFILING : NotifyBeforeEntitiesInitialized took: 0.052100 ms +12:59:28.153 WORLD : InitEntities 'world' +12:59:28.153 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:59:28.153 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:59:28.175 WORLD : WORLD : NotifyEntitiesInitialized +12:59:28.175 TERRAIN : TERRAIN : Initializing road networks... +12:59:28.179 PROFILING : Initializing road networks... took: 4.000500 ms +12:59:28.179 DEFAULT : DEFAULT : WorldVolumesCollection +12:59:28.236 PROFILING : WorldVolumesCollection took: 57.175200 ms +12:59:28.236 INIT : INIT : SoundWorldInit +12:59:28.251 PROFILING : SoundWorldInit took: 14.562100 ms +12:59:28.251 PROFILING : NotifyEntitiesInitialized took: 75.895200 ms +12:59:28.251 PROFILING : CreateEntities took: 12000.478600 ms +12:59:28.251 PROFILING : CreateEntities took: 12000.663200 ms +12:59:28.252 WORLD : WORLD : Wait for preloading data around camera +12:59:28.502 PROFILING : Wait for preloading data around camera took: 250.270500 ms +12:59:28.502 WORLD : WORLD : EOnActivate +12:59:28.532 PROFILING : EOnActivate took: 29.815900 ms +12:59:28.532 PROFILING : Game::LoadEntities took: 12283.267500 ms +12:59:29.018 DEFAULT : Entered offline game state. +12:59:29.122 SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems +12:59:29.122 NETWORK : Player connected: connectionID=2147483646 +12:59:29.122 NETWORK : ### Connecting player: connectionID=2147483646, Name= +12:59:29.122 NETWORK : ### Creating player: PlayerId=1, Name=jakub +12:59:29.126 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:59:29.126 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:59:29.126 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:59:29.126 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:59:29.126 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:59:29.128 SCRIPT (W): Can't open config file "" +12:59:29.128 SCRIPT (W): Cannot update game blocklist. Backend is offline. +12:59:29.129 WORLD : InitEntities 'world' +12:59:29.129 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:59:29.129 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:59:29.129 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:59:29.129 SCRIPT (W): Slot_Chat Has no Content! +12:59:29.129 SCRIPT (W): Slot_VON Has no Content! +12:59:29.129 SCRIPT (W): Slot_AvailableActions Has no Content! +12:59:29.129 SCRIPT (W): Slot_Vehicle Has no Content! +12:59:29.129 SCRIPT (W): Slot_GameVersion Has no Content! +12:59:29.129 SCRIPT (W): Slot_Notifications Has no Content! +12:59:29.129 SCRIPT (W): Slot_Hints Has no Content! +12:59:29.134 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +12:59:29.135 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +12:59:29.135 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +12:59:29.135 SCRIPT : Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged. +12:59:29.135 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:59:29.135 NETWORK : Players connecting: 0 +12:59:29.135 NETWORK : Players connected: 1 / 1 +12:59:29.147 WORLD : Frame start +12:59:29.147 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:59:29.158 WORLD : UpdateEntities +12:59:29.158 WORLD : Frame +12:59:29.158 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:59:29.331 WORLD : UpdateEntities +12:59:29.331 WORLD : PostFrame +12:59:29.331 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:59:29.331 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:59:29.378 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:59:29.378 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:59:29.378 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:59:29.378 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +12:59:29.512 RENDER : RENDER : ObjectsHeightMap::Build +12:59:29.512 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +12:59:29.666 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 154.044000 ms +12:59:29.675 PROFILING : ObjectsHeightMap::Build took: 162.661300 ms +12:59:30.674 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:59:30.688 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:59:30.688 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:59:30.712 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:59:30.714 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:59:30.760 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:59:30.760 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:59:30.766 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:59:30.804 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:59:30.804 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:59:30.805 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:59:30.805 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:59:30.809 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:59:30.810 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:59:30.810 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:59:30.811 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:59:30.811 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:59:30.811 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:59:30.811 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:59:30.811 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:59:30.811 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:59:30.811 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:59:30.811 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:59:30.811 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:59:30.811 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:59:30.811 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:59:30.811 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:59:30.811 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:59:30.811 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:59:30.811 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:59:30.811 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:59:30.811 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:59:30.811 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:59:30.811 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:59:31.444 WORLD : UpdateEntities +12:59:31.444 WORLD : AfterPostSimulate +12:59:31.444 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +12:59:31.725 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:59:31.725 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:59:31.725 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:59:31.725 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:59:32.003 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.07,63.5096,7499.7> up=0.995339 +12:59:32.003 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.120022 angularSpeed=0.101374 +12:59:32.003 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:59:32.003 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.05,63.6087,7501.97> +12:59:32.003 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.05,63.3087,7501.97> terrainY=63.3171 tireTerrainGap=-0.00841141 +12:59:32.003 SCRIPT : ERR GEAR SUPPORT: center=<7012.05,63.6087,7501.97> radius=0.3 bottom=<7012.05,63.3087,7501.97> fraction=0.416807 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00830078 +12:59:32.003 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6082,7497.71> +12:59:32.003 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1582,7497.71> terrainY=64.1562 tireTerrainGap=0.00197601 +12:59:32.003 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6082,7497.71> radius=0.45 bottom=<7009.88,64.1582,7497.71> fraction=0.463825 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00204468 +12:59:32.003 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2588,7497.75> +12:59:32.003 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8088,7497.75> terrainY=63.8176 tireTerrainGap=-0.00882339 +12:59:32.003 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2588,7497.75> radius=0.45 bottom=<7014.42,63.8088,7497.75> fraction=0.414444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00882339 +12:59:32.003 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:59:32.246 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:59:32.246 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:59:32.246 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:59:32.246 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:59:32.804 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:59:32.804 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:59:32.804 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:59:33.070 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5428,7499.73> up=0.994212 +12:59:33.070 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0951692 angularSpeed=0.0210434 +12:59:33.070 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:59:33.070 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6165,7502> +12:59:33.070 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3165,7502> terrainY=63.3122 tireTerrainGap=0.00423431 +12:59:33.070 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6165,7502> radius=0.3 bottom=<7012.06,63.3165,7502> fraction=0.473567 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00418472 +12:59:33.070 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6042,7497.73> +12:59:33.070 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1542,7497.73> terrainY=64.1486 tireTerrainGap=0.00563812 +12:59:33.070 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6042,7497.73> radius=0.45 bottom=<7009.92,64.1542,7497.73> fraction=0.480651 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00574493 +12:59:33.070 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2633,7497.8> +12:59:33.070 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8133,7497.8> terrainY=63.8148 tireTerrainGap=-0.00149918 +12:59:33.070 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2633,7497.8> radius=0.45 bottom=<7014.46,63.8133,7497.8> fraction=0.447778 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00148773 +12:59:33.070 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:59:33.304 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:59:33.304 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:59:33.304 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:59:33.304 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:59:33.570 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:59:33.804 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:59:33.804 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:59:33.804 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:59:34.104 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5277,7499.76> up=0.994268 +12:59:34.104 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0420957 angularSpeed=0.0531252 +12:59:34.104 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:59:34.104 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6121,7502.03> +12:59:34.104 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3121,7502.03> terrainY=63.31 tireTerrainGap=0.00210571 +12:59:34.104 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6121,7502.03> radius=0.3 bottom=<7012.07,63.3121,7502.03> fraction=0.464236 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00213242 +12:59:34.104 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5926,7497.74> +12:59:34.104 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1426,7497.74> terrainY=64.1416 tireTerrainGap=0.00100708 +12:59:34.105 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5926,7497.74> radius=0.45 bottom=<7009.97,64.1426,7497.74> fraction=0.459035 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.000991821 +12:59:34.105 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2584,7497.85> +12:59:34.105 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8084,7497.85> terrainY=63.8117 tireTerrainGap=-0.00335312 +12:59:34.105 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2584,7497.85> radius=0.45 bottom=<7014.51,63.8084,7497.85> fraction=0.439167 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00338364 +12:59:34.105 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:59:34.370 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:59:34.370 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:59:34.370 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:59:34.370 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:59:34.871 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:59:34.871 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:59:34.871 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:59:34.871 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:59:35.170 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.528,7499.77> up=0.994262 +12:59:35.170 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:59:35.170 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:59:35.170 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6113,7502.04> +12:59:35.170 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3113,7502.04> terrainY=63.3094 tireTerrainGap=0.00187302 +12:59:35.170 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6113,7502.04> radius=0.3 bottom=<7012.08,63.3113,7502.04> fraction=0.462844 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00182724 +12:59:35.170 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5924,7497.74> +12:59:35.170 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1424,7497.74> terrainY=64.1406 tireTerrainGap=0.00183868 +12:59:35.170 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5924,7497.74> radius=0.45 bottom=<7009.98,64.1424,7497.74> fraction=0.463264 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00192261 +12:59:35.170 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2587,7497.86> +12:59:35.170 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8087,7497.86> terrainY=63.8112 tireTerrainGap=-0.00245285 +12:59:35.170 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2587,7497.86> radius=0.45 bottom=<7014.52,63.8087,7497.86> fraction=0.443333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00246811 +12:59:35.170 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:59:35.437 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:59:35.437 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:59:35.437 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:59:35.437 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:59:35.970 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:59:35.971 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:59:35.971 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:59:35.971 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:59:36.237 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.528,7499.77> up=0.994262 +12:59:36.237 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:59:36.237 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:59:36.237 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6113,7502.04> +12:59:36.237 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3113,7502.04> terrainY=63.3094 tireTerrainGap=0.00187302 +12:59:36.237 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6113,7502.04> radius=0.3 bottom=<7012.08,63.3113,7502.04> fraction=0.462844 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00182724 +12:59:36.237 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5924,7497.74> +12:59:36.237 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1424,7497.74> terrainY=64.1406 tireTerrainGap=0.00183868 +12:59:36.237 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5924,7497.74> radius=0.45 bottom=<7009.98,64.1424,7497.74> fraction=0.463264 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00192261 +12:59:36.237 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2587,7497.86> +12:59:36.237 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8087,7497.86> terrainY=63.8112 tireTerrainGap=-0.00245285 +12:59:36.237 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2587,7497.86> radius=0.45 bottom=<7014.52,63.8087,7497.86> fraction=0.443333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00246811 +12:59:36.237 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:59:36.504 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:59:36.504 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:59:36.504 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:59:36.516 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:59:36.516 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:59:36.516 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:59:36.516 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:59:36.517 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:59:36.517 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:59:36.517 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:59:37.206 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:59:37.242 SCRIPT : ERR ORDINARY: local participant verified project=chat phase=prison +12:59:37.242 SCRIPT : ERR ORDINARY: optional prisoner screenshot queued after finalized admission +12:59:37.242 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +12:59:40.275 SCRIPT : ERR YARD: prison world origin=<6090,211.444,7160> basisX=<1,-0,0> basisY=<0,1,-0> basisZ=<0,0,1> +12:59:40.275 SCRIPT : ERR YARD: decal=1 type=DecalEntity prefab= worldMin=<6090,211.444,7160> worldMax=<6090,211.444,7160> +12:59:40.275 SCRIPT : ERR YARD: decal=1 world origin=<6090,211.444,7160> basisX=<10,0,0> basisY=<0,-4.37114e-07,10> basisZ=<-0,-10,-4.37114e-07> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=0/0/0 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=0/0/1 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=0/1/0 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=0/1/1 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=1/0/0 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=1/0/1 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=1/1/0 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=1/1/1 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: measurement complete nodes=18 decals=1; bounds do not certify clutter-mask coverage +12:59:40.288 ENGINE : Screenshot successfully saved into $logs:err-ordinary-prison (1280x720) +12:59:40.288 SCRIPT : ERR ORDINARY: optional prisoner screenshot requested without camera or input changes diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/err-ordinary-prison.bmp b/docs/evidence/game-2026-09-19-125906-integrated-prison/err-ordinary-prison.bmp new file mode 100644 index 0000000..40a447c Binary files /dev/null and b/docs/evidence/game-2026-09-19-125906-integrated-prison/err-ordinary-prison.bmp differ diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/error.log.txt b/docs/evidence/game-2026-09-19-125906-integrated-prison/error.log.txt new file mode 100644 index 0000000..73c7de6 --- /dev/null +++ b/docs/evidence/game-2026-09-19-125906-integrated-prison/error.log.txt @@ -0,0 +1,84 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-59-06\error.log started at 2026-09-19 12:59:08 (2026-09-19 10:59:08 UTC) + +12:59:08.808 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:59:10.066 SCRIPT : Compiling Game scripts +12:59:10.066 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:59:10.066 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:59:10.303 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:10.314 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:59:10.340 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:59:10.444 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:59:10.444 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:59:10.444 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:59:10.444 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:59:10.477 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:59:10.533 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:59:10.550 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:59:10.550 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:59:10.551 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:59:10.594 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:10.594 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:10.596 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:59:10.596 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:59:10.648 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:59:11.793 DEFAULT (W): No GameMode present in the world, using fallback logic! +12:59:14.099 SCRIPT : Compiling Game scripts +12:59:14.099 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:59:14.099 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:59:14.355 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:14.367 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:59:14.397 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:59:14.494 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:59:14.494 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:59:14.494 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:59:14.494 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:59:14.529 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:59:14.578 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:59:14.596 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:59:14.596 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:59:14.599 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:59:14.665 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:14.665 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:14.668 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:59:14.668 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:59:14.757 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:59:21.647 WORLD : Game::LoadEntities +12:59:21.647 WORLD : CreateEntities +12:59:21.647 WORLD : CreateEntities +12:59:21.647 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" +12:59:21.647 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:59:21.647 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:59:28.153 WORLD : InitEntities 'world' +12:59:28.153 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:59:28.153 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:59:29.126 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:59:29.126 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:59:29.126 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:59:29.126 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:59:29.126 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:59:29.128 SCRIPT (W): Can't open config file "" +12:59:29.128 SCRIPT (W): Cannot update game blocklist. Backend is offline. +12:59:29.129 WORLD : InitEntities 'world' +12:59:29.129 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:59:29.129 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:59:29.129 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:59:29.129 SCRIPT (W): Slot_Chat Has no Content! +12:59:29.129 SCRIPT (W): Slot_VON Has no Content! +12:59:29.129 SCRIPT (W): Slot_AvailableActions Has no Content! +12:59:29.129 SCRIPT (W): Slot_Vehicle Has no Content! +12:59:29.129 SCRIPT (W): Slot_GameVersion Has no Content! +12:59:29.129 SCRIPT (W): Slot_Notifications Has no Content! +12:59:29.129 SCRIPT (W): Slot_Hints Has no Content! +12:59:29.135 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:59:29.331 WORLD : UpdateEntities +12:59:29.331 WORLD : PostFrame +12:59:29.331 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:59:29.331 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:59:29.378 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:59:29.378 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:59:29.378 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:59:29.378 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +12:59:31.444 WORLD : UpdateEntities +12:59:31.444 WORLD : AfterPostSimulate +12:59:31.444 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/game-startup-report.json.txt b/docs/evidence/game-2026-09-19-125906-integrated-prison/game-startup-report.json.txt new file mode 100644 index 0000000..82f8203 --- /dev/null +++ b/docs/evidence/game-2026-09-19-125906-integrated-prison/game-startup-report.json.txt @@ -0,0 +1,24 @@ +{ + "log": "console.log", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "ordinary local game startup only; no player input, full escape, multiplayer or FPS proof", + "local_participant_verified": true, + "scenario_header_verified": true, + "verified_header_projects": [ + "chat" + ], + "game_module_defines": [ + "PLATFORM_WINDOWS,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", + "PLATFORM_WINDOWS,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" + ], + "workbench_undefined": true, + "normal_mission_ready": true, + "unexpected_smoke_fixture": false, + "failed": false, + "ready": true, + "failure_observed_during_polling": false +} diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/headless-launch.log.txt b/docs/evidence/game-2026-09-19-125906-integrated-prison/headless-launch.log.txt new file mode 100644 index 0000000..638c706 --- /dev/null +++ b/docs/evidence/game-2026-09-19-125906-integrated-prison/headless-launch.log.txt @@ -0,0 +1,139 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 132 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerSteam.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: (null) + applicationVersion: 0 + pEngineName: (null) + engineVersion: 0 + apiVersion: 4198400 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: (null) + applicationVersion: 0 + pEngineName: (null) + engineVersion: 0 + apiVersion: 4198400 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a00030 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a00030 +[Gamescope WSI] Surface state: + steam app id: 1874880 + window xid: 0x1a00030 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating swapchain for xid: 0x1a00030 - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_R8G8B8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true +[Gamescope WSI] Created swapchain for xid: 0x1a00030 swapchain: 0x7f04ac1815c0 - imageCount: 3 +[Gamescope WSI] Destroying swapchain: 0x7f04ac1815c0 +[Gamescope WSI] Destroyed swapchain: 0x7f04ac1815c0 +[Gamescope WSI] Creating swapchain for xid: 0x1a00030 - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_R8G8B8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true +[Gamescope WSI] Created swapchain for xid: 0x1a00030 swapchain: 0x7f04ac1815c0 - imageCount: 3 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/image-conversion.json b/docs/evidence/game-2026-09-19-125906-integrated-prison/image-conversion.json new file mode 100644 index 0000000..3243137 --- /dev/null +++ b/docs/evidence/game-2026-09-19-125906-integrated-prison/image-conversion.json @@ -0,0 +1,11 @@ +{ + "source": "err-ordinary-prison.bmp", + "source_sha256": "105996346f34a96cac15656bc4266a37d3ef44a69f392bef428d074f8aa27315", + "derived": "ordinary-prison-view.png", + "derived_sha256": "f184dc30ee847163b0fa9e79de8b948405668bef6f331504ac6c8b6f4cc645e3", + "operation": "Lossless BMP to PNG conversion with Pillow; unchanged dimensions and pixels; no crop, resize, overlays or retouching.", + "dimensions": [ + 1280, + 720 + ] +} diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/launch-source-sha256.json b/docs/evidence/game-2026-09-19-125906-integrated-prison/launch-source-sha256.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/game-2026-09-19-125906-integrated-prison/launch-source-sha256.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/launch-source.json b/docs/evidence/game-2026-09-19-125906-integrated-prison/launch-source.json new file mode 100644 index 0000000..22c4100 --- /dev/null +++ b/docs/evidence/game-2026-09-19-125906-integrated-prison/launch-source.json @@ -0,0 +1,42 @@ +{ + "schema_version": 1, + "launch_id": "19265aa8-9768-4196-8639-216a1fe3723e", + "captured_unix": 1789815544.9982743, + "source_root": "/home/jakub/devel/escapistsrereintroduced", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/ArmaReforgerSteam.exe", + "-addonsDir", + "Z:/home/jakub/devel/escapistsrereintroduced/addons", + "-addons", + "FA804F411BDDF2C6", + "-profile", + "Z:/tmp/erri-game-profile", + "-errOrdinaryScenario", + "chat", + "-noSplash", + "-errOrdinaryScreenshot", + "1", + "-noBackend", + "-noSound", + "-noThrow", + "-disableCrashReporter", + "-logconsole" + ], + "manifest_sha256": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5" +} diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/ordinary-prison-view.png b/docs/evidence/game-2026-09-19-125906-integrated-prison/ordinary-prison-view.png new file mode 100644 index 0000000..66c5b42 Binary files /dev/null and b/docs/evidence/game-2026-09-19-125906-integrated-prison/ordinary-prison-view.png differ diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/report.json b/docs/evidence/game-2026-09-19-125906-integrated-prison/report.json new file mode 100644 index 0000000..2454dff --- /dev/null +++ b/docs/evidence/game-2026-09-19-125906-integrated-prison/report.json @@ -0,0 +1,24 @@ +{ + "log": "docs/evidence/game-2026-09-19-125906-integrated-prison/console.log.txt", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "ordinary local game startup only; no player input, full escape, multiplayer or FPS proof", + "local_participant_verified": true, + "scenario_header_verified": true, + "verified_header_projects": [ + "chat" + ], + "game_module_defines": [ + "PLATFORM_WINDOWS,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", + "PLATFORM_WINDOWS,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" + ], + "workbench_undefined": true, + "normal_mission_ready": true, + "unexpected_smoke_fixture": false, + "failed": false, + "ready": true, + "control_metadata_consistent": true +} diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/rereintroduced-hq.log.txt b/docs/evidence/game-2026-09-19-125906-integrated-prison/rereintroduced-hq.log.txt new file mode 100644 index 0000000..04b97f4 --- /dev/null +++ b/docs/evidence/game-2026-09-19-125906-integrated-prison/rereintroduced-hq.log.txt @@ -0,0 +1,10 @@ +#1 t=6.9s M0 REGISTER group 1 [session=1789815568-1] +#2 t=6.9s M0 MORTAR DEPLOY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; authored gun and four-person crew; finite ammunition initialization pending [session=1789815568-1] +#3 t=7.6s M0 COURIER READY trip=0 state=1 delivered=0; 12 distinct original HE shells physically confirmed in existing western cache [session=1789815568-1] +#4 t=8.9s M0 REGISTER group 2 [session=1789815568-1] +#5 t=8.9s M0 REGISTER group 3 [session=1789815568-1] +#6 t=8.9s M0 REGISTER group 4 [session=1789815568-1] +#7 t=8.9s M0 REGISTER group 5 [session=1789815568-1] +#8 t=8.9s M0 REGISTER group 6 [session=1789815568-1] +#9 t=8.9s M0 REGISTER group 7 [session=1789815568-1] +#10 t=18.7s M0 MORTAR CREW READY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; four original physical members, one manpack, 27 confirmed HE; new shell requests=27; allocation permanently closed [session=1789815568-1] diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/runner.json.txt b/docs/evidence/game-2026-09-19-125906-integrated-prison/runner.json.txt new file mode 100644 index 0000000..f58666e --- /dev/null +++ b/docs/evidence/game-2026-09-19-125906-integrated-prison/runner.json.txt @@ -0,0 +1,27 @@ +{ + "stopped_unix": 1789815593.2493706, + "console_sha256": "57f9b94b4c9276ebde536333ff5ab28b22ae1a2f2a0f8cd2aef014ac608fe30a", + "end_source_sha256": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "19265aa8-9768-4196-8639-216a1fe3723e", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "started_unix": 1789815544.9983373, + "result": "game-started", + "session": "/tmp/erri-game-profile/logs/logs_2026-09-19_12-59-06", + "project": "chat", + "cleanup_confirmed": true, + "runner_error": null, + "failure_grace_seconds": 0, + "failure_observed_during_polling": false, + "first_failure_elapsed_seconds": null, + "executable": "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/ArmaReforgerSteam.exe", + "dedicated_server": false, + "display": "headless Gamescope", + "audio": "-noSound plus own silent sink", + "control_only": false, + "source_manifest_scope": "successor addon sources", + "scope": "ordinary local game startup only; no player input, full escape, multiplayer or FPS proof" +} diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/script.log.txt b/docs/evidence/game-2026-09-19-125906-integrated-prison/script.log.txt new file mode 100644 index 0000000..f4869e5 --- /dev/null +++ b/docs/evidence/game-2026-09-19-125906-integrated-prison/script.log.txt @@ -0,0 +1,243 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_12-59-06\script.log started at 2026-09-19 12:59:08 (2026-09-19 10:59:08 UTC) + +12:59:08.718 SCRIPT : SCRIPT : Initializing scripts +12:59:08.718 SCRIPT : SCRIPT : ScriptProjectManager init +12:59:08.857 SCRIPT : SCRIPT : Compiling GameLib scripts +12:59:08.911 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 666K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:59:08.912 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:59:08.912 SCRIPT : SCRIPT : Compiling Game scripts +12:59:10.066 SCRIPT : Compiling Game scripts +12:59:10.066 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:59:10.066 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:59:10.303 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:10.314 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:59:10.340 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:59:10.444 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:59:10.444 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:59:10.444 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:59:10.444 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:59:10.477 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:59:10.533 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:59:10.550 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:59:10.550 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:59:10.551 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:59:10.594 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:10.594 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:10.596 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:59:10.596 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:59:10.648 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:59:10.765 SCRIPT : Module: Game; loaded 5780x files; 11202x classes; used 27041K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 6264db09 +12:59:11.511 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +12:59:11.521 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +12:59:11.521 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +12:59:11.521 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +12:59:11.521 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +12:59:11.795 SCRIPT : ERR ORDINARY: requesting header project=chat +12:59:12.886 SCRIPT : SCRIPT : Compiling GameLib scripts +12:59:12.940 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 664K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:59:12.940 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +12:59:12.940 SCRIPT : SCRIPT : Compiling Game scripts +12:59:14.099 SCRIPT : Compiling Game scripts +12:59:14.099 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:59:14.099 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:59:14.355 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:14.367 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:59:14.397 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:59:14.494 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:59:14.494 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:59:14.494 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:59:14.494 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:59:14.529 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:59:14.578 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +12:59:14.596 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:59:14.596 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:59:14.599 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:59:14.665 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:14.665 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:59:14.668 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:59:14.668 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:59:14.757 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:59:14.930 SCRIPT : Module: Game; loaded 5780x files; 11202x classes; used 27014K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 6264db09 +12:59:28.153 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:59:29.122 SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems +12:59:29.126 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:59:29.126 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:59:29.128 SCRIPT (W): Can't open config file "" +12:59:29.128 SCRIPT (W): Cannot update game blocklist. Backend is offline. +12:59:29.129 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:59:29.129 SCRIPT (W): Slot_Chat Has no Content! +12:59:29.129 SCRIPT (W): Slot_VON Has no Content! +12:59:29.129 SCRIPT (W): Slot_AvailableActions Has no Content! +12:59:29.129 SCRIPT (W): Slot_Vehicle Has no Content! +12:59:29.129 SCRIPT (W): Slot_GameVersion Has no Content! +12:59:29.129 SCRIPT (W): Slot_Notifications Has no Content! +12:59:29.129 SCRIPT (W): Slot_Hints Has no Content! +12:59:29.135 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +12:59:29.135 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +12:59:29.135 SCRIPT : Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged. +12:59:29.135 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:59:29.147 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:59:29.158 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:59:29.331 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:59:30.674 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:59:30.688 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:59:30.688 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:59:30.712 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:59:30.714 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:59:30.760 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:59:30.760 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:59:30.766 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:59:30.804 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:59:30.804 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:59:30.805 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:59:30.805 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:59:30.809 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:59:30.810 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:59:30.810 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:59:30.811 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:59:30.811 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:59:30.811 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:59:30.811 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:59:30.811 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:59:30.811 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:59:30.811 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:59:30.811 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:59:30.811 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:59:30.811 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:59:30.811 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:59:30.811 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:59:30.811 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:59:30.811 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:59:30.811 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:59:30.811 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:59:30.811 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:59:30.811 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:59:30.811 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:59:31.725 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:59:31.725 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:59:31.725 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:59:31.725 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:59:32.003 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.07,63.5096,7499.7> up=0.995339 +12:59:32.003 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.120022 angularSpeed=0.101374 +12:59:32.003 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:59:32.003 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.05,63.6087,7501.97> +12:59:32.003 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.05,63.3087,7501.97> terrainY=63.3171 tireTerrainGap=-0.00841141 +12:59:32.003 SCRIPT : ERR GEAR SUPPORT: center=<7012.05,63.6087,7501.97> radius=0.3 bottom=<7012.05,63.3087,7501.97> fraction=0.416807 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00830078 +12:59:32.003 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6082,7497.71> +12:59:32.003 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1582,7497.71> terrainY=64.1562 tireTerrainGap=0.00197601 +12:59:32.003 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6082,7497.71> radius=0.45 bottom=<7009.88,64.1582,7497.71> fraction=0.463825 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00204468 +12:59:32.003 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2588,7497.75> +12:59:32.003 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8088,7497.75> terrainY=63.8176 tireTerrainGap=-0.00882339 +12:59:32.003 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2588,7497.75> radius=0.45 bottom=<7014.42,63.8088,7497.75> fraction=0.414444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00882339 +12:59:32.003 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:59:32.246 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:59:32.246 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:59:32.246 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:59:32.246 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:59:32.804 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:59:32.804 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:59:32.804 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:59:33.070 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5428,7499.73> up=0.994212 +12:59:33.070 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0951692 angularSpeed=0.0210434 +12:59:33.070 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:59:33.070 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6165,7502> +12:59:33.070 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3165,7502> terrainY=63.3122 tireTerrainGap=0.00423431 +12:59:33.070 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6165,7502> radius=0.3 bottom=<7012.06,63.3165,7502> fraction=0.473567 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00418472 +12:59:33.070 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6042,7497.73> +12:59:33.070 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1542,7497.73> terrainY=64.1486 tireTerrainGap=0.00563812 +12:59:33.070 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6042,7497.73> radius=0.45 bottom=<7009.92,64.1542,7497.73> fraction=0.480651 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00574493 +12:59:33.070 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2633,7497.8> +12:59:33.070 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8133,7497.8> terrainY=63.8148 tireTerrainGap=-0.00149918 +12:59:33.070 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2633,7497.8> radius=0.45 bottom=<7014.46,63.8133,7497.8> fraction=0.447778 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00148773 +12:59:33.070 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:59:33.304 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:59:33.304 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:59:33.304 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:59:33.304 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:59:33.570 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:59:33.804 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:59:33.804 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:59:33.804 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:59:34.104 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5277,7499.76> up=0.994268 +12:59:34.104 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0420957 angularSpeed=0.0531252 +12:59:34.104 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:59:34.104 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6121,7502.03> +12:59:34.104 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3121,7502.03> terrainY=63.31 tireTerrainGap=0.00210571 +12:59:34.104 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6121,7502.03> radius=0.3 bottom=<7012.07,63.3121,7502.03> fraction=0.464236 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00213242 +12:59:34.104 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5926,7497.74> +12:59:34.104 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1426,7497.74> terrainY=64.1416 tireTerrainGap=0.00100708 +12:59:34.105 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5926,7497.74> radius=0.45 bottom=<7009.97,64.1426,7497.74> fraction=0.459035 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.000991821 +12:59:34.105 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2584,7497.85> +12:59:34.105 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8084,7497.85> terrainY=63.8117 tireTerrainGap=-0.00335312 +12:59:34.105 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2584,7497.85> radius=0.45 bottom=<7014.51,63.8084,7497.85> fraction=0.439167 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00338364 +12:59:34.105 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:59:34.370 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:59:34.370 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:59:34.370 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:59:34.370 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:59:34.871 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:59:34.871 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:59:34.871 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:59:34.871 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:59:35.170 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.528,7499.77> up=0.994262 +12:59:35.170 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:59:35.170 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:59:35.170 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6113,7502.04> +12:59:35.170 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3113,7502.04> terrainY=63.3094 tireTerrainGap=0.00187302 +12:59:35.170 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6113,7502.04> radius=0.3 bottom=<7012.08,63.3113,7502.04> fraction=0.462844 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00182724 +12:59:35.170 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5924,7497.74> +12:59:35.170 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1424,7497.74> terrainY=64.1406 tireTerrainGap=0.00183868 +12:59:35.170 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5924,7497.74> radius=0.45 bottom=<7009.98,64.1424,7497.74> fraction=0.463264 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00192261 +12:59:35.170 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2587,7497.86> +12:59:35.170 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8087,7497.86> terrainY=63.8112 tireTerrainGap=-0.00245285 +12:59:35.170 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2587,7497.86> radius=0.45 bottom=<7014.52,63.8087,7497.86> fraction=0.443333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00246811 +12:59:35.170 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:59:35.437 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:59:35.437 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:59:35.437 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:59:35.437 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:59:35.970 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:59:35.971 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:59:35.971 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:59:35.971 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:59:36.237 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.528,7499.77> up=0.994262 +12:59:36.237 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:59:36.237 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:59:36.237 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6113,7502.04> +12:59:36.237 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3113,7502.04> terrainY=63.3094 tireTerrainGap=0.00187302 +12:59:36.237 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6113,7502.04> radius=0.3 bottom=<7012.08,63.3113,7502.04> fraction=0.462844 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00182724 +12:59:36.237 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5924,7497.74> +12:59:36.237 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1424,7497.74> terrainY=64.1406 tireTerrainGap=0.00183868 +12:59:36.237 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5924,7497.74> radius=0.45 bottom=<7009.98,64.1424,7497.74> fraction=0.463264 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00192261 +12:59:36.237 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2587,7497.86> +12:59:36.237 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8087,7497.86> terrainY=63.8112 tireTerrainGap=-0.00245285 +12:59:36.237 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2587,7497.86> radius=0.45 bottom=<7014.52,63.8087,7497.86> fraction=0.443333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00246811 +12:59:36.237 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:59:36.504 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:59:36.504 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:59:36.504 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:59:36.516 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:59:36.516 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:59:36.516 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:59:36.516 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:59:36.517 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:59:36.517 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:59:36.517 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:59:37.206 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:59:37.242 SCRIPT : ERR ORDINARY: local participant verified project=chat phase=prison +12:59:37.242 SCRIPT : ERR ORDINARY: optional prisoner screenshot queued after finalized admission +12:59:37.242 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +12:59:40.275 SCRIPT : ERR YARD: prison world origin=<6090,211.444,7160> basisX=<1,-0,0> basisY=<0,1,-0> basisZ=<0,0,1> +12:59:40.275 SCRIPT : ERR YARD: decal=1 type=DecalEntity prefab= worldMin=<6090,211.444,7160> worldMax=<6090,211.444,7160> +12:59:40.276 SCRIPT : ERR YARD: decal=1 world origin=<6090,211.444,7160> basisX=<10,0,0> basisY=<0,-4.37114e-07,10> basisZ=<-0,-10,-4.37114e-07> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=0/0/0 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=0/0/1 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=0/1/0 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=0/1/1 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=1/0/0 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=1/0/1 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=1/1/0 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: decal=1 corner=1/1/1 prisonLocal=<0,0,0> +12:59:40.276 SCRIPT : ERR YARD: measurement complete nodes=18 decals=1; bounds do not certify clutter-mask coverage +12:59:40.288 SCRIPT : ERR ORDINARY: optional prisoner screenshot requested without camera or input changes diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/source-provenance.json b/docs/evidence/game-2026-09-19-125906-integrated-prison/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/game-2026-09-19-125906-integrated-prison/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/game-2026-09-19-125906-integrated-prison/source-sha256.json b/docs/evidence/game-2026-09-19-125906-integrated-prison/source-sha256.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/game-2026-09-19-125906-integrated-prison/source-sha256.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/native-2026-09-19-122118-controller-compile-map/console.log.txt b/docs/evidence/native-2026-09-19-122118-controller-compile-map/console.log.txt new file mode 100644 index 0000000..6a04c4b --- /dev/null +++ b/docs/evidence/native-2026-09-19-122118-controller-compile-map/console.log.txt @@ -0,0 +1,637 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-21-18\console.log started at 2026-09-19 12:21:18 (2026-09-19 10:21:18 UTC) + +12:21:18.082 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-21-18' to filesystem under name logs +12:21:18.082 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +12:21:18.082 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +12:21:18.083 PROFILING : Workbench Create Engine took: 9.644700 ms +12:21:19.122 INIT : INIT : Workbench Init Engine +12:21:19.122 ENGINE : Initializing engine, version 192142 +12:21:19.122 ENGINE : CLI Params: -gproj Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/addons -profile Z:/tmp/erri-workbench-profile -logconsole -wbModule WorldEditor -load Worlds/ERR_Everon.ent -plugin ERR_ValidateWorldPlugin -errPlay 1 -errSmoke 1 -errSmokeOutcome map-ownership -noThrow -disableCrashReporter +12:21:19.131 ENGINE : Addon dirs: +12:21:19.131 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/' +12:21:19.131 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +12:21:19.131 ENGINE : dir: './addons' +12:21:19.131 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +12:21:19.131 ENGINE : Available addons: +12:21:19.131 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:21:19.131 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:21:19.131 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:21:19.131 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:21:19.131 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:21:19.131 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +12:21:19.131 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +12:21:19.132 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +12:21:19.132 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +12:21:19.132 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +12:21:19.132 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +12:21:19.132 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +12:21:19.268 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +12:21:19.272 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +12:21:19.272 ENGINE : CPU vendor : AuthenticAMD +12:21:19.272 ENGINE : CPU type : 2 +12:21:19.272 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +12:21:19.272 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +12:21:19.272 ENGINE : CPU count logical : 16 +12:21:19.272 ENGINE : CPU count physical : 8 +12:21:19.272 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +12:21:19.272 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:21:19.273 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:21:19.273 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:21:19.273 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:21:19.273 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:21:19.274 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +12:21:19.426 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +12:21:19.428 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +12:21:19.428 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-21-18/resourceDatabase.rdb) +12:21:19.575 RESOURCES : RESOURCES : ResourceDB: full scan +12:21:19.579 RESOURCES : RESOURCES : scanning... +12:21:19.579 RESOURCES : RESOURCES : scanning @"ERR_Chat" +12:21:19.582 RESOURCES : RESOURCES : scanning @"ERR_Map" +12:21:19.584 RESOURCES : RESOURCES : scanning @"ERR_Intel" +12:21:19.585 RESOURCES : RESOURCES : scanning @"ERR_Ai" +12:21:19.587 RESOURCES : RESOURCES : scanning @"ERR_Core" +12:21:19.591 RESOURCES : RESOURCES : scanning @"ArmaReforger" +12:21:19.729 RESOURCES : RESOURCES : scanning @"core" +12:21:19.734 RESOURCES : RESOURCES : scanning @"profile" +12:21:19.735 RESOURCES : RESOURCES : scanning @"logs" +12:21:19.735 RESOURCES : RESOURCES : processing meta-files... +12:21:19.803 RESOURCES : RESOURCES : processing files... +12:21:19.814 INIT : Workbench startup +12:21:19.814 INIT : Workbench Init Engine +12:21:19.814 RESOURCES : ResourceDB: full scan +12:21:19.814 RESOURCES : processing files... +12:21:19.814 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +12:21:19.814 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +12:21:19.814 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +12:21:19.814 RESOURCES : RESOURCES : processing folders... +12:21:19.821 RESOURCES : RESOURCES : creating GUID-item mapping... +12:21:19.837 RESOURCES : RESOURCES : building tree... +12:21:19.894 PROFILING : ResourceDB: full scan took: 319.427000 ms +12:21:19.895 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:21:19.897 RESOURCES : ResourceDB: written 804/804 bytes +12:21:19.897 RESOURCES : ResourceDB: cache successfully saved +12:21:19.897 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:21:19.899 RESOURCES : ResourceDB: written 819/819 bytes +12:21:19.899 RESOURCES : ResourceDB: cache successfully saved +12:21:19.899 RESOURCES : ResourceDB: saving cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:21:19.900 RESOURCES : ResourceDB: written 227/227 bytes +12:21:19.900 RESOURCES : ResourceDB: cache successfully saved +12:21:19.900 RESOURCES : ResourceDB: saving cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:21:19.902 RESOURCES : ResourceDB: written 1841/1841 bytes +12:21:19.902 RESOURCES : ResourceDB: cache successfully saved +12:21:19.902 RESOURCES : ResourceDB: saving cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:21:19.904 RESOURCES : ResourceDB: written 6865/6865 bytes +12:21:19.904 RESOURCES : ResourceDB: cache successfully saved +12:21:19.904 RESOURCES : ResourceDB: saving cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +12:21:19.905 RESOURCES : ResourceDB: written 206/206 bytes +12:21:19.905 RESOURCES : ResourceDB: cache successfully saved +12:21:19.905 RESOURCES : ResourceDB: saving cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-21-18/resourceDatabase.rdb) +12:21:19.907 RESOURCES : ResourceDB: written 162/162 bytes +12:21:19.907 RESOURCES : ResourceDB: cache successfully saved +12:21:19.907 ENGINE : GameProject load +12:21:19.907 ENGINE : Loaded addons: +12:21:19.907 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +12:21:19.907 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +12:21:19.907 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:21:19.907 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:21:19.907 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:21:19.907 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:21:19.907 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:21:19.909 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +12:21:19.910 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +12:21:19.910 ENGINE : Engine user settings config loaded +12:21:19.910 PROFILING : Settings changed took: 0.001300 ms +12:21:20.020 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +12:21:20.021 RENDER : Basic screen setup: +12:21:20.021 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +12:21:20.021 RENDER : MSAA : none +12:21:20.035 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +12:21:20.035 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +12:21:20.035 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +12:21:20.035 RENDER : * core clocks 2720 MHz, memory 1124 MHz +12:21:20.035 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +12:21:20.035 RENDER : AMD AGS correctly initialized +12:21:20.036 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +12:21:20.036 RENDER : Detected output devices: +12:21:20.036 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +12:21:20.036 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +12:21:20.036 RENDER : Concurrent frames limit 2 +12:21:20.111 RENDER : DX12 device successfully created by AMD AGS library +12:21:20.111 RENDER : * user markers not supported in this version AMD SW +12:21:20.111 RENDER : Graphics device features +12:21:20.111 RENDER : Needed: +12:21:20.111 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +12:21:20.111 RENDER : Optional: +12:21:20.111 RENDER : * Allow tearing (VSYNC) : 1 +12:21:20.111 RENDER : * 16 bits : 1 +12:21:20.111 RENDER : * Resource heap tier : 3 +12:21:20.111 RENDER : * Persistent heaps (DRED) : 1 +12:21:20.111 RENDER : * DRED 1.2 is supported by compiler +12:21:20.134 RENDER : Main RT format setup. +12:21:20.134 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +12:21:20.134 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +12:21:20.136 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +12:21:20.170 PROFILING : Settings changed took: 0.022300 ms +12:21:20.714 AUDIO : Endpoint: Speakers (PulseAudio Output) +12:21:20.714 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +12:21:20.714 AUDIO : Audio client: +12:21:20.714 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +12:21:20.717 RENDER : RENDER : Reload shaders +12:21:20.718 RENDER : Enfusion shader version 13 +12:21:20.718 INIT : INIT : ShaderListReload +12:21:20.718 PROFILING : ShaderListReload took: 0.000600 ms +12:21:20.859 AUDIO : Endpoint: Speakers (PulseAudio Output) +12:21:20.859 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +12:21:20.860 AUDIO : Audio client: +12:21:20.860 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +12:21:21.057 RENDER : Loaded 3752 newer shader binaries +12:21:21.058 PROFILING : Reload shaders took: 340.468400 ms +12:21:21.058 ENGINE : Initializing inputs. +12:21:21.072 NETWORK : Initializing networking. +12:21:21.072 NETWORK : Using new GameRplScheduler. +12:21:21.072 SCRIPT : SCRIPT : Initializing scripts +12:21:21.072 SCRIPT : SCRIPT : ScriptProjectManager init +12:21:23.280 PROFILING : ScriptProjectManager init took: 2207.383000 ms +12:21:23.365 PROFILING : Initializing scripts took: 2292.498800 ms +12:21:23.382 ENGINE : Enfusion engine successfully created. +12:21:23.382 PROFILING : Workbench Init Engine took: 4260.128100 ms +12:21:23.382 INIT : INIT : Workbench Create Game +12:21:23.394 GUI : Using default language (en_us) +12:21:23.394 GUI : Loading 'en_us' localization file. +12:21:23.394 INIT : INIT : Loading StringTable +12:21:23.419 PROFILING : Loading StringTable took: 24.995600 ms +12:21:23.419 SCRIPT : SCRIPT : Compiling GameLib scripts +12:21:23.488 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +12:21:23.488 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:21:23.489 PROFILING : Compiling GameLib scripts took: 69.471000 ms +12:21:23.489 SCRIPT : SCRIPT : Compiling Game scripts +12:21:24.790 INIT : Workbench Create Game +12:21:24.790 SCRIPT : Compiling Game scripts +12:21:24.790 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:21:24.790 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:21:24.944 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:21:25.059 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:21:25.090 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:21:25.191 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:21:25.191 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:21:25.191 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:21:25.191 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:21:25.223 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:21:25.284 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:21:25.284 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:21:25.285 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:21:25.326 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:21:25.326 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:21:25.327 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:21:25.327 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:21:25.352 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:21:25.385 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:21:25.650 SCRIPT : Module: WorkbenchGame; loaded 172x files; 617x classes; used 2482K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: e963af0e +12:21:25.658 SCRIPT : Module: Game; loaded 5779x files; 11376x classes; used 33575K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 228d8bca +12:21:25.701 PROFILING : Compiling Game scripts took: 2212.630700 ms +12:21:25.707 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:21:25.744 ENGINE : Game successfully created. +12:21:25.746 PROFILING : Workbench Create Game took: 2363.147700 ms +12:21:25.754 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/thumbnails +12:21:26.580 INIT : INIT : Workbench Reload Game +12:21:26.582 ENGINE : Game destroyed. +12:21:26.588 GUI : Using default language (en_us) +12:21:26.588 GUI : Loading 'en_us' localization file. +12:21:26.588 INIT : INIT : Loading StringTable +12:21:26.597 PROFILING : Loading StringTable took: 8.926800 ms +12:21:26.597 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:21:26.604 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:21:26.604 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:21:26.604 ENGINE : Game successfully created. +12:21:26.604 ENGINE : Game successfully initialized. +12:21:26.604 PROFILING : Workbench Reload Game took: 23.598300 ms +12:21:27.275 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +12:21:28.369 PROFILING : Entities load took: 1093.554800 ms +12:21:28.381 WORLD : WORLD : CreateEntities +12:21:28.387 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:21:28.388 PROFILING : NotifyBeforeEntitiesCreated took: 0.003200 ms +12:21:28.388 WORLD : WORLD : Wait for preloading data +12:21:28.388 PROFILING : Wait for preloading data took: 0.004300 ms +12:21:28.526 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +12:21:28.526 PROFILING : PROFILING : Terrain load +12:21:30.660 PROFILING : Terrain load took: 2134.029500 ms +12:21:34.675 WORLD : CreateEntities +12:21:34.675 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" +12:21:34.675 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:21:34.675 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:21:45.406 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:21:45.406 PROFILING : NotifyBeforeEntitiesInitialized took: 0.005000 ms +12:21:45.851 WORLD : WORLD : NotifyEntitiesInitialized +12:21:45.851 TERRAIN : TERRAIN : Initializing road networks... +12:21:45.854 PROFILING : Initializing road networks... took: 2.218400 ms +12:21:45.854 PROFILING : NotifyEntitiesInitialized took: 2.638400 ms +12:21:45.854 PROFILING : CreateEntities took: 17472.273600 ms +12:21:46.041 PROFILING : * WorldEditor: LoadWorld: 18770.144600 ms +12:21:47.538 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +12:21:47.538 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +12:21:47.539 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +12:21:47.540 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +12:21:47.625 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +12:21:47.627 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +12:21:47.627 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +12:21:47.627 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +12:21:47.627 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +12:21:47.627 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +12:21:47.627 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +12:21:47.629 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +12:21:47.654 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +12:21:47.674 BACKEND : Attempting online Game Config instead. +12:21:50.833 INIT : INIT : Workbench Reload Game +12:21:50.836 ENGINE : Game destroyed. +12:21:50.843 GUI : Using default language (en_us) +12:21:50.843 GUI : Loading 'en_us' localization file. +12:21:50.843 INIT : INIT : Loading StringTable +12:21:50.865 PROFILING : Loading StringTable took: 21.577600 ms +12:21:50.865 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:21:50.874 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:21:50.874 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:21:50.874 ENGINE : Game successfully created. +12:21:50.874 ENGINE : Game successfully initialized. +12:21:50.874 PROFILING : Workbench Reload Game took: 40.813600 ms +12:21:50.877 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:21:50.932 PLATFORM : Save data from container 'settings' have been loaded +12:21:51.020 PLATFORM : Save data from container 'sessions' have been loaded +12:21:51.022 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +12:21:51.022 ENGINE : Game user settings config loaded +12:21:51.118 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +12:21:51.124 WORLD : WORLD : Game::LoadEntities +12:21:51.124 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +12:21:51.125 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +12:21:51.125 WORLD : WORLD : CreateEntities +12:21:51.125 WORLD : WORLD : CreateEntities +12:21:51.125 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:21:51.136 RESOURCES : Loaded mission headers from 7 addon(s)! +12:21:51.136 PROFILING : NotifyBeforeEntitiesCreated took: 10.960800 ms +12:21:51.136 WORLD : WORLD : Wait for preloading data +12:21:51.136 PROFILING : Wait for preloading data took: 0.000600 ms +12:21:55.692 WORLD : Game::LoadEntities +12:21:55.692 WORLD : CreateEntities +12:21:55.692 WORLD : CreateEntities +12:21:55.692 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" +12:21:55.692 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:21:55.692 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:21:57.180 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +12:21:57.180 ENTITY : CreateComponent 'Hierarchy' +12:21:57.181 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +12:21:57.181 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +12:21:57.181 ENTITY : CreateComponent 'Hierarchy' +12:21:57.181 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +12:21:57.181 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +12:21:57.181 ENTITY : CreateComponent 'Hierarchy' +12:21:57.181 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +12:21:57.187 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +12:21:57.187 ENTITY : CreateComponent 'Hierarchy' +12:21:57.187 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +12:21:57.187 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +12:21:57.187 ENTITY : CreateComponent 'Hierarchy' +12:21:57.187 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +12:21:57.187 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +12:21:57.187 ENTITY : CreateComponent 'Hierarchy' +12:21:57.188 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +12:21:57.192 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +12:21:57.192 ENTITY : CreateComponent 'Hierarchy' +12:21:57.192 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +12:21:57.192 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +12:21:57.192 ENTITY : CreateComponent 'Hierarchy' +12:21:57.192 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +12:21:57.192 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +12:21:57.192 ENTITY : CreateComponent 'Hierarchy' +12:21:57.192 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +12:22:02.730 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:22:02.730 PROFILING : NotifyBeforeEntitiesInitialized took: 0.059300 ms +12:22:04.688 WORLD : InitEntities 'world' +12:22:04.688 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:22:04.688 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:22:04.715 WORLD : InitEntities 'world' +12:22:04.715 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:22:04.715 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +12:22:04.716 WORLD : WORLD : NotifyEntitiesInitialized +12:22:04.716 TERRAIN : TERRAIN : Initializing road networks... +12:22:04.719 PROFILING : Initializing road networks... took: 2.945800 ms +12:22:04.719 DEFAULT : DEFAULT : WorldVolumesCollection +12:22:04.778 PROFILING : WorldVolumesCollection took: 58.954700 ms +12:22:04.778 INIT : INIT : SoundWorldInit +12:22:04.794 PROFILING : SoundWorldInit took: 15.523400 ms +12:22:04.794 PROFILING : NotifyEntitiesInitialized took: 77.711700 ms +12:22:04.794 PROFILING : CreateEntities took: 13668.175200 ms +12:22:04.794 PROFILING : CreateEntities took: 13668.390400 ms +12:22:04.795 WORLD : WORLD : Wait for preloading data around camera +12:22:04.795 PROFILING : Wait for preloading data around camera took: 0.001400 ms +12:22:04.795 WORLD : WORLD : EOnActivate +12:22:04.828 PROFILING : EOnActivate took: 33.553300 ms +12:22:04.829 PROFILING : Game::LoadEntities took: 13704.070000 ms +12:22:05.076 DEFAULT : Entered offline game state. +12:22:05.180 NETWORK : Player connected: connectionID=2147483646 +12:22:05.180 NETWORK : ### Connecting player: connectionID=2147483646, Name= +12:22:05.181 NETWORK : ### Creating player: PlayerId=1, Name=jakub +12:22:05.185 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:22:05.186 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:22:05.186 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:22:05.186 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:22:05.186 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:22:05.187 SCRIPT (W): Can't open config file "" +12:22:05.194 WORLD : InitEntities 'world' +12:22:05.194 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:22:05.195 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:22:05.195 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:22:05.195 SCRIPT (W): Slot_Chat Has no Content! +12:22:05.195 SCRIPT (W): Slot_VON Has no Content! +12:22:05.195 SCRIPT (W): Slot_AvailableActions Has no Content! +12:22:05.195 SCRIPT (W): Slot_Vehicle Has no Content! +12:22:05.195 SCRIPT (W): Slot_GameVersion Has no Content! +12:22:05.196 SCRIPT (W): Slot_Notifications Has no Content! +12:22:05.196 SCRIPT (W): Slot_Hints Has no Content! +12:22:05.207 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:22:05.207 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +12:22:05.207 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:22:05.207 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:22:05.208 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:22:05.211 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +12:22:05.211 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:22:05.211 NETWORK : Players connecting: 0 +12:22:05.212 NETWORK : Players connected: 1 / 1 +12:22:05.240 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/autosaves +12:22:05.241 PROFILING : Workbench startup took: 47246.038300 ms +12:22:05.264 WORLD : Frame start +12:22:05.264 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:22:05.277 WORLD : UpdateEntities +12:22:05.277 WORLD : Frame +12:22:05.277 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:22:05.452 WORLD : UpdateEntities +12:22:05.452 WORLD : PostFrame +12:22:05.453 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:22:05.453 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:22:05.496 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:22:05.496 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:22:05.496 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:22:05.497 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +12:22:05.627 RENDER : RENDER : ObjectsHeightMap::Build +12:22:05.628 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +12:22:05.794 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 166.413800 ms +12:22:05.802 PROFILING : ObjectsHeightMap::Build took: 174.680900 ms +12:22:06.972 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:22:06.992 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:22:06.993 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:22:07.022 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:22:07.024 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:22:07.073 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:22:07.073 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:22:07.078 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:22:07.125 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:22:07.125 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:22:07.127 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:22:07.127 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:22:07.130 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:22:07.132 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:22:07.132 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:22:07.133 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:22:07.133 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:22:07.133 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:22:07.133 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:22:07.134 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:22:07.134 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:22:07.134 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:22:07.134 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:22:07.134 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:22:07.134 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:22:07.135 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:22:07.135 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:22:07.135 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:22:07.135 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:22:07.135 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:22:07.135 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:22:07.135 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:22:07.136 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:22:07.136 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:22:07.898 WORLD : UpdateEntities +12:22:07.899 WORLD : AfterPostSimulate +12:22:07.899 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +12:22:07.986 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:22:07.987 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:22:07.987 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:22:07.987 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:22:08.240 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5248,7499.7> up=0.995666 +12:22:08.240 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.259243 angularSpeed=0.0359662 +12:22:08.240 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:22:08.241 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6145,7501.97> +12:22:08.241 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3145,7501.97> terrainY=63.3166 tireTerrainGap=-0.00204086 +12:22:08.241 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6145,7501.97> radius=0.3 bottom=<7012.06,63.3145,7501.97> fraction=0.445378 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00201797 +12:22:08.241 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6028,7497.71> +12:22:08.241 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1528,7497.71> terrainY=64.1555 tireTerrainGap=-0.00273132 +12:22:08.241 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6028,7497.71> radius=0.45 bottom=<7009.88,64.1528,7497.71> fraction=0.442513 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.0026474 +12:22:08.242 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2632,7497.75> +12:22:08.242 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8132,7497.75> terrainY=63.8177 tireTerrainGap=-0.0045433 +12:22:08.242 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2632,7497.75> radius=0.45 bottom=<7014.42,63.8132,7497.75> fraction=0.433889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0045433 +12:22:08.242 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:22:08.495 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:22:08.495 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:22:08.496 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:22:08.496 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:22:09.007 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:22:09.007 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:22:09.007 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:22:09.326 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5361,7499.71> up=0.994351 +12:22:09.326 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0975902 angularSpeed=0.0685686 +12:22:09.326 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:22:09.326 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6186,7501.99> +12:22:09.326 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3186,7501.99> terrainY=63.3144 tireTerrainGap=0.00421524 +12:22:09.327 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6186,7501.99> radius=0.3 bottom=<7012.07,63.3186,7501.99> fraction=0.47395 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00426865 +12:22:09.327 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6021,7497.71> +12:22:09.327 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1521,7497.71> terrainY=64.149 tireTerrainGap=0.00311279 +12:22:09.327 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6021,7497.71> radius=0.45 bottom=<7009.93,64.1521,7497.71> fraction=0.468575 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.0030899 +12:22:09.327 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2643,7497.78> +12:22:09.327 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8143,7497.78> terrainY=63.8154 tireTerrainGap=-0.00107956 +12:22:09.328 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2643,7497.78> radius=0.45 bottom=<7014.47,63.8143,7497.78> fraction=0.449444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00112152 +12:22:09.328 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:22:09.328 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:22:09.328 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:22:09.328 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:22:09.329 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:22:09.828 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:22:09.829 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:22:09.829 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:22:09.830 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:22:10.335 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5306,7499.74> up=0.994219 +12:22:10.335 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0461216 angularSpeed=0.0219731 +12:22:10.336 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:22:10.336 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6136,7502.01> +12:22:10.336 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3136,7502.01> terrainY=63.3114 tireTerrainGap=0.0021286 +12:22:10.336 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6136,7502.01> radius=0.3 bottom=<7012.07,63.3136,7502.01> fraction=0.464107 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00210571 +12:22:10.336 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5948,7497.72> +12:22:10.337 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.72> terrainY=64.1426 tireTerrainGap=0.0022049 +12:22:10.337 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5948,7497.72> radius=0.45 bottom=<7009.97,64.1448,7497.72> fraction=0.464947 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00228882 +12:22:10.337 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2605,7497.83> +12:22:10.337 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8105,7497.83> terrainY=63.8126 tireTerrainGap=-0.00214767 +12:22:10.337 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2605,7497.83> radius=0.45 bottom=<7014.51,63.8105,7497.83> fraction=0.444722 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00215912 +12:22:10.338 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:22:10.338 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:22:10.338 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:22:10.339 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:22:10.339 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:22:10.847 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:22:10.847 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:22:10.847 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:22:10.848 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:22:11.354 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +12:22:11.354 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:22:11.354 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:22:11.354 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:22:11.354 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00162125 +12:22:11.354 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461881 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00161362 +12:22:11.355 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +12:22:11.355 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00247955 +12:22:11.355 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +12:22:11.355 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:22:11.355 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00207138 +12:22:11.355 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +12:22:11.356 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:22:11.356 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:22:11.356 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:22:11.356 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:22:11.357 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:22:11.860 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:22:11.860 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:22:11.861 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:22:11.861 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:22:12.369 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +12:22:12.370 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:22:12.370 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:22:12.370 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:22:12.370 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00162125 +12:22:12.370 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461881 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00161362 +12:22:12.371 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +12:22:12.371 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00247955 +12:22:12.371 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +12:22:12.371 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:22:12.371 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00207138 +12:22:12.371 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +12:22:12.372 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:22:12.372 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:22:12.372 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:22:12.373 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:22:12.387 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:22:12.388 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:22:12.388 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:22:12.388 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:22:12.388 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:22:12.388 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:22:12.388 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:22:12.488 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:22:12.526 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +12:22:12.774 SCRIPT : ERR SMOKE PASS: new identity may enter prison +12:22:12.775 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +12:22:12.775 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +12:22:12.775 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +12:22:12.775 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +12:22:12.776 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +12:22:12.776 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +12:22:12.776 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +12:22:12.776 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +12:22:12.776 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +12:22:12.777 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +12:22:12.777 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +12:22:12.777 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +12:22:12.777 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +12:22:12.777 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +12:22:12.777 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +12:22:12.781 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +12:22:12.781 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +12:22:12.781 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +12:22:12.782 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +12:22:12.785 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +12:22:12.786 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +12:22:12.786 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +12:22:12.786 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +12:22:12.786 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +12:22:12.786 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +12:22:12.786 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +12:22:12.786 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +12:22:13.273 SCRIPT : ERR SMOKE PASS: shared map ownership fixture starts only with closed map and actual local character camera +12:22:13.274 SCRIPT : ERR SMOKE PASS: shared map ownership owned replacement native map layout created +12:22:13.274 SCRIPT : ERR SMOKE PASS: shared map ownership two separate real successor map prefabs spawned without inventory changes +12:22:14.283 SCRIPT : ERR SMOKE PASS: shared map ownership both fixture entities survive until native component initialization +12:22:14.284 SCRIPT : ERR SMOKE PASS: shared map ownership both native map components initialize actual render roots +12:22:14.291 SCRIPT : ERR SMOKE PASS: shared map ownership actual owned prefab captures its native plain-map root +12:22:14.291 SCRIPT : ERR SMOKE PASS: shared map ownership capture config belongs to exact fixture component +12:22:14.291 SCRIPT : ERR SMOKE PASS: shared map ownership requested distinct/reused native configuration identity established +12:22:14.292 SCRIPT : ERR SMOKE PASS: shared map ownership actual replacement root is current native map +12:22:15.795 SCRIPT : ERR SMOKE PASS: shared map ownership replacement remains open after native open-complete event +12:22:15.795 SCRIPT : ERR SMOKE PASS: shared map ownership actual stale center callback cannot pan or retarget replacement zoom +12:22:15.795 SCRIPT : ERR SMOKE PASS: shared map ownership stale camera-restore method executes but native-write authorization is denied +12:22:16.805 SCRIPT : ERR SMOKE PASS: shared map ownership both real delayed production callbacks ran exactly once +12:22:16.805 SCRIPT : ERR SMOKE PASS: shared map ownership real delayed center and finish leave replacement view unchanged +12:22:16.806 SCRIPT : ERR SMOKE PASS: shared map ownership actual finish, stop and vanilla mode-clear preserve replacement and do not request camera restore +12:22:16.807 SCRIPT : ERR SMOKE PASS: shared map ownership actual owned prefab captures its native plain-map root +12:22:16.807 SCRIPT : ERR SMOKE PASS: shared map ownership capture config belongs to exact fixture component +12:22:16.807 SCRIPT : ERR SMOKE PASS: shared map ownership requested distinct/reused native configuration identity established +12:22:16.808 SCRIPT : ERR SMOKE PASS: shared map ownership actual replacement root is current native map +12:22:18.325 SCRIPT : ERR SMOKE PASS: shared map ownership replacement remains open after native open-complete event +12:22:18.325 SCRIPT : ERR SMOKE PASS: shared map ownership actual stale center callback cannot pan or retarget replacement zoom +12:22:18.325 SCRIPT : ERR SMOKE PASS: shared map ownership stale camera-restore method executes but native-write authorization is denied +12:22:19.331 SCRIPT : ERR SMOKE PASS: shared map ownership both real delayed production callbacks ran exactly once +12:22:19.332 SCRIPT : ERR SMOKE PASS: shared map ownership real delayed center and finish leave replacement view unchanged +12:22:19.332 SCRIPT : ERR SMOKE PASS: shared map ownership actual finish, stop and vanilla mode-clear preserve replacement and do not request camera restore +12:22:19.332 SCRIPT : ERR MAP DELETE: afterSuper slot=2 released=1 captureCallbacks=0 spareCallbacks=1 +12:22:19.332 SCRIPT : ERR MAP DELETE: afterSuper slot=1 released=1 captureCallbacks=1 spareCallbacks=1 +12:22:19.332 SCRIPT : ERR MAP DELETE: request returned captureEntity=0 spareEntity=0 captureComponent=1 spareComponent=1 captureCallbacks=1 spareCallbacks=1 cleanupFailed=0 +12:22:19.850 SCRIPT : ERR MAP DELETE: completed on later tick captureEntity=0 spareEntity=0 captureComponent=0 spareComponent=0 captureCallbacks=1 spareCallbacks=1 cleanupFailed=0 +12:22:19.850 SCRIPT : ERR SMOKE PASS: shared map ownership actual prefab deletion runs successor and vanilla superclass cleanup +12:22:19.850 SCRIPT : ERR SMOKE PASS: shared map ownership spare and interrupted map deletion preserve replacement without restore calls +12:22:21.368 SCRIPT : ERR SMOKE PASS: shared map ownership replacement survives delayed native callback window after both deletions +12:22:21.369 SCRIPT : ERR SMOKE PASS: shared map ownership owned UI removed; camera render flag has no native getter and is not claimed as measured +12:22:21.369 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +12:22:21.369 SCRIPT : ERR SMOKE PASS: native map ownership probe cleaned up before explicit reset +12:22:21.369 SCRIPT : ERR SMOKE COMPLETE: native replacement map/config/root ownership and spare deletion; camera authorization observed, render flag not measured +12:22:21.476 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +12:22:21.478 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:22:21.478 SCRIPT (W): Slot_Chat Has no Content! +12:22:21.478 SCRIPT (W): Slot_VON Has no Content! +12:22:21.479 SCRIPT (W): Slot_GameVersion Has no Content! +12:22:21.479 SCRIPT (W): Slot_Notifications Has no Content! +12:22:23.540 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +12:22:23.540 SCRIPT : -- Stack trace -- +12:22:23.540 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:22:23.540 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:22:23.540 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +12:22:23.540 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:22:23.540 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:22:23.541 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:22:23.541 SCRIPT : ----------------- +12:22:23.541 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +12:22:23.541 SCRIPT : -- Stack trace -- +12:22:23.541 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:22:23.541 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:22:23.541 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +12:22:23.541 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:22:23.542 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:22:23.542 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:22:23.542 SCRIPT : ----------------- +12:22:23.544 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:22:23.544 SCRIPT (W): Slot_Chat Has no Content! +12:22:23.544 SCRIPT (W): Slot_VON Has no Content! +12:22:23.544 SCRIPT (W): Slot_GameVersion Has no Content! +12:22:23.544 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-122118-controller-compile-map/error.log.txt b/docs/evidence/native-2026-09-19-122118-controller-compile-map/error.log.txt new file mode 100644 index 0000000..2a3d146 --- /dev/null +++ b/docs/evidence/native-2026-09-19-122118-controller-compile-map/error.log.txt @@ -0,0 +1,118 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-21-18\error.log started at 2026-09-19 12:21:19 (2026-09-19 10:21:19 UTC) + +12:21:19.814 INIT : Workbench startup +12:21:19.814 INIT : Workbench Init Engine +12:21:19.814 RESOURCES : ResourceDB: full scan +12:21:19.814 RESOURCES : processing files... +12:21:19.814 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +12:21:19.814 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +12:21:19.814 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +12:21:24.790 INIT : Workbench Create Game +12:21:24.790 SCRIPT : Compiling Game scripts +12:21:24.790 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:21:24.790 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:21:24.944 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:21:25.059 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:21:25.090 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:21:25.191 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:21:25.191 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:21:25.191 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:21:25.191 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:21:25.223 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:21:25.284 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:21:25.284 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:21:25.285 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:21:25.326 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:21:25.326 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:21:25.327 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:21:25.327 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:21:25.352 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:21:25.385 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:21:34.675 WORLD : CreateEntities +12:21:34.675 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" +12:21:34.675 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:21:34.675 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:21:50.877 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:21:55.692 WORLD : Game::LoadEntities +12:21:55.692 WORLD : CreateEntities +12:21:55.692 WORLD : CreateEntities +12:21:55.692 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" +12:21:55.692 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:21:55.692 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:21:57.180 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +12:21:57.180 ENTITY : CreateComponent 'Hierarchy' +12:21:57.181 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +12:21:57.181 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +12:21:57.181 ENTITY : CreateComponent 'Hierarchy' +12:21:57.181 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +12:21:57.181 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +12:21:57.181 ENTITY : CreateComponent 'Hierarchy' +12:21:57.181 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +12:21:57.187 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +12:21:57.187 ENTITY : CreateComponent 'Hierarchy' +12:21:57.187 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +12:21:57.187 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +12:21:57.187 ENTITY : CreateComponent 'Hierarchy' +12:21:57.187 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +12:21:57.187 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +12:21:57.187 ENTITY : CreateComponent 'Hierarchy' +12:21:57.188 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +12:21:57.192 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +12:21:57.192 ENTITY : CreateComponent 'Hierarchy' +12:21:57.192 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +12:21:57.192 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +12:21:57.192 ENTITY : CreateComponent 'Hierarchy' +12:21:57.192 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +12:21:57.192 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +12:21:57.192 ENTITY : CreateComponent 'Hierarchy' +12:21:57.192 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +12:22:04.688 WORLD : InitEntities 'world' +12:22:04.688 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:22:04.688 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:22:05.185 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:22:05.186 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:22:05.186 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:22:05.186 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:22:05.186 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:22:05.187 SCRIPT (W): Can't open config file "" +12:22:05.194 WORLD : InitEntities 'world' +12:22:05.194 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:22:05.195 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:22:05.195 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:22:05.195 SCRIPT (W): Slot_Chat Has no Content! +12:22:05.195 SCRIPT (W): Slot_VON Has no Content! +12:22:05.195 SCRIPT (W): Slot_AvailableActions Has no Content! +12:22:05.195 SCRIPT (W): Slot_Vehicle Has no Content! +12:22:05.195 SCRIPT (W): Slot_GameVersion Has no Content! +12:22:05.196 SCRIPT (W): Slot_Notifications Has no Content! +12:22:05.196 SCRIPT (W): Slot_Hints Has no Content! +12:22:05.207 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:22:05.207 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +12:22:05.207 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:22:05.207 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:22:05.208 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:22:05.211 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:22:05.452 WORLD : UpdateEntities +12:22:05.452 WORLD : PostFrame +12:22:05.453 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:22:05.453 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:22:05.496 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:22:05.496 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:22:05.496 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:22:05.497 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +12:22:07.898 WORLD : UpdateEntities +12:22:07.899 WORLD : AfterPostSimulate +12:22:07.899 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +12:22:21.478 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:22:21.478 SCRIPT (W): Slot_Chat Has no Content! +12:22:21.478 SCRIPT (W): Slot_VON Has no Content! +12:22:21.479 SCRIPT (W): Slot_GameVersion Has no Content! +12:22:21.479 SCRIPT (W): Slot_Notifications Has no Content! +12:22:23.540 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +12:22:23.541 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +12:22:23.544 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:22:23.544 SCRIPT (W): Slot_Chat Has no Content! +12:22:23.544 SCRIPT (W): Slot_VON Has no Content! +12:22:23.544 SCRIPT (W): Slot_GameVersion Has no Content! +12:22:23.544 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-122118-controller-compile-map/headless-launch.log.txt b/docs/evidence/native-2026-09-19-122118-controller-compile-map/headless-launch.log.txt new file mode 100644 index 0000000..e7ad984 --- /dev/null +++ b/docs/evidence/native-2026-09-19-122118-controller-compile-map/headless-launch.log.txt @@ -0,0 +1,150 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 100 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 1 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerWorkbenchSteamDiag.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a001a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a001a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a001a4 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a0039a +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a0039a +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a0039a + wayland surface res id: 10 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x55557b6c80e0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x55557b6c80e0 +[Gamescope WSI] Destroyed swapchain: 0x55557b6c80e0 +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x55557b6c80e0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x55557b6c80e0 +[Gamescope WSI] Destroyed swapchain: 0x55557b6c80e0 +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x55557b64e890 - imageCount: 4 +[gamescope] [Error] xwm: X11 I/O error! This is fatal. Aborting... diff --git a/docs/evidence/native-2026-09-19-122118-controller-compile-map/launch-source-sha256.json b/docs/evidence/native-2026-09-19-122118-controller-compile-map/launch-source-sha256.json new file mode 100644 index 0000000..7b09c58 --- /dev/null +++ b/docs/evidence/native-2026-09-19-122118-controller-compile-map/launch-source-sha256.json @@ -0,0 +1,184 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "417e9b6ab3f2207412fa388fb4ec9ed921db38820982aa811d6dcfa6e1d62054", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "34f8e1730824850ea64f43dcd442e753d079a9795b3b9246813070ed36bb8430", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "1503db1441d8cd7a4f0b45c27ba9623b9fa39f0f81016e180bd2aa1379e1f42a", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "d4fe3cffaa188244db254b197a0165ae18f2b5b808b54e20ce888359147940fd", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "3ff1c9e9191f20769fed1e4d7a1363e4109512af76e02aa5e1e6a8766b711951", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/native-2026-09-19-122118-controller-compile-map/launch-source.json b/docs/evidence/native-2026-09-19-122118-controller-compile-map/launch-source.json new file mode 100644 index 0000000..d1331c8 --- /dev/null +++ b/docs/evidence/native-2026-09-19-122118-controller-compile-map/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "93e015fe-201d-480d-a6b8-711c828f8204", + "captured_unix": 1789813276.307968, + "source_root": "/home/jakub/devel/escapistsrereintroduced", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj", + "-addonsDir", + "Z:/home/jakub/devel/escapistsrereintroduced/addons", + "-profile", + "Z:/tmp/erri-workbench-profile", + "-logconsole", + "-wbModule=WorldEditor", + "-load", + "Worlds/ERR_Everon.ent", + "-plugin=ERR_ValidateWorldPlugin", + "-errPlay", + "1", + "-errSmoke", + "1", + "-errSmokeOutcome", + "map-ownership", + "-noThrow", + "-disableCrashReporter" + ], + "manifest_sha256": "8b7c5fb98d0713e4b36450e7cf6d95b9bea98365804e8cdb78c981c79007cc6a" +} diff --git a/docs/evidence/native-2026-09-19-122118-controller-compile-map/report.json b/docs/evidence/native-2026-09-19-122118-controller-compile-map/report.json new file mode 100644 index 0000000..a5d44be --- /dev/null +++ b/docs/evidence/native-2026-09-19-122118-controller-compile-map/report.json @@ -0,0 +1,9 @@ +{ + "log": "docs/evidence/native-2026-09-19-122118-controller-compile-map/console.log.txt", + "smoke_completions": 1, + "assertions_passed": 58, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" +} diff --git a/docs/evidence/native-2026-09-19-122118-controller-compile-map/rereintroduced-hq.log.txt b/docs/evidence/native-2026-09-19-122118-controller-compile-map/rereintroduced-hq.log.txt new file mode 100644 index 0000000..497e2c6 --- /dev/null +++ b/docs/evidence/native-2026-09-19-122118-controller-compile-map/rereintroduced-hq.log.txt @@ -0,0 +1,10 @@ +#1 t=6.6s M0 REGISTER group 1 [session=1789813324-1] +#2 t=6.6s M0 MORTAR DEPLOY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; authored gun and four-person crew; finite ammunition initialization pending [session=1789813324-1] +#3 t=6.7s M0 COURIER READY trip=0 state=1 delivered=0; 12 distinct original HE shells physically confirmed in existing western cache [session=1789813324-1] +#4 t=8.6s M0 REGISTER group 2 [session=1789813324-1] +#5 t=8.6s M0 REGISTER group 3 [session=1789813324-1] +#6 t=8.6s M0 REGISTER group 4 [session=1789813324-1] +#7 t=8.6s M0 REGISTER group 5 [session=1789813324-1] +#8 t=8.6s M0 REGISTER group 6 [session=1789813324-1] +#9 t=8.6s M0 REGISTER group 7 [session=1789813324-1] +#10 t=15.6s M0 STOP HQ stopped; tactical orders released [session=1789813324-1] diff --git a/docs/evidence/native-2026-09-19-122118-controller-compile-map/runner.json.txt b/docs/evidence/native-2026-09-19-122118-controller-compile-map/runner.json.txt new file mode 100644 index 0000000..c86aca4 --- /dev/null +++ b/docs/evidence/native-2026-09-19-122118-controller-compile-map/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789813348.7020292, + "console_sha256": "49252e9478903c09381982a1c172fd53ea102d74f7ae0d1628361a8bda94949c", + "end_source_sha256": "8b7c5fb98d0713e4b36450e7cf6d95b9bea98365804e8cdb78c981c79007cc6a", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "93e015fe-201d-480d-a6b8-711c828f8204", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "8b7c5fb98d0713e4b36450e7cf6d95b9bea98365804e8cdb78c981c79007cc6a", + "started_unix": 1789813276.3080497, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_12-21-18", + "rounds_required": 1, + "project": "chat", + "display": "headless Gamescope 1280x720/30Hz", + "dedicated_server": false, + "audio": "silent sink and per-test-stream mute" +} diff --git a/docs/evidence/native-2026-09-19-122118-controller-compile-map/script.log.txt b/docs/evidence/native-2026-09-19-122118-controller-compile-map/script.log.txt new file mode 100644 index 0000000..f531e08 --- /dev/null +++ b/docs/evidence/native-2026-09-19-122118-controller-compile-map/script.log.txt @@ -0,0 +1,318 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-21-18\script.log started at 2026-09-19 12:21:21 (2026-09-19 10:21:21 UTC) + +12:21:21.072 SCRIPT : SCRIPT : Initializing scripts +12:21:21.072 SCRIPT : SCRIPT : ScriptProjectManager init +12:21:23.419 SCRIPT : SCRIPT : Compiling GameLib scripts +12:21:23.488 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +12:21:23.488 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:21:23.489 SCRIPT : SCRIPT : Compiling Game scripts +12:21:24.790 SCRIPT : Compiling Game scripts +12:21:24.790 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:21:24.790 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:21:24.944 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:21:25.059 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:21:25.090 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:21:25.191 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:21:25.191 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:21:25.191 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:21:25.191 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:21:25.223 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:21:25.284 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:21:25.284 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:21:25.285 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:21:25.326 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:21:25.326 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:21:25.327 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:21:25.327 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:21:25.352 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:21:25.385 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:21:25.651 SCRIPT : Module: WorkbenchGame; loaded 172x files; 617x classes; used 2482K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: e963af0e +12:21:25.658 SCRIPT : Module: Game; loaded 5779x files; 11376x classes; used 33575K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 228d8bca +12:21:26.604 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:21:26.604 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:21:47.625 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +12:21:47.626 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +12:21:47.627 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +12:21:47.627 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +12:21:47.627 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +12:21:47.627 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +12:21:47.627 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +12:21:47.627 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +12:21:47.628 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +12:21:47.629 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +12:21:47.654 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +12:21:50.874 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:21:50.874 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:22:04.688 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:22:04.715 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +12:22:05.186 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:22:05.186 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:22:05.188 SCRIPT (W): Can't open config file "" +12:22:05.195 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:22:05.195 SCRIPT (W): Slot_Chat Has no Content! +12:22:05.195 SCRIPT (W): Slot_VON Has no Content! +12:22:05.195 SCRIPT (W): Slot_AvailableActions Has no Content! +12:22:05.195 SCRIPT (W): Slot_Vehicle Has no Content! +12:22:05.195 SCRIPT (W): Slot_GameVersion Has no Content! +12:22:05.196 SCRIPT (W): Slot_Notifications Has no Content! +12:22:05.196 SCRIPT (W): Slot_Hints Has no Content! +12:22:05.207 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:22:05.208 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:22:05.211 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:22:05.264 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:22:05.277 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:22:05.453 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:22:06.972 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:22:06.992 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:22:06.993 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:22:07.022 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:22:07.024 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:22:07.073 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:22:07.073 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:22:07.078 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:22:07.125 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:22:07.125 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:22:07.127 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:22:07.127 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:22:07.130 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:22:07.132 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:22:07.132 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:22:07.133 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:22:07.133 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:22:07.133 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:22:07.133 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:22:07.134 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:22:07.134 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:22:07.134 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:22:07.134 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:22:07.134 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:22:07.134 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:22:07.135 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:22:07.135 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:22:07.135 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:22:07.135 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:22:07.135 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:22:07.135 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:22:07.135 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:22:07.136 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:22:07.136 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:22:07.986 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:22:07.987 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:22:07.987 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:22:07.987 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:22:08.240 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5248,7499.7> up=0.995666 +12:22:08.240 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.259243 angularSpeed=0.0359662 +12:22:08.240 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:22:08.241 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6145,7501.97> +12:22:08.241 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3145,7501.97> terrainY=63.3166 tireTerrainGap=-0.00204086 +12:22:08.241 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6145,7501.97> radius=0.3 bottom=<7012.06,63.3145,7501.97> fraction=0.445378 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00201797 +12:22:08.241 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6028,7497.71> +12:22:08.241 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1528,7497.71> terrainY=64.1555 tireTerrainGap=-0.00273132 +12:22:08.241 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6028,7497.71> radius=0.45 bottom=<7009.88,64.1528,7497.71> fraction=0.442513 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.0026474 +12:22:08.242 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2632,7497.75> +12:22:08.242 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8132,7497.75> terrainY=63.8177 tireTerrainGap=-0.0045433 +12:22:08.242 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2632,7497.75> radius=0.45 bottom=<7014.42,63.8132,7497.75> fraction=0.433889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0045433 +12:22:08.242 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:22:08.495 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:22:08.495 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:22:08.496 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:22:08.496 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:22:09.007 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:22:09.007 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:22:09.007 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:22:09.326 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5361,7499.71> up=0.994351 +12:22:09.326 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0975902 angularSpeed=0.0685686 +12:22:09.326 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:22:09.326 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6186,7501.99> +12:22:09.326 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3186,7501.99> terrainY=63.3144 tireTerrainGap=0.00421524 +12:22:09.327 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6186,7501.99> radius=0.3 bottom=<7012.07,63.3186,7501.99> fraction=0.47395 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00426865 +12:22:09.327 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6021,7497.71> +12:22:09.327 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1521,7497.71> terrainY=64.149 tireTerrainGap=0.00311279 +12:22:09.327 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6021,7497.71> radius=0.45 bottom=<7009.93,64.1521,7497.71> fraction=0.468575 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.0030899 +12:22:09.327 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2643,7497.78> +12:22:09.327 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8143,7497.78> terrainY=63.8154 tireTerrainGap=-0.00107956 +12:22:09.328 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2643,7497.78> radius=0.45 bottom=<7014.47,63.8143,7497.78> fraction=0.449444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00112152 +12:22:09.328 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:22:09.328 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:22:09.328 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:22:09.328 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:22:09.329 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:22:09.828 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:22:09.829 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:22:09.829 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:22:09.830 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:22:10.335 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5306,7499.74> up=0.994219 +12:22:10.335 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0461216 angularSpeed=0.0219731 +12:22:10.336 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:22:10.336 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6136,7502.01> +12:22:10.336 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3136,7502.01> terrainY=63.3114 tireTerrainGap=0.0021286 +12:22:10.336 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6136,7502.01> radius=0.3 bottom=<7012.07,63.3136,7502.01> fraction=0.464107 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00210571 +12:22:10.336 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5948,7497.72> +12:22:10.337 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.72> terrainY=64.1426 tireTerrainGap=0.0022049 +12:22:10.337 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5948,7497.72> radius=0.45 bottom=<7009.97,64.1448,7497.72> fraction=0.464947 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00228882 +12:22:10.337 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2605,7497.83> +12:22:10.337 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8105,7497.83> terrainY=63.8126 tireTerrainGap=-0.00214767 +12:22:10.337 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2605,7497.83> radius=0.45 bottom=<7014.51,63.8105,7497.83> fraction=0.444722 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00215912 +12:22:10.338 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:22:10.338 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:22:10.338 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:22:10.339 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:22:10.339 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:22:10.847 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:22:10.847 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:22:10.847 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:22:10.848 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:22:11.354 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +12:22:11.354 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:22:11.354 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:22:11.354 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:22:11.354 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00162125 +12:22:11.355 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461881 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00161362 +12:22:11.355 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +12:22:11.355 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00247955 +12:22:11.355 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +12:22:11.355 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:22:11.355 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00207138 +12:22:11.355 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +12:22:11.356 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:22:11.356 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:22:11.356 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:22:11.356 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:22:11.357 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:22:11.860 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:22:11.860 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:22:11.861 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:22:11.861 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:22:12.369 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +12:22:12.370 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:22:12.370 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:22:12.370 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:22:12.370 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00162125 +12:22:12.370 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461881 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00161362 +12:22:12.371 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +12:22:12.371 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00247955 +12:22:12.371 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +12:22:12.371 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:22:12.371 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00207138 +12:22:12.371 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +12:22:12.372 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:22:12.372 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:22:12.372 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:22:12.373 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:22:12.387 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:22:12.388 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:22:12.388 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:22:12.388 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:22:12.388 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:22:12.388 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:22:12.388 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:22:12.488 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:22:12.526 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +12:22:12.774 SCRIPT : ERR SMOKE PASS: new identity may enter prison +12:22:12.775 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +12:22:12.775 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +12:22:12.775 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +12:22:12.775 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +12:22:12.776 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +12:22:12.776 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +12:22:12.776 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +12:22:12.776 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +12:22:12.776 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +12:22:12.777 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +12:22:12.777 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +12:22:12.777 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +12:22:12.777 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +12:22:12.777 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +12:22:12.777 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +12:22:12.781 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +12:22:12.781 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +12:22:12.781 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +12:22:12.782 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +12:22:12.785 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +12:22:12.786 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +12:22:12.786 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +12:22:12.786 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +12:22:12.786 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +12:22:12.786 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +12:22:12.786 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +12:22:12.786 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +12:22:13.273 SCRIPT : ERR SMOKE PASS: shared map ownership fixture starts only with closed map and actual local character camera +12:22:13.274 SCRIPT : ERR SMOKE PASS: shared map ownership owned replacement native map layout created +12:22:13.274 SCRIPT : ERR SMOKE PASS: shared map ownership two separate real successor map prefabs spawned without inventory changes +12:22:14.283 SCRIPT : ERR SMOKE PASS: shared map ownership both fixture entities survive until native component initialization +12:22:14.284 SCRIPT : ERR SMOKE PASS: shared map ownership both native map components initialize actual render roots +12:22:14.291 SCRIPT : ERR SMOKE PASS: shared map ownership actual owned prefab captures its native plain-map root +12:22:14.291 SCRIPT : ERR SMOKE PASS: shared map ownership capture config belongs to exact fixture component +12:22:14.291 SCRIPT : ERR SMOKE PASS: shared map ownership requested distinct/reused native configuration identity established +12:22:14.292 SCRIPT : ERR SMOKE PASS: shared map ownership actual replacement root is current native map +12:22:15.795 SCRIPT : ERR SMOKE PASS: shared map ownership replacement remains open after native open-complete event +12:22:15.795 SCRIPT : ERR SMOKE PASS: shared map ownership actual stale center callback cannot pan or retarget replacement zoom +12:22:15.795 SCRIPT : ERR SMOKE PASS: shared map ownership stale camera-restore method executes but native-write authorization is denied +12:22:16.805 SCRIPT : ERR SMOKE PASS: shared map ownership both real delayed production callbacks ran exactly once +12:22:16.805 SCRIPT : ERR SMOKE PASS: shared map ownership real delayed center and finish leave replacement view unchanged +12:22:16.806 SCRIPT : ERR SMOKE PASS: shared map ownership actual finish, stop and vanilla mode-clear preserve replacement and do not request camera restore +12:22:16.807 SCRIPT : ERR SMOKE PASS: shared map ownership actual owned prefab captures its native plain-map root +12:22:16.807 SCRIPT : ERR SMOKE PASS: shared map ownership capture config belongs to exact fixture component +12:22:16.807 SCRIPT : ERR SMOKE PASS: shared map ownership requested distinct/reused native configuration identity established +12:22:16.808 SCRIPT : ERR SMOKE PASS: shared map ownership actual replacement root is current native map +12:22:18.325 SCRIPT : ERR SMOKE PASS: shared map ownership replacement remains open after native open-complete event +12:22:18.325 SCRIPT : ERR SMOKE PASS: shared map ownership actual stale center callback cannot pan or retarget replacement zoom +12:22:18.325 SCRIPT : ERR SMOKE PASS: shared map ownership stale camera-restore method executes but native-write authorization is denied +12:22:19.331 SCRIPT : ERR SMOKE PASS: shared map ownership both real delayed production callbacks ran exactly once +12:22:19.332 SCRIPT : ERR SMOKE PASS: shared map ownership real delayed center and finish leave replacement view unchanged +12:22:19.332 SCRIPT : ERR SMOKE PASS: shared map ownership actual finish, stop and vanilla mode-clear preserve replacement and do not request camera restore +12:22:19.332 SCRIPT : ERR MAP DELETE: afterSuper slot=2 released=1 captureCallbacks=0 spareCallbacks=1 +12:22:19.332 SCRIPT : ERR MAP DELETE: afterSuper slot=1 released=1 captureCallbacks=1 spareCallbacks=1 +12:22:19.332 SCRIPT : ERR MAP DELETE: request returned captureEntity=0 spareEntity=0 captureComponent=1 spareComponent=1 captureCallbacks=1 spareCallbacks=1 cleanupFailed=0 +12:22:19.850 SCRIPT : ERR MAP DELETE: completed on later tick captureEntity=0 spareEntity=0 captureComponent=0 spareComponent=0 captureCallbacks=1 spareCallbacks=1 cleanupFailed=0 +12:22:19.850 SCRIPT : ERR SMOKE PASS: shared map ownership actual prefab deletion runs successor and vanilla superclass cleanup +12:22:19.850 SCRIPT : ERR SMOKE PASS: shared map ownership spare and interrupted map deletion preserve replacement without restore calls +12:22:21.368 SCRIPT : ERR SMOKE PASS: shared map ownership replacement survives delayed native callback window after both deletions +12:22:21.369 SCRIPT : ERR SMOKE PASS: shared map ownership owned UI removed; camera render flag has no native getter and is not claimed as measured +12:22:21.369 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +12:22:21.369 SCRIPT : ERR SMOKE PASS: native map ownership probe cleaned up before explicit reset +12:22:21.369 SCRIPT : ERR SMOKE COMPLETE: native replacement map/config/root ownership and spare deletion; camera authorization observed, render flag not measured +12:22:21.476 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +12:22:21.478 SCRIPT (W): Slot_Chat Has no Content! +12:22:21.478 SCRIPT (W): Slot_VON Has no Content! +12:22:21.479 SCRIPT (W): Slot_GameVersion Has no Content! +12:22:21.479 SCRIPT (W): Slot_Notifications Has no Content! +12:22:23.540 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +12:22:23.540 SCRIPT : -- Stack trace -- +12:22:23.540 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:22:23.540 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:22:23.540 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +12:22:23.540 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:22:23.540 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:22:23.541 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:22:23.541 SCRIPT : ----------------- +12:22:23.541 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +12:22:23.541 SCRIPT : -- Stack trace -- +12:22:23.541 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:22:23.541 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:22:23.541 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +12:22:23.541 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:22:23.542 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:22:23.542 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:22:23.542 SCRIPT : ----------------- +12:22:23.544 SCRIPT (W): Slot_Chat Has no Content! +12:22:23.544 SCRIPT (W): Slot_VON Has no Content! +12:22:23.544 SCRIPT (W): Slot_GameVersion Has no Content! +12:22:23.544 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-122118-controller-compile-map/source-provenance.json b/docs/evidence/native-2026-09-19-122118-controller-compile-map/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-122118-controller-compile-map/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-122118-controller-compile-map/source-sha256.json b/docs/evidence/native-2026-09-19-122118-controller-compile-map/source-sha256.json new file mode 100644 index 0000000..7b09c58 --- /dev/null +++ b/docs/evidence/native-2026-09-19-122118-controller-compile-map/source-sha256.json @@ -0,0 +1,184 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "417e9b6ab3f2207412fa388fb4ec9ed921db38820982aa811d6dcfa6e1d62054", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "34f8e1730824850ea64f43dcd442e753d079a9795b3b9246813070ed36bb8430", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "1503db1441d8cd7a4f0b45c27ba9623b9fa39f0f81016e180bd2aa1379e1f42a", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "d4fe3cffaa188244db254b197a0165ae18f2b5b808b54e20ce888359147940fd", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "3ff1c9e9191f20769fed1e4d7a1363e4109512af76e02aa5e1e6a8766b711951", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/native-2026-09-19-123439-aircraft-controller/console.log.txt b/docs/evidence/native-2026-09-19-123439-aircraft-controller/console.log.txt new file mode 100644 index 0000000..4da336d --- /dev/null +++ b/docs/evidence/native-2026-09-19-123439-aircraft-controller/console.log.txt @@ -0,0 +1,656 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-34-39\console.log started at 2026-09-19 12:34:39 (2026-09-19 10:34:39 UTC) + +12:34:39.569 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-34-39' to filesystem under name logs +12:34:39.569 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +12:34:39.569 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +12:34:39.571 PROFILING : Workbench Create Engine took: 12.470500 ms +12:34:40.610 INIT : INIT : Workbench Init Engine +12:34:40.610 ENGINE : Initializing engine, version 192142 +12:34:40.610 ENGINE : CLI Params: -gproj Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/addons -profile Z:/tmp/erri-workbench-profile -logconsole -wbModule WorldEditor -load Worlds/ERR_Everon.ent -plugin ERR_ValidateWorldPlugin -errPlay 1 -errSmoke 1 -errSmokeOutcome aircraft-control -noThrow -disableCrashReporter +12:34:40.618 ENGINE : Addon dirs: +12:34:40.618 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/' +12:34:40.618 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +12:34:40.618 ENGINE : dir: './addons' +12:34:40.618 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +12:34:40.618 ENGINE : Available addons: +12:34:40.618 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:34:40.618 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:34:40.618 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:34:40.618 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:34:40.618 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:34:40.618 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +12:34:40.618 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +12:34:40.618 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +12:34:40.619 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +12:34:40.619 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +12:34:40.619 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +12:34:40.619 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +12:34:40.735 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +12:34:40.738 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +12:34:40.738 ENGINE : CPU vendor : AuthenticAMD +12:34:40.738 ENGINE : CPU type : 2 +12:34:40.738 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +12:34:40.738 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +12:34:40.738 ENGINE : CPU count logical : 16 +12:34:40.738 ENGINE : CPU count physical : 8 +12:34:40.738 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +12:34:40.738 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:34:40.739 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:34:40.739 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:34:40.739 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:34:40.740 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:34:40.740 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +12:34:40.873 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +12:34:40.874 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +12:34:40.875 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-34-39/resourceDatabase.rdb) +12:34:41.020 RESOURCES : RESOURCES : ResourceDB: full scan +12:34:41.025 RESOURCES : RESOURCES : scanning... +12:34:41.025 RESOURCES : RESOURCES : scanning @"ERR_Chat" +12:34:41.026 RESOURCES : RESOURCES : scanning @"ERR_Map" +12:34:41.028 RESOURCES : RESOURCES : scanning @"ERR_Intel" +12:34:41.028 RESOURCES : RESOURCES : scanning @"ERR_Ai" +12:34:41.030 RESOURCES : RESOURCES : scanning @"ERR_Core" +12:34:41.033 RESOURCES : RESOURCES : scanning @"ArmaReforger" +12:34:41.168 RESOURCES : RESOURCES : scanning @"core" +12:34:41.171 RESOURCES : RESOURCES : scanning @"profile" +12:34:41.172 RESOURCES : RESOURCES : scanning @"logs" +12:34:41.172 RESOURCES : RESOURCES : processing meta-files... +12:34:41.234 RESOURCES : RESOURCES : processing files... +12:34:41.245 INIT : Workbench startup +12:34:41.245 INIT : Workbench Init Engine +12:34:41.245 RESOURCES : ResourceDB: full scan +12:34:41.245 RESOURCES : processing files... +12:34:41.245 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +12:34:41.245 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +12:34:41.245 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +12:34:41.245 RESOURCES : RESOURCES : processing folders... +12:34:41.252 RESOURCES : RESOURCES : creating GUID-item mapping... +12:34:41.269 RESOURCES : RESOURCES : building tree... +12:34:41.325 PROFILING : ResourceDB: full scan took: 305.171000 ms +12:34:41.326 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:34:41.328 RESOURCES : ResourceDB: written 804/804 bytes +12:34:41.328 RESOURCES : ResourceDB: cache successfully saved +12:34:41.328 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:34:41.330 RESOURCES : ResourceDB: written 819/819 bytes +12:34:41.330 RESOURCES : ResourceDB: cache successfully saved +12:34:41.330 RESOURCES : ResourceDB: saving cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:34:41.331 RESOURCES : ResourceDB: written 227/227 bytes +12:34:41.331 RESOURCES : ResourceDB: cache successfully saved +12:34:41.332 RESOURCES : ResourceDB: saving cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:34:41.333 RESOURCES : ResourceDB: written 1909/1909 bytes +12:34:41.333 RESOURCES : ResourceDB: cache successfully saved +12:34:41.333 RESOURCES : ResourceDB: saving cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:34:41.335 RESOURCES : ResourceDB: written 6865/6865 bytes +12:34:41.335 RESOURCES : ResourceDB: cache successfully saved +12:34:41.335 RESOURCES : ResourceDB: saving cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +12:34:41.337 RESOURCES : ResourceDB: written 206/206 bytes +12:34:41.337 RESOURCES : ResourceDB: cache successfully saved +12:34:41.337 RESOURCES : ResourceDB: saving cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-34-39/resourceDatabase.rdb) +12:34:41.338 RESOURCES : ResourceDB: written 162/162 bytes +12:34:41.338 RESOURCES : ResourceDB: cache successfully saved +12:34:41.338 ENGINE : GameProject load +12:34:41.338 ENGINE : Loaded addons: +12:34:41.338 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +12:34:41.338 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +12:34:41.338 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:34:41.338 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:34:41.338 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:34:41.338 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:34:41.338 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:34:41.341 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +12:34:41.341 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +12:34:41.341 ENGINE : Engine user settings config loaded +12:34:41.341 PROFILING : Settings changed took: 0.001600 ms +12:34:41.440 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +12:34:41.442 RENDER : Basic screen setup: +12:34:41.442 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +12:34:41.442 RENDER : MSAA : none +12:34:41.455 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +12:34:41.455 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +12:34:41.455 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +12:34:41.455 RENDER : * core clocks 2720 MHz, memory 1124 MHz +12:34:41.455 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +12:34:41.455 RENDER : AMD AGS correctly initialized +12:34:41.456 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +12:34:41.456 RENDER : Detected output devices: +12:34:41.456 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +12:34:41.456 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +12:34:41.456 RENDER : Concurrent frames limit 2 +12:34:41.531 RENDER : DX12 device successfully created by AMD AGS library +12:34:41.531 RENDER : * user markers not supported in this version AMD SW +12:34:41.531 RENDER : Graphics device features +12:34:41.531 RENDER : Needed: +12:34:41.531 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +12:34:41.531 RENDER : Optional: +12:34:41.531 RENDER : * Allow tearing (VSYNC) : 1 +12:34:41.531 RENDER : * 16 bits : 1 +12:34:41.531 RENDER : * Resource heap tier : 3 +12:34:41.531 RENDER : * Persistent heaps (DRED) : 1 +12:34:41.531 RENDER : * DRED 1.2 is supported by compiler +12:34:41.554 RENDER : Main RT format setup. +12:34:41.554 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +12:34:41.554 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +12:34:41.555 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +12:34:41.583 PROFILING : Settings changed took: 0.019900 ms +12:34:42.216 AUDIO : Endpoint: Speakers (PulseAudio Output) +12:34:42.216 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +12:34:42.216 AUDIO : Audio client: +12:34:42.216 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +12:34:42.219 RENDER : RENDER : Reload shaders +12:34:42.220 RENDER : Enfusion shader version 13 +12:34:42.220 INIT : INIT : ShaderListReload +12:34:42.220 PROFILING : ShaderListReload took: 0.000400 ms +12:34:42.362 AUDIO : Endpoint: Speakers (PulseAudio Output) +12:34:42.362 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +12:34:42.362 AUDIO : Audio client: +12:34:42.362 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +12:34:42.582 RENDER : Loaded 3752 newer shader binaries +12:34:42.582 PROFILING : Reload shaders took: 363.141900 ms +12:34:42.582 ENGINE : Initializing inputs. +12:34:42.600 NETWORK : Initializing networking. +12:34:42.600 NETWORK : Using new GameRplScheduler. +12:34:42.601 SCRIPT : SCRIPT : Initializing scripts +12:34:42.601 SCRIPT : SCRIPT : ScriptProjectManager init +12:34:44.782 PROFILING : ScriptProjectManager init took: 2180.907900 ms +12:34:44.871 PROFILING : Initializing scripts took: 2269.951100 ms +12:34:44.889 ENGINE : Enfusion engine successfully created. +12:34:44.889 PROFILING : Workbench Init Engine took: 4279.470000 ms +12:34:44.889 INIT : INIT : Workbench Create Game +12:34:44.902 GUI : Using default language (en_us) +12:34:44.902 GUI : Loading 'en_us' localization file. +12:34:44.902 INIT : INIT : Loading StringTable +12:34:44.927 PROFILING : Loading StringTable took: 24.458200 ms +12:34:44.927 SCRIPT : SCRIPT : Compiling GameLib scripts +12:34:44.997 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +12:34:44.997 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:34:44.998 PROFILING : Compiling GameLib scripts took: 71.373600 ms +12:34:44.998 SCRIPT : SCRIPT : Compiling Game scripts +12:34:46.288 INIT : Workbench Create Game +12:34:46.288 SCRIPT : Compiling Game scripts +12:34:46.288 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:34:46.288 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:34:46.450 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:34:46.567 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:34:46.596 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:34:46.719 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:34:46.719 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:34:46.719 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:34:46.719 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:34:46.755 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:34:46.819 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:34:46.819 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:34:46.821 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:34:46.863 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:34:46.863 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:34:46.865 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:34:46.865 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:34:46.892 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:34:46.928 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:34:47.240 SCRIPT : Module: WorkbenchGame; loaded 172x files; 617x classes; used 2482K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: e963af0e +12:34:47.247 SCRIPT : Module: Game; loaded 5780x files; 11380x classes; used 33597K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: e2a25616 +12:34:47.292 PROFILING : Compiling Game scripts took: 2293.711100 ms +12:34:47.299 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:34:47.352 ENGINE : Game successfully created. +12:34:47.354 PROFILING : Workbench Create Game took: 2464.267000 ms +12:34:47.364 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/thumbnails +12:34:48.203 INIT : INIT : Workbench Reload Game +12:34:48.204 ENGINE : Game destroyed. +12:34:48.211 GUI : Using default language (en_us) +12:34:48.211 GUI : Loading 'en_us' localization file. +12:34:48.211 INIT : INIT : Loading StringTable +12:34:48.222 PROFILING : Loading StringTable took: 11.043300 ms +12:34:48.222 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:34:48.229 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:34:48.229 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:34:48.230 ENGINE : Game successfully created. +12:34:48.230 ENGINE : Game successfully initialized. +12:34:48.230 PROFILING : Workbench Reload Game took: 27.012200 ms +12:34:48.958 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +12:34:49.971 PROFILING : Entities load took: 1012.151700 ms +12:34:49.981 WORLD : WORLD : CreateEntities +12:34:49.987 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:34:49.988 PROFILING : NotifyBeforeEntitiesCreated took: 0.003300 ms +12:34:49.988 WORLD : WORLD : Wait for preloading data +12:34:49.988 PROFILING : Wait for preloading data took: 0.003500 ms +12:34:50.108 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +12:34:50.108 PROFILING : PROFILING : Terrain load +12:34:52.108 PROFILING : Terrain load took: 1997.971500 ms +12:34:56.162 WORLD : CreateEntities +12:34:56.162 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" +12:34:56.162 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:34:56.162 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:35:06.792 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:35:06.792 PROFILING : NotifyBeforeEntitiesInitialized took: 0.005400 ms +12:35:07.238 WORLD : WORLD : NotifyEntitiesInitialized +12:35:07.238 TERRAIN : TERRAIN : Initializing road networks... +12:35:07.240 PROFILING : Initializing road networks... took: 2.114000 ms +12:35:07.241 PROFILING : NotifyEntitiesInitialized took: 2.354000 ms +12:35:07.241 PROFILING : CreateEntities took: 17258.810800 ms +12:35:07.428 PROFILING : * WorldEditor: LoadWorld: 18475.211100 ms +12:35:08.926 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +12:35:08.927 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +12:35:08.928 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +12:35:08.928 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +12:35:09.016 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +12:35:09.016 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +12:35:09.016 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +12:35:09.016 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +12:35:09.016 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +12:35:09.016 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +12:35:09.019 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +12:35:09.041 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +12:35:09.063 BACKEND : Attempting online Game Config instead. +12:35:12.373 INIT : INIT : Workbench Reload Game +12:35:12.375 ENGINE : Game destroyed. +12:35:12.382 GUI : Using default language (en_us) +12:35:12.382 GUI : Loading 'en_us' localization file. +12:35:12.382 INIT : INIT : Loading StringTable +12:35:12.403 PROFILING : Loading StringTable took: 20.570700 ms +12:35:12.404 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:35:12.412 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:35:12.412 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:35:12.412 ENGINE : Game successfully created. +12:35:12.412 ENGINE : Game successfully initialized. +12:35:12.412 PROFILING : Workbench Reload Game took: 39.132300 ms +12:35:12.415 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:35:12.469 PLATFORM : Save data from container 'settings' have been loaded +12:35:12.561 PLATFORM : Save data from container 'sessions' have been loaded +12:35:12.562 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +12:35:12.562 ENGINE : Game user settings config loaded +12:35:12.659 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +12:35:12.668 WORLD : WORLD : Game::LoadEntities +12:35:12.668 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +12:35:12.669 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +12:35:12.669 WORLD : WORLD : CreateEntities +12:35:12.669 WORLD : WORLD : CreateEntities +12:35:12.669 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:35:12.683 RESOURCES : Loaded mission headers from 7 addon(s)! +12:35:12.683 PROFILING : NotifyBeforeEntitiesCreated took: 14.279400 ms +12:35:12.683 WORLD : WORLD : Wait for preloading data +12:35:12.683 PROFILING : Wait for preloading data took: 0.001100 ms +12:35:17.487 WORLD : Game::LoadEntities +12:35:17.487 WORLD : CreateEntities +12:35:17.487 WORLD : CreateEntities +12:35:17.487 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" +12:35:17.487 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:35:17.487 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:35:18.957 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +12:35:18.957 ENTITY : CreateComponent 'Hierarchy' +12:35:18.957 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +12:35:18.958 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +12:35:18.958 ENTITY : CreateComponent 'Hierarchy' +12:35:18.958 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +12:35:18.958 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +12:35:18.958 ENTITY : CreateComponent 'Hierarchy' +12:35:18.958 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +12:35:18.963 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +12:35:18.963 ENTITY : CreateComponent 'Hierarchy' +12:35:18.963 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +12:35:18.963 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +12:35:18.963 ENTITY : CreateComponent 'Hierarchy' +12:35:18.963 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +12:35:18.963 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +12:35:18.963 ENTITY : CreateComponent 'Hierarchy' +12:35:18.963 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +12:35:18.967 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +12:35:18.967 ENTITY : CreateComponent 'Hierarchy' +12:35:18.967 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +12:35:18.968 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +12:35:18.968 ENTITY : CreateComponent 'Hierarchy' +12:35:18.968 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +12:35:18.968 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +12:35:18.968 ENTITY : CreateComponent 'Hierarchy' +12:35:18.968 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +12:35:24.281 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:35:24.281 PROFILING : NotifyBeforeEntitiesInitialized took: 0.052900 ms +12:35:26.282 WORLD : InitEntities 'world' +12:35:26.282 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:35:26.282 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:35:26.309 WORLD : InitEntities 'world' +12:35:26.309 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:35:26.309 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +12:35:26.309 WORLD : WORLD : NotifyEntitiesInitialized +12:35:26.309 TERRAIN : TERRAIN : Initializing road networks... +12:35:26.312 PROFILING : Initializing road networks... took: 2.726400 ms +12:35:26.312 DEFAULT : DEFAULT : WorldVolumesCollection +12:35:26.375 PROFILING : WorldVolumesCollection took: 62.645800 ms +12:35:26.375 INIT : INIT : SoundWorldInit +12:35:26.391 PROFILING : SoundWorldInit took: 15.584100 ms +12:35:26.391 PROFILING : NotifyEntitiesInitialized took: 81.230100 ms +12:35:26.391 PROFILING : CreateEntities took: 13721.486500 ms +12:35:26.391 PROFILING : CreateEntities took: 13721.643600 ms +12:35:26.391 WORLD : WORLD : Wait for preloading data around camera +12:35:26.391 PROFILING : Wait for preloading data around camera took: 0.001000 ms +12:35:26.391 WORLD : WORLD : EOnActivate +12:35:26.424 PROFILING : EOnActivate took: 33.027900 ms +12:35:26.425 PROFILING : Game::LoadEntities took: 13756.786800 ms +12:35:26.732 DEFAULT : Entered offline game state. +12:35:26.836 NETWORK : Player connected: connectionID=2147483646 +12:35:26.836 NETWORK : ### Connecting player: connectionID=2147483646, Name= +12:35:26.837 NETWORK : ### Creating player: PlayerId=1, Name=jakub +12:35:26.842 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:35:26.842 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:35:26.842 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:35:26.843 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:35:26.843 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:35:26.845 SCRIPT (W): Can't open config file "" +12:35:26.852 WORLD : InitEntities 'world' +12:35:26.852 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:35:26.853 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:35:26.853 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:35:26.853 SCRIPT (W): Slot_Chat Has no Content! +12:35:26.853 SCRIPT (W): Slot_VON Has no Content! +12:35:26.853 SCRIPT (W): Slot_AvailableActions Has no Content! +12:35:26.853 SCRIPT (W): Slot_Vehicle Has no Content! +12:35:26.853 SCRIPT (W): Slot_GameVersion Has no Content! +12:35:26.853 SCRIPT (W): Slot_Notifications Has no Content! +12:35:26.854 SCRIPT (W): Slot_Hints Has no Content! +12:35:26.865 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:35:26.865 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +12:35:26.865 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:35:26.866 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:35:26.866 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:35:26.869 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +12:35:26.870 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:35:26.870 NETWORK : Players connecting: 0 +12:35:26.870 NETWORK : Players connected: 1 / 1 +12:35:26.899 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/autosaves +12:35:26.901 PROFILING : Workbench startup took: 47396.578500 ms +12:35:26.925 WORLD : Frame start +12:35:26.925 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:35:26.940 WORLD : UpdateEntities +12:35:26.940 WORLD : Frame +12:35:26.940 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:35:27.130 WORLD : UpdateEntities +12:35:27.131 WORLD : PostFrame +12:35:27.131 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:35:27.131 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:35:27.182 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:35:27.182 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:35:27.182 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:35:27.182 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +12:35:27.317 RENDER : RENDER : ObjectsHeightMap::Build +12:35:27.317 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +12:35:27.490 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 172.048900 ms +12:35:27.497 PROFILING : ObjectsHeightMap::Build took: 179.613800 ms +12:35:28.670 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:35:28.721 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:35:28.724 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:35:28.779 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:35:28.785 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:35:28.864 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:35:28.865 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:35:28.874 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:35:28.935 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:35:28.935 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:35:28.938 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:35:28.938 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:35:28.942 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:35:28.943 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:35:28.943 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:35:28.945 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:35:28.945 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:35:28.945 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:35:28.945 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:35:28.945 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:35:28.946 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:35:28.946 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:35:28.946 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:35:28.946 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:35:28.946 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:35:28.947 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:35:28.947 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:35:28.947 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:35:28.947 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:35:28.948 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:35:28.948 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:35:28.948 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:35:28.948 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:35:28.948 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:35:29.765 WORLD : UpdateEntities +12:35:29.765 WORLD : AfterPostSimulate +12:35:29.765 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +12:35:29.831 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:35:29.831 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:35:29.831 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:35:29.831 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:35:30.082 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.531,7499.7> up=0.995681 +12:35:30.082 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.315805 angularSpeed=0.0413827 +12:35:30.082 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:35:30.082 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6161,7501.97> +12:35:30.083 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3161,7501.97> terrainY=63.3164 tireTerrainGap=-0.000263214 +12:35:30.083 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6161,7501.97> radius=0.3 bottom=<7012.07,63.3161,7501.97> fraction=0.453475 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.000236511 +12:35:30.083 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6033,7497.71> +12:35:30.083 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1533,7497.71> terrainY=64.1555 tireTerrainGap=-0.00225067 +12:35:30.083 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6033,7497.71> radius=0.45 bottom=<7009.88,64.1533,7497.71> fraction=0.444444 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00222015 +12:35:30.083 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2645,7497.74> +12:35:30.084 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8145,7497.74> terrainY=63.8179 tireTerrainGap=-0.00341415 +12:35:30.084 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2645,7497.74> radius=0.45 bottom=<7014.42,63.8145,7497.74> fraction=0.438889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00344467 +12:35:30.084 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:35:30.338 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:35:30.338 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:35:30.338 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:35:30.339 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:35:30.853 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:35:30.853 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:35:30.853 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:35:31.105 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5355,7499.71> up=0.994345 +12:35:31.106 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0975902 angularSpeed=0.0685686 +12:35:31.106 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:35:31.106 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6197,7501.99> +12:35:31.106 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3197,7501.99> terrainY=63.3144 tireTerrainGap=0.00530624 +12:35:31.106 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6197,7501.99> radius=0.3 bottom=<7012.07,63.3197,7501.99> fraction=0.478992 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00537872 +12:35:31.106 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6025,7497.71> +12:35:31.107 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1525,7497.71> terrainY=64.149 tireTerrainGap=0.00352478 +12:35:31.107 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6025,7497.71> radius=0.45 bottom=<7009.93,64.1525,7497.71> fraction=0.470819 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00358582 +12:35:31.107 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2655,7497.78> +12:35:31.107 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8155,7497.78> terrainY=63.8155 tireTerrainGap=7.24792e-05 +12:35:31.107 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2655,7497.78> radius=0.45 bottom=<7014.47,63.8155,7497.78> fraction=0.454722 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=3.8147e-05 +12:35:31.107 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:35:31.364 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:35:31.364 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:35:31.364 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:35:31.365 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:35:31.616 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:35:31.873 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:35:31.873 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:35:31.873 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:35:31.874 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:35:32.125 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5329,7499.74> up=0.9942 +12:35:32.125 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0452317 angularSpeed=0.0244006 +12:35:32.125 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:35:32.125 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.614,7502.01> +12:35:32.126 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.314,7502.01> terrainY=63.3116 tireTerrainGap=0.00242233 +12:35:32.126 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.614,7502.01> radius=0.3 bottom=<7012.08,63.314,7502.01> fraction=0.465498 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00241089 +12:35:32.126 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5942,7497.72> +12:35:32.126 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1442,7497.72> terrainY=64.143 tireTerrainGap=0.00120544 +12:35:32.126 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5942,7497.72> radius=0.45 bottom=<7009.97,64.1442,7497.72> fraction=0.459899 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00118256 +12:35:32.126 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2599,7497.82> +12:35:32.126 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8099,7497.82> terrainY=63.8129 tireTerrainGap=-0.00302505 +12:35:32.127 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2599,7497.82> radius=0.45 bottom=<7014.51,63.8099,7497.82> fraction=0.440556 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00307846 +12:35:32.127 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:35:32.378 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:35:32.379 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:35:32.379 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:35:32.379 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:35:32.878 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:35:32.878 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:35:32.879 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:35:32.879 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:35:33.135 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +12:35:33.135 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:35:33.136 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:35:33.136 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:35:33.136 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00160599 +12:35:33.136 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461881 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00161362 +12:35:33.136 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +12:35:33.136 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00245667 +12:35:33.137 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +12:35:33.137 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:35:33.137 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00211716 +12:35:33.137 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +12:35:33.137 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:35:33.392 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:35:33.393 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:35:33.393 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:35:33.393 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:35:33.899 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:35:33.899 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:35:33.900 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:35:33.900 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:35:34.155 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +12:35:34.156 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:35:34.156 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:35:34.156 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:35:34.156 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00160599 +12:35:34.156 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461881 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00161362 +12:35:34.156 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +12:35:34.157 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00245667 +12:35:34.157 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +12:35:34.157 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:35:34.157 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00211716 +12:35:34.157 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +12:35:34.157 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:35:34.405 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:35:34.406 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:35:34.422 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:35:34.423 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:35:34.423 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:35:34.423 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:35:34.423 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:35:34.423 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:35:34.423 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:35:35.344 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:35:35.384 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +12:35:35.571 SCRIPT : ERR SMOKE PASS: new identity may enter prison +12:35:35.571 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +12:35:35.571 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +12:35:35.572 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +12:35:35.572 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +12:35:35.572 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +12:35:35.572 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +12:35:35.572 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +12:35:35.572 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +12:35:35.573 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +12:35:35.573 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +12:35:35.573 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +12:35:35.573 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +12:35:35.573 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +12:35:35.573 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +12:35:35.573 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +12:35:35.576 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +12:35:35.577 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +12:35:35.577 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +12:35:35.577 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +12:35:35.580 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +12:35:35.580 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +12:35:35.580 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +12:35:35.580 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +12:35:35.580 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +12:35:35.580 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +12:35:35.580 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +12:35:35.581 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +12:35:36.072 SCRIPT : ERR AIRCRAFT FIXTURE PAD: candidate=<4800.95,27.8202,11487.4> tested=213 terrainDelta=0.4625; no fallback +12:35:36.072 SCRIPT : ERR SMOKE PASS: aircraft-control independent qualified candidate found before one finite allocation +12:35:36.082 SCRIPT : ERR SMOKE PASS: aircraft-control one finite native Mi8 and memberless enemy group created +12:35:36.577 SCRIPT : ERR SMOKE PASS: aircraft-control one original native pilot request only +12:35:36.591 SCRIPT : ERR SMOKE PASS: aircraft-control pilot seated by native mechanism in original group +12:35:37.082 SCRIPT : ERR AIRCRAFT FIXTURE: step=2 state=-1 height=0 drift=0 speed=0 contact=0 engine=0 fuelUsed=-1938.75 reason= +12:35:39.112 SCRIPT : ERR AIRCRAFT FIXTURE: step=2 state=-1 height=-0.244459 drift=0.057204 speed=0.21186 contact=1 engine=0 fuelUsed=-1938.75 reason= +12:35:39.613 SCRIPT : ERR SMOKE PASS: aircraft-control post-spawn qualification precedes native engine start +12:35:39.614 SCRIPT : ERR AIRCRAFT FOOTPRINT ROTOR: index=1 pivot=<4800.59,31.3993,11473.5> damageRadius=2.3 thickness=0.75 scale=1.73205 sphereBound=19.7787 +12:35:39.614 SCRIPT : ERR AIRCRAFT FOOTPRINT ROTOR: index=0 pivot=<4801.17,31.7254,11486.3> damageRadius=12 thickness=1.5 scale=1.73205 sphereBound=27.6824 +12:35:39.615 SCRIPT : ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=0 localPivot=<0.0081524,4.18279,-0.790322> radius=10.645 sphereBound=14.9018 +12:35:39.615 SCRIPT : ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=1 localPivot=<-0.524318,4.96713,-13.6158> radius=1.955 sphereBound=16.458 +12:35:39.615 SCRIPT : ERR AIRCRAFT FOOTPRINT: entities=110 meshes=93 zones=74 modelSphere=20.7065 damageSphere=27.6824 simulationSphere=16.458 completeSphere=27.6824 initialDrift=0 initialHeight=-0.235437 +12:35:39.615 SCRIPT : ERR SMOKE PASS: aircraft-control actual post-spawn column and complete rotor/model footprint issue exact qualification +12:35:39.616 SCRIPT : ERR AIRCRAFT CONTROL: token=771001 bound qualified finite aircraft; no HQ dispatch installed +12:35:39.616 SCRIPT : ERR SMOKE PASS: aircraft-control actual controller accepts one qualified original pilot/aircraft order +12:35:41.138 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00807381 drift=0.0634709 speed=0 contact=1 engine=0 fuelUsed=0 reason= +12:35:43.152 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00509262 drift=0.105203 speed=0.0439573 contact=1 engine=1 fuelUsed=0 reason= +12:35:45.153 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00209618 drift=0.19592 speed=0.04607 contact=1 engine=1 fuelUsed=0.0888672 reason= +12:35:47.180 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.000980377 drift=0.286214 speed=0.0455101 contact=1 engine=1 fuelUsed=0.222168 reason= +12:35:49.197 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00422859 drift=0.379456 speed=0.0463218 contact=1 engine=1 fuelUsed=0.311035 reason= +12:35:51.227 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00705719 drift=0.474674 speed=0.0441745 contact=1 engine=1 fuelUsed=0.399902 reason= +12:35:53.250 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00448608 drift=0.564507 speed=0.0419707 contact=1 engine=1 fuelUsed=0.48877 reason= +12:35:55.269 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00602531 drift=0.627517 speed=0.0371547 contact=1 engine=1 fuelUsed=0.577637 reason= +12:35:57.293 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0150948 drift=0.691978 speed=0.0320376 contact=1 engine=1 fuelUsed=0.666504 reason= +12:35:57.505 WORLD : UpdateEntities +12:35:57.505 WORLD : AfterPostSimulate +12:35:57.505 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +12:35:59.314 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0245247 drift=0.753037 speed=0.0293029 contact=1 engine=1 fuelUsed=0.755371 reason= +12:36:01.331 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0366058 drift=0.779821 speed=0.0247989 contact=1 engine=1 fuelUsed=0.844238 reason= +12:36:03.343 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0509396 drift=0.789048 speed=0.0532034 contact=1 engine=1 fuelUsed=0.933105 reason= +12:36:05.361 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0665207 drift=0.816846 speed=0.0290123 contact=1 engine=1 fuelUsed=1.02197 reason= +12:36:07.386 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0818901 drift=0.877152 speed=0.0585432 contact=1 engine=1 fuelUsed=1.11084 reason= +12:36:09.428 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=4 height=0.0717888 drift=1.45776 speed=0.0952672 contact=1 engine=1 fuelUsed=1.19971 reason= +12:36:11.449 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=-0.0368767 drift=1.51683 speed=0.0514132 contact=1 engine=1 fuelUsed=1.28857 reason= +12:36:13.488 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=0.00943184 drift=1.5778 speed=0.24849 contact=1 engine=1 fuelUsed=1.37744 reason= +12:36:15.506 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=1.73523 drift=2.5395 speed=1.38632 contact=0 engine=1 fuelUsed=1.46631 reason= +12:36:17.529 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=4.38705 drift=3.40162 speed=1.41821 contact=0 engine=1 fuelUsed=1.55518 reason= +12:36:19.553 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=6.96705 drift=3.43239 speed=0.88949 contact=0 engine=1 fuelUsed=1.64404 reason= +12:36:21.572 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=8.00455 drift=3.313 speed=0.230358 contact=0 engine=1 fuelUsed=1.73291 reason= +12:36:23.603 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=8.1617 drift=3.28807 speed=0.0100333 contact=0 engine=1 fuelUsed=1.82178 reason= +12:36:25.613 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=8.09104 drift=3.29123 speed=0.0608897 contact=0 engine=1 fuelUsed=1.91064 reason= +12:36:27.639 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=6.88694 drift=3.28868 speed=0.697324 contact=0 engine=1 fuelUsed=1.99951 reason= +12:36:29.662 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=5.39207 drift=3.28759 speed=0.767511 contact=0 engine=1 fuelUsed=2.08838 reason= +12:36:31.679 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=3.8145 drift=3.28929 speed=0.789667 contact=0 engine=1 fuelUsed=2.17725 reason= +12:36:33.717 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=2.19746 drift=3.28929 speed=0.796754 contact=0 engine=1 fuelUsed=2.26611 reason= +12:36:35.736 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=0.691048 drift=3.2882 speed=0.562904 contact=0 engine=1 fuelUsed=2.35498 reason= +12:36:37.750 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=0.0872955 drift=3.16715 speed=0.243173 contact=1 engine=1 fuelUsed=2.44385 reason= +12:36:39.783 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=-0.0455341 drift=3.2889 speed=0.0896586 contact=1 engine=1 fuelUsed=2.53271 reason= +12:36:41.297 SCRIPT : ERR AIRCRAFT CONTROL: token=771001 state=8 reason=; physical availability remains with the allocating owner +12:36:41.297 SCRIPT : ERR AIRCRAFT FIXTURE RESULT: state=8 token=771001 engineStarts=1 controllerStarts=1 wakes=1 pilotHooks=1120 helicopterHooks=1120 reason= +12:36:41.297 SCRIPT : ERR SMOKE PASS: aircraft-control actual control order completes on original physical grounded aircraft with engine off, finite fuel use and exact pilot +12:36:41.304 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +12:36:41.305 SCRIPT : ERR SMOKE PASS: actual aircraft controller completed before explicit fixture reset +12:36:41.305 SCRIPT : ERR SMOKE COMPLETE: actual aircraft controller and post-spawn qualification, powered hover and contact landing; isolated physical mechanism, not HQ dispatch +12:36:41.416 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +12:36:41.418 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:36:41.418 SCRIPT (W): Slot_Chat Has no Content! +12:36:41.419 SCRIPT (W): Slot_VON Has no Content! +12:36:41.419 SCRIPT (W): Slot_GameVersion Has no Content! +12:36:41.419 SCRIPT (W): Slot_Notifications Has no Content! +12:36:43.479 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +12:36:43.479 SCRIPT : -- Stack trace -- +12:36:43.480 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:36:43.480 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:36:43.480 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +12:36:43.480 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:36:43.480 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:36:43.480 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:36:43.480 SCRIPT : ----------------- +12:36:43.480 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +12:36:43.480 SCRIPT : -- Stack trace -- +12:36:43.481 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:36:43.481 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:36:43.481 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +12:36:43.481 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:36:43.481 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:36:43.481 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:36:43.482 SCRIPT : ----------------- +12:36:43.483 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:36:43.484 SCRIPT (W): Slot_Chat Has no Content! +12:36:43.484 SCRIPT (W): Slot_VON Has no Content! +12:36:43.484 SCRIPT (W): Slot_GameVersion Has no Content! +12:36:43.484 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-123439-aircraft-controller/error.log.txt b/docs/evidence/native-2026-09-19-123439-aircraft-controller/error.log.txt new file mode 100644 index 0000000..2e9b147 --- /dev/null +++ b/docs/evidence/native-2026-09-19-123439-aircraft-controller/error.log.txt @@ -0,0 +1,121 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-34-39\error.log started at 2026-09-19 12:34:41 (2026-09-19 10:34:41 UTC) + +12:34:41.245 INIT : Workbench startup +12:34:41.245 INIT : Workbench Init Engine +12:34:41.245 RESOURCES : ResourceDB: full scan +12:34:41.245 RESOURCES : processing files... +12:34:41.245 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +12:34:41.245 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +12:34:41.245 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +12:34:46.288 INIT : Workbench Create Game +12:34:46.288 SCRIPT : Compiling Game scripts +12:34:46.288 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:34:46.288 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:34:46.450 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:34:46.567 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:34:46.596 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:34:46.719 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:34:46.719 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:34:46.719 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:34:46.719 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:34:46.755 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:34:46.819 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:34:46.819 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:34:46.821 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:34:46.863 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:34:46.863 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:34:46.865 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:34:46.865 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:34:46.892 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:34:46.928 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:34:56.162 WORLD : CreateEntities +12:34:56.162 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" +12:34:56.162 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:34:56.162 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:35:12.415 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:35:17.487 WORLD : Game::LoadEntities +12:35:17.487 WORLD : CreateEntities +12:35:17.487 WORLD : CreateEntities +12:35:17.487 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" +12:35:17.487 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:35:17.487 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:35:18.957 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +12:35:18.957 ENTITY : CreateComponent 'Hierarchy' +12:35:18.957 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +12:35:18.958 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +12:35:18.958 ENTITY : CreateComponent 'Hierarchy' +12:35:18.958 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +12:35:18.958 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +12:35:18.958 ENTITY : CreateComponent 'Hierarchy' +12:35:18.958 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +12:35:18.963 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +12:35:18.963 ENTITY : CreateComponent 'Hierarchy' +12:35:18.963 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +12:35:18.963 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +12:35:18.963 ENTITY : CreateComponent 'Hierarchy' +12:35:18.963 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +12:35:18.963 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +12:35:18.963 ENTITY : CreateComponent 'Hierarchy' +12:35:18.963 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +12:35:18.967 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +12:35:18.967 ENTITY : CreateComponent 'Hierarchy' +12:35:18.967 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +12:35:18.968 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +12:35:18.968 ENTITY : CreateComponent 'Hierarchy' +12:35:18.968 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +12:35:18.968 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +12:35:18.968 ENTITY : CreateComponent 'Hierarchy' +12:35:18.968 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +12:35:26.282 WORLD : InitEntities 'world' +12:35:26.282 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:35:26.282 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:35:26.842 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:35:26.842 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:35:26.842 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:35:26.843 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:35:26.843 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:35:26.845 SCRIPT (W): Can't open config file "" +12:35:26.852 WORLD : InitEntities 'world' +12:35:26.852 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:35:26.853 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:35:26.853 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:35:26.853 SCRIPT (W): Slot_Chat Has no Content! +12:35:26.853 SCRIPT (W): Slot_VON Has no Content! +12:35:26.853 SCRIPT (W): Slot_AvailableActions Has no Content! +12:35:26.853 SCRIPT (W): Slot_Vehicle Has no Content! +12:35:26.853 SCRIPT (W): Slot_GameVersion Has no Content! +12:35:26.853 SCRIPT (W): Slot_Notifications Has no Content! +12:35:26.854 SCRIPT (W): Slot_Hints Has no Content! +12:35:26.865 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:35:26.865 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +12:35:26.865 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:35:26.866 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:35:26.866 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:35:26.870 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:35:27.130 WORLD : UpdateEntities +12:35:27.131 WORLD : PostFrame +12:35:27.131 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:35:27.131 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:35:27.182 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:35:27.182 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:35:27.182 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:35:27.182 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +12:35:29.765 WORLD : UpdateEntities +12:35:29.765 WORLD : AfterPostSimulate +12:35:29.765 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +12:35:57.505 WORLD : UpdateEntities +12:35:57.505 WORLD : AfterPostSimulate +12:35:57.505 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +12:36:41.418 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:36:41.418 SCRIPT (W): Slot_Chat Has no Content! +12:36:41.419 SCRIPT (W): Slot_VON Has no Content! +12:36:41.419 SCRIPT (W): Slot_GameVersion Has no Content! +12:36:41.419 SCRIPT (W): Slot_Notifications Has no Content! +12:36:43.479 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +12:36:43.480 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +12:36:43.483 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:36:43.484 SCRIPT (W): Slot_Chat Has no Content! +12:36:43.484 SCRIPT (W): Slot_VON Has no Content! +12:36:43.484 SCRIPT (W): Slot_GameVersion Has no Content! +12:36:43.484 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-123439-aircraft-controller/headless-launch.log.txt b/docs/evidence/native-2026-09-19-123439-aircraft-controller/headless-launch.log.txt new file mode 100644 index 0000000..d84cfaa --- /dev/null +++ b/docs/evidence/native-2026-09-19-123439-aircraft-controller/headless-launch.log.txt @@ -0,0 +1,150 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 122 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 1 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerWorkbenchSteamDiag.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a001a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a001a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a001a4 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a0039a +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a0039a +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a0039a + wayland surface res id: 10 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x555563ae27f0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x555563ae27f0 +[Gamescope WSI] Destroyed swapchain: 0x555563ae27f0 +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x555563ae27f0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x555563ae27f0 +[Gamescope WSI] Destroyed swapchain: 0x555563ae27f0 +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x555563a6b560 - imageCount: 4 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/native-2026-09-19-123439-aircraft-controller/launch-source-sha256.json b/docs/evidence/native-2026-09-19-123439-aircraft-controller/launch-source-sha256.json new file mode 100644 index 0000000..66b2857 --- /dev/null +++ b/docs/evidence/native-2026-09-19-123439-aircraft-controller/launch-source-sha256.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "417e9b6ab3f2207412fa388fb4ec9ed921db38820982aa811d6dcfa6e1d62054", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "7aacb1d871f65a53b76efbecb77ec23090cc7d82ba34c1e8a93ef9445754fca6", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "527d1bb08a2720e7a17d13864ac84b184b29b30be3d5e4fa0a022a9fc25a3eff", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dd01a9d7d8860f8e0051e275236bdc1a2718906324f0fc9089f0d483ebb791c2", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "3ff1c9e9191f20769fed1e4d7a1363e4109512af76e02aa5e1e6a8766b711951", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/native-2026-09-19-123439-aircraft-controller/launch-source.json b/docs/evidence/native-2026-09-19-123439-aircraft-controller/launch-source.json new file mode 100644 index 0000000..807328c --- /dev/null +++ b/docs/evidence/native-2026-09-19-123439-aircraft-controller/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "f24a27e2-4d5d-4da8-96e8-9e2ea0927e88", + "captured_unix": 1789814077.929874, + "source_root": "/home/jakub/devel/escapistsrereintroduced", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj", + "-addonsDir", + "Z:/home/jakub/devel/escapistsrereintroduced/addons", + "-profile", + "Z:/tmp/erri-workbench-profile", + "-logconsole", + "-wbModule=WorldEditor", + "-load", + "Worlds/ERR_Everon.ent", + "-plugin=ERR_ValidateWorldPlugin", + "-errPlay", + "1", + "-errSmoke", + "1", + "-errSmokeOutcome", + "aircraft-control", + "-noThrow", + "-disableCrashReporter" + ], + "manifest_sha256": "45615b99a00beb8807990f26d1b9d7e6767ec89b5d403fcfc931371a808cea7d" +} diff --git a/docs/evidence/native-2026-09-19-123439-aircraft-controller/report.json b/docs/evidence/native-2026-09-19-123439-aircraft-controller/report.json new file mode 100644 index 0000000..5eaab9e --- /dev/null +++ b/docs/evidence/native-2026-09-19-123439-aircraft-controller/report.json @@ -0,0 +1,9 @@ +{ + "log": "docs/evidence/native-2026-09-19-123439-aircraft-controller/console.log.txt", + "smoke_completions": 1, + "assertions_passed": 37, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" +} diff --git a/docs/evidence/native-2026-09-19-123439-aircraft-controller/rereintroduced-hq.log.txt b/docs/evidence/native-2026-09-19-123439-aircraft-controller/rereintroduced-hq.log.txt new file mode 100644 index 0000000..6331bb4 --- /dev/null +++ b/docs/evidence/native-2026-09-19-123439-aircraft-controller/rereintroduced-hq.log.txt @@ -0,0 +1,12 @@ +#1 t=6.8s M0 REGISTER group 1 [session=1789814126-1] +#2 t=6.8s M0 MORTAR DEPLOY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; authored gun and four-person crew; finite ammunition initialization pending [session=1789814126-1] +#3 t=7.7s M0 COURIER READY trip=0 state=1 delivered=0; 12 distinct original HE shells physically confirmed in existing western cache [session=1789814126-1] +#4 t=8.8s M0 REGISTER group 2 [session=1789814126-1] +#5 t=8.8s M0 REGISTER group 3 [session=1789814126-1] +#6 t=8.8s M0 REGISTER group 4 [session=1789814126-1] +#7 t=8.8s M0 REGISTER group 5 [session=1789814126-1] +#8 t=8.8s M0 REGISTER group 6 [session=1789814126-1] +#9 t=8.8s M0 REGISTER group 7 [session=1789814126-1] +#10 t=18.8s M0 MORTAR CREW READY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; four original physical members, one manpack, 27 confirmed HE; new shell requests=27; allocation permanently closed [session=1789814126-1] +#11 t=73.7s M0 AIRCRAFT CONTROL token=771001 state=8 reason=; physical availability remains with the allocating owner [session=1789814126-1] +#12 t=73.7s M0 STOP HQ stopped; tactical orders released [session=1789814126-1] diff --git a/docs/evidence/native-2026-09-19-123439-aircraft-controller/runner.json.txt b/docs/evidence/native-2026-09-19-123439-aircraft-controller/runner.json.txt new file mode 100644 index 0000000..e938646 --- /dev/null +++ b/docs/evidence/native-2026-09-19-123439-aircraft-controller/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789814208.164072, + "console_sha256": "4ad9f9e716939cf0719edf463295102ae32fb8618f8afc343d2ca1dcb550b242", + "end_source_sha256": "45615b99a00beb8807990f26d1b9d7e6767ec89b5d403fcfc931371a808cea7d", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "f24a27e2-4d5d-4da8-96e8-9e2ea0927e88", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "45615b99a00beb8807990f26d1b9d7e6767ec89b5d403fcfc931371a808cea7d", + "started_unix": 1789814077.929943, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_12-34-39", + "rounds_required": 1, + "project": "chat", + "display": "headless Gamescope 1280x720/30Hz", + "dedicated_server": false, + "audio": "silent sink and per-test-stream mute" +} diff --git a/docs/evidence/native-2026-09-19-123439-aircraft-controller/script.log.txt b/docs/evidence/native-2026-09-19-123439-aircraft-controller/script.log.txt new file mode 100644 index 0000000..2f833d1 --- /dev/null +++ b/docs/evidence/native-2026-09-19-123439-aircraft-controller/script.log.txt @@ -0,0 +1,334 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-34-39\script.log started at 2026-09-19 12:34:42 (2026-09-19 10:34:42 UTC) + +12:34:42.601 SCRIPT : SCRIPT : Initializing scripts +12:34:42.601 SCRIPT : SCRIPT : ScriptProjectManager init +12:34:44.927 SCRIPT : SCRIPT : Compiling GameLib scripts +12:34:44.997 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +12:34:44.997 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:34:44.998 SCRIPT : SCRIPT : Compiling Game scripts +12:34:46.288 SCRIPT : Compiling Game scripts +12:34:46.288 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:34:46.288 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:34:46.450 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:34:46.567 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:34:46.596 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:34:46.719 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:34:46.719 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:34:46.719 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:34:46.719 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:34:46.755 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:34:46.819 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:34:46.819 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:34:46.821 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:34:46.863 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:34:46.863 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:34:46.865 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:34:46.865 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:34:46.892 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:34:46.928 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:34:47.240 SCRIPT : Module: WorkbenchGame; loaded 172x files; 617x classes; used 2482K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: e963af0e +12:34:47.247 SCRIPT : Module: Game; loaded 5780x files; 11380x classes; used 33597K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: e2a25616 +12:34:48.229 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:34:48.229 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:35:09.016 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +12:35:09.016 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +12:35:09.016 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +12:35:09.016 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +12:35:09.016 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +12:35:09.017 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +12:35:09.018 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +12:35:09.019 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +12:35:09.041 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +12:35:12.412 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:35:12.412 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:35:26.282 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:35:26.309 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +12:35:26.843 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:35:26.843 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:35:26.845 SCRIPT (W): Can't open config file "" +12:35:26.853 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:35:26.853 SCRIPT (W): Slot_Chat Has no Content! +12:35:26.853 SCRIPT (W): Slot_VON Has no Content! +12:35:26.853 SCRIPT (W): Slot_AvailableActions Has no Content! +12:35:26.853 SCRIPT (W): Slot_Vehicle Has no Content! +12:35:26.853 SCRIPT (W): Slot_GameVersion Has no Content! +12:35:26.854 SCRIPT (W): Slot_Notifications Has no Content! +12:35:26.854 SCRIPT (W): Slot_Hints Has no Content! +12:35:26.866 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:35:26.866 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:35:26.870 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:35:26.925 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:35:26.940 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:35:27.131 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:35:28.670 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:35:28.721 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:35:28.724 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:35:28.779 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:35:28.785 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:35:28.864 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:35:28.865 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:35:28.874 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:35:28.935 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:35:28.935 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:35:28.938 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:35:28.938 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:35:28.942 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:35:28.943 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:35:28.943 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:35:28.945 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:35:28.945 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:35:28.945 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:35:28.945 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:35:28.945 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:35:28.946 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:35:28.946 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:35:28.946 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:35:28.946 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:35:28.946 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:35:28.947 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:35:28.947 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:35:28.947 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:35:28.947 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:35:28.948 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:35:28.948 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:35:28.948 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:35:28.948 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:35:28.948 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:35:29.831 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:35:29.831 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:35:29.831 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:35:29.831 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:35:30.082 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.531,7499.7> up=0.995681 +12:35:30.082 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.315805 angularSpeed=0.0413827 +12:35:30.082 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:35:30.082 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6161,7501.97> +12:35:30.083 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3161,7501.97> terrainY=63.3164 tireTerrainGap=-0.000263214 +12:35:30.083 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6161,7501.97> radius=0.3 bottom=<7012.07,63.3161,7501.97> fraction=0.453475 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.000236511 +12:35:30.083 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6033,7497.71> +12:35:30.083 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1533,7497.71> terrainY=64.1555 tireTerrainGap=-0.00225067 +12:35:30.083 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6033,7497.71> radius=0.45 bottom=<7009.88,64.1533,7497.71> fraction=0.444444 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00222015 +12:35:30.083 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2645,7497.74> +12:35:30.084 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8145,7497.74> terrainY=63.8179 tireTerrainGap=-0.00341415 +12:35:30.084 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2645,7497.74> radius=0.45 bottom=<7014.42,63.8145,7497.74> fraction=0.438889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00344467 +12:35:30.084 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:35:30.338 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:35:30.338 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:35:30.339 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:35:30.339 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:35:30.853 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:35:30.853 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:35:30.853 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:35:31.105 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5355,7499.71> up=0.994345 +12:35:31.106 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0975902 angularSpeed=0.0685686 +12:35:31.106 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:35:31.106 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6197,7501.99> +12:35:31.106 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3197,7501.99> terrainY=63.3144 tireTerrainGap=0.00530624 +12:35:31.106 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6197,7501.99> radius=0.3 bottom=<7012.07,63.3197,7501.99> fraction=0.478992 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00537872 +12:35:31.106 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6025,7497.71> +12:35:31.107 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1525,7497.71> terrainY=64.149 tireTerrainGap=0.00352478 +12:35:31.107 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6025,7497.71> radius=0.45 bottom=<7009.93,64.1525,7497.71> fraction=0.470819 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00358582 +12:35:31.107 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2655,7497.78> +12:35:31.107 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8155,7497.78> terrainY=63.8155 tireTerrainGap=7.24792e-05 +12:35:31.107 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2655,7497.78> radius=0.45 bottom=<7014.47,63.8155,7497.78> fraction=0.454722 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=3.8147e-05 +12:35:31.107 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:35:31.364 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:35:31.364 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:35:31.364 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:35:31.365 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:35:31.616 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:35:31.873 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:35:31.873 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:35:31.873 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:35:31.874 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:35:32.125 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5329,7499.74> up=0.9942 +12:35:32.125 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0452317 angularSpeed=0.0244006 +12:35:32.125 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:35:32.125 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.614,7502.01> +12:35:32.126 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.314,7502.01> terrainY=63.3116 tireTerrainGap=0.00242233 +12:35:32.126 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.614,7502.01> radius=0.3 bottom=<7012.08,63.314,7502.01> fraction=0.465498 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00241089 +12:35:32.126 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5942,7497.72> +12:35:32.126 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1442,7497.72> terrainY=64.143 tireTerrainGap=0.00120544 +12:35:32.126 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5942,7497.72> radius=0.45 bottom=<7009.97,64.1442,7497.72> fraction=0.459899 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00118256 +12:35:32.126 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2599,7497.82> +12:35:32.126 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8099,7497.82> terrainY=63.8129 tireTerrainGap=-0.00302505 +12:35:32.127 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2599,7497.82> radius=0.45 bottom=<7014.51,63.8099,7497.82> fraction=0.440556 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00307846 +12:35:32.127 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:35:32.378 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:35:32.379 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:35:32.379 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:35:32.379 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:35:32.878 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:35:32.878 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:35:32.879 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:35:32.879 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:35:33.135 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +12:35:33.135 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:35:33.136 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:35:33.136 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:35:33.136 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00160599 +12:35:33.136 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461881 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00161362 +12:35:33.136 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +12:35:33.136 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00245667 +12:35:33.137 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +12:35:33.137 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:35:33.137 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00211716 +12:35:33.137 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +12:35:33.137 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:35:33.392 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:35:33.393 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:35:33.393 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:35:33.393 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:35:33.899 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:35:33.899 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:35:33.900 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:35:33.900 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:35:34.155 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +12:35:34.156 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:35:34.156 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:35:34.156 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:35:34.156 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00160599 +12:35:34.156 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461881 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00161362 +12:35:34.156 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +12:35:34.157 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00245667 +12:35:34.157 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +12:35:34.157 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:35:34.157 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00211716 +12:35:34.157 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +12:35:34.157 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:35:34.405 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:35:34.406 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:35:34.422 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:35:34.423 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:35:34.423 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:35:34.423 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:35:34.423 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:35:34.423 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:35:34.423 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:35:35.344 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:35:35.384 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +12:35:35.571 SCRIPT : ERR SMOKE PASS: new identity may enter prison +12:35:35.571 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +12:35:35.571 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +12:35:35.572 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +12:35:35.572 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +12:35:35.572 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +12:35:35.572 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +12:35:35.572 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +12:35:35.572 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +12:35:35.573 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +12:35:35.573 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +12:35:35.573 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +12:35:35.573 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +12:35:35.573 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +12:35:35.573 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +12:35:35.573 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +12:35:35.576 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +12:35:35.577 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +12:35:35.577 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +12:35:35.577 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +12:35:35.580 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +12:35:35.580 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +12:35:35.580 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +12:35:35.580 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +12:35:35.580 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +12:35:35.580 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +12:35:35.580 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +12:35:35.581 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +12:35:36.072 SCRIPT : ERR AIRCRAFT FIXTURE PAD: candidate=<4800.95,27.8202,11487.4> tested=213 terrainDelta=0.4625; no fallback +12:35:36.072 SCRIPT : ERR SMOKE PASS: aircraft-control independent qualified candidate found before one finite allocation +12:35:36.082 SCRIPT : ERR SMOKE PASS: aircraft-control one finite native Mi8 and memberless enemy group created +12:35:36.577 SCRIPT : ERR SMOKE PASS: aircraft-control one original native pilot request only +12:35:36.591 SCRIPT : ERR SMOKE PASS: aircraft-control pilot seated by native mechanism in original group +12:35:37.082 SCRIPT : ERR AIRCRAFT FIXTURE: step=2 state=-1 height=0 drift=0 speed=0 contact=0 engine=0 fuelUsed=-1938.75 reason= +12:35:39.112 SCRIPT : ERR AIRCRAFT FIXTURE: step=2 state=-1 height=-0.244459 drift=0.057204 speed=0.21186 contact=1 engine=0 fuelUsed=-1938.75 reason= +12:35:39.613 SCRIPT : ERR SMOKE PASS: aircraft-control post-spawn qualification precedes native engine start +12:35:39.614 SCRIPT : ERR AIRCRAFT FOOTPRINT ROTOR: index=1 pivot=<4800.59,31.3993,11473.5> damageRadius=2.3 thickness=0.75 scale=1.73205 sphereBound=19.7787 +12:35:39.614 SCRIPT : ERR AIRCRAFT FOOTPRINT ROTOR: index=0 pivot=<4801.17,31.7254,11486.3> damageRadius=12 thickness=1.5 scale=1.73205 sphereBound=27.6824 +12:35:39.615 SCRIPT : ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=0 localPivot=<0.0081524,4.18279,-0.790322> radius=10.645 sphereBound=14.9018 +12:35:39.615 SCRIPT : ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=1 localPivot=<-0.524318,4.96713,-13.6158> radius=1.955 sphereBound=16.458 +12:35:39.615 SCRIPT : ERR AIRCRAFT FOOTPRINT: entities=110 meshes=93 zones=74 modelSphere=20.7065 damageSphere=27.6824 simulationSphere=16.458 completeSphere=27.6824 initialDrift=0 initialHeight=-0.235437 +12:35:39.615 SCRIPT : ERR SMOKE PASS: aircraft-control actual post-spawn column and complete rotor/model footprint issue exact qualification +12:35:39.616 SCRIPT : ERR AIRCRAFT CONTROL: token=771001 bound qualified finite aircraft; no HQ dispatch installed +12:35:39.616 SCRIPT : ERR SMOKE PASS: aircraft-control actual controller accepts one qualified original pilot/aircraft order +12:35:41.138 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00807381 drift=0.0634709 speed=0 contact=1 engine=0 fuelUsed=0 reason= +12:35:43.152 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00509262 drift=0.105203 speed=0.0439573 contact=1 engine=1 fuelUsed=0 reason= +12:35:45.153 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00209618 drift=0.19592 speed=0.04607 contact=1 engine=1 fuelUsed=0.0888672 reason= +12:35:47.180 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.000980377 drift=0.286214 speed=0.0455101 contact=1 engine=1 fuelUsed=0.222168 reason= +12:35:49.197 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00422859 drift=0.379456 speed=0.0463218 contact=1 engine=1 fuelUsed=0.311035 reason= +12:35:51.227 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00705719 drift=0.474674 speed=0.0441745 contact=1 engine=1 fuelUsed=0.399902 reason= +12:35:53.250 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00448608 drift=0.564507 speed=0.0419707 contact=1 engine=1 fuelUsed=0.48877 reason= +12:35:55.269 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00602531 drift=0.627517 speed=0.0371547 contact=1 engine=1 fuelUsed=0.577637 reason= +12:35:57.293 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0150948 drift=0.691978 speed=0.0320376 contact=1 engine=1 fuelUsed=0.666504 reason= +12:35:59.314 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0245247 drift=0.753037 speed=0.0293029 contact=1 engine=1 fuelUsed=0.755371 reason= +12:36:01.331 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0366058 drift=0.779821 speed=0.0247989 contact=1 engine=1 fuelUsed=0.844238 reason= +12:36:03.343 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0509396 drift=0.789048 speed=0.0532034 contact=1 engine=1 fuelUsed=0.933105 reason= +12:36:05.361 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0665207 drift=0.816846 speed=0.0290123 contact=1 engine=1 fuelUsed=1.02197 reason= +12:36:07.386 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0818901 drift=0.877152 speed=0.0585432 contact=1 engine=1 fuelUsed=1.11084 reason= +12:36:09.428 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=4 height=0.0717888 drift=1.45776 speed=0.0952672 contact=1 engine=1 fuelUsed=1.19971 reason= +12:36:11.449 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=-0.0368767 drift=1.51683 speed=0.0514132 contact=1 engine=1 fuelUsed=1.28857 reason= +12:36:13.488 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=0.00943184 drift=1.5778 speed=0.24849 contact=1 engine=1 fuelUsed=1.37744 reason= +12:36:15.506 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=1.73523 drift=2.5395 speed=1.38632 contact=0 engine=1 fuelUsed=1.46631 reason= +12:36:17.529 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=4.38705 drift=3.40162 speed=1.41821 contact=0 engine=1 fuelUsed=1.55518 reason= +12:36:19.553 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=6.96705 drift=3.43239 speed=0.88949 contact=0 engine=1 fuelUsed=1.64404 reason= +12:36:21.572 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=8.00455 drift=3.313 speed=0.230358 contact=0 engine=1 fuelUsed=1.73291 reason= +12:36:23.603 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=8.1617 drift=3.28807 speed=0.0100333 contact=0 engine=1 fuelUsed=1.82178 reason= +12:36:25.613 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=8.09104 drift=3.29123 speed=0.0608897 contact=0 engine=1 fuelUsed=1.91064 reason= +12:36:27.639 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=6.88694 drift=3.28868 speed=0.697324 contact=0 engine=1 fuelUsed=1.99951 reason= +12:36:29.662 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=5.39207 drift=3.28759 speed=0.767511 contact=0 engine=1 fuelUsed=2.08838 reason= +12:36:31.679 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=3.8145 drift=3.28929 speed=0.789667 contact=0 engine=1 fuelUsed=2.17725 reason= +12:36:33.717 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=2.19746 drift=3.28929 speed=0.796754 contact=0 engine=1 fuelUsed=2.26611 reason= +12:36:35.736 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=0.691048 drift=3.2882 speed=0.562904 contact=0 engine=1 fuelUsed=2.35498 reason= +12:36:37.750 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=0.0872955 drift=3.16715 speed=0.243173 contact=1 engine=1 fuelUsed=2.44385 reason= +12:36:39.783 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=-0.0455341 drift=3.2889 speed=0.0896586 contact=1 engine=1 fuelUsed=2.53271 reason= +12:36:41.297 SCRIPT : ERR AIRCRAFT CONTROL: token=771001 state=8 reason=; physical availability remains with the allocating owner +12:36:41.297 SCRIPT : ERR AIRCRAFT FIXTURE RESULT: state=8 token=771001 engineStarts=1 controllerStarts=1 wakes=1 pilotHooks=1120 helicopterHooks=1120 reason= +12:36:41.297 SCRIPT : ERR SMOKE PASS: aircraft-control actual control order completes on original physical grounded aircraft with engine off, finite fuel use and exact pilot +12:36:41.304 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +12:36:41.305 SCRIPT : ERR SMOKE PASS: actual aircraft controller completed before explicit fixture reset +12:36:41.305 SCRIPT : ERR SMOKE COMPLETE: actual aircraft controller and post-spawn qualification, powered hover and contact landing; isolated physical mechanism, not HQ dispatch +12:36:41.416 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +12:36:41.418 SCRIPT (W): Slot_Chat Has no Content! +12:36:41.419 SCRIPT (W): Slot_VON Has no Content! +12:36:41.419 SCRIPT (W): Slot_GameVersion Has no Content! +12:36:41.419 SCRIPT (W): Slot_Notifications Has no Content! +12:36:43.479 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +12:36:43.479 SCRIPT : -- Stack trace -- +12:36:43.480 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:36:43.480 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:36:43.480 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +12:36:43.480 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:36:43.480 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:36:43.480 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:36:43.480 SCRIPT : ----------------- +12:36:43.480 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +12:36:43.480 SCRIPT : -- Stack trace -- +12:36:43.481 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:36:43.481 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:36:43.481 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +12:36:43.481 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:36:43.481 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:36:43.481 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:36:43.482 SCRIPT : ----------------- +12:36:43.484 SCRIPT (W): Slot_Chat Has no Content! +12:36:43.484 SCRIPT (W): Slot_VON Has no Content! +12:36:43.484 SCRIPT (W): Slot_GameVersion Has no Content! +12:36:43.484 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-123439-aircraft-controller/source-provenance.json b/docs/evidence/native-2026-09-19-123439-aircraft-controller/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-123439-aircraft-controller/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-123439-aircraft-controller/source-sha256.json b/docs/evidence/native-2026-09-19-123439-aircraft-controller/source-sha256.json new file mode 100644 index 0000000..66b2857 --- /dev/null +++ b/docs/evidence/native-2026-09-19-123439-aircraft-controller/source-sha256.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "417e9b6ab3f2207412fa388fb4ec9ed921db38820982aa811d6dcfa6e1d62054", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "7aacb1d871f65a53b76efbecb77ec23090cc7d82ba34c1e8a93ef9445754fca6", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "527d1bb08a2720e7a17d13864ac84b184b29b30be3d5e4fa0a022a9fc25a3eff", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dd01a9d7d8860f8e0051e275236bdc1a2718906324f0fc9089f0d483ebb791c2", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "3ff1c9e9191f20769fed1e4d7a1363e4109512af76e02aa5e1e6a8766b711951", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/native-2026-09-19-124154-overhead-unobserved/console.log.txt b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/console.log.txt new file mode 100644 index 0000000..50c2eb9 --- /dev/null +++ b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/console.log.txt @@ -0,0 +1,652 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-41-54\console.log started at 2026-09-19 12:41:54 (2026-09-19 10:41:54 UTC) + +12:41:54.601 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-41-54' to filesystem under name logs +12:41:54.601 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +12:41:54.601 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +12:41:54.603 PROFILING : Workbench Create Engine took: 10.318800 ms +12:41:55.640 INIT : INIT : Workbench Init Engine +12:41:55.640 ENGINE : Initializing engine, version 192142 +12:41:55.640 ENGINE : CLI Params: -gproj Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/addons -profile Z:/tmp/erri-workbench-profile -logconsole -wbModule WorldEditor -load Worlds/ERR_Everon.ent -plugin ERR_ValidateWorldPlugin -errPlay 1 -errSmoke 1 -errSmokeOutcome victory -noThrow -disableCrashReporter -errPrisonOverhead 1 +12:41:55.648 ENGINE : Addon dirs: +12:41:55.648 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/' +12:41:55.648 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +12:41:55.648 ENGINE : dir: './addons' +12:41:55.648 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +12:41:55.648 ENGINE : Available addons: +12:41:55.648 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:41:55.648 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:41:55.648 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:41:55.648 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:41:55.648 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:41:55.648 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +12:41:55.648 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +12:41:55.649 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +12:41:55.649 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +12:41:55.649 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +12:41:55.649 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +12:41:55.650 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +12:41:55.782 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +12:41:55.785 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +12:41:55.785 ENGINE : CPU vendor : AuthenticAMD +12:41:55.785 ENGINE : CPU type : 2 +12:41:55.785 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +12:41:55.785 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +12:41:55.785 ENGINE : CPU count logical : 16 +12:41:55.785 ENGINE : CPU count physical : 8 +12:41:55.785 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +12:41:55.785 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:41:55.786 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:41:55.786 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:41:55.787 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:41:55.787 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:41:55.787 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +12:41:55.949 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +12:41:55.950 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +12:41:55.951 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-41-54/resourceDatabase.rdb) +12:41:56.119 RESOURCES : RESOURCES : ResourceDB: full scan +12:41:56.124 RESOURCES : RESOURCES : scanning... +12:41:56.124 RESOURCES : RESOURCES : scanning @"ERR_Chat" +12:41:56.126 RESOURCES : RESOURCES : scanning @"ERR_Map" +12:41:56.128 RESOURCES : RESOURCES : scanning @"ERR_Intel" +12:41:56.128 RESOURCES : RESOURCES : scanning @"ERR_Ai" +12:41:56.130 RESOURCES : RESOURCES : scanning @"ERR_Core" +12:41:56.134 RESOURCES : RESOURCES : scanning @"ArmaReforger" +12:41:56.290 RESOURCES : RESOURCES : scanning @"core" +12:41:56.294 RESOURCES : RESOURCES : scanning @"profile" +12:41:56.295 RESOURCES : RESOURCES : scanning @"logs" +12:41:56.295 RESOURCES : RESOURCES : processing meta-files... +12:41:56.366 RESOURCES : RESOURCES : processing files... +12:41:56.380 INIT : Workbench startup +12:41:56.380 INIT : Workbench Init Engine +12:41:56.380 RESOURCES : ResourceDB: full scan +12:41:56.380 RESOURCES : processing files... +12:41:56.380 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +12:41:56.380 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +12:41:56.380 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +12:41:56.380 RESOURCES : RESOURCES : processing folders... +12:41:56.388 RESOURCES : RESOURCES : creating GUID-item mapping... +12:41:56.406 RESOURCES : RESOURCES : building tree... +12:41:56.469 PROFILING : ResourceDB: full scan took: 350.389900 ms +12:41:56.470 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:41:56.472 RESOURCES : ResourceDB: written 804/804 bytes +12:41:56.472 RESOURCES : ResourceDB: cache successfully saved +12:41:56.472 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:41:56.474 RESOURCES : ResourceDB: written 819/819 bytes +12:41:56.474 RESOURCES : ResourceDB: cache successfully saved +12:41:56.474 RESOURCES : ResourceDB: saving cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:41:56.476 RESOURCES : ResourceDB: written 227/227 bytes +12:41:56.476 RESOURCES : ResourceDB: cache successfully saved +12:41:56.476 RESOURCES : ResourceDB: saving cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:41:56.477 RESOURCES : ResourceDB: written 1909/1909 bytes +12:41:56.477 RESOURCES : ResourceDB: cache successfully saved +12:41:56.478 RESOURCES : ResourceDB: saving cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:41:56.479 RESOURCES : ResourceDB: written 6865/6865 bytes +12:41:56.479 RESOURCES : ResourceDB: cache successfully saved +12:41:56.479 RESOURCES : ResourceDB: saving cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +12:41:56.481 RESOURCES : ResourceDB: written 206/206 bytes +12:41:56.481 RESOURCES : ResourceDB: cache successfully saved +12:41:56.481 RESOURCES : ResourceDB: saving cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-41-54/resourceDatabase.rdb) +12:41:56.483 RESOURCES : ResourceDB: written 162/162 bytes +12:41:56.483 RESOURCES : ResourceDB: cache successfully saved +12:41:56.483 ENGINE : GameProject load +12:41:56.483 ENGINE : Loaded addons: +12:41:56.483 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +12:41:56.483 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +12:41:56.483 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:41:56.483 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:41:56.483 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:41:56.483 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:41:56.483 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:41:56.486 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +12:41:56.486 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +12:41:56.486 ENGINE : Engine user settings config loaded +12:41:56.486 PROFILING : Settings changed took: 0.001800 ms +12:41:56.604 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +12:41:56.606 RENDER : Basic screen setup: +12:41:56.606 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +12:41:56.606 RENDER : MSAA : none +12:41:56.620 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +12:41:56.620 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +12:41:56.620 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +12:41:56.620 RENDER : * core clocks 2720 MHz, memory 1124 MHz +12:41:56.620 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +12:41:56.620 RENDER : AMD AGS correctly initialized +12:41:56.620 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +12:41:56.620 RENDER : Detected output devices: +12:41:56.620 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +12:41:56.620 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +12:41:56.620 RENDER : Concurrent frames limit 2 +12:41:56.708 RENDER : DX12 device successfully created by AMD AGS library +12:41:56.708 RENDER : * user markers not supported in this version AMD SW +12:41:56.708 RENDER : Graphics device features +12:41:56.708 RENDER : Needed: +12:41:56.708 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +12:41:56.708 RENDER : Optional: +12:41:56.708 RENDER : * Allow tearing (VSYNC) : 1 +12:41:56.708 RENDER : * 16 bits : 1 +12:41:56.708 RENDER : * Resource heap tier : 3 +12:41:56.708 RENDER : * Persistent heaps (DRED) : 1 +12:41:56.708 RENDER : * DRED 1.2 is supported by compiler +12:41:56.733 RENDER : Main RT format setup. +12:41:56.733 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +12:41:56.733 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +12:41:56.735 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +12:41:56.764 PROFILING : Settings changed took: 0.020500 ms +12:41:57.334 AUDIO : Endpoint: Speakers (PulseAudio Output) +12:41:57.334 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +12:41:57.334 AUDIO : Audio client: +12:41:57.334 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +12:41:57.338 RENDER : RENDER : Reload shaders +12:41:57.339 RENDER : Enfusion shader version 13 +12:41:57.339 INIT : INIT : ShaderListReload +12:41:57.339 PROFILING : ShaderListReload took: 0.000600 ms +12:41:57.479 AUDIO : Endpoint: Speakers (PulseAudio Output) +12:41:57.479 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +12:41:57.479 AUDIO : Audio client: +12:41:57.479 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +12:41:57.716 RENDER : Loaded 3752 newer shader binaries +12:41:57.716 PROFILING : Reload shaders took: 377.705200 ms +12:41:57.716 ENGINE : Initializing inputs. +12:41:57.729 NETWORK : Initializing networking. +12:41:57.730 NETWORK : Using new GameRplScheduler. +12:41:57.730 SCRIPT : SCRIPT : Initializing scripts +12:41:57.730 SCRIPT : SCRIPT : ScriptProjectManager init +12:41:59.895 PROFILING : ScriptProjectManager init took: 2164.761000 ms +12:41:59.981 PROFILING : Initializing scripts took: 2250.864100 ms +12:41:59.999 ENGINE : Enfusion engine successfully created. +12:42:00.000 PROFILING : Workbench Init Engine took: 4359.829000 ms +12:42:00.000 INIT : INIT : Workbench Create Game +12:42:00.013 GUI : Using default language (en_us) +12:42:00.013 GUI : Loading 'en_us' localization file. +12:42:00.013 INIT : INIT : Loading StringTable +12:42:00.037 PROFILING : Loading StringTable took: 23.712600 ms +12:42:00.037 SCRIPT : SCRIPT : Compiling GameLib scripts +12:42:00.104 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +12:42:00.104 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:42:00.105 PROFILING : Compiling GameLib scripts took: 68.060300 ms +12:42:00.105 SCRIPT : SCRIPT : Compiling Game scripts +12:42:01.422 INIT : Workbench Create Game +12:42:01.422 SCRIPT : Compiling Game scripts +12:42:01.422 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:42:01.422 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:42:01.598 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:42:01.722 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:42:01.762 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:42:01.871 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:42:01.871 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:42:01.871 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:42:01.871 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:42:01.908 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:42:01.971 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:42:01.971 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:42:01.973 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:42:02.013 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:42:02.013 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:42:02.014 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:42:02.014 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:42:02.041 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:42:02.075 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:42:02.350 SCRIPT : Module: WorkbenchGame; loaded 172x files; 617x classes; used 2483K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: fd02dbdd +12:42:02.357 SCRIPT : Module: Game; loaded 5780x files; 11381x classes; used 33603K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 17c2b8a1 +12:42:02.396 PROFILING : Compiling Game scripts took: 2290.696600 ms +12:42:02.401 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:42:02.441 ENGINE : Game successfully created. +12:42:02.442 PROFILING : Workbench Create Game took: 2442.847900 ms +12:42:02.451 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/thumbnails +12:42:03.282 INIT : INIT : Workbench Reload Game +12:42:03.283 ENGINE : Game destroyed. +12:42:03.290 GUI : Using default language (en_us) +12:42:03.290 GUI : Loading 'en_us' localization file. +12:42:03.290 INIT : INIT : Loading StringTable +12:42:03.303 PROFILING : Loading StringTable took: 11.862900 ms +12:42:03.303 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:42:03.312 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:42:03.312 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:42:03.312 ENGINE : Game successfully created. +12:42:03.312 ENGINE : Game successfully initialized. +12:42:03.312 PROFILING : Workbench Reload Game took: 30.449300 ms +12:42:04.034 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +12:42:05.105 PROFILING : Entities load took: 1070.790300 ms +12:42:05.116 WORLD : WORLD : CreateEntities +12:42:05.122 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:42:05.122 PROFILING : NotifyBeforeEntitiesCreated took: 0.003000 ms +12:42:05.122 WORLD : WORLD : Wait for preloading data +12:42:05.122 PROFILING : Wait for preloading data took: 0.003400 ms +12:42:05.237 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +12:42:05.237 PROFILING : PROFILING : Terrain load +12:42:07.247 PROFILING : Terrain load took: 2009.009800 ms +12:42:11.277 WORLD : CreateEntities +12:42:11.277 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" +12:42:11.277 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:42:11.277 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:42:21.871 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:42:21.871 PROFILING : NotifyBeforeEntitiesInitialized took: 0.006200 ms +12:42:22.303 WORLD : WORLD : NotifyEntitiesInitialized +12:42:22.303 TERRAIN : TERRAIN : Initializing road networks... +12:42:22.307 PROFILING : Initializing road networks... took: 3.432200 ms +12:42:22.307 PROFILING : NotifyEntitiesInitialized took: 3.838000 ms +12:42:22.307 PROFILING : CreateEntities took: 17191.295800 ms +12:42:22.493 PROFILING : * WorldEditor: LoadWorld: 18464.626800 ms +12:42:23.935 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +12:42:23.936 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +12:42:23.937 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +12:42:23.937 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +12:42:24.021 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +12:42:24.021 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +12:42:24.021 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +12:42:24.021 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +12:42:24.022 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +12:42:24.022 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +12:42:24.022 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +12:42:24.022 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +12:42:24.022 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +12:42:24.022 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +12:42:24.023 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +12:42:24.023 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +12:42:24.023 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +12:42:24.023 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +12:42:24.023 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +12:42:24.024 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +12:42:24.024 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +12:42:24.024 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +12:42:24.024 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +12:42:24.024 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +12:42:24.024 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +12:42:24.024 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +12:42:24.025 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +12:42:24.025 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +12:42:24.025 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +12:42:24.025 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +12:42:24.047 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +12:42:24.048 SCRIPT : ERR YARD: authoring overhead editor view at 22m above prison; err-prison capture is not the real prisoner view +12:42:24.072 BACKEND : Attempting online Game Config instead. +12:42:27.393 INIT : INIT : Workbench Reload Game +12:42:27.397 ENGINE : Game destroyed. +12:42:27.405 GUI : Using default language (en_us) +12:42:27.405 GUI : Loading 'en_us' localization file. +12:42:27.405 INIT : INIT : Loading StringTable +12:42:27.428 PROFILING : Loading StringTable took: 22.360700 ms +12:42:27.428 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:42:27.437 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:42:27.437 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:42:27.437 ENGINE : Game successfully created. +12:42:27.437 ENGINE : Game successfully initialized. +12:42:27.437 PROFILING : Workbench Reload Game took: 44.305400 ms +12:42:27.440 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:42:27.492 PLATFORM : Save data from container 'settings' have been loaded +12:42:27.583 PLATFORM : Save data from container 'sessions' have been loaded +12:42:27.584 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +12:42:27.584 ENGINE : Game user settings config loaded +12:42:27.681 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +12:42:27.691 WORLD : WORLD : Game::LoadEntities +12:42:27.691 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +12:42:27.692 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +12:42:27.692 WORLD : WORLD : CreateEntities +12:42:27.692 WORLD : WORLD : CreateEntities +12:42:27.692 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:42:27.704 RESOURCES : Loaded mission headers from 7 addon(s)! +12:42:27.704 PROFILING : NotifyBeforeEntitiesCreated took: 12.162800 ms +12:42:27.704 WORLD : WORLD : Wait for preloading data +12:42:27.704 PROFILING : Wait for preloading data took: 0.000800 ms +12:42:32.392 WORLD : Game::LoadEntities +12:42:32.392 WORLD : CreateEntities +12:42:32.392 WORLD : CreateEntities +12:42:32.392 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" +12:42:32.392 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:42:32.392 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:42:33.857 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +12:42:33.857 ENTITY : CreateComponent 'Hierarchy' +12:42:33.857 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +12:42:33.857 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +12:42:33.857 ENTITY : CreateComponent 'Hierarchy' +12:42:33.857 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +12:42:33.857 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +12:42:33.857 ENTITY : CreateComponent 'Hierarchy' +12:42:33.857 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +12:42:33.862 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +12:42:33.862 ENTITY : CreateComponent 'Hierarchy' +12:42:33.862 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +12:42:33.862 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +12:42:33.862 ENTITY : CreateComponent 'Hierarchy' +12:42:33.862 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +12:42:33.863 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +12:42:33.863 ENTITY : CreateComponent 'Hierarchy' +12:42:33.863 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +12:42:33.867 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +12:42:33.867 ENTITY : CreateComponent 'Hierarchy' +12:42:33.867 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +12:42:33.867 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +12:42:33.867 ENTITY : CreateComponent 'Hierarchy' +12:42:33.867 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +12:42:33.868 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +12:42:33.868 ENTITY : CreateComponent 'Hierarchy' +12:42:33.868 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +12:42:39.371 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:42:39.372 PROFILING : NotifyBeforeEntitiesInitialized took: 0.054400 ms +12:42:41.393 WORLD : InitEntities 'world' +12:42:41.393 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:42:41.393 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:42:41.421 WORLD : InitEntities 'world' +12:42:41.421 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:42:41.421 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +12:42:41.422 WORLD : WORLD : NotifyEntitiesInitialized +12:42:41.422 TERRAIN : TERRAIN : Initializing road networks... +12:42:41.425 PROFILING : Initializing road networks... took: 2.710200 ms +12:42:41.425 DEFAULT : DEFAULT : WorldVolumesCollection +12:42:41.492 PROFILING : WorldVolumesCollection took: 67.235100 ms +12:42:41.492 INIT : INIT : SoundWorldInit +12:42:41.507 PROFILING : SoundWorldInit took: 14.815500 ms +12:42:41.507 PROFILING : NotifyEntitiesInitialized took: 85.018800 ms +12:42:41.507 PROFILING : CreateEntities took: 13814.721600 ms +12:42:41.507 PROFILING : CreateEntities took: 13814.891800 ms +12:42:41.508 WORLD : WORLD : Wait for preloading data around camera +12:42:41.508 PROFILING : Wait for preloading data around camera took: 0.001000 ms +12:42:41.508 WORLD : WORLD : EOnActivate +12:42:41.543 PROFILING : EOnActivate took: 35.328200 ms +12:42:41.543 PROFILING : Game::LoadEntities took: 13852.195500 ms +12:42:41.851 DEFAULT : Entered offline game state. +12:42:41.955 NETWORK : Player connected: connectionID=2147483646 +12:42:41.955 NETWORK : ### Connecting player: connectionID=2147483646, Name= +12:42:41.955 NETWORK : ### Creating player: PlayerId=1, Name=jakub +12:42:41.959 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:42:41.959 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:42:41.959 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:42:41.959 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:42:41.960 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:42:41.961 SCRIPT (W): Can't open config file "" +12:42:41.968 WORLD : InitEntities 'world' +12:42:41.968 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:42:41.968 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:42:41.968 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:42:41.968 SCRIPT (W): Slot_Chat Has no Content! +12:42:41.969 SCRIPT (W): Slot_VON Has no Content! +12:42:41.969 SCRIPT (W): Slot_AvailableActions Has no Content! +12:42:41.969 SCRIPT (W): Slot_Vehicle Has no Content! +12:42:41.969 SCRIPT (W): Slot_GameVersion Has no Content! +12:42:41.969 SCRIPT (W): Slot_Notifications Has no Content! +12:42:41.969 SCRIPT (W): Slot_Hints Has no Content! +12:42:41.979 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:42:41.980 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +12:42:41.980 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:42:41.980 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:42:41.980 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:42:41.983 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +12:42:41.984 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:42:41.984 NETWORK : Players connecting: 0 +12:42:41.984 NETWORK : Players connected: 1 / 1 +12:42:42.012 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/autosaves +12:42:42.014 PROFILING : Workbench startup took: 47482.012500 ms +12:42:42.035 WORLD : Frame start +12:42:42.035 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:42:42.048 WORLD : UpdateEntities +12:42:42.048 WORLD : Frame +12:42:42.048 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:42:42.222 WORLD : UpdateEntities +12:42:42.223 WORLD : PostFrame +12:42:42.223 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:42:42.223 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:42:42.265 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:42:42.265 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:42:42.265 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:42:42.265 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +12:42:42.397 RENDER : RENDER : ObjectsHeightMap::Build +12:42:42.397 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +12:42:42.556 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 158.415200 ms +12:42:42.563 PROFILING : ObjectsHeightMap::Build took: 165.804300 ms +12:42:43.733 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:42:43.753 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:42:43.753 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:42:43.781 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:42:43.784 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:42:43.835 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:42:43.835 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:42:43.840 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:42:43.889 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:42:43.890 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:42:43.891 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:42:43.892 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:42:43.895 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:42:43.897 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:42:43.897 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:42:43.898 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:42:43.899 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:42:43.899 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:42:43.899 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:42:43.899 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:42:43.899 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:42:43.900 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:42:43.900 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:42:43.900 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:42:43.900 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:42:43.900 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:42:43.900 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:42:43.900 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:42:43.901 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:42:43.901 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:42:43.901 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:42:43.901 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:42:43.901 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:42:43.901 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:42:44.669 WORLD : UpdateEntities +12:42:44.669 WORLD : AfterPostSimulate +12:42:44.669 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +12:42:44.746 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:42:44.747 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:42:44.747 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:42:44.747 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:42:45.000 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5279,7499.7> up=0.995676 +12:42:45.000 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.286983 angularSpeed=0.0801588 +12:42:45.000 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:42:45.000 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6125,7501.97> +12:42:45.000 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3125,7501.97> terrainY=63.3164 tireTerrainGap=-0.00394058 +12:42:45.001 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6125,7501.97> radius=0.3 bottom=<7012.07,63.3125,7501.97> fraction=0.436659 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00393295 +12:42:45.001 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6002,7497.71> +12:42:45.001 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1502,7497.71> terrainY=64.1556 tireTerrainGap=-0.00548553 +12:42:45.001 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6002,7497.71> radius=0.45 bottom=<7009.88,64.1502,7497.71> fraction=0.429613 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00548553 +12:42:45.001 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2623,7497.75> +12:42:45.001 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8123,7497.75> terrainY=63.8179 tireTerrainGap=-0.00554276 +12:42:45.002 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2623,7497.75> radius=0.45 bottom=<7014.42,63.8123,7497.75> fraction=0.429444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00552368 +12:42:45.002 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:42:45.250 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:42:45.250 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:42:45.250 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:42:45.251 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:42:45.752 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:42:45.752 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:42:45.752 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:42:46.010 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5352,7499.71> up=0.994342 +12:42:46.010 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +12:42:46.010 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:42:46.010 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6194,7501.99> +12:42:46.011 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3194,7501.99> terrainY=63.3145 tireTerrainGap=0.00488663 +12:42:46.011 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6194,7501.99> radius=0.3 bottom=<7012.07,63.3194,7501.99> fraction=0.477018 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00494385 +12:42:46.011 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6023,7497.71> +12:42:46.011 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1524,7497.71> terrainY=64.1491 tireTerrainGap=0.00327301 +12:42:46.011 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6023,7497.71> radius=0.45 bottom=<7009.93,64.1524,7497.71> fraction=0.469731 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00334167 +12:42:46.012 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2653,7497.78> +12:42:46.012 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8153,7497.78> terrainY=63.8155 tireTerrainGap=-0.000156403 +12:42:46.012 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2653,7497.78> radius=0.45 bottom=<7014.47,63.8153,7497.78> fraction=0.453763 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000171661 +12:42:46.012 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:42:46.264 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:42:46.265 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:42:46.265 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:42:46.265 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:42:46.517 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:42:46.770 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:42:46.770 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:42:46.770 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:42:46.771 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:42:47.024 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5331,7499.74> up=0.994195 +12:42:47.024 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.04555 angularSpeed=0.0154758 +12:42:47.025 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:42:47.025 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6141,7502.01> +12:42:47.025 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3141,7502.01> terrainY=63.3116 tireTerrainGap=0.00254059 +12:42:47.025 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6141,7502.01> radius=0.3 bottom=<7012.08,63.3141,7502.01> fraction=0.466184 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00255966 +12:42:47.025 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5945,7497.72> +12:42:47.026 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1445,7497.72> terrainY=64.1429 tireTerrainGap=0.00164032 +12:42:47.026 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5945,7497.72> radius=0.45 bottom=<7009.97,64.1445,7497.72> fraction=0.462402 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00173187 +12:42:47.026 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2602,7497.82> +12:42:47.026 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8102,7497.82> terrainY=63.8129 tireTerrainGap=-0.0026207 +12:42:47.027 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2602,7497.82> radius=0.45 bottom=<7014.51,63.8102,7497.82> fraction=0.4425 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00265121 +12:42:47.027 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:42:47.287 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:42:47.287 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:42:47.287 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:42:47.287 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:42:47.603 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:42:47.603 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:42:47.604 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:42:47.604 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:42:48.096 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +12:42:48.097 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:42:48.097 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:42:48.097 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:42:48.097 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00160217 +12:42:48.097 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461731 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00157928 +12:42:48.097 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +12:42:48.098 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00245667 +12:42:48.098 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +12:42:48.098 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:42:48.098 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00213242 +12:42:48.098 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.444722 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00215912 +12:42:48.098 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:42:48.099 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:42:48.099 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:42:48.099 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:42:48.100 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:42:48.602 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:42:48.602 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:42:48.603 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:42:48.603 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:42:49.106 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +12:42:49.107 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:42:49.107 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:42:49.107 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:42:49.107 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00160217 +12:42:49.107 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461731 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00157928 +12:42:49.107 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +12:42:49.108 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00245667 +12:42:49.108 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +12:42:49.108 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:42:49.108 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00213242 +12:42:49.108 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.444722 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00215912 +12:42:49.108 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:42:49.109 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:42:49.109 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:42:49.124 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:42:49.125 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:42:49.125 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:42:49.125 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:42:49.126 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:42:49.126 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:42:49.126 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:42:49.268 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:42:49.307 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +12:42:49.490 SCRIPT : ERR SMOKE PASS: new identity may enter prison +12:42:49.490 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +12:42:49.490 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +12:42:49.490 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +12:42:49.490 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +12:42:49.491 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +12:42:49.491 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +12:42:49.491 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +12:42:49.491 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +12:42:49.491 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +12:42:49.492 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +12:42:49.492 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +12:42:49.492 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +12:42:49.492 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +12:42:49.492 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +12:42:49.492 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +12:42:49.495 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +12:42:49.496 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +12:42:49.496 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +12:42:49.496 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +12:42:49.499 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +12:42:49.499 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +12:42:49.499 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +12:42:49.500 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +12:42:49.500 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +12:42:49.500 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +12:42:49.500 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +12:42:49.500 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +12:42:49.500 SCRIPT : ERR SMOKE PASS: initial prisoner position +12:42:49.500 SCRIPT : ERR SMOKE PASS: radio and extraction vehicle exist +12:42:49.501 SCRIPT : ERR SMOKE PASS: authored gate exposes lock action +12:42:49.501 SCRIPT : ERR GEOMETRY: gate low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +12:42:49.501 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7160> low=<6090,211.444,7160> high=<6090,211.444,7160> +12:42:49.501 SCRIPT : ERR GEOMETRY: child origin=<6090,211.344,7154> low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +12:42:49.501 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7154> low=<6093,210.641,7153.87> high=<6096,214.409,7154.13> +12:42:49.501 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7154> low=<6087,210.641,7153.87> high=<6090,214.409,7154.13> +12:42:49.502 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6084,210.641,7153.87> high=<6087,214.409,7154.13> +12:42:49.502 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7163> low=<6095.87,210.641,7163> high=<6096.13,214.409,7166> +12:42:49.502 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7163> low=<6083.87,210.641,7163> high=<6084.13,214.409,7166> +12:42:49.502 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7160> low=<6095.87,210.641,7160> high=<6096.13,214.409,7163> +12:42:49.502 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7160> low=<6083.87,210.641,7160> high=<6084.13,214.409,7163> +12:42:49.502 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7157> low=<6095.87,210.641,7157> high=<6096.13,214.409,7160> +12:42:49.503 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7157> low=<6083.87,210.641,7157> high=<6084.13,214.409,7160> +12:42:49.503 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7154> low=<6095.87,210.641,7154> high=<6096.13,214.409,7157> +12:42:49.503 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6083.87,210.641,7154> high=<6084.13,214.409,7157> +12:42:49.503 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7166> low=<6093,210.641,7165.87> high=<6096,214.409,7166.13> +12:42:49.503 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7166> low=<6090,210.641,7165.87> high=<6093,214.409,7166.13> +12:42:49.503 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7166> low=<6087,210.641,7165.87> high=<6090,214.409,7166.13> +12:42:49.503 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7166> low=<6084,210.641,7165.87> high=<6087,214.409,7166.13> +12:42:49.504 SCRIPT : ERR SMOKE PASS: lock permits prisoner +12:42:49.504 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +12:42:49.505 SCRIPT : ERR SMOKE PASS: lock action advances mission +12:42:49.505 SCRIPT : ERR SMOKE PASS: two guaranteed physical cache documents +12:42:49.508 SCRIPT : ERR SMOKE PASS: test does not rely on random intel +12:42:49.511 SCRIPT : ERR SMOKE PASS: isolated test profile defence duration +12:42:49.988 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +12:42:50.272 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +12:42:51.510 RESOURCES : Screenshot saved to $logs:err-prison.png +12:42:52.524 SCRIPT : ERR SMOKE PASS: unlocked gate physically permits passage +12:42:52.524 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +12:42:53.298 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +12:42:55.059 SCRIPT : ERR SMOKE PASS: carried intel identifies radio through intel service +12:42:55.060 SCRIPT : ERR SMOKE PASS: radio rejects distant player +12:42:56.056 SCRIPT : ERR SMOKE: radio=<6500,159.756,7200> player=<6502,159.53,7200> +12:42:56.056 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +12:42:56.057 SCRIPT : ERR SMOKE PASS: identified radio starts defence +12:42:59.084 SCRIPT : ERR SMOKE PASS: occupied defence timer running +12:43:01.608 SCRIPT : ERR SMOKE PASS: leaving area resets defence +12:43:32.470 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +12:43:34.970 SCRIPT : ERR SMOKE PASS: continuous occupied defence completes +12:43:34.971 SCRIPT : ERR SMOKE PASS: boarding extraction vehicle +12:43:38.000 SCRIPT : ERR SMOKE PASS: physical extraction occupancy +12:43:38.512 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +12:43:38.513 SCRIPT : ERR SMOKE PASS: scripted escape reaches victory after physical vehicle occupancy +12:43:38.513 SCRIPT : ERR SMOKE COMPLETE: terminal=5 lostHelicopterCase=0 playerDeathCase=0 +12:43:38.620 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +12:43:38.623 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:43:38.623 SCRIPT (W): Slot_Chat Has no Content! +12:43:38.623 SCRIPT (W): Slot_VON Has no Content! +12:43:38.623 SCRIPT (W): Slot_GameVersion Has no Content! +12:43:38.623 SCRIPT (W): Slot_Notifications Has no Content! +12:43:40.667 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +12:43:40.667 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +12:43:40.667 SCRIPT : -- Stack trace -- +12:43:40.668 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:43:40.668 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:43:40.668 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +12:43:40.668 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:43:40.668 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:43:40.668 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:43:40.668 SCRIPT : ----------------- +12:43:40.668 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +12:43:40.668 SCRIPT : -- Stack trace -- +12:43:40.669 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:43:40.669 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:43:40.669 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +12:43:40.669 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:43:40.669 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:43:40.669 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:43:40.669 SCRIPT : ----------------- +12:43:40.671 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:43:40.671 SCRIPT (W): Slot_Chat Has no Content! +12:43:40.671 SCRIPT (W): Slot_VON Has no Content! +12:43:40.671 SCRIPT (W): Slot_GameVersion Has no Content! +12:43:40.671 SCRIPT (W): Slot_Notifications Has no Content! +12:43:40.673 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +12:43:42.560 RESOURCES : Screenshot saved to $logs:err-result.png diff --git a/docs/evidence/native-2026-09-19-124154-overhead-unobserved/err-prison.png b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/err-prison.png new file mode 100644 index 0000000..7f2b76d Binary files /dev/null and b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/err-prison.png differ diff --git a/docs/evidence/native-2026-09-19-124154-overhead-unobserved/err-result.png b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/err-result.png new file mode 100644 index 0000000..e670111 Binary files /dev/null and b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/err-result.png differ diff --git a/docs/evidence/native-2026-09-19-124154-overhead-unobserved/error.log.txt b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/error.log.txt new file mode 100644 index 0000000..409d887 --- /dev/null +++ b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/error.log.txt @@ -0,0 +1,118 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-41-54\error.log started at 2026-09-19 12:41:56 (2026-09-19 10:41:56 UTC) + +12:41:56.380 INIT : Workbench startup +12:41:56.380 INIT : Workbench Init Engine +12:41:56.380 RESOURCES : ResourceDB: full scan +12:41:56.380 RESOURCES : processing files... +12:41:56.380 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +12:41:56.380 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +12:41:56.380 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +12:42:01.422 INIT : Workbench Create Game +12:42:01.422 SCRIPT : Compiling Game scripts +12:42:01.422 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:42:01.422 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:42:01.598 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:42:01.722 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:42:01.762 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:42:01.871 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:42:01.871 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:42:01.871 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:42:01.871 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:42:01.908 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:42:01.971 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:42:01.971 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:42:01.973 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:42:02.013 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:42:02.013 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:42:02.014 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:42:02.014 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:42:02.041 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:42:02.075 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:42:11.276 WORLD : CreateEntities +12:42:11.277 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" +12:42:11.277 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:42:11.277 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:42:27.440 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:42:32.392 WORLD : Game::LoadEntities +12:42:32.392 WORLD : CreateEntities +12:42:32.392 WORLD : CreateEntities +12:42:32.392 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" +12:42:32.392 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:42:32.392 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:42:33.857 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +12:42:33.857 ENTITY : CreateComponent 'Hierarchy' +12:42:33.857 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +12:42:33.857 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +12:42:33.857 ENTITY : CreateComponent 'Hierarchy' +12:42:33.857 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +12:42:33.857 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +12:42:33.857 ENTITY : CreateComponent 'Hierarchy' +12:42:33.857 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +12:42:33.862 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +12:42:33.862 ENTITY : CreateComponent 'Hierarchy' +12:42:33.862 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +12:42:33.862 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +12:42:33.862 ENTITY : CreateComponent 'Hierarchy' +12:42:33.862 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +12:42:33.863 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +12:42:33.863 ENTITY : CreateComponent 'Hierarchy' +12:42:33.863 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +12:42:33.867 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +12:42:33.867 ENTITY : CreateComponent 'Hierarchy' +12:42:33.867 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +12:42:33.867 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +12:42:33.867 ENTITY : CreateComponent 'Hierarchy' +12:42:33.867 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +12:42:33.868 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +12:42:33.868 ENTITY : CreateComponent 'Hierarchy' +12:42:33.868 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +12:42:41.393 WORLD : InitEntities 'world' +12:42:41.393 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:42:41.393 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:42:41.959 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:42:41.959 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:42:41.959 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:42:41.959 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:42:41.960 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:42:41.961 SCRIPT (W): Can't open config file "" +12:42:41.968 WORLD : InitEntities 'world' +12:42:41.968 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:42:41.968 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:42:41.968 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:42:41.968 SCRIPT (W): Slot_Chat Has no Content! +12:42:41.969 SCRIPT (W): Slot_VON Has no Content! +12:42:41.969 SCRIPT (W): Slot_AvailableActions Has no Content! +12:42:41.969 SCRIPT (W): Slot_Vehicle Has no Content! +12:42:41.969 SCRIPT (W): Slot_GameVersion Has no Content! +12:42:41.969 SCRIPT (W): Slot_Notifications Has no Content! +12:42:41.969 SCRIPT (W): Slot_Hints Has no Content! +12:42:41.979 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:42:41.980 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +12:42:41.980 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:42:41.980 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:42:41.980 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:42:41.984 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:42:42.222 WORLD : UpdateEntities +12:42:42.223 WORLD : PostFrame +12:42:42.223 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:42:42.223 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:42:42.265 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:42:42.265 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:42:42.265 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:42:42.265 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +12:42:44.669 WORLD : UpdateEntities +12:42:44.669 WORLD : AfterPostSimulate +12:42:44.669 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +12:43:38.623 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:43:38.623 SCRIPT (W): Slot_Chat Has no Content! +12:43:38.623 SCRIPT (W): Slot_VON Has no Content! +12:43:38.623 SCRIPT (W): Slot_GameVersion Has no Content! +12:43:38.623 SCRIPT (W): Slot_Notifications Has no Content! +12:43:40.667 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +12:43:40.668 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +12:43:40.671 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:43:40.671 SCRIPT (W): Slot_Chat Has no Content! +12:43:40.671 SCRIPT (W): Slot_VON Has no Content! +12:43:40.671 SCRIPT (W): Slot_GameVersion Has no Content! +12:43:40.671 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-124154-overhead-unobserved/headless-launch.log.txt b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/headless-launch.log.txt new file mode 100644 index 0000000..b2472ed --- /dev/null +++ b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/headless-launch.log.txt @@ -0,0 +1,150 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 122 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 1 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerWorkbenchSteamDiag.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a001a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a001a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a001a4 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a0039a +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a0039a +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a0039a + wayland surface res id: 10 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x55555b5ac710 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x55555b5ac710 +[Gamescope WSI] Destroyed swapchain: 0x55555b5ac710 +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x55555b529740 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x55555b529740 +[Gamescope WSI] Destroyed swapchain: 0x55555b529740 +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x55555b529710 - imageCount: 4 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/native-2026-09-19-124154-overhead-unobserved/launch-source-sha256.json b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/launch-source-sha256.json new file mode 100644 index 0000000..22a044d --- /dev/null +++ b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/launch-source-sha256.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "417e9b6ab3f2207412fa388fb4ec9ed921db38820982aa811d6dcfa6e1d62054", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "9d959b7b048e815d027b5994e8c2cfdf603225f263d199718eb055298ee0bc01", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "eccda6e977bb07d26596b019b9c32e0caa2ea49186781ee9e67cbe7a6ade58a2", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "a12c3600f48a9f591d296cd5e0c03b9c3e2acf8850c6dbd8b0425f243dc2d713", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dd01a9d7d8860f8e0051e275236bdc1a2718906324f0fc9089f0d483ebb791c2", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "3ff1c9e9191f20769fed1e4d7a1363e4109512af76e02aa5e1e6a8766b711951", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/native-2026-09-19-124154-overhead-unobserved/launch-source.json b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/launch-source.json new file mode 100644 index 0000000..c677b58 --- /dev/null +++ b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/launch-source.json @@ -0,0 +1,47 @@ +{ + "schema_version": 1, + "launch_id": "d171fa28-892f-4cbd-a8bf-9e5f01d1009d", + "captured_unix": 1789814512.8967762, + "source_root": "/home/jakub/devel/escapistsrereintroduced", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj", + "-addonsDir", + "Z:/home/jakub/devel/escapistsrereintroduced/addons", + "-profile", + "Z:/tmp/erri-workbench-profile", + "-logconsole", + "-wbModule=WorldEditor", + "-load", + "Worlds/ERR_Everon.ent", + "-plugin=ERR_ValidateWorldPlugin", + "-errPlay", + "1", + "-errSmoke", + "1", + "-errSmokeOutcome", + "victory", + "-noThrow", + "-disableCrashReporter", + "-errPrisonOverhead", + "1" + ], + "manifest_sha256": "28b44104c43ed3f2c1da2779598b4e35029e912c77d74880a13421dbe441c662" +} diff --git a/docs/evidence/native-2026-09-19-124154-overhead-unobserved/report.json b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/report.json new file mode 100644 index 0000000..b6f0972 --- /dev/null +++ b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/report.json @@ -0,0 +1,9 @@ +{ + "log": "docs/evidence/native-2026-09-19-124154-overhead-unobserved/console.log.txt", + "smoke_completions": 1, + "assertions_passed": 48, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" +} diff --git a/docs/evidence/native-2026-09-19-124154-overhead-unobserved/rereintroduced-hq.log.txt b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/rereintroduced-hq.log.txt new file mode 100644 index 0000000..058f4e7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/rereintroduced-hq.log.txt @@ -0,0 +1,28 @@ +#1 t=6.6s M0 REGISTER group 1 [session=1789814561-1] +#2 t=6.6s M0 MORTAR DEPLOY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; authored gun and four-person crew; finite ammunition initialization pending [session=1789814561-1] +#3 t=6.7s M0 COURIER READY trip=0 state=1 delivered=0; 12 distinct original HE shells physically confirmed in existing western cache [session=1789814561-1] +#4 t=8.6s M0 REGISTER group 2 [session=1789814561-1] +#5 t=8.6s M0 REGISTER group 3 [session=1789814561-1] +#6 t=8.6s M0 REGISTER group 4 [session=1789814561-1] +#7 t=8.6s M0 REGISTER group 5 [session=1789814561-1] +#8 t=8.6s M0 REGISTER group 6 [session=1789814561-1] +#9 t=8.6s M0 REGISTER group 7 [session=1789814561-1] +#10 t=11.8s M1 REPORT X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (0s ago) [session=1789814561-1] +#11 t=12.8s M1 TRANSMIT unit 3 -> HQ (long-range) [session=1789814561-1] +#12 t=14.8s M1 RECEIVE HQ received from unit 3 [session=1789814561-1] +#13 t=17.8s M5 TRANSMIT HQ -> unit 6 (long-range) [session=1789814561-1] +#14 t=17.8s M4 TRANSMIT HQ -> unit 5 (long-range) [session=1789814561-1] +#15 t=17.8s M3 TRANSMIT HQ -> unit 4 (long-range) [session=1789814561-1] +#16 t=17.8s M2 TRANSMIT HQ -> unit 2 (long-range) [session=1789814561-1] +#17 t=17.8s M0 MORTAR CREW READY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; four original physical members, one manpack, 27 confirmed HE; new shell requests=27; allocation permanently closed [session=1789814561-1] +#18 t=19.8s M5 RECEIVE unit 6 received from HQ [session=1789814561-1] +#19 t=19.8s M5 ORDER DELIVERED group 6 from report M1: X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (8s ago) [session=1789814561-1] +#20 t=19.8s M4 RECEIVE unit 5 received from HQ [session=1789814561-1] +#21 t=19.8s M4 ORDER DELIVERED group 5 from report M1: X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (8s ago) [session=1789814561-1] +#22 t=19.8s M3 RECEIVE unit 4 received from HQ [session=1789814561-1] +#23 t=19.8s M2 RECEIVE unit 2 received from HQ [session=1789814561-1] +#24 t=19.8s M2 ORDER DELIVERED group 2 from report M1: X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (8s ago) [session=1789814561-1] +#25 t=22.8s M6 TRANSMIT HQ -> unit 7 (long-range) [session=1789814561-1] +#26 t=24.8s M6 RECEIVE unit 7 received from HQ [session=1789814561-1] +#27 t=24.8s M6 ORDER DELIVERED group 7 from report M1: X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (13s ago) [session=1789814561-1] +#28 t=56s M0 STOP HQ stopped; tactical orders released [session=1789814561-1] diff --git a/docs/evidence/native-2026-09-19-124154-overhead-unobserved/runner.json.txt b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/runner.json.txt new file mode 100644 index 0000000..97048c6 --- /dev/null +++ b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789814625.9087808, + "console_sha256": "0b486de5067e3b3332f9a145f2c974227c7f1c12800c96ecac4f1e65a95b0077", + "end_source_sha256": "28b44104c43ed3f2c1da2779598b4e35029e912c77d74880a13421dbe441c662", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "d171fa28-892f-4cbd-a8bf-9e5f01d1009d", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "28b44104c43ed3f2c1da2779598b4e35029e912c77d74880a13421dbe441c662", + "started_unix": 1789814512.8968492, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_12-41-54", + "rounds_required": 1, + "project": "chat", + "display": "headless Gamescope 1280x720/30Hz", + "dedicated_server": false, + "audio": "silent sink and per-test-stream mute" +} diff --git a/docs/evidence/native-2026-09-19-124154-overhead-unobserved/script.log.txt b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/script.log.txt new file mode 100644 index 0000000..aa4591e --- /dev/null +++ b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/script.log.txt @@ -0,0 +1,331 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-41-54\script.log started at 2026-09-19 12:41:57 (2026-09-19 10:41:57 UTC) + +12:41:57.730 SCRIPT : SCRIPT : Initializing scripts +12:41:57.730 SCRIPT : SCRIPT : ScriptProjectManager init +12:42:00.037 SCRIPT : SCRIPT : Compiling GameLib scripts +12:42:00.104 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +12:42:00.104 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:42:00.105 SCRIPT : SCRIPT : Compiling Game scripts +12:42:01.422 SCRIPT : Compiling Game scripts +12:42:01.422 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:42:01.422 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:42:01.598 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:42:01.722 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:42:01.762 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:42:01.871 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:42:01.871 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:42:01.871 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:42:01.871 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:42:01.908 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:42:01.971 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:42:01.971 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:42:01.973 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:42:02.013 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:42:02.013 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:42:02.014 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:42:02.014 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:42:02.041 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:42:02.075 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:42:02.350 SCRIPT : Module: WorkbenchGame; loaded 172x files; 617x classes; used 2483K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: fd02dbdd +12:42:02.357 SCRIPT : Module: Game; loaded 5780x files; 11381x classes; used 33603K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 17c2b8a1 +12:42:03.312 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:42:03.312 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:42:24.021 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +12:42:24.021 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +12:42:24.021 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +12:42:24.021 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +12:42:24.022 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +12:42:24.022 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +12:42:24.022 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +12:42:24.022 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +12:42:24.022 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +12:42:24.022 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +12:42:24.023 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +12:42:24.023 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +12:42:24.023 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +12:42:24.023 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +12:42:24.023 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +12:42:24.024 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +12:42:24.024 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +12:42:24.024 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +12:42:24.024 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +12:42:24.024 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +12:42:24.024 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +12:42:24.025 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +12:42:24.025 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +12:42:24.025 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +12:42:24.025 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +12:42:24.025 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +12:42:24.047 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +12:42:24.048 SCRIPT : ERR YARD: authoring overhead editor view at 22m above prison; err-prison capture is not the real prisoner view +12:42:27.437 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:42:27.437 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:42:41.393 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:42:41.421 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +12:42:41.959 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:42:41.960 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:42:41.961 SCRIPT (W): Can't open config file "" +12:42:41.968 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:42:41.968 SCRIPT (W): Slot_Chat Has no Content! +12:42:41.969 SCRIPT (W): Slot_VON Has no Content! +12:42:41.969 SCRIPT (W): Slot_AvailableActions Has no Content! +12:42:41.969 SCRIPT (W): Slot_Vehicle Has no Content! +12:42:41.969 SCRIPT (W): Slot_GameVersion Has no Content! +12:42:41.969 SCRIPT (W): Slot_Notifications Has no Content! +12:42:41.969 SCRIPT (W): Slot_Hints Has no Content! +12:42:41.980 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:42:41.980 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:42:41.984 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:42:42.035 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:42:42.048 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:42:42.223 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:42:43.733 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:42:43.753 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:42:43.753 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:42:43.781 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:42:43.784 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:42:43.835 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:42:43.835 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:42:43.840 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:42:43.889 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:42:43.890 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:42:43.891 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:42:43.892 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:42:43.895 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:42:43.897 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:42:43.897 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:42:43.898 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:42:43.899 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:42:43.899 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:42:43.899 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:42:43.899 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:42:43.899 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:42:43.900 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:42:43.900 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:42:43.900 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:42:43.900 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:42:43.900 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:42:43.900 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:42:43.900 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:42:43.901 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:42:43.901 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:42:43.901 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:42:43.901 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:42:43.901 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:42:43.901 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:42:44.746 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:42:44.747 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:42:44.747 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:42:44.747 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:42:45.000 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5279,7499.7> up=0.995676 +12:42:45.000 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.286983 angularSpeed=0.0801588 +12:42:45.000 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:42:45.000 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6125,7501.97> +12:42:45.000 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3125,7501.97> terrainY=63.3164 tireTerrainGap=-0.00394058 +12:42:45.001 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6125,7501.97> radius=0.3 bottom=<7012.07,63.3125,7501.97> fraction=0.436659 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00393295 +12:42:45.001 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6002,7497.71> +12:42:45.001 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1502,7497.71> terrainY=64.1556 tireTerrainGap=-0.00548553 +12:42:45.001 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6002,7497.71> radius=0.45 bottom=<7009.88,64.1502,7497.71> fraction=0.429613 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00548553 +12:42:45.001 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2623,7497.75> +12:42:45.001 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8123,7497.75> terrainY=63.8179 tireTerrainGap=-0.00554276 +12:42:45.002 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2623,7497.75> radius=0.45 bottom=<7014.42,63.8123,7497.75> fraction=0.429444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00552368 +12:42:45.002 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:42:45.250 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:42:45.250 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:42:45.251 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:42:45.251 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:42:45.752 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:42:45.752 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:42:45.752 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:42:46.010 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5352,7499.71> up=0.994342 +12:42:46.010 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +12:42:46.010 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:42:46.010 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6194,7501.99> +12:42:46.011 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3194,7501.99> terrainY=63.3145 tireTerrainGap=0.00488663 +12:42:46.011 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6194,7501.99> radius=0.3 bottom=<7012.07,63.3194,7501.99> fraction=0.477018 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00494385 +12:42:46.011 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6023,7497.71> +12:42:46.011 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1524,7497.71> terrainY=64.1491 tireTerrainGap=0.00327301 +12:42:46.011 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6023,7497.71> radius=0.45 bottom=<7009.93,64.1524,7497.71> fraction=0.469731 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00334167 +12:42:46.012 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2653,7497.78> +12:42:46.012 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8153,7497.78> terrainY=63.8155 tireTerrainGap=-0.000156403 +12:42:46.012 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2653,7497.78> radius=0.45 bottom=<7014.47,63.8153,7497.78> fraction=0.453763 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000171661 +12:42:46.012 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:42:46.264 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:42:46.265 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:42:46.265 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:42:46.265 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:42:46.517 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:42:46.770 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:42:46.770 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:42:46.770 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:42:46.771 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:42:47.024 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5331,7499.74> up=0.994195 +12:42:47.024 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.04555 angularSpeed=0.0154758 +12:42:47.025 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:42:47.025 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6141,7502.01> +12:42:47.025 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3141,7502.01> terrainY=63.3116 tireTerrainGap=0.00254059 +12:42:47.025 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6141,7502.01> radius=0.3 bottom=<7012.08,63.3141,7502.01> fraction=0.466184 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00255966 +12:42:47.025 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5945,7497.72> +12:42:47.026 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1445,7497.72> terrainY=64.1429 tireTerrainGap=0.00164032 +12:42:47.026 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5945,7497.72> radius=0.45 bottom=<7009.97,64.1445,7497.72> fraction=0.462402 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00173187 +12:42:47.026 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2602,7497.82> +12:42:47.026 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8102,7497.82> terrainY=63.8129 tireTerrainGap=-0.0026207 +12:42:47.027 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2602,7497.82> radius=0.45 bottom=<7014.51,63.8102,7497.82> fraction=0.4425 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00265121 +12:42:47.027 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:42:47.287 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:42:47.287 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:42:47.287 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:42:47.287 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:42:47.603 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:42:47.604 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:42:47.604 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:42:47.604 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:42:48.096 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +12:42:48.097 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:42:48.097 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:42:48.097 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:42:48.097 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00160217 +12:42:48.097 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461731 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00157928 +12:42:48.097 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +12:42:48.098 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00245667 +12:42:48.098 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +12:42:48.098 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:42:48.098 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00213242 +12:42:48.098 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.444722 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00215912 +12:42:48.098 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:42:48.099 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:42:48.099 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:42:48.099 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:42:48.100 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:42:48.602 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:42:48.602 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:42:48.603 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:42:48.603 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:42:49.106 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +12:42:49.107 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:42:49.107 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:42:49.107 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:42:49.107 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00160217 +12:42:49.107 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461731 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00157928 +12:42:49.107 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +12:42:49.108 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00245667 +12:42:49.108 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +12:42:49.108 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +12:42:49.108 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00213242 +12:42:49.108 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.444722 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00215912 +12:42:49.108 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:42:49.109 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:42:49.109 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:42:49.124 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:42:49.125 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:42:49.125 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:42:49.125 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:42:49.126 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:42:49.126 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:42:49.126 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:42:49.268 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:42:49.307 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +12:42:49.490 SCRIPT : ERR SMOKE PASS: new identity may enter prison +12:42:49.490 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +12:42:49.490 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +12:42:49.490 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +12:42:49.490 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +12:42:49.491 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +12:42:49.491 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +12:42:49.491 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +12:42:49.491 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +12:42:49.491 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +12:42:49.492 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +12:42:49.492 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +12:42:49.492 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +12:42:49.492 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +12:42:49.492 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +12:42:49.492 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +12:42:49.495 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +12:42:49.496 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +12:42:49.496 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +12:42:49.496 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +12:42:49.499 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +12:42:49.499 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +12:42:49.499 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +12:42:49.500 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +12:42:49.500 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +12:42:49.500 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +12:42:49.500 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +12:42:49.500 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +12:42:49.500 SCRIPT : ERR SMOKE PASS: initial prisoner position +12:42:49.500 SCRIPT : ERR SMOKE PASS: radio and extraction vehicle exist +12:42:49.501 SCRIPT : ERR SMOKE PASS: authored gate exposes lock action +12:42:49.501 SCRIPT : ERR GEOMETRY: gate low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +12:42:49.501 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7160> low=<6090,211.444,7160> high=<6090,211.444,7160> +12:42:49.501 SCRIPT : ERR GEOMETRY: child origin=<6090,211.344,7154> low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +12:42:49.501 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7154> low=<6093,210.641,7153.87> high=<6096,214.409,7154.13> +12:42:49.501 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7154> low=<6087,210.641,7153.87> high=<6090,214.409,7154.13> +12:42:49.502 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6084,210.641,7153.87> high=<6087,214.409,7154.13> +12:42:49.502 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7163> low=<6095.87,210.641,7163> high=<6096.13,214.409,7166> +12:42:49.502 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7163> low=<6083.87,210.641,7163> high=<6084.13,214.409,7166> +12:42:49.502 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7160> low=<6095.87,210.641,7160> high=<6096.13,214.409,7163> +12:42:49.502 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7160> low=<6083.87,210.641,7160> high=<6084.13,214.409,7163> +12:42:49.502 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7157> low=<6095.87,210.641,7157> high=<6096.13,214.409,7160> +12:42:49.503 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7157> low=<6083.87,210.641,7157> high=<6084.13,214.409,7160> +12:42:49.503 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7154> low=<6095.87,210.641,7154> high=<6096.13,214.409,7157> +12:42:49.503 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6083.87,210.641,7154> high=<6084.13,214.409,7157> +12:42:49.503 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7166> low=<6093,210.641,7165.87> high=<6096,214.409,7166.13> +12:42:49.503 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7166> low=<6090,210.641,7165.87> high=<6093,214.409,7166.13> +12:42:49.503 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7166> low=<6087,210.641,7165.87> high=<6090,214.409,7166.13> +12:42:49.503 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7166> low=<6084,210.641,7165.87> high=<6087,214.409,7166.13> +12:42:49.504 SCRIPT : ERR SMOKE PASS: lock permits prisoner +12:42:49.504 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +12:42:49.505 SCRIPT : ERR SMOKE PASS: lock action advances mission +12:42:49.505 SCRIPT : ERR SMOKE PASS: two guaranteed physical cache documents +12:42:49.508 SCRIPT : ERR SMOKE PASS: test does not rely on random intel +12:42:49.511 SCRIPT : ERR SMOKE PASS: isolated test profile defence duration +12:42:49.988 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +12:42:50.272 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +12:42:52.524 SCRIPT : ERR SMOKE PASS: unlocked gate physically permits passage +12:42:52.524 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +12:42:53.298 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +12:42:55.059 SCRIPT : ERR SMOKE PASS: carried intel identifies radio through intel service +12:42:55.060 SCRIPT : ERR SMOKE PASS: radio rejects distant player +12:42:56.056 SCRIPT : ERR SMOKE: radio=<6500,159.756,7200> player=<6502,159.53,7200> +12:42:56.056 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +12:42:56.057 SCRIPT : ERR SMOKE PASS: identified radio starts defence +12:42:59.084 SCRIPT : ERR SMOKE PASS: occupied defence timer running +12:43:01.608 SCRIPT : ERR SMOKE PASS: leaving area resets defence +12:43:32.470 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +12:43:34.970 SCRIPT : ERR SMOKE PASS: continuous occupied defence completes +12:43:34.971 SCRIPT : ERR SMOKE PASS: boarding extraction vehicle +12:43:38.000 SCRIPT : ERR SMOKE PASS: physical extraction occupancy +12:43:38.512 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +12:43:38.513 SCRIPT : ERR SMOKE PASS: scripted escape reaches victory after physical vehicle occupancy +12:43:38.513 SCRIPT : ERR SMOKE COMPLETE: terminal=5 lostHelicopterCase=0 playerDeathCase=0 +12:43:38.620 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +12:43:38.623 SCRIPT (W): Slot_Chat Has no Content! +12:43:38.623 SCRIPT (W): Slot_VON Has no Content! +12:43:38.623 SCRIPT (W): Slot_GameVersion Has no Content! +12:43:38.623 SCRIPT (W): Slot_Notifications Has no Content! +12:43:40.667 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +12:43:40.667 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +12:43:40.667 SCRIPT : -- Stack trace -- +12:43:40.668 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:43:40.668 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:43:40.668 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +12:43:40.668 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:43:40.668 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:43:40.668 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:43:40.668 SCRIPT : ----------------- +12:43:40.668 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +12:43:40.669 SCRIPT : -- Stack trace -- +12:43:40.669 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:43:40.669 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:43:40.669 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +12:43:40.669 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:43:40.669 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:43:40.669 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:43:40.669 SCRIPT : ----------------- +12:43:40.671 SCRIPT (W): Slot_Chat Has no Content! +12:43:40.671 SCRIPT (W): Slot_VON Has no Content! +12:43:40.671 SCRIPT (W): Slot_GameVersion Has no Content! +12:43:40.671 SCRIPT (W): Slot_Notifications Has no Content! +12:43:40.673 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon diff --git a/docs/evidence/native-2026-09-19-124154-overhead-unobserved/source-provenance.json b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-124154-overhead-unobserved/source-sha256.json b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/source-sha256.json new file mode 100644 index 0000000..22a044d --- /dev/null +++ b/docs/evidence/native-2026-09-19-124154-overhead-unobserved/source-sha256.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "417e9b6ab3f2207412fa388fb4ec9ed921db38820982aa811d6dcfa6e1d62054", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "9d959b7b048e815d027b5994e8c2cfdf603225f263d199718eb055298ee0bc01", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "eccda6e977bb07d26596b019b9c32e0caa2ea49186781ee9e67cbe7a6ade58a2", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "a12c3600f48a9f591d296cd5e0c03b9c3e2acf8850c6dbd8b0425f243dc2d713", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dd01a9d7d8860f8e0051e275236bdc1a2718906324f0fc9089f0d483ebb791c2", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "3ff1c9e9191f20769fed1e4d7a1363e4109512af76e02aa5e1e6a8766b711951", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/native-2026-09-19-124915-aircraft-cancel/console.log.txt b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/console.log.txt new file mode 100644 index 0000000..7b33536 --- /dev/null +++ b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/console.log.txt @@ -0,0 +1,656 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-49-15\console.log started at 2026-09-19 12:49:15 (2026-09-19 10:49:15 UTC) + +12:49:15.542 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-49-15' to filesystem under name logs +12:49:15.542 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +12:49:15.542 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +12:49:15.543 PROFILING : Workbench Create Engine took: 9.706800 ms +12:49:16.577 INIT : INIT : Workbench Init Engine +12:49:16.577 ENGINE : Initializing engine, version 192142 +12:49:16.577 ENGINE : CLI Params: -gproj Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/addons -profile Z:/tmp/erri-workbench-profile -logconsole -wbModule WorldEditor -load Worlds/ERR_Everon.ent -plugin ERR_ValidateWorldPlugin -errPlay 1 -errSmoke 1 -errSmokeOutcome aircraft-cancel -noThrow -disableCrashReporter +12:49:16.586 ENGINE : Addon dirs: +12:49:16.586 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/' +12:49:16.586 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +12:49:16.586 ENGINE : dir: './addons' +12:49:16.586 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +12:49:16.586 ENGINE : Available addons: +12:49:16.586 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:49:16.586 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:49:16.586 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:49:16.586 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:49:16.586 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:49:16.586 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +12:49:16.586 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +12:49:16.587 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +12:49:16.587 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +12:49:16.587 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +12:49:16.587 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +12:49:16.587 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +12:49:16.713 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +12:49:16.716 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +12:49:16.716 ENGINE : CPU vendor : AuthenticAMD +12:49:16.716 ENGINE : CPU type : 2 +12:49:16.716 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +12:49:16.716 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +12:49:16.716 ENGINE : CPU count logical : 16 +12:49:16.716 ENGINE : CPU count physical : 8 +12:49:16.716 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +12:49:16.716 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:49:16.717 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:49:16.717 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:49:16.718 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:49:16.718 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:49:16.718 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +12:49:16.866 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +12:49:16.867 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +12:49:16.868 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-49-15/resourceDatabase.rdb) +12:49:17.011 RESOURCES : RESOURCES : ResourceDB: full scan +12:49:17.015 RESOURCES : RESOURCES : scanning... +12:49:17.015 RESOURCES : RESOURCES : scanning @"ERR_Chat" +12:49:17.017 RESOURCES : RESOURCES : scanning @"ERR_Map" +12:49:17.018 RESOURCES : RESOURCES : scanning @"ERR_Intel" +12:49:17.019 RESOURCES : RESOURCES : scanning @"ERR_Ai" +12:49:17.020 RESOURCES : RESOURCES : scanning @"ERR_Core" +12:49:17.023 RESOURCES : RESOURCES : scanning @"ArmaReforger" +12:49:17.160 RESOURCES : RESOURCES : scanning @"core" +12:49:17.165 RESOURCES : RESOURCES : scanning @"profile" +12:49:17.165 RESOURCES : RESOURCES : scanning @"logs" +12:49:17.166 RESOURCES : RESOURCES : processing meta-files... +12:49:17.231 RESOURCES : RESOURCES : processing files... +12:49:17.242 INIT : Workbench startup +12:49:17.242 INIT : Workbench Init Engine +12:49:17.242 RESOURCES : ResourceDB: full scan +12:49:17.242 RESOURCES : processing files... +12:49:17.242 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +12:49:17.242 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +12:49:17.242 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +12:49:17.242 RESOURCES : RESOURCES : processing folders... +12:49:17.249 RESOURCES : RESOURCES : creating GUID-item mapping... +12:49:17.265 RESOURCES : RESOURCES : building tree... +12:49:17.321 PROFILING : ResourceDB: full scan took: 310.400400 ms +12:49:17.322 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +12:49:17.324 RESOURCES : ResourceDB: written 804/804 bytes +12:49:17.324 RESOURCES : ResourceDB: cache successfully saved +12:49:17.324 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +12:49:17.325 RESOURCES : ResourceDB: written 819/819 bytes +12:49:17.325 RESOURCES : ResourceDB: cache successfully saved +12:49:17.325 RESOURCES : ResourceDB: saving cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +12:49:17.327 RESOURCES : ResourceDB: written 227/227 bytes +12:49:17.327 RESOURCES : ResourceDB: cache successfully saved +12:49:17.327 RESOURCES : ResourceDB: saving cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +12:49:17.328 RESOURCES : ResourceDB: written 1909/1909 bytes +12:49:17.328 RESOURCES : ResourceDB: cache successfully saved +12:49:17.329 RESOURCES : ResourceDB: saving cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +12:49:17.330 RESOURCES : ResourceDB: written 6865/6865 bytes +12:49:17.330 RESOURCES : ResourceDB: cache successfully saved +12:49:17.330 RESOURCES : ResourceDB: saving cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +12:49:17.332 RESOURCES : ResourceDB: written 206/206 bytes +12:49:17.332 RESOURCES : ResourceDB: cache successfully saved +12:49:17.332 RESOURCES : ResourceDB: saving cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-49-15/resourceDatabase.rdb) +12:49:17.333 RESOURCES : ResourceDB: written 162/162 bytes +12:49:17.333 RESOURCES : ResourceDB: cache successfully saved +12:49:17.333 ENGINE : GameProject load +12:49:17.333 ENGINE : Loaded addons: +12:49:17.333 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +12:49:17.333 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +12:49:17.333 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +12:49:17.333 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +12:49:17.333 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +12:49:17.333 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +12:49:17.333 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +12:49:17.336 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +12:49:17.336 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +12:49:17.336 ENGINE : Engine user settings config loaded +12:49:17.336 PROFILING : Settings changed took: 0.001800 ms +12:49:17.438 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +12:49:17.440 RENDER : Basic screen setup: +12:49:17.440 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +12:49:17.440 RENDER : MSAA : none +12:49:17.455 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +12:49:17.455 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +12:49:17.455 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +12:49:17.455 RENDER : * core clocks 2720 MHz, memory 1124 MHz +12:49:17.455 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +12:49:17.455 RENDER : AMD AGS correctly initialized +12:49:17.455 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +12:49:17.455 RENDER : Detected output devices: +12:49:17.455 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +12:49:17.455 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +12:49:17.455 RENDER : Concurrent frames limit 2 +12:49:17.532 RENDER : DX12 device successfully created by AMD AGS library +12:49:17.532 RENDER : * user markers not supported in this version AMD SW +12:49:17.532 RENDER : Graphics device features +12:49:17.532 RENDER : Needed: +12:49:17.532 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +12:49:17.532 RENDER : Optional: +12:49:17.532 RENDER : * Allow tearing (VSYNC) : 1 +12:49:17.532 RENDER : * 16 bits : 1 +12:49:17.532 RENDER : * Resource heap tier : 3 +12:49:17.532 RENDER : * Persistent heaps (DRED) : 1 +12:49:17.532 RENDER : * DRED 1.2 is supported by compiler +12:49:17.554 RENDER : Main RT format setup. +12:49:17.554 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +12:49:17.554 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +12:49:17.555 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +12:49:17.584 PROFILING : Settings changed took: 0.015300 ms +12:49:18.206 AUDIO : Endpoint: Speakers (PulseAudio Output) +12:49:18.207 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +12:49:18.207 AUDIO : Audio client: +12:49:18.207 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +12:49:18.213 RENDER : RENDER : Reload shaders +12:49:18.214 RENDER : Enfusion shader version 13 +12:49:18.214 INIT : INIT : ShaderListReload +12:49:18.214 PROFILING : ShaderListReload took: 0.000500 ms +12:49:18.352 AUDIO : Endpoint: Speakers (PulseAudio Output) +12:49:18.352 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +12:49:18.353 AUDIO : Audio client: +12:49:18.353 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +12:49:18.596 RENDER : Loaded 3752 newer shader binaries +12:49:18.596 PROFILING : Reload shaders took: 382.257500 ms +12:49:18.596 ENGINE : Initializing inputs. +12:49:18.609 NETWORK : Initializing networking. +12:49:18.609 NETWORK : Using new GameRplScheduler. +12:49:18.609 SCRIPT : SCRIPT : Initializing scripts +12:49:18.610 SCRIPT : SCRIPT : ScriptProjectManager init +12:49:20.796 PROFILING : ScriptProjectManager init took: 2186.719800 ms +12:49:20.891 PROFILING : Initializing scripts took: 2281.416600 ms +12:49:20.910 ENGINE : Enfusion engine successfully created. +12:49:20.911 PROFILING : Workbench Init Engine took: 4333.694100 ms +12:49:20.911 INIT : INIT : Workbench Create Game +12:49:20.923 GUI : Using default language (en_us) +12:49:20.923 GUI : Loading 'en_us' localization file. +12:49:20.923 INIT : INIT : Loading StringTable +12:49:20.948 PROFILING : Loading StringTable took: 25.151900 ms +12:49:20.948 SCRIPT : SCRIPT : Compiling GameLib scripts +12:49:21.025 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +12:49:21.025 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:49:21.026 PROFILING : Compiling GameLib scripts took: 77.677200 ms +12:49:21.026 SCRIPT : SCRIPT : Compiling Game scripts +12:49:22.369 INIT : Workbench Create Game +12:49:22.369 SCRIPT : Compiling Game scripts +12:49:22.369 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:49:22.369 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:49:22.536 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:49:22.655 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:49:22.687 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:49:22.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:49:22.798 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:49:22.798 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:49:22.798 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:49:22.833 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:49:22.896 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:49:22.896 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:49:22.898 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:49:22.937 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:49:22.937 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:49:22.938 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:49:22.938 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:49:22.963 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:49:22.998 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:49:23.274 SCRIPT : Module: WorkbenchGame; loaded 172x files; 617x classes; used 2483K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: fd02dbdd +12:49:23.282 SCRIPT : Module: Game; loaded 5780x files; 11381x classes; used 33603K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 17c2b8a1 +12:49:23.323 PROFILING : Compiling Game scripts took: 2296.975200 ms +12:49:23.328 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:49:23.367 ENGINE : Game successfully created. +12:49:23.368 PROFILING : Workbench Create Game took: 2457.342100 ms +12:49:23.377 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/thumbnails +12:49:24.210 INIT : INIT : Workbench Reload Game +12:49:24.212 ENGINE : Game destroyed. +12:49:24.218 GUI : Using default language (en_us) +12:49:24.218 GUI : Loading 'en_us' localization file. +12:49:24.218 INIT : INIT : Loading StringTable +12:49:24.228 PROFILING : Loading StringTable took: 9.352000 ms +12:49:24.228 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:49:24.235 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:49:24.235 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:49:24.236 ENGINE : Game successfully created. +12:49:24.236 ENGINE : Game successfully initialized. +12:49:24.236 PROFILING : Workbench Reload Game took: 25.283300 ms +12:49:24.957 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +12:49:26.099 PROFILING : Entities load took: 1141.734700 ms +12:49:26.110 WORLD : WORLD : CreateEntities +12:49:26.115 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:49:26.115 PROFILING : NotifyBeforeEntitiesCreated took: 0.003600 ms +12:49:26.115 WORLD : WORLD : Wait for preloading data +12:49:26.115 PROFILING : Wait for preloading data took: 0.004400 ms +12:49:26.229 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +12:49:26.229 PROFILING : PROFILING : Terrain load +12:49:28.248 PROFILING : Terrain load took: 2018.591100 ms +12:49:32.399 WORLD : CreateEntities +12:49:32.399 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" +12:49:32.399 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:49:32.399 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:49:43.182 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:49:43.182 PROFILING : NotifyBeforeEntitiesInitialized took: 0.006000 ms +12:49:43.631 WORLD : WORLD : NotifyEntitiesInitialized +12:49:43.631 TERRAIN : TERRAIN : Initializing road networks... +12:49:43.634 PROFILING : Initializing road networks... took: 2.299000 ms +12:49:43.634 PROFILING : NotifyEntitiesInitialized took: 2.838500 ms +12:49:43.634 PROFILING : CreateEntities took: 17523.799700 ms +12:49:43.816 PROFILING : * WorldEditor: LoadWorld: 18865.062900 ms +12:49:45.266 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +12:49:45.267 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +12:49:45.268 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +12:49:45.269 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +12:49:45.360 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +12:49:45.360 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +12:49:45.360 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +12:49:45.360 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +12:49:45.360 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +12:49:45.360 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +12:49:45.360 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +12:49:45.361 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +12:49:45.361 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +12:49:45.361 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +12:49:45.361 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +12:49:45.361 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +12:49:45.361 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +12:49:45.361 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +12:49:45.363 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +12:49:45.363 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +12:49:45.363 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +12:49:45.363 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +12:49:45.387 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +12:49:45.411 BACKEND : Attempting online Game Config instead. +12:49:48.668 INIT : INIT : Workbench Reload Game +12:49:48.670 ENGINE : Game destroyed. +12:49:48.677 GUI : Using default language (en_us) +12:49:48.677 GUI : Loading 'en_us' localization file. +12:49:48.677 INIT : INIT : Loading StringTable +12:49:48.700 PROFILING : Loading StringTable took: 22.840700 ms +12:49:48.701 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +12:49:48.709 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:49:48.710 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:49:48.710 ENGINE : Game successfully created. +12:49:48.710 ENGINE : Game successfully initialized. +12:49:48.710 PROFILING : Workbench Reload Game took: 42.062600 ms +12:49:48.713 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:49:48.766 PLATFORM : Save data from container 'settings' have been loaded +12:49:48.855 PLATFORM : Save data from container 'sessions' have been loaded +12:49:48.856 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +12:49:48.856 ENGINE : Game user settings config loaded +12:49:48.953 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +12:49:48.961 WORLD : WORLD : Game::LoadEntities +12:49:48.961 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +12:49:48.962 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +12:49:48.962 WORLD : WORLD : CreateEntities +12:49:48.962 WORLD : WORLD : CreateEntities +12:49:48.962 WORLD : WORLD : NotifyBeforeEntitiesCreated +12:49:48.975 RESOURCES : Loaded mission headers from 7 addon(s)! +12:49:48.975 PROFILING : NotifyBeforeEntitiesCreated took: 13.072600 ms +12:49:48.975 WORLD : WORLD : Wait for preloading data +12:49:48.975 PROFILING : Wait for preloading data took: 0.001100 ms +12:49:53.491 WORLD : Game::LoadEntities +12:49:53.491 WORLD : CreateEntities +12:49:53.491 WORLD : CreateEntities +12:49:53.491 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" +12:49:53.491 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:49:53.491 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:49:54.903 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +12:49:54.903 ENTITY : CreateComponent 'Hierarchy' +12:49:54.903 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +12:49:54.903 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +12:49:54.903 ENTITY : CreateComponent 'Hierarchy' +12:49:54.903 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +12:49:54.903 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +12:49:54.903 ENTITY : CreateComponent 'Hierarchy' +12:49:54.903 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +12:49:54.908 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +12:49:54.908 ENTITY : CreateComponent 'Hierarchy' +12:49:54.908 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +12:49:54.908 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +12:49:54.908 ENTITY : CreateComponent 'Hierarchy' +12:49:54.908 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +12:49:54.908 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +12:49:54.908 ENTITY : CreateComponent 'Hierarchy' +12:49:54.908 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +12:49:54.912 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +12:49:54.912 ENTITY : CreateComponent 'Hierarchy' +12:49:54.912 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +12:49:54.912 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +12:49:54.912 ENTITY : CreateComponent 'Hierarchy' +12:49:54.913 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +12:49:54.913 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +12:49:54.913 ENTITY : CreateComponent 'Hierarchy' +12:49:54.913 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +12:50:00.372 WORLD : WORLD : NotifyBeforeEntitiesInitialized +12:50:00.372 PROFILING : NotifyBeforeEntitiesInitialized took: 0.038200 ms +12:50:02.479 WORLD : InitEntities 'world' +12:50:02.479 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:50:02.479 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:50:02.506 WORLD : InitEntities 'world' +12:50:02.506 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:50:02.506 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +12:50:02.506 WORLD : WORLD : NotifyEntitiesInitialized +12:50:02.506 TERRAIN : TERRAIN : Initializing road networks... +12:50:02.509 PROFILING : Initializing road networks... took: 2.424300 ms +12:50:02.509 DEFAULT : DEFAULT : WorldVolumesCollection +12:50:02.568 PROFILING : WorldVolumesCollection took: 58.553900 ms +12:50:02.568 INIT : INIT : SoundWorldInit +12:50:02.581 PROFILING : SoundWorldInit took: 13.642600 ms +12:50:02.581 PROFILING : NotifyEntitiesInitialized took: 74.872800 ms +12:50:02.581 PROFILING : CreateEntities took: 13618.835400 ms +12:50:02.582 PROFILING : CreateEntities took: 13619.047000 ms +12:50:02.582 WORLD : WORLD : Wait for preloading data around camera +12:50:02.582 PROFILING : Wait for preloading data around camera took: 0.001300 ms +12:50:02.582 WORLD : WORLD : EOnActivate +12:50:02.615 PROFILING : EOnActivate took: 32.511800 ms +12:50:02.615 PROFILING : Game::LoadEntities took: 13653.692100 ms +12:50:02.951 DEFAULT : Entered offline game state. +12:50:03.055 NETWORK : Player connected: connectionID=2147483646 +12:50:03.055 NETWORK : ### Connecting player: connectionID=2147483646, Name= +12:50:03.056 NETWORK : ### Creating player: PlayerId=1, Name=jakub +12:50:03.060 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:50:03.060 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:50:03.060 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:50:03.060 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:50:03.060 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:50:03.062 SCRIPT (W): Can't open config file "" +12:50:03.068 WORLD : InitEntities 'world' +12:50:03.068 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:50:03.068 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:50:03.068 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:50:03.068 SCRIPT (W): Slot_Chat Has no Content! +12:50:03.068 SCRIPT (W): Slot_VON Has no Content! +12:50:03.069 SCRIPT (W): Slot_AvailableActions Has no Content! +12:50:03.069 SCRIPT (W): Slot_Vehicle Has no Content! +12:50:03.069 SCRIPT (W): Slot_GameVersion Has no Content! +12:50:03.069 SCRIPT (W): Slot_Notifications Has no Content! +12:50:03.069 SCRIPT (W): Slot_Hints Has no Content! +12:50:03.081 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:50:03.081 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +12:50:03.082 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:50:03.082 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:50:03.082 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:50:03.086 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +12:50:03.086 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:50:03.086 NETWORK : Players connecting: 0 +12:50:03.087 NETWORK : Players connected: 1 / 1 +12:50:03.115 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/autosaves +12:50:03.117 PROFILING : Workbench startup took: 47636.074000 ms +12:50:03.140 WORLD : Frame start +12:50:03.140 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:50:03.154 WORLD : UpdateEntities +12:50:03.154 WORLD : Frame +12:50:03.154 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:50:03.342 WORLD : UpdateEntities +12:50:03.342 WORLD : PostFrame +12:50:03.342 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:50:03.342 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:50:03.388 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:50:03.388 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:50:03.389 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:50:03.389 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +12:50:03.519 RENDER : RENDER : ObjectsHeightMap::Build +12:50:03.519 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +12:50:03.682 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 162.216200 ms +12:50:03.691 PROFILING : ObjectsHeightMap::Build took: 171.427500 ms +12:50:04.858 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:50:04.879 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:50:04.880 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:50:04.909 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:50:04.912 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:50:04.964 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:50:04.965 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:50:04.970 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:50:05.017 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:50:05.017 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:50:05.019 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:50:05.020 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:50:05.022 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:50:05.024 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:50:05.024 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:50:05.026 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:50:05.026 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:50:05.026 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:50:05.026 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:50:05.026 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:50:05.026 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:50:05.027 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:50:05.027 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:50:05.027 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:50:05.027 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:50:05.027 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:50:05.027 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:50:05.027 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:50:05.028 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:50:05.028 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:50:05.028 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:50:05.028 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:50:05.028 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:50:05.028 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:50:05.816 WORLD : UpdateEntities +12:50:05.816 WORLD : AfterPostSimulate +12:50:05.816 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +12:50:05.882 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:50:05.882 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:50:05.883 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:50:05.883 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:50:06.131 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5313,7499.7> up=0.99568 +12:50:06.131 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.315805 angularSpeed=0.0413827 +12:50:06.131 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:50:06.131 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6165,7501.97> +12:50:06.132 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3165,7501.97> terrainY=63.3165 tireTerrainGap=7.62939e-05 +12:50:06.132 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6165,7501.97> radius=0.3 bottom=<7012.07,63.3165,7501.97> fraction=0.455157 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.000133514 +12:50:06.132 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6036,7497.71> +12:50:06.132 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1536,7497.71> terrainY=64.1555 tireTerrainGap=-0.00191498 +12:50:06.133 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6036,7497.71> radius=0.45 bottom=<7009.88,64.1536,7497.71> fraction=0.445878 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00190735 +12:50:06.133 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2647,7497.74> +12:50:06.133 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8147,7497.74> terrainY=63.8179 tireTerrainGap=-0.00323105 +12:50:06.134 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2647,7497.74> radius=0.45 bottom=<7014.42,63.8147,7497.74> fraction=0.44 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00320053 +12:50:06.134 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:50:06.390 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:50:06.390 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:50:06.391 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:50:06.391 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:50:06.892 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:50:06.892 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:50:06.892 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:50:07.141 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5343,7499.71> up=0.994328 +12:50:07.142 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +12:50:07.142 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:50:07.142 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6205,7501.98> +12:50:07.142 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3205,7501.98> terrainY=63.3146 tireTerrainGap=0.00588608 +12:50:07.142 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6205,7501.98> radius=0.3 bottom=<7012.07,63.3205,7501.98> fraction=0.481793 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00599289 +12:50:07.142 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6028,7497.71> +12:50:07.143 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1528,7497.71> terrainY=64.149 tireTerrainGap=0.00377655 +12:50:07.143 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6028,7497.71> radius=0.45 bottom=<7009.93,64.1528,7497.71> fraction=0.471677 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00376892 +12:50:07.143 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2657,7497.78> +12:50:07.143 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8157,7497.78> terrainY=63.8155 tireTerrainGap=0.00019455 +12:50:07.143 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2657,7497.78> radius=0.45 bottom=<7014.47,63.8157,7497.78> fraction=0.455556 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.000221252 +12:50:07.143 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:50:07.391 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:50:07.392 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:50:07.392 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:50:07.392 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:50:07.647 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:50:07.901 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:50:07.901 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:50:07.901 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:50:08.155 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5335,7499.74> up=0.99418 +12:50:08.155 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.04555 angularSpeed=0.0154758 +12:50:08.155 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:50:08.155 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6147,7502.01> +12:50:08.155 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3147,7502.01> terrainY=63.3116 tireTerrainGap=0.00310135 +12:50:08.156 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6147,7502.01> radius=0.3 bottom=<7012.08,63.3147,7502.01> fraction=0.468559 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00308228 +12:50:08.156 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.72> +12:50:08.156 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.72> terrainY=64.143 tireTerrainGap=0.000907898 +12:50:08.156 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.72> radius=0.45 bottom=<7009.97,64.1439,7497.72> fraction=0.458474 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.000869751 +12:50:08.156 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.26,7497.82> +12:50:08.156 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.81,7497.82> terrainY=63.8129 tireTerrainGap=-0.00294876 +12:50:08.157 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.26,7497.82> radius=0.45 bottom=<7014.51,63.81,7497.82> fraction=0.441111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00295639 +12:50:08.157 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:50:08.413 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:50:08.413 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:50:08.413 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:50:08.413 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:50:08.920 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:50:08.921 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:50:08.921 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:50:08.921 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:50:09.230 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +12:50:09.230 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:50:09.230 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:50:09.231 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:50:09.231 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00169373 +12:50:09.231 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.462159 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00167465 +12:50:09.231 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +12:50:09.231 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00255585 +12:50:09.231 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.594,7497.73> radius=0.45 bottom=<7009.97,64.144,7497.73> fraction=0.466068 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00254059 +12:50:09.232 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +12:50:09.232 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00188065 +12:50:09.232 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.445987 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00188065 +12:50:09.232 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:50:09.232 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:50:09.233 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:50:09.233 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:50:09.233 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:50:09.738 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:50:09.738 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:50:09.739 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:50:09.739 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:50:10.247 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +12:50:10.247 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:50:10.247 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:50:10.247 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:50:10.248 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00169373 +12:50:10.248 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.462159 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00167465 +12:50:10.248 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +12:50:10.248 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00255585 +12:50:10.249 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.594,7497.73> radius=0.45 bottom=<7009.97,64.144,7497.73> fraction=0.466068 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00254059 +12:50:10.249 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +12:50:10.249 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00188065 +12:50:10.249 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.445987 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00188065 +12:50:10.250 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:50:10.250 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:50:10.250 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:50:10.251 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:50:10.266 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:50:10.267 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:50:10.267 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:50:10.267 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:50:10.268 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:50:10.268 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:50:10.268 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:50:10.386 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:50:10.426 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +12:50:10.587 SCRIPT : ERR SMOKE PASS: new identity may enter prison +12:50:10.587 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +12:50:10.587 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +12:50:10.587 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +12:50:10.588 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +12:50:10.588 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +12:50:10.588 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +12:50:10.588 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +12:50:10.588 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +12:50:10.589 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +12:50:10.589 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +12:50:10.589 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +12:50:10.589 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +12:50:10.589 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +12:50:10.589 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +12:50:10.589 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +12:50:10.593 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +12:50:10.594 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +12:50:10.594 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +12:50:10.594 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +12:50:10.597 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +12:50:10.598 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +12:50:10.598 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +12:50:10.598 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +12:50:10.598 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +12:50:10.599 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +12:50:10.599 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +12:50:10.599 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +12:50:11.098 SCRIPT : ERR AIRCRAFT FIXTURE PAD: candidate=<4800.95,27.8202,11487.4> tested=213 terrainDelta=0.4625; no fallback +12:50:11.098 SCRIPT : ERR SMOKE PASS: aircraft-cancel independent qualified candidate found before one finite allocation +12:50:11.106 SCRIPT : ERR SMOKE PASS: aircraft-cancel one finite native Mi8 and memberless enemy group created +12:50:11.598 SCRIPT : ERR SMOKE PASS: aircraft-cancel one original native pilot request only +12:50:11.613 SCRIPT : ERR SMOKE PASS: aircraft-cancel pilot seated by native mechanism in original group +12:50:12.100 SCRIPT : ERR AIRCRAFT FIXTURE: step=2 state=-1 height=0 drift=0 speed=0 contact=0 engine=0 fuelUsed=-1938.75 reason= +12:50:14.127 SCRIPT : ERR AIRCRAFT FIXTURE: step=2 state=-1 height=-0.244692 drift=0.057204 speed=0.21186 contact=1 engine=0 fuelUsed=-1938.75 reason= +12:50:14.637 SCRIPT : ERR SMOKE PASS: aircraft-cancel post-spawn qualification precedes native engine start +12:50:14.637 SCRIPT : ERR AIRCRAFT FOOTPRINT ROTOR: index=1 pivot=<4800.59,31.3974,11473.5> damageRadius=2.3 thickness=0.75 scale=1.73205 sphereBound=19.7785 +12:50:14.638 SCRIPT : ERR AIRCRAFT FOOTPRINT ROTOR: index=0 pivot=<4801.17,31.7248,11486.3> damageRadius=12 thickness=1.5 scale=1.73205 sphereBound=27.6822 +12:50:14.638 SCRIPT : ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=0 localPivot=<0.0081524,4.18279,-0.790322> radius=10.645 sphereBound=14.9018 +12:50:14.638 SCRIPT : ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=1 localPivot=<-0.524318,4.96713,-13.6158> radius=1.955 sphereBound=16.458 +12:50:14.638 SCRIPT : ERR AIRCRAFT FOOTPRINT: entities=110 meshes=93 zones=74 modelSphere=20.6877 damageSphere=27.6822 simulationSphere=16.458 completeSphere=27.6822 initialDrift=0 initialHeight=-0.235931 +12:50:14.639 SCRIPT : ERR SMOKE PASS: aircraft-cancel actual post-spawn column and complete rotor/model footprint issue exact qualification +12:50:14.639 SCRIPT : ERR AIRCRAFT CONTROL: token=771001 bound qualified finite aircraft; no HQ dispatch installed +12:50:14.639 SCRIPT : ERR SMOKE PASS: aircraft-cancel actual controller accepts one qualified original pilot/aircraft order +12:50:16.154 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00871277 drift=0.0625019 speed=0 contact=1 engine=0 fuelUsed=0 reason= +12:50:18.178 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00557518 drift=0.104716 speed=0.0427796 contact=1 engine=1 fuelUsed=0 reason= +12:50:20.202 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00251961 drift=0.197384 speed=0.0434863 contact=1 engine=1 fuelUsed=0.133301 reason= +12:50:22.241 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.000610352 drift=0.288655 speed=0.0434323 contact=1 engine=1 fuelUsed=0.222168 reason= +12:50:24.276 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00388908 drift=0.381897 speed=0.042629 contact=1 engine=1 fuelUsed=0.311035 reason= +12:50:26.312 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00663376 drift=0.477603 speed=0.0420776 contact=1 engine=1 fuelUsed=0.399902 reason= +12:50:28.342 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00362968 drift=0.567437 speed=0.0389525 contact=1 engine=1 fuelUsed=0.48877 reason= +12:50:30.368 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00706291 drift=0.630447 speed=0.034834 contact=1 engine=1 fuelUsed=0.577637 reason= +12:50:32.388 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0160255 drift=0.694907 speed=0.027159 contact=1 engine=1 fuelUsed=0.666504 reason= +12:50:32.501 WORLD : UpdateEntities +12:50:32.501 WORLD : AfterPostSimulate +12:50:32.501 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +12:50:34.422 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0255928 drift=0.754013 speed=0.0287467 contact=1 engine=1 fuelUsed=0.755371 reason= +12:50:36.438 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0375767 drift=0.781497 speed=0.0238083 contact=1 engine=1 fuelUsed=0.844238 reason= +12:50:38.474 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0523453 drift=0.791279 speed=0.0535626 contact=1 engine=1 fuelUsed=0.933105 reason= +12:50:40.497 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0678406 drift=0.820831 speed=0.0290443 contact=1 engine=1 fuelUsed=1.02197 reason= +12:50:42.515 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0827484 drift=0.886564 speed=0.061477 contact=1 engine=1 fuelUsed=1.11084 reason= +12:50:44.535 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=4 height=0.0723629 drift=1.53501 speed=0.14053 contact=1 engine=1 fuelUsed=1.19971 reason= +12:50:46.543 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=-0.0375481 drift=1.62129 speed=0.0516546 contact=1 engine=1 fuelUsed=1.28857 reason= +12:50:48.557 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=0.00826454 drift=1.64656 speed=0.266233 contact=1 engine=1 fuelUsed=1.37744 reason= +12:50:50.574 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=1.73679 drift=2.61482 speed=1.3842 contact=0 engine=1 fuelUsed=1.46631 reason= +12:50:52.584 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=4.3739 drift=3.477 speed=1.41773 contact=0 engine=1 fuelUsed=1.55518 reason= +12:50:53.088 SCRIPT : ERR AIRCRAFT CONTROL: token=771001 state=5 reason=native fixture deliberate airborne cancellation; physical availability remains with the allocating owner +12:50:53.089 SCRIPT : ERR AIRCRAFT CANCEL: height=5.08964 contact=0 state=6 token=771001 deadline=250958 pilotHooks=681 helicopterHooks=681 +12:50:53.089 SCRIPT : ERR SMOKE PASS: aircraft-cancel one actual airborne Cancel enters retained LANDING control +12:50:54.601 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=4.97722 drift=3.53439 speed=0.46344 contact=0 engine=1 fuelUsed=1.64404 reason=native fixture deliberate airborne cancellation +12:50:56.635 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=3.76774 drift=3.40993 speed=0.694714 contact=0 engine=1 fuelUsed=1.73291 reason=native fixture deliberate airborne cancellation +12:50:58.665 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=2.28067 drift=3.36756 speed=0.765774 contact=0 engine=1 fuelUsed=1.82178 reason=native fixture deliberate airborne cancellation +12:51:00.694 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=0.768375 drift=3.37076 speed=0.589805 contact=0 engine=1 fuelUsed=1.91064 reason=native fixture deliberate airborne cancellation +12:51:02.707 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=0.115402 drift=3.24168 speed=0.487132 contact=1 engine=1 fuelUsed=1.99951 reason=native fixture deliberate airborne cancellation +12:51:04.726 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=-0.0536308 drift=3.42641 speed=0.0272815 contact=1 engine=1 fuelUsed=2.08838 reason=native fixture deliberate airborne cancellation +12:51:05.737 SCRIPT : ERR SMOKE PASS: aircraft-cancel cancel reaches shutdown only after two observed stable grounded seconds +12:51:06.240 SCRIPT : ERR AIRCRAFT CONTROL: token=771001 state=9 reason=native fixture deliberate airborne cancellation; physical availability remains with the allocating owner +12:51:06.240 SCRIPT : ERR AIRCRAFT FIXTURE RESULT: state=9 token=771001 engineStarts=1 controllerStarts=1 wakes=1 pilotHooks=908 helicopterHooks=908 reason=native fixture deliberate airborne cancellation +12:51:06.241 SCRIPT : ERR AIRCRAFT CANCEL RESULT: count=1 elapsed=13151.6 airborneHooks=1 landingHeld=1 deadline=250958 originalDeadline=250958 +12:51:06.241 SCRIPT : ERR SMOKE PASS: aircraft-cancel actual control order completes on original physical grounded aircraft with engine off, finite fuel use and exact pilot +12:51:06.248 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +12:51:06.248 SCRIPT : ERR SMOKE PASS: actual aircraft controller completed before explicit fixture reset +12:51:06.248 SCRIPT : ERR SMOKE COMPLETE: actual airborne aircraft cancellation retains inputs through settled contact landing and engine-off; isolated mechanism, not HQ dispatch +12:51:06.356 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +12:51:06.358 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:51:06.359 SCRIPT (W): Slot_Chat Has no Content! +12:51:06.359 SCRIPT (W): Slot_VON Has no Content! +12:51:06.359 SCRIPT (W): Slot_GameVersion Has no Content! +12:51:06.359 SCRIPT (W): Slot_Notifications Has no Content! +12:51:08.441 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +12:51:08.441 SCRIPT : -- Stack trace -- +12:51:08.441 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:51:08.441 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:51:08.442 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +12:51:08.442 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:51:08.442 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:51:08.442 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:51:08.442 SCRIPT : ----------------- +12:51:08.442 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +12:51:08.442 SCRIPT : -- Stack trace -- +12:51:08.443 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:51:08.443 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:51:08.443 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +12:51:08.443 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:51:08.443 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:51:08.443 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:51:08.443 SCRIPT : ----------------- +12:51:08.445 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:51:08.445 SCRIPT (W): Slot_Chat Has no Content! +12:51:08.445 SCRIPT (W): Slot_VON Has no Content! +12:51:08.445 SCRIPT (W): Slot_GameVersion Has no Content! +12:51:08.446 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-124915-aircraft-cancel/error.log.txt b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/error.log.txt new file mode 100644 index 0000000..da81183 --- /dev/null +++ b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/error.log.txt @@ -0,0 +1,121 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-49-15\error.log started at 2026-09-19 12:49:17 (2026-09-19 10:49:17 UTC) + +12:49:17.242 INIT : Workbench startup +12:49:17.242 INIT : Workbench Init Engine +12:49:17.242 RESOURCES : ResourceDB: full scan +12:49:17.242 RESOURCES : processing files... +12:49:17.242 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +12:49:17.242 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +12:49:17.242 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +12:49:22.369 INIT : Workbench Create Game +12:49:22.369 SCRIPT : Compiling Game scripts +12:49:22.369 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:49:22.369 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:49:22.536 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:49:22.655 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:49:22.687 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:49:22.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:49:22.798 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:49:22.798 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:49:22.798 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:49:22.833 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:49:22.896 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:49:22.896 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:49:22.898 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:49:22.937 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:49:22.937 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:49:22.938 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:49:22.938 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:49:22.963 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:49:22.998 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:49:32.399 WORLD : CreateEntities +12:49:32.399 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" +12:49:32.399 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:49:32.399 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:49:48.713 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +12:49:53.491 WORLD : Game::LoadEntities +12:49:53.491 WORLD : CreateEntities +12:49:53.491 WORLD : CreateEntities +12:49:53.491 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" +12:49:53.491 ENTITY : CreateComponent 'ScriptedRadioComponent' +12:49:53.491 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +12:49:54.902 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +12:49:54.903 ENTITY : CreateComponent 'Hierarchy' +12:49:54.903 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +12:49:54.903 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +12:49:54.903 ENTITY : CreateComponent 'Hierarchy' +12:49:54.903 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +12:49:54.903 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +12:49:54.903 ENTITY : CreateComponent 'Hierarchy' +12:49:54.903 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +12:49:54.908 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +12:49:54.908 ENTITY : CreateComponent 'Hierarchy' +12:49:54.908 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +12:49:54.908 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +12:49:54.908 ENTITY : CreateComponent 'Hierarchy' +12:49:54.908 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +12:49:54.908 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +12:49:54.908 ENTITY : CreateComponent 'Hierarchy' +12:49:54.908 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +12:49:54.912 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +12:49:54.912 ENTITY : CreateComponent 'Hierarchy' +12:49:54.912 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +12:49:54.912 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +12:49:54.912 ENTITY : CreateComponent 'Hierarchy' +12:49:54.912 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +12:49:54.913 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +12:49:54.913 ENTITY : CreateComponent 'Hierarchy' +12:49:54.913 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +12:50:02.479 WORLD : InitEntities 'world' +12:50:02.479 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +12:50:02.479 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:50:03.060 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:50:03.060 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +12:50:03.060 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:50:03.060 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:50:03.060 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:50:03.062 SCRIPT (W): Can't open config file "" +12:50:03.068 WORLD : InitEntities 'world' +12:50:03.068 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +12:50:03.068 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +12:50:03.068 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:50:03.068 SCRIPT (W): Slot_Chat Has no Content! +12:50:03.068 SCRIPT (W): Slot_VON Has no Content! +12:50:03.069 SCRIPT (W): Slot_AvailableActions Has no Content! +12:50:03.069 SCRIPT (W): Slot_Vehicle Has no Content! +12:50:03.069 SCRIPT (W): Slot_GameVersion Has no Content! +12:50:03.069 SCRIPT (W): Slot_Notifications Has no Content! +12:50:03.069 SCRIPT (W): Slot_Hints Has no Content! +12:50:03.081 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:50:03.081 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +12:50:03.082 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +12:50:03.082 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:50:03.082 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:50:03.086 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:50:03.342 WORLD : UpdateEntities +12:50:03.342 WORLD : PostFrame +12:50:03.342 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +12:50:03.342 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:50:03.388 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:50:03.388 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +12:50:03.389 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +12:50:03.389 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +12:50:05.816 WORLD : UpdateEntities +12:50:05.816 WORLD : AfterPostSimulate +12:50:05.816 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +12:50:32.501 WORLD : UpdateEntities +12:50:32.501 WORLD : AfterPostSimulate +12:50:32.501 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +12:51:06.358 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:51:06.359 SCRIPT (W): Slot_Chat Has no Content! +12:51:06.359 SCRIPT (W): Slot_VON Has no Content! +12:51:06.359 SCRIPT (W): Slot_GameVersion Has no Content! +12:51:06.359 SCRIPT (W): Slot_Notifications Has no Content! +12:51:08.441 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +12:51:08.442 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +12:51:08.445 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +12:51:08.445 SCRIPT (W): Slot_Chat Has no Content! +12:51:08.445 SCRIPT (W): Slot_VON Has no Content! +12:51:08.445 SCRIPT (W): Slot_GameVersion Has no Content! +12:51:08.446 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-124915-aircraft-cancel/headless-launch.log.txt b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/headless-launch.log.txt new file mode 100644 index 0000000..a9dc5bb --- /dev/null +++ b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/headless-launch.log.txt @@ -0,0 +1,150 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 122 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 1 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerWorkbenchSteamDiag.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a001a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a001a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a001a4 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a0039a +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a0039a +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a0039a + wayland surface res id: 10 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x5555789454c0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555789454c0 +[Gamescope WSI] Destroyed swapchain: 0x5555789454c0 +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x5555788e6ee0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555788e6ee0 +[Gamescope WSI] Destroyed swapchain: 0x5555788e6ee0 +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x5555788eaad0 - imageCount: 4 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/native-2026-09-19-124915-aircraft-cancel/launch-source-sha256.json b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/launch-source-sha256.json new file mode 100644 index 0000000..22a044d --- /dev/null +++ b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/launch-source-sha256.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "417e9b6ab3f2207412fa388fb4ec9ed921db38820982aa811d6dcfa6e1d62054", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "9d959b7b048e815d027b5994e8c2cfdf603225f263d199718eb055298ee0bc01", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "eccda6e977bb07d26596b019b9c32e0caa2ea49186781ee9e67cbe7a6ade58a2", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "a12c3600f48a9f591d296cd5e0c03b9c3e2acf8850c6dbd8b0425f243dc2d713", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dd01a9d7d8860f8e0051e275236bdc1a2718906324f0fc9089f0d483ebb791c2", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "3ff1c9e9191f20769fed1e4d7a1363e4109512af76e02aa5e1e6a8766b711951", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/native-2026-09-19-124915-aircraft-cancel/launch-source.json b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/launch-source.json new file mode 100644 index 0000000..d7134dc --- /dev/null +++ b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "4e7ced93-7a1c-49e0-af47-82d49236d2b7", + "captured_unix": 1789814953.799445, + "source_root": "/home/jakub/devel/escapistsrereintroduced", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj", + "-addonsDir", + "Z:/home/jakub/devel/escapistsrereintroduced/addons", + "-profile", + "Z:/tmp/erri-workbench-profile", + "-logconsole", + "-wbModule=WorldEditor", + "-load", + "Worlds/ERR_Everon.ent", + "-plugin=ERR_ValidateWorldPlugin", + "-errPlay", + "1", + "-errSmoke", + "1", + "-errSmokeOutcome", + "aircraft-cancel", + "-noThrow", + "-disableCrashReporter" + ], + "manifest_sha256": "28b44104c43ed3f2c1da2779598b4e35029e912c77d74880a13421dbe441c662" +} diff --git a/docs/evidence/native-2026-09-19-124915-aircraft-cancel/report.json b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/report.json new file mode 100644 index 0000000..2076b3c --- /dev/null +++ b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/report.json @@ -0,0 +1,9 @@ +{ + "log": "docs/evidence/native-2026-09-19-124915-aircraft-cancel/console.log.txt", + "smoke_completions": 1, + "assertions_passed": 39, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" +} diff --git a/docs/evidence/native-2026-09-19-124915-aircraft-cancel/rereintroduced-hq.log.txt b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/rereintroduced-hq.log.txt new file mode 100644 index 0000000..f60d47f --- /dev/null +++ b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/rereintroduced-hq.log.txt @@ -0,0 +1,13 @@ +#1 t=6.6s M0 REGISTER group 1 [session=1789815002-1] +#2 t=6.6s M0 MORTAR DEPLOY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; authored gun and four-person crew; finite ammunition initialization pending [session=1789815002-1] +#3 t=6.7s M0 COURIER READY trip=0 state=1 delivered=0; 12 distinct original HE shells physically confirmed in existing western cache [session=1789815002-1] +#4 t=8.6s M0 REGISTER group 2 [session=1789815002-1] +#5 t=8.6s M0 REGISTER group 3 [session=1789815002-1] +#6 t=8.6s M0 REGISTER group 4 [session=1789815002-1] +#7 t=8.6s M0 REGISTER group 5 [session=1789815002-1] +#8 t=8.6s M0 REGISTER group 6 [session=1789815002-1] +#9 t=8.6s M0 REGISTER group 7 [session=1789815002-1] +#10 t=17.8s M0 MORTAR CREW READY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; four original physical members, one manpack, 27 confirmed HE; new shell requests=27; allocation permanently closed [session=1789815002-1] +#11 t=49.4s M0 AIRCRAFT CONTROL token=771001 state=5 reason=native fixture deliberate airborne cancellation; physical availability remains with the allocating owner [session=1789815002-1] +#12 t=62.6s M0 AIRCRAFT CONTROL token=771001 state=9 reason=native fixture deliberate airborne cancellation; physical availability remains with the allocating owner [session=1789815002-1] +#13 t=62.6s M0 STOP HQ stopped; tactical orders released [session=1789815002-1] diff --git a/docs/evidence/native-2026-09-19-124915-aircraft-cancel/runner.json.txt b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/runner.json.txt new file mode 100644 index 0000000..5ffa820 --- /dev/null +++ b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789815073.8890984, + "console_sha256": "66c841eba64dbad1ea4ee683a31f6b7a7b6f3a5112a253ba24b33c27ee8a471e", + "end_source_sha256": "28b44104c43ed3f2c1da2779598b4e35029e912c77d74880a13421dbe441c662", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "4e7ced93-7a1c-49e0-af47-82d49236d2b7", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "28b44104c43ed3f2c1da2779598b4e35029e912c77d74880a13421dbe441c662", + "started_unix": 1789814953.7995303, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_12-49-15", + "rounds_required": 1, + "project": "chat", + "display": "headless Gamescope 1280x720/30Hz", + "dedicated_server": false, + "audio": "silent sink and per-test-stream mute" +} diff --git a/docs/evidence/native-2026-09-19-124915-aircraft-cancel/script.log.txt b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/script.log.txt new file mode 100644 index 0000000..eb87e02 --- /dev/null +++ b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/script.log.txt @@ -0,0 +1,334 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_12-49-15\script.log started at 2026-09-19 12:49:18 (2026-09-19 10:49:18 UTC) + +12:49:18.610 SCRIPT : SCRIPT : Initializing scripts +12:49:18.610 SCRIPT : SCRIPT : ScriptProjectManager init +12:49:20.948 SCRIPT : SCRIPT : Compiling GameLib scripts +12:49:21.025 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +12:49:21.025 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +12:49:21.026 SCRIPT : SCRIPT : Compiling Game scripts +12:49:22.369 SCRIPT : Compiling Game scripts +12:49:22.369 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +12:49:22.369 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +12:49:22.536 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:49:22.655 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +12:49:22.687 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +12:49:22.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +12:49:22.798 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +12:49:22.798 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +12:49:22.798 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +12:49:22.833 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +12:49:22.896 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +12:49:22.896 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +12:49:22.898 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +12:49:22.937 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:49:22.937 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:49:22.938 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +12:49:22.938 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +12:49:22.963 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +12:49:22.998 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +12:49:23.274 SCRIPT : Module: WorkbenchGame; loaded 172x files; 617x classes; used 2483K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: fd02dbdd +12:49:23.282 SCRIPT : Module: Game; loaded 5780x files; 11381x classes; used 33603K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 17c2b8a1 +12:49:24.235 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:49:24.235 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:49:45.360 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +12:49:45.360 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +12:49:45.360 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +12:49:45.360 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +12:49:45.360 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +12:49:45.360 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +12:49:45.360 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +12:49:45.361 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +12:49:45.361 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +12:49:45.361 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +12:49:45.361 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +12:49:45.361 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +12:49:45.361 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +12:49:45.361 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +12:49:45.362 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +12:49:45.363 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +12:49:45.363 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +12:49:45.363 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +12:49:45.363 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +12:49:45.387 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +12:49:48.709 SCRIPT : Unable to register a script command due keyword duplicity: ban +12:49:48.710 SCRIPT : Unable to register a script command due keyword duplicity: kick +12:50:02.479 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +12:50:02.506 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +12:50:03.060 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +12:50:03.060 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +12:50:03.062 SCRIPT (W): Can't open config file "" +12:50:03.068 SCRIPT (W): Slot_WeaponInfo Has no Content! +12:50:03.068 SCRIPT (W): Slot_Chat Has no Content! +12:50:03.068 SCRIPT (W): Slot_VON Has no Content! +12:50:03.069 SCRIPT (W): Slot_AvailableActions Has no Content! +12:50:03.069 SCRIPT (W): Slot_Vehicle Has no Content! +12:50:03.069 SCRIPT (W): Slot_GameVersion Has no Content! +12:50:03.069 SCRIPT (W): Slot_Notifications Has no Content! +12:50:03.069 SCRIPT (W): Slot_Hints Has no Content! +12:50:03.082 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:50:03.082 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +12:50:03.086 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +12:50:03.141 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +12:50:03.154 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +12:50:03.342 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +12:50:04.858 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +12:50:04.879 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +12:50:04.880 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +12:50:04.909 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +12:50:04.912 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +12:50:04.964 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +12:50:04.965 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +12:50:04.970 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +12:50:05.017 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +12:50:05.017 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +12:50:05.019 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +12:50:05.020 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +12:50:05.022 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +12:50:05.024 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +12:50:05.024 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +12:50:05.026 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +12:50:05.026 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +12:50:05.026 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +12:50:05.026 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +12:50:05.026 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +12:50:05.026 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +12:50:05.027 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:50:05.027 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +12:50:05.027 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +12:50:05.027 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:50:05.027 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +12:50:05.027 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +12:50:05.027 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +12:50:05.028 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:50:05.028 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:50:05.028 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:50:05.028 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:50:05.028 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +12:50:05.028 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +12:50:05.882 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:50:05.882 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:50:05.883 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:50:05.883 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:50:06.131 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5313,7499.7> up=0.99568 +12:50:06.131 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.315805 angularSpeed=0.0413827 +12:50:06.131 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:50:06.132 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6165,7501.97> +12:50:06.132 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3165,7501.97> terrainY=63.3165 tireTerrainGap=7.62939e-05 +12:50:06.132 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6165,7501.97> radius=0.3 bottom=<7012.07,63.3165,7501.97> fraction=0.455157 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.000133514 +12:50:06.132 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6036,7497.71> +12:50:06.132 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1536,7497.71> terrainY=64.1555 tireTerrainGap=-0.00191498 +12:50:06.133 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6036,7497.71> radius=0.45 bottom=<7009.88,64.1536,7497.71> fraction=0.445878 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00190735 +12:50:06.133 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2647,7497.74> +12:50:06.133 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8147,7497.74> terrainY=63.8179 tireTerrainGap=-0.00323105 +12:50:06.134 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2647,7497.74> radius=0.45 bottom=<7014.42,63.8147,7497.74> fraction=0.44 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00320053 +12:50:06.134 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:50:06.390 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:50:06.390 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:50:06.391 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +12:50:06.391 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +12:50:06.892 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:50:06.892 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +12:50:06.892 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:50:07.141 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5343,7499.71> up=0.994328 +12:50:07.142 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +12:50:07.142 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:50:07.142 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6205,7501.98> +12:50:07.142 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3205,7501.98> terrainY=63.3146 tireTerrainGap=0.00588608 +12:50:07.142 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6205,7501.98> radius=0.3 bottom=<7012.07,63.3205,7501.98> fraction=0.481793 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00599289 +12:50:07.142 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6028,7497.71> +12:50:07.143 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1528,7497.71> terrainY=64.149 tireTerrainGap=0.00377655 +12:50:07.143 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6028,7497.71> radius=0.45 bottom=<7009.93,64.1528,7497.71> fraction=0.471677 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00376892 +12:50:07.143 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2657,7497.78> +12:50:07.143 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8157,7497.78> terrainY=63.8155 tireTerrainGap=0.00019455 +12:50:07.143 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2657,7497.78> radius=0.45 bottom=<7014.47,63.8157,7497.78> fraction=0.455556 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.000221252 +12:50:07.143 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:50:07.391 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:50:07.392 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:50:07.392 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +12:50:07.392 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:50:07.647 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +12:50:07.901 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:50:07.901 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:50:07.901 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +12:50:08.155 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5335,7499.74> up=0.99418 +12:50:08.155 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.04555 angularSpeed=0.0154758 +12:50:08.155 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:50:08.155 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6147,7502.01> +12:50:08.155 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3147,7502.01> terrainY=63.3116 tireTerrainGap=0.00310135 +12:50:08.156 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6147,7502.01> radius=0.3 bottom=<7012.08,63.3147,7502.01> fraction=0.468559 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00308228 +12:50:08.156 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.72> +12:50:08.156 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.72> terrainY=64.143 tireTerrainGap=0.000907898 +12:50:08.156 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.72> radius=0.45 bottom=<7009.97,64.1439,7497.72> fraction=0.458474 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.000869751 +12:50:08.156 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.26,7497.82> +12:50:08.156 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.81,7497.82> terrainY=63.8129 tireTerrainGap=-0.00294876 +12:50:08.157 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.26,7497.82> radius=0.45 bottom=<7014.51,63.81,7497.82> fraction=0.441111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00295639 +12:50:08.157 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:50:08.413 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:50:08.413 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +12:50:08.413 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:50:08.413 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +12:50:08.920 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:50:08.921 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:50:08.921 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:50:08.921 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +12:50:09.230 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +12:50:09.230 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:50:09.230 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:50:09.231 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:50:09.231 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00169373 +12:50:09.231 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.462159 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00167465 +12:50:09.231 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +12:50:09.231 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00255585 +12:50:09.232 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.594,7497.73> radius=0.45 bottom=<7009.97,64.144,7497.73> fraction=0.466068 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00254059 +12:50:09.232 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +12:50:09.232 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00188065 +12:50:09.232 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.445987 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00188065 +12:50:09.232 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:50:09.233 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:50:09.233 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:50:09.233 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +12:50:09.233 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:50:09.738 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +12:50:09.738 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:50:09.739 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +12:50:09.739 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:50:10.247 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +12:50:10.247 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +12:50:10.247 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +12:50:10.247 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +12:50:10.248 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00169373 +12:50:10.248 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.462159 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00167465 +12:50:10.248 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +12:50:10.248 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00255585 +12:50:10.249 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.594,7497.73> radius=0.45 bottom=<7009.97,64.144,7497.73> fraction=0.466068 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00254059 +12:50:10.249 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +12:50:10.249 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00188065 +12:50:10.249 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.445987 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00188065 +12:50:10.250 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +12:50:10.250 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:50:10.250 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +12:50:10.251 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +12:50:10.266 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +12:50:10.267 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +12:50:10.267 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +12:50:10.267 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +12:50:10.268 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +12:50:10.268 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +12:50:10.268 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +12:50:10.386 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +12:50:10.426 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +12:50:10.587 SCRIPT : ERR SMOKE PASS: new identity may enter prison +12:50:10.587 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +12:50:10.587 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +12:50:10.587 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +12:50:10.588 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +12:50:10.588 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +12:50:10.588 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +12:50:10.588 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +12:50:10.588 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +12:50:10.589 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +12:50:10.589 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +12:50:10.589 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +12:50:10.589 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +12:50:10.589 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +12:50:10.589 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +12:50:10.589 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +12:50:10.593 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +12:50:10.594 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +12:50:10.594 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +12:50:10.594 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +12:50:10.597 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +12:50:10.598 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +12:50:10.598 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +12:50:10.598 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +12:50:10.598 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +12:50:10.599 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +12:50:10.599 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +12:50:10.599 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +12:50:11.098 SCRIPT : ERR AIRCRAFT FIXTURE PAD: candidate=<4800.95,27.8202,11487.4> tested=213 terrainDelta=0.4625; no fallback +12:50:11.098 SCRIPT : ERR SMOKE PASS: aircraft-cancel independent qualified candidate found before one finite allocation +12:50:11.106 SCRIPT : ERR SMOKE PASS: aircraft-cancel one finite native Mi8 and memberless enemy group created +12:50:11.598 SCRIPT : ERR SMOKE PASS: aircraft-cancel one original native pilot request only +12:50:11.613 SCRIPT : ERR SMOKE PASS: aircraft-cancel pilot seated by native mechanism in original group +12:50:12.100 SCRIPT : ERR AIRCRAFT FIXTURE: step=2 state=-1 height=0 drift=0 speed=0 contact=0 engine=0 fuelUsed=-1938.75 reason= +12:50:14.127 SCRIPT : ERR AIRCRAFT FIXTURE: step=2 state=-1 height=-0.244692 drift=0.057204 speed=0.21186 contact=1 engine=0 fuelUsed=-1938.75 reason= +12:50:14.637 SCRIPT : ERR SMOKE PASS: aircraft-cancel post-spawn qualification precedes native engine start +12:50:14.637 SCRIPT : ERR AIRCRAFT FOOTPRINT ROTOR: index=1 pivot=<4800.59,31.3974,11473.5> damageRadius=2.3 thickness=0.75 scale=1.73205 sphereBound=19.7785 +12:50:14.638 SCRIPT : ERR AIRCRAFT FOOTPRINT ROTOR: index=0 pivot=<4801.17,31.7248,11486.3> damageRadius=12 thickness=1.5 scale=1.73205 sphereBound=27.6822 +12:50:14.638 SCRIPT : ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=0 localPivot=<0.0081524,4.18279,-0.790322> radius=10.645 sphereBound=14.9018 +12:50:14.638 SCRIPT : ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=1 localPivot=<-0.524318,4.96713,-13.6158> radius=1.955 sphereBound=16.458 +12:50:14.638 SCRIPT : ERR AIRCRAFT FOOTPRINT: entities=110 meshes=93 zones=74 modelSphere=20.6877 damageSphere=27.6822 simulationSphere=16.458 completeSphere=27.6822 initialDrift=0 initialHeight=-0.235931 +12:50:14.639 SCRIPT : ERR SMOKE PASS: aircraft-cancel actual post-spawn column and complete rotor/model footprint issue exact qualification +12:50:14.639 SCRIPT : ERR AIRCRAFT CONTROL: token=771001 bound qualified finite aircraft; no HQ dispatch installed +12:50:14.639 SCRIPT : ERR SMOKE PASS: aircraft-cancel actual controller accepts one qualified original pilot/aircraft order +12:50:16.154 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00871277 drift=0.0625019 speed=0 contact=1 engine=0 fuelUsed=0 reason= +12:50:18.178 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00557518 drift=0.104716 speed=0.0427796 contact=1 engine=1 fuelUsed=0 reason= +12:50:20.202 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00251961 drift=0.197384 speed=0.0434863 contact=1 engine=1 fuelUsed=0.133301 reason= +12:50:22.241 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.000610352 drift=0.288655 speed=0.0434323 contact=1 engine=1 fuelUsed=0.222168 reason= +12:50:24.276 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00388908 drift=0.381897 speed=0.042629 contact=1 engine=1 fuelUsed=0.311035 reason= +12:50:26.312 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00663376 drift=0.477603 speed=0.0420776 contact=1 engine=1 fuelUsed=0.399902 reason= +12:50:28.342 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00362968 drift=0.567437 speed=0.0389525 contact=1 engine=1 fuelUsed=0.48877 reason= +12:50:30.368 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00706291 drift=0.630447 speed=0.034834 contact=1 engine=1 fuelUsed=0.577637 reason= +12:50:32.388 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0160255 drift=0.694907 speed=0.027159 contact=1 engine=1 fuelUsed=0.666504 reason= +12:50:34.422 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0255928 drift=0.754013 speed=0.0287467 contact=1 engine=1 fuelUsed=0.755371 reason= +12:50:36.438 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0375767 drift=0.781497 speed=0.0238083 contact=1 engine=1 fuelUsed=0.844238 reason= +12:50:38.474 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0523453 drift=0.791279 speed=0.0535626 contact=1 engine=1 fuelUsed=0.933105 reason= +12:50:40.497 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0678406 drift=0.820831 speed=0.0290443 contact=1 engine=1 fuelUsed=1.02197 reason= +12:50:42.515 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0827484 drift=0.886564 speed=0.061477 contact=1 engine=1 fuelUsed=1.11084 reason= +12:50:44.535 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=4 height=0.0723629 drift=1.53501 speed=0.14053 contact=1 engine=1 fuelUsed=1.19971 reason= +12:50:46.543 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=-0.0375481 drift=1.62129 speed=0.0516546 contact=1 engine=1 fuelUsed=1.28857 reason= +12:50:48.557 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=0.00826454 drift=1.64656 speed=0.266233 contact=1 engine=1 fuelUsed=1.37744 reason= +12:50:50.574 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=1.73679 drift=2.61482 speed=1.3842 contact=0 engine=1 fuelUsed=1.46631 reason= +12:50:52.584 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=4.3739 drift=3.477 speed=1.41773 contact=0 engine=1 fuelUsed=1.55518 reason= +12:50:53.088 SCRIPT : ERR AIRCRAFT CONTROL: token=771001 state=5 reason=native fixture deliberate airborne cancellation; physical availability remains with the allocating owner +12:50:53.089 SCRIPT : ERR AIRCRAFT CANCEL: height=5.08964 contact=0 state=6 token=771001 deadline=250958 pilotHooks=681 helicopterHooks=681 +12:50:53.089 SCRIPT : ERR SMOKE PASS: aircraft-cancel one actual airborne Cancel enters retained LANDING control +12:50:54.601 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=4.97722 drift=3.53439 speed=0.46344 contact=0 engine=1 fuelUsed=1.64404 reason=native fixture deliberate airborne cancellation +12:50:56.635 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=3.76774 drift=3.40993 speed=0.694714 contact=0 engine=1 fuelUsed=1.73291 reason=native fixture deliberate airborne cancellation +12:50:58.665 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=2.28067 drift=3.36756 speed=0.765774 contact=0 engine=1 fuelUsed=1.82178 reason=native fixture deliberate airborne cancellation +12:51:00.694 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=0.768375 drift=3.37076 speed=0.589805 contact=0 engine=1 fuelUsed=1.91064 reason=native fixture deliberate airborne cancellation +12:51:02.707 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=0.115402 drift=3.24168 speed=0.487132 contact=1 engine=1 fuelUsed=1.99951 reason=native fixture deliberate airborne cancellation +12:51:04.726 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=-0.0536308 drift=3.42641 speed=0.0272815 contact=1 engine=1 fuelUsed=2.08838 reason=native fixture deliberate airborne cancellation +12:51:05.737 SCRIPT : ERR SMOKE PASS: aircraft-cancel cancel reaches shutdown only after two observed stable grounded seconds +12:51:06.240 SCRIPT : ERR AIRCRAFT CONTROL: token=771001 state=9 reason=native fixture deliberate airborne cancellation; physical availability remains with the allocating owner +12:51:06.240 SCRIPT : ERR AIRCRAFT FIXTURE RESULT: state=9 token=771001 engineStarts=1 controllerStarts=1 wakes=1 pilotHooks=908 helicopterHooks=908 reason=native fixture deliberate airborne cancellation +12:51:06.241 SCRIPT : ERR AIRCRAFT CANCEL RESULT: count=1 elapsed=13151.6 airborneHooks=1 landingHeld=1 deadline=250958 originalDeadline=250958 +12:51:06.241 SCRIPT : ERR SMOKE PASS: aircraft-cancel actual control order completes on original physical grounded aircraft with engine off, finite fuel use and exact pilot +12:51:06.248 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +12:51:06.248 SCRIPT : ERR SMOKE PASS: actual aircraft controller completed before explicit fixture reset +12:51:06.248 SCRIPT : ERR SMOKE COMPLETE: actual airborne aircraft cancellation retains inputs through settled contact landing and engine-off; isolated mechanism, not HQ dispatch +12:51:06.356 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +12:51:06.359 SCRIPT (W): Slot_Chat Has no Content! +12:51:06.359 SCRIPT (W): Slot_VON Has no Content! +12:51:06.359 SCRIPT (W): Slot_GameVersion Has no Content! +12:51:06.359 SCRIPT (W): Slot_Notifications Has no Content! +12:51:08.441 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +12:51:08.441 SCRIPT : -- Stack trace -- +12:51:08.441 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:51:08.441 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:51:08.442 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +12:51:08.442 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:51:08.442 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:51:08.442 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:51:08.442 SCRIPT : ----------------- +12:51:08.442 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +12:51:08.442 SCRIPT : -- Stack trace -- +12:51:08.443 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +12:51:08.443 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +12:51:08.443 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +12:51:08.443 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +12:51:08.443 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +12:51:08.443 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +12:51:08.443 SCRIPT : ----------------- +12:51:08.445 SCRIPT (W): Slot_Chat Has no Content! +12:51:08.445 SCRIPT (W): Slot_VON Has no Content! +12:51:08.445 SCRIPT (W): Slot_GameVersion Has no Content! +12:51:08.446 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-124915-aircraft-cancel/source-provenance.json b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-124915-aircraft-cancel/source-sha256.json b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/source-sha256.json new file mode 100644 index 0000000..22a044d --- /dev/null +++ b/docs/evidence/native-2026-09-19-124915-aircraft-cancel/source-sha256.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "417e9b6ab3f2207412fa388fb4ec9ed921db38820982aa811d6dcfa6e1d62054", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "9d959b7b048e815d027b5994e8c2cfdf603225f263d199718eb055298ee0bc01", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "eccda6e977bb07d26596b019b9c32e0caa2ea49186781ee9e67cbe7a6ade58a2", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "a12c3600f48a9f591d296cd5e0c03b9c3e2acf8850c6dbd8b0425f243dc2d713", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dd01a9d7d8860f8e0051e275236bdc1a2718906324f0fc9089f0d483ebb791c2", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "3ff1c9e9191f20769fed1e4d7a1363e4109512af76e02aa5e1e6a8766b711951", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/native-2026-09-19-130038-aircraft-target/console.log.txt b/docs/evidence/native-2026-09-19-130038-aircraft-target/console.log.txt new file mode 100644 index 0000000..3a980e2 --- /dev/null +++ b/docs/evidence/native-2026-09-19-130038-aircraft-target/console.log.txt @@ -0,0 +1,674 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-00-38\console.log started at 2026-09-19 13:00:38 (2026-09-19 11:00:38 UTC) + +13:00:38.632 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-00-38' to filesystem under name logs +13:00:38.632 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +13:00:38.632 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +13:00:38.634 PROFILING : Workbench Create Engine took: 9.654800 ms +13:00:39.673 INIT : INIT : Workbench Init Engine +13:00:39.673 ENGINE : Initializing engine, version 192142 +13:00:39.673 ENGINE : CLI Params: -gproj Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/addons -profile Z:/tmp/erri-workbench-profile -logconsole -wbModule WorldEditor -load Worlds/ERR_Everon.ent -plugin ERR_ValidateWorldPlugin -errPlay 1 -errSmoke 1 -errSmokeOutcome aircraft-translate -noThrow -disableCrashReporter +13:00:39.689 ENGINE : Addon dirs: +13:00:39.689 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/' +13:00:39.689 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +13:00:39.689 ENGINE : dir: './addons' +13:00:39.689 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +13:00:39.689 ENGINE : Available addons: +13:00:39.689 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:00:39.689 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:00:39.689 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:00:39.689 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:00:39.689 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:00:39.689 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +13:00:39.689 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +13:00:39.690 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +13:00:39.690 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +13:00:39.697 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +13:00:39.697 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +13:00:39.697 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +13:00:39.841 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +13:00:39.845 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +13:00:39.845 ENGINE : CPU vendor : AuthenticAMD +13:00:39.845 ENGINE : CPU type : 2 +13:00:39.845 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +13:00:39.845 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +13:00:39.845 ENGINE : CPU count logical : 16 +13:00:39.845 ENGINE : CPU count physical : 8 +13:00:39.845 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +13:00:39.845 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +13:00:39.845 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +13:00:39.846 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +13:00:39.846 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +13:00:39.846 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +13:00:39.847 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +13:00:39.992 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +13:00:39.995 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +13:00:39.995 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-00-38/resourceDatabase.rdb) +13:00:40.156 RESOURCES : RESOURCES : ResourceDB: full scan +13:00:40.161 RESOURCES : RESOURCES : scanning... +13:00:40.161 RESOURCES : RESOURCES : scanning @"ERR_Chat" +13:00:40.162 RESOURCES : RESOURCES : scanning @"ERR_Map" +13:00:40.164 RESOURCES : RESOURCES : scanning @"ERR_Intel" +13:00:40.165 RESOURCES : RESOURCES : scanning @"ERR_Ai" +13:00:40.166 RESOURCES : RESOURCES : scanning @"ERR_Core" +13:00:40.170 RESOURCES : RESOURCES : scanning @"ArmaReforger" +13:00:40.313 RESOURCES : RESOURCES : scanning @"core" +13:00:40.317 RESOURCES : RESOURCES : scanning @"profile" +13:00:40.317 RESOURCES : RESOURCES : scanning @"logs" +13:00:40.317 RESOURCES : RESOURCES : processing meta-files... +13:00:40.384 RESOURCES : RESOURCES : processing files... +13:00:40.394 INIT : Workbench startup +13:00:40.394 INIT : Workbench Init Engine +13:00:40.394 RESOURCES : ResourceDB: full scan +13:00:40.394 RESOURCES : processing files... +13:00:40.394 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +13:00:40.394 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +13:00:40.394 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +13:00:40.394 RESOURCES : RESOURCES : processing folders... +13:00:40.401 RESOURCES : RESOURCES : creating GUID-item mapping... +13:00:40.418 RESOURCES : RESOURCES : building tree... +13:00:40.474 PROFILING : ResourceDB: full scan took: 318.429200 ms +13:00:40.475 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +13:00:40.477 RESOURCES : ResourceDB: written 804/804 bytes +13:00:40.477 RESOURCES : ResourceDB: cache successfully saved +13:00:40.477 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +13:00:40.478 RESOURCES : ResourceDB: written 819/819 bytes +13:00:40.478 RESOURCES : ResourceDB: cache successfully saved +13:00:40.478 RESOURCES : ResourceDB: saving cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +13:00:40.480 RESOURCES : ResourceDB: written 227/227 bytes +13:00:40.480 RESOURCES : ResourceDB: cache successfully saved +13:00:40.480 RESOURCES : ResourceDB: saving cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +13:00:40.481 RESOURCES : ResourceDB: written 1909/1909 bytes +13:00:40.481 RESOURCES : ResourceDB: cache successfully saved +13:00:40.481 RESOURCES : ResourceDB: saving cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +13:00:40.482 RESOURCES : ResourceDB: written 6865/6865 bytes +13:00:40.482 RESOURCES : ResourceDB: cache successfully saved +13:00:40.483 RESOURCES : ResourceDB: saving cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +13:00:40.484 RESOURCES : ResourceDB: written 206/206 bytes +13:00:40.484 RESOURCES : ResourceDB: cache successfully saved +13:00:40.484 RESOURCES : ResourceDB: saving cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-00-38/resourceDatabase.rdb) +13:00:40.486 RESOURCES : ResourceDB: written 162/162 bytes +13:00:40.486 RESOURCES : ResourceDB: cache successfully saved +13:00:40.486 ENGINE : GameProject load +13:00:40.486 ENGINE : Loaded addons: +13:00:40.486 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +13:00:40.486 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +13:00:40.486 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:00:40.486 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:00:40.486 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:00:40.486 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:00:40.486 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:00:40.489 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +13:00:40.489 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +13:00:40.489 ENGINE : Engine user settings config loaded +13:00:40.489 PROFILING : Settings changed took: 0.001800 ms +13:00:40.596 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +13:00:40.597 RENDER : Basic screen setup: +13:00:40.597 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +13:00:40.597 RENDER : MSAA : none +13:00:40.610 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +13:00:40.610 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +13:00:40.610 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +13:00:40.610 RENDER : * core clocks 2720 MHz, memory 1124 MHz +13:00:40.610 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +13:00:40.610 RENDER : AMD AGS correctly initialized +13:00:40.610 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +13:00:40.610 RENDER : Detected output devices: +13:00:40.610 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +13:00:40.610 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +13:00:40.610 RENDER : Concurrent frames limit 2 +13:00:40.684 RENDER : DX12 device successfully created by AMD AGS library +13:00:40.684 RENDER : * user markers not supported in this version AMD SW +13:00:40.684 RENDER : Graphics device features +13:00:40.684 RENDER : Needed: +13:00:40.684 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +13:00:40.684 RENDER : Optional: +13:00:40.684 RENDER : * Allow tearing (VSYNC) : 1 +13:00:40.684 RENDER : * 16 bits : 1 +13:00:40.684 RENDER : * Resource heap tier : 3 +13:00:40.684 RENDER : * Persistent heaps (DRED) : 1 +13:00:40.684 RENDER : * DRED 1.2 is supported by compiler +13:00:40.708 RENDER : Main RT format setup. +13:00:40.708 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +13:00:40.708 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +13:00:40.710 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +13:00:40.739 PROFILING : Settings changed took: 0.021200 ms +13:00:41.284 AUDIO : Endpoint: Speakers (PulseAudio Output) +13:00:41.284 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +13:00:41.284 AUDIO : Audio client: +13:00:41.284 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +13:00:41.288 RENDER : RENDER : Reload shaders +13:00:41.288 RENDER : Enfusion shader version 13 +13:00:41.288 INIT : INIT : ShaderListReload +13:00:41.288 PROFILING : ShaderListReload took: 0.000600 ms +13:00:41.426 AUDIO : Endpoint: Speakers (PulseAudio Output) +13:00:41.426 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +13:00:41.426 AUDIO : Audio client: +13:00:41.426 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +13:00:41.631 RENDER : Loaded 3752 newer shader binaries +13:00:41.631 PROFILING : Reload shaders took: 343.245400 ms +13:00:41.631 ENGINE : Initializing inputs. +13:00:41.645 NETWORK : Initializing networking. +13:00:41.645 NETWORK : Using new GameRplScheduler. +13:00:41.645 SCRIPT : SCRIPT : Initializing scripts +13:00:41.645 SCRIPT : SCRIPT : ScriptProjectManager init +13:00:43.801 PROFILING : ScriptProjectManager init took: 2156.135800 ms +13:00:43.887 PROFILING : Initializing scripts took: 2241.778500 ms +13:00:43.904 ENGINE : Enfusion engine successfully created. +13:00:43.905 PROFILING : Workbench Init Engine took: 4231.155500 ms +13:00:43.905 INIT : INIT : Workbench Create Game +13:00:43.918 GUI : Using default language (en_us) +13:00:43.918 GUI : Loading 'en_us' localization file. +13:00:43.918 INIT : INIT : Loading StringTable +13:00:43.943 PROFILING : Loading StringTable took: 24.659700 ms +13:00:43.943 SCRIPT : SCRIPT : Compiling GameLib scripts +13:00:44.013 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:00:44.013 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:00:44.014 PROFILING : Compiling GameLib scripts took: 70.493000 ms +13:00:44.014 SCRIPT : SCRIPT : Compiling Game scripts +13:00:45.368 INIT : Workbench Create Game +13:00:45.368 SCRIPT : Compiling Game scripts +13:00:45.368 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:00:45.368 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:00:45.577 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:00:45.695 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:00:45.726 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:00:45.831 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:00:45.831 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:00:45.831 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:00:45.831 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:00:45.865 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:00:45.928 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:00:45.928 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:00:45.929 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:00:45.969 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:00:45.969 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:00:45.970 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:00:45.970 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:00:45.995 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:00:46.030 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:00:46.306 SCRIPT : Module: WorkbenchGame; loaded 172x files; 617x classes; used 2482K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: e963af0e +13:00:46.313 SCRIPT : Module: Game; loaded 5780x files; 11382x classes; used 33615K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 6264db09 +13:00:46.354 PROFILING : Compiling Game scripts took: 2340.171300 ms +13:00:46.360 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:00:46.397 ENGINE : Game successfully created. +13:00:46.398 PROFILING : Workbench Create Game took: 2493.766900 ms +13:00:46.407 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/thumbnails +13:00:47.233 INIT : INIT : Workbench Reload Game +13:00:47.234 ENGINE : Game destroyed. +13:00:47.241 GUI : Using default language (en_us) +13:00:47.241 GUI : Loading 'en_us' localization file. +13:00:47.241 INIT : INIT : Loading StringTable +13:00:47.251 PROFILING : Loading StringTable took: 9.808300 ms +13:00:47.251 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:00:47.259 SCRIPT : Unable to register a script command due keyword duplicity: ban +13:00:47.259 SCRIPT : Unable to register a script command due keyword duplicity: kick +13:00:47.259 ENGINE : Game successfully created. +13:00:47.259 ENGINE : Game successfully initialized. +13:00:47.259 PROFILING : Workbench Reload Game took: 26.070000 ms +13:00:47.939 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +13:00:48.949 PROFILING : Entities load took: 1009.876800 ms +13:00:48.961 WORLD : WORLD : CreateEntities +13:00:48.965 WORLD : WORLD : NotifyBeforeEntitiesCreated +13:00:48.965 PROFILING : NotifyBeforeEntitiesCreated took: 0.002900 ms +13:00:48.965 WORLD : WORLD : Wait for preloading data +13:00:48.965 PROFILING : Wait for preloading data took: 0.002600 ms +13:00:49.075 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +13:00:49.076 PROFILING : PROFILING : Terrain load +13:00:51.095 PROFILING : Terrain load took: 2019.256000 ms +13:00:55.193 WORLD : CreateEntities +13:00:55.194 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" +13:00:55.194 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:00:55.194 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:01:05.943 WORLD : WORLD : NotifyBeforeEntitiesInitialized +13:01:05.943 PROFILING : NotifyBeforeEntitiesInitialized took: 0.005300 ms +13:01:06.390 WORLD : WORLD : NotifyEntitiesInitialized +13:01:06.390 TERRAIN : TERRAIN : Initializing road networks... +13:01:06.392 PROFILING : Initializing road networks... took: 2.265000 ms +13:01:06.392 PROFILING : NotifyEntitiesInitialized took: 2.633200 ms +13:01:06.393 PROFILING : CreateEntities took: 17431.442000 ms +13:01:06.576 PROFILING : * WorldEditor: LoadWorld: 18641.644200 ms +13:01:08.094 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +13:01:08.095 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +13:01:08.096 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +13:01:08.096 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +13:01:08.189 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +13:01:08.189 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +13:01:08.189 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +13:01:08.189 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +13:01:08.189 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +13:01:08.189 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +13:01:08.190 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +13:01:08.190 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +13:01:08.190 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +13:01:08.190 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +13:01:08.190 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +13:01:08.190 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +13:01:08.191 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +13:01:08.191 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +13:01:08.191 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +13:01:08.191 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +13:01:08.191 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +13:01:08.192 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +13:01:08.192 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +13:01:08.192 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +13:01:08.192 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +13:01:08.192 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +13:01:08.192 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +13:01:08.193 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +13:01:08.193 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +13:01:08.193 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +13:01:08.220 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +13:01:08.247 BACKEND : Attempting online Game Config instead. +13:01:11.456 INIT : INIT : Workbench Reload Game +13:01:11.459 ENGINE : Game destroyed. +13:01:11.465 GUI : Using default language (en_us) +13:01:11.465 GUI : Loading 'en_us' localization file. +13:01:11.465 INIT : INIT : Loading StringTable +13:01:11.485 PROFILING : Loading StringTable took: 19.236900 ms +13:01:11.485 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:01:11.492 SCRIPT : Unable to register a script command due keyword duplicity: ban +13:01:11.493 SCRIPT : Unable to register a script command due keyword duplicity: kick +13:01:11.493 ENGINE : Game successfully created. +13:01:11.493 ENGINE : Game successfully initialized. +13:01:11.493 PROFILING : Workbench Reload Game took: 36.395200 ms +13:01:11.495 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +13:01:11.548 PLATFORM : Save data from container 'settings' have been loaded +13:01:11.637 PLATFORM : Save data from container 'sessions' have been loaded +13:01:11.638 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +13:01:11.638 ENGINE : Game user settings config loaded +13:01:11.736 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +13:01:11.745 WORLD : WORLD : Game::LoadEntities +13:01:11.745 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +13:01:11.747 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +13:01:11.747 WORLD : WORLD : CreateEntities +13:01:11.747 WORLD : WORLD : CreateEntities +13:01:11.747 WORLD : WORLD : NotifyBeforeEntitiesCreated +13:01:11.759 RESOURCES : Loaded mission headers from 7 addon(s)! +13:01:11.760 PROFILING : NotifyBeforeEntitiesCreated took: 12.650600 ms +13:01:11.760 WORLD : WORLD : Wait for preloading data +13:01:11.760 PROFILING : Wait for preloading data took: 0.000800 ms +13:01:16.245 WORLD : Game::LoadEntities +13:01:16.245 WORLD : CreateEntities +13:01:16.245 WORLD : CreateEntities +13:01:16.245 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" +13:01:16.245 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:01:16.245 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:01:17.728 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +13:01:17.728 ENTITY : CreateComponent 'Hierarchy' +13:01:17.728 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +13:01:17.728 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +13:01:17.728 ENTITY : CreateComponent 'Hierarchy' +13:01:17.728 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +13:01:17.728 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +13:01:17.728 ENTITY : CreateComponent 'Hierarchy' +13:01:17.728 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +13:01:17.733 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +13:01:17.733 ENTITY : CreateComponent 'Hierarchy' +13:01:17.733 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +13:01:17.733 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +13:01:17.733 ENTITY : CreateComponent 'Hierarchy' +13:01:17.733 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +13:01:17.733 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +13:01:17.733 ENTITY : CreateComponent 'Hierarchy' +13:01:17.733 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +13:01:17.738 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +13:01:17.738 ENTITY : CreateComponent 'Hierarchy' +13:01:17.738 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +13:01:17.738 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +13:01:17.738 ENTITY : CreateComponent 'Hierarchy' +13:01:17.738 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +13:01:17.738 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +13:01:17.738 ENTITY : CreateComponent 'Hierarchy' +13:01:17.738 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +13:01:23.166 WORLD : WORLD : NotifyBeforeEntitiesInitialized +13:01:23.166 PROFILING : NotifyBeforeEntitiesInitialized took: 0.049300 ms +13:01:25.161 WORLD : InitEntities 'world' +13:01:25.161 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:01:25.161 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:01:25.191 WORLD : InitEntities 'world' +13:01:25.191 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:01:25.191 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +13:01:25.191 WORLD : WORLD : NotifyEntitiesInitialized +13:01:25.191 TERRAIN : TERRAIN : Initializing road networks... +13:01:25.194 PROFILING : Initializing road networks... took: 2.403400 ms +13:01:25.194 DEFAULT : DEFAULT : WorldVolumesCollection +13:01:25.254 PROFILING : WorldVolumesCollection took: 59.888400 ms +13:01:25.254 INIT : INIT : SoundWorldInit +13:01:25.268 PROFILING : SoundWorldInit took: 14.334600 ms +13:01:25.268 PROFILING : NotifyEntitiesInitialized took: 76.868400 ms +13:01:25.268 PROFILING : CreateEntities took: 13521.055600 ms +13:01:25.268 PROFILING : CreateEntities took: 13521.243100 ms +13:01:25.269 WORLD : WORLD : Wait for preloading data around camera +13:01:25.269 PROFILING : Wait for preloading data around camera took: 0.001100 ms +13:01:25.269 WORLD : WORLD : EOnActivate +13:01:25.303 PROFILING : EOnActivate took: 34.510600 ms +13:01:25.304 PROFILING : Game::LoadEntities took: 13557.988600 ms +13:01:25.581 DEFAULT : Entered offline game state. +13:01:25.684 NETWORK : Player connected: connectionID=2147483646 +13:01:25.684 NETWORK : ### Connecting player: connectionID=2147483646, Name= +13:01:25.684 NETWORK : ### Creating player: PlayerId=1, Name=jakub +13:01:25.689 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:01:25.690 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +13:01:25.690 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:01:25.690 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:01:25.690 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:01:25.693 SCRIPT (W): Can't open config file "" +13:01:25.699 WORLD : InitEntities 'world' +13:01:25.700 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:01:25.700 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +13:01:25.700 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:01:25.700 SCRIPT (W): Slot_Chat Has no Content! +13:01:25.700 SCRIPT (W): Slot_VON Has no Content! +13:01:25.701 SCRIPT (W): Slot_AvailableActions Has no Content! +13:01:25.701 SCRIPT (W): Slot_Vehicle Has no Content! +13:01:25.701 SCRIPT (W): Slot_GameVersion Has no Content! +13:01:25.701 SCRIPT (W): Slot_Notifications Has no Content! +13:01:25.701 SCRIPT (W): Slot_Hints Has no Content! +13:01:25.714 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:01:25.714 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +13:01:25.714 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:01:25.714 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:01:25.715 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:01:25.717 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +13:01:25.718 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +13:01:25.718 NETWORK : Players connecting: 0 +13:01:25.718 NETWORK : Players connected: 1 / 1 +13:01:25.748 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/autosaves +13:01:25.750 PROFILING : Workbench startup took: 47200.770100 ms +13:01:25.772 WORLD : Frame start +13:01:25.772 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +13:01:25.785 WORLD : UpdateEntities +13:01:25.785 WORLD : Frame +13:01:25.785 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +13:01:25.973 WORLD : UpdateEntities +13:01:25.973 WORLD : PostFrame +13:01:25.973 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +13:01:25.974 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:01:26.022 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:01:26.022 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:01:26.022 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +13:01:26.023 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +13:01:26.171 RENDER : RENDER : ObjectsHeightMap::Build +13:01:26.172 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +13:01:26.336 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 164.342300 ms +13:01:26.344 PROFILING : ObjectsHeightMap::Build took: 172.052500 ms +13:01:27.508 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +13:01:27.528 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +13:01:27.529 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +13:01:27.557 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +13:01:27.560 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +13:01:27.611 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +13:01:27.612 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +13:01:27.617 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +13:01:27.664 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +13:01:27.665 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +13:01:27.667 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +13:01:27.667 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +13:01:27.670 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +13:01:27.672 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +13:01:27.672 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +13:01:27.673 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +13:01:27.673 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +13:01:27.673 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +13:01:27.673 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +13:01:27.674 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +13:01:27.674 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +13:01:27.674 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:01:27.674 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +13:01:27.674 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +13:01:27.675 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:01:27.675 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +13:01:27.675 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +13:01:27.675 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:01:27.675 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:01:27.675 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:01:27.676 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:01:27.676 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:01:27.676 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +13:01:27.676 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:01:28.462 WORLD : UpdateEntities +13:01:28.462 WORLD : AfterPostSimulate +13:01:28.463 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +13:01:28.516 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:01:28.517 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:01:28.517 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:01:28.517 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:01:28.767 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5329,7499.7> up=0.99568 +13:01:28.767 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.315906 angularSpeed=0.0413675 +13:01:28.767 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:01:28.768 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6128,7501.97> +13:01:28.768 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3128,7501.97> terrainY=63.3163 tireTerrainGap=-0.00356674 +13:01:28.768 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6128,7501.97> radius=0.3 bottom=<7012.07,63.3128,7501.97> fraction=0.438655 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00349426 +13:01:28.768 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.599,7497.71> +13:01:28.769 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.149,7497.71> terrainY=64.1555 tireTerrainGap=-0.00650024 +13:01:28.769 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.599,7497.71> radius=0.45 bottom=<7009.88,64.149,7497.71> fraction=0.425126 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00646973 +13:01:28.769 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2625,7497.74> +13:01:28.769 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8125,7497.74> terrainY=63.8179 tireTerrainGap=-0.00542068 +13:01:28.770 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2625,7497.74> radius=0.45 bottom=<7014.42,63.8125,7497.74> fraction=0.43 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0053978 +13:01:28.770 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:01:29.018 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:01:29.018 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:01:29.018 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +13:01:29.018 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:01:29.530 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:01:29.531 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +13:01:29.531 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:01:29.780 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5342,7499.71> up=0.994326 +13:01:29.780 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954449 angularSpeed=0.027426 +13:01:29.780 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:01:29.781 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6204,7501.98> +13:01:29.781 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3204,7501.98> terrainY=63.3146 tireTerrainGap=0.00574875 +13:01:29.781 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6204,7501.98> radius=0.3 bottom=<7012.07,63.3204,7501.98> fraction=0.481232 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00587082 +13:01:29.781 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6028,7497.71> +13:01:29.781 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1528,7497.71> terrainY=64.149 tireTerrainGap=0.00371552 +13:01:29.781 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6028,7497.71> radius=0.45 bottom=<7009.93,64.1528,7497.71> fraction=0.47138 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00370789 +13:01:29.782 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2656,7497.78> +13:01:29.782 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8156,7497.78> terrainY=63.8155 tireTerrainGap=7.24792e-05 +13:01:29.782 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2656,7497.78> radius=0.45 bottom=<7014.47,63.8156,7497.78> fraction=0.455 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=9.91821e-05 +13:01:29.782 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:01:30.030 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:01:30.030 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:01:30.031 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:01:30.031 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:01:30.280 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +13:01:30.538 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:01:30.539 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:01:30.539 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:01:30.539 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +13:01:30.788 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5333,7499.74> up=0.994103 +13:01:30.789 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0655739 angularSpeed=0.0324818 +13:01:30.789 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:01:30.789 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.615,7502.01> +13:01:30.789 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.315,7502.01> terrainY=63.3119 tireTerrainGap=0.00312042 +13:01:30.789 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.615,7502.01> radius=0.3 bottom=<7012.07,63.315,7502.01> fraction=0.468689 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00311279 +13:01:30.789 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5945,7497.71> +13:01:30.790 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1445,7497.71> terrainY=64.143 tireTerrainGap=0.00149536 +13:01:30.790 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5945,7497.71> radius=0.45 bottom=<7009.97,64.1445,7497.71> fraction=0.461279 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.0014801 +13:01:30.790 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.83> +13:01:30.790 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.83> terrainY=63.8127 tireTerrainGap=-0.00261307 +13:01:30.791 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.83> radius=0.45 bottom=<7014.51,63.8101,7497.83> fraction=0.4425 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00265121 +13:01:30.791 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:01:31.045 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:01:31.045 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:01:31.045 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:01:31.045 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +13:01:31.554 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:01:31.555 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:01:31.555 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:01:31.555 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:01:31.804 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5297,7499.75> up=0.994379 +13:01:31.804 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:01:31.805 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:01:31.805 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6126,7502.02> +13:01:31.805 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3126,7502.02> terrainY=63.3108 tireTerrainGap=0.00183105 +13:01:31.806 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6126,7502.02> radius=0.3 bottom=<7012.07,63.3126,7502.02> fraction=0.462844 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00182724 +13:01:31.806 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.594,7497.72> +13:01:31.806 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.144,7497.72> terrainY=64.1415 tireTerrainGap=0.0025177 +13:01:31.806 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.594,7497.72> radius=0.45 bottom=<7009.98,64.144,7497.72> fraction=0.466368 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00260162 +13:01:31.806 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2601,7497.84> +13:01:31.807 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00185013 +13:01:31.807 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2601,7497.84> radius=0.45 bottom=<7014.52,63.8101,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +13:01:31.807 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:01:32.059 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:01:32.059 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:01:32.059 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +13:01:32.060 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:01:32.571 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:01:32.571 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:01:32.572 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +13:01:32.572 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:01:32.825 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5297,7499.75> up=0.994379 +13:01:32.825 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:01:32.825 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:01:32.825 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6126,7502.02> +13:01:32.826 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3126,7502.02> terrainY=63.3108 tireTerrainGap=0.00183105 +13:01:32.826 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6126,7502.02> radius=0.3 bottom=<7012.07,63.3126,7502.02> fraction=0.462844 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00182724 +13:01:32.826 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.594,7497.72> +13:01:32.826 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.144,7497.72> terrainY=64.1415 tireTerrainGap=0.0025177 +13:01:32.827 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.594,7497.72> radius=0.45 bottom=<7009.98,64.144,7497.72> fraction=0.466368 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00260162 +13:01:32.827 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2601,7497.84> +13:01:32.827 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00185013 +13:01:32.827 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2601,7497.84> radius=0.45 bottom=<7014.52,63.8101,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +13:01:32.827 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:01:33.077 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:01:33.078 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +13:01:33.092 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +13:01:33.093 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +13:01:33.093 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +13:01:33.093 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +13:01:33.093 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +13:01:33.093 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +13:01:33.094 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +13:01:34.054 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +13:01:34.108 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +13:01:34.295 SCRIPT : ERR SMOKE PASS: new identity may enter prison +13:01:34.295 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +13:01:34.295 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +13:01:34.296 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +13:01:34.296 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +13:01:34.296 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +13:01:34.296 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +13:01:34.296 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +13:01:34.296 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +13:01:34.297 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +13:01:34.297 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +13:01:34.297 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +13:01:34.297 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +13:01:34.297 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +13:01:34.298 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +13:01:34.298 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +13:01:34.307 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +13:01:34.307 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +13:01:34.308 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +13:01:34.308 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +13:01:34.312 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +13:01:34.312 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +13:01:34.312 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +13:01:34.312 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +13:01:34.313 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +13:01:34.313 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +13:01:34.313 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +13:01:34.313 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +13:01:34.794 SCRIPT : ERR AIRCRAFT FIXTURE PAD: candidate=<4800.95,27.8202,11487.4> tested=213 terrainDelta=0.4625; no fallback +13:01:34.794 SCRIPT : ERR SMOKE PASS: aircraft-translate independent qualified candidate found before one finite allocation +13:01:34.802 SCRIPT : ERR SMOKE PASS: aircraft-translate one finite native Mi8 and memberless enemy group created +13:01:35.297 SCRIPT : ERR SMOKE PASS: aircraft-translate one original native pilot request only +13:01:35.310 SCRIPT : ERR SMOKE PASS: aircraft-translate pilot seated by native mechanism in original group +13:01:35.801 SCRIPT : ERR AIRCRAFT FIXTURE: step=2 state=-1 height=0 drift=0 speed=0 contact=0 engine=0 fuelUsed=-1938.75 reason= +13:01:37.826 SCRIPT : ERR AIRCRAFT FIXTURE: step=2 state=-1 height=-0.246445 drift=0.0566743 speed=0.204606 contact=1 engine=0 fuelUsed=-1938.75 reason= +13:01:38.329 SCRIPT : ERR SMOKE PASS: aircraft-translate post-spawn qualification precedes native engine start +13:01:38.329 SCRIPT : ERR AIRCRAFT FOOTPRINT ROTOR: index=1 pivot=<4800.59,31.4016,11473.5> damageRadius=2.3 thickness=0.75 scale=1.73205 sphereBound=19.779 +13:01:38.330 SCRIPT : ERR AIRCRAFT FOOTPRINT ROTOR: index=0 pivot=<4801.17,31.7262,11486.3> damageRadius=12 thickness=1.5 scale=1.73205 sphereBound=27.6822 +13:01:38.330 SCRIPT : ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=0 localPivot=<0.0081524,4.18279,-0.790322> radius=10.645 sphereBound=14.9018 +13:01:38.330 SCRIPT : ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=1 localPivot=<-0.524318,4.96713,-13.6158> radius=1.955 sphereBound=16.458 +13:01:38.330 SCRIPT : ERR AIRCRAFT FOOTPRINT: entities=110 meshes=93 zones=74 modelSphere=20.7041 damageSphere=27.6822 simulationSphere=16.458 completeSphere=27.6822 initialDrift=0 initialHeight=-0.234812 +13:01:38.331 SCRIPT : ERR SMOKE PASS: aircraft-translate actual post-spawn column and complete rotor/model footprint issue exact qualification +13:01:38.331 SCRIPT : ERR AIRCRAFT CONTROL: token=771001 bound qualified finite aircraft; no HQ dispatch installed +13:01:38.331 SCRIPT : ERR SMOKE PASS: aircraft-translate actual controller accepts one qualified original pilot/aircraft order +13:01:39.852 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00756073 drift=0.0638436 speed=0 contact=1 engine=0 fuelUsed=0 reason= +13:01:41.887 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00439072 drift=0.106606 speed=0.0427796 contact=1 engine=1 fuelUsed=0.0444336 reason= +13:01:43.897 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00139427 drift=0.197841 speed=0.0450264 contact=1 engine=1 fuelUsed=0.133301 reason= +13:01:45.919 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.0017128 drift=0.288634 speed=0.0445778 contact=1 engine=1 fuelUsed=0.222168 reason= +13:01:47.941 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.0049572 drift=0.381393 speed=0.0453459 contact=1 engine=1 fuelUsed=0.311035 reason= +13:01:49.962 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00772476 drift=0.476123 speed=0.0451974 contact=1 engine=1 fuelUsed=0.399902 reason= +13:01:51.979 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00504494 drift=0.566447 speed=0.0404979 contact=1 engine=1 fuelUsed=0.48877 reason= +13:01:53.996 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00552177 drift=0.627991 speed=0.0347518 contact=1 engine=1 fuelUsed=0.577637 reason= +13:01:56.027 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0145855 drift=0.693916 speed=0.0282516 contact=1 engine=1 fuelUsed=0.666504 reason= +13:01:56.208 WORLD : UpdateEntities +13:01:56.208 WORLD : AfterPostSimulate +13:01:56.208 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +13:01:58.055 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0240707 drift=0.753997 speed=0.029101 contact=1 engine=1 fuelUsed=0.755371 reason= +13:02:00.083 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0361443 drift=0.781353 speed=0.0244946 contact=1 engine=1 fuelUsed=0.844238 reason= +13:02:02.117 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0507431 drift=0.790545 speed=0.053406 contact=1 engine=1 fuelUsed=0.933105 reason= +13:02:04.136 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0663548 drift=0.819417 speed=0.029027 contact=1 engine=1 fuelUsed=1.02197 reason= +13:02:06.153 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0814705 drift=0.881916 speed=0.0602577 contact=1 engine=1 fuelUsed=1.11084 reason= +13:02:08.167 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=4 height=0.0718994 drift=1.49361 speed=0.128956 contact=1 engine=1 fuelUsed=1.19971 reason= +13:02:10.189 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=-0.0375843 drift=1.57597 speed=0.0517537 contact=1 engine=1 fuelUsed=1.28857 reason= +13:02:12.212 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=0.00847054 drift=1.59212 speed=0.266351 contact=1 engine=1 fuelUsed=1.37744 reason= +13:02:14.232 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=1.74747 drift=2.56896 speed=1.3884 contact=0 engine=1 fuelUsed=1.46631 reason= +13:02:16.254 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=4.40762 drift=3.42712 speed=1.41874 contact=0 engine=1 fuelUsed=1.55518 reason= +13:02:18.269 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=6.97688 drift=3.45313 speed=0.8856 contact=0 engine=1 fuelUsed=1.64404 reason= +13:02:20.279 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=8.00281 drift=3.33404 speed=0.231835 contact=0 engine=1 fuelUsed=1.73291 reason= +13:02:22.296 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=8.16153 drift=3.30641 speed=0.00905151 contact=0 engine=1 fuelUsed=1.82178 reason= +13:02:24.308 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=8.09695 drift=3.3096 speed=0.0458402 contact=0 engine=1 fuelUsed=1.91064 reason= +13:02:24.308 SCRIPT : ERR AIRCRAFT TRANSLATION: token=771001 origin=<4802.63,35.68,11484.5> immutableTarget=<4801.03,35.5831,11487.4> home=<4801.03,27.5831,11487.4> distance=3.3096 deadline=102988 +13:02:24.809 SCRIPT : ERR SMOKE PASS: aircraft-translate pre-takeoff translation target remains the original qualified home +13:02:26.320 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.02124 drift=3.20123 speed=0.0463466 contact=0 engine=1 fuelUsed=1.99951 reason= +13:02:28.350 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.01009 drift=2.77177 speed=0.284711 contact=0 engine=1 fuelUsed=2.08838 reason= +13:02:30.372 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=7.99794 drift=2.27049 speed=0.237843 contact=0 engine=1 fuelUsed=2.17725 reason= +13:02:32.390 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=7.99174 drift=2.07979 speed=0.241598 contact=0 engine=1 fuelUsed=2.26611 reason= +13:02:34.411 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00114 drift=1.78678 speed=0.250334 contact=0 engine=1 fuelUsed=2.35498 reason= +13:02:36.435 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00069 drift=1.55791 speed=0.205832 contact=0 engine=1 fuelUsed=2.44385 reason= +13:02:38.470 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00175 drift=1.35022 speed=0.179895 contact=0 engine=1 fuelUsed=2.53271 reason= +13:02:40.491 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00118 drift=1.16783 speed=0.157988 contact=0 engine=1 fuelUsed=2.62158 reason= +13:02:42.530 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00087 drift=1.0115 speed=0.134863 contact=0 engine=1 fuelUsed=2.71045 reason= +13:02:44.540 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00059 drift=0.882599 speed=0.116511 contact=0 engine=1 fuelUsed=2.79932 reason= +13:02:46.561 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00042 drift=0.771765 speed=0.0990723 contact=0 engine=1 fuelUsed=2.88818 reason= +13:02:48.583 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.0008 drift=0.658812 speed=0.0923792 contact=0 engine=1 fuelUsed=2.97705 reason= +13:02:50.606 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00046 drift=0.56974 speed=0.0798025 contact=0 engine=1 fuelUsed=3.06592 reason= +13:02:52.133 SCRIPT : ERR AIRCRAFT TRANSLATION HELD: token=771001 targetError=0.531544 displacement=2.77808 updates=484 +13:02:52.638 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=7.78161 drift=0.493976 speed=0.539418 contact=0 engine=1 fuelUsed=3.15479 reason= +13:02:54.672 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=6.46765 drift=0.344504 speed=0.721647 contact=0 engine=1 fuelUsed=3.24365 reason= +13:02:56.715 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=4.92727 drift=0.314212 speed=0.774749 contact=0 engine=1 fuelUsed=3.33252 reason= +13:02:58.755 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=3.32855 drift=0.316674 speed=0.792122 contact=0 engine=1 fuelUsed=3.42139 reason= +13:03:00.773 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=1.72046 drift=0.317497 speed=0.797424 contact=0 engine=1 fuelUsed=3.51025 reason= +13:03:02.801 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=0.399364 drift=0.315589 speed=0.410891 contact=0 engine=1 fuelUsed=3.59912 reason= +13:03:04.820 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=0.00572586 drift=0.317623 speed=0.207074 contact=1 engine=1 fuelUsed=3.68799 reason= +13:03:06.840 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=0.00138474 drift=0.387893 speed=0.0566765 contact=1 engine=1 fuelUsed=3.77686 reason= +13:03:07.349 SCRIPT : ERR AIRCRAFT CONTROL: token=771001 state=8 reason=; physical availability remains with the allocating owner +13:03:07.349 SCRIPT : ERR AIRCRAFT FIXTURE RESULT: state=8 token=771001 engineStarts=1 controllerStarts=1 wakes=1 pilotHooks=1572 helicopterHooks=1572 reason= +13:03:07.349 SCRIPT : ERR AIRCRAFT TRANSLATION RESULT: proven=1 held=1 requested=3.3096 displacement=2.91183 targetError=0.399235 updates=484 +13:03:07.349 SCRIPT : ERR SMOKE PASS: aircraft-translate actual control order completes on original physical grounded aircraft with engine off, finite fuel use and exact pilot +13:03:07.356 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +13:03:07.357 SCRIPT : ERR SMOKE PASS: actual aircraft controller completed before explicit fixture reset +13:03:07.357 SCRIPT : ERR SMOKE COMPLETE: actual aircraft controller immutable target translation, observed target hold and contact landing; bounded mechanism, not route support or HQ dispatch +13:03:07.461 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +13:03:07.464 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:03:07.464 SCRIPT (W): Slot_Chat Has no Content! +13:03:07.464 SCRIPT (W): Slot_VON Has no Content! +13:03:07.464 SCRIPT (W): Slot_GameVersion Has no Content! +13:03:07.464 SCRIPT (W): Slot_Notifications Has no Content! +13:03:09.541 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:03:09.542 SCRIPT : -- Stack trace -- +13:03:09.542 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:03:09.542 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:03:09.542 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +13:03:09.542 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:03:09.542 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:03:09.542 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:03:09.542 SCRIPT : ----------------- +13:03:09.543 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:03:09.543 SCRIPT : -- Stack trace -- +13:03:09.543 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:03:09.543 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:03:09.543 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +13:03:09.543 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:03:09.543 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:03:09.543 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:03:09.543 SCRIPT : ----------------- +13:03:09.545 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:03:09.545 SCRIPT (W): Slot_Chat Has no Content! +13:03:09.545 SCRIPT (W): Slot_VON Has no Content! +13:03:09.546 SCRIPT (W): Slot_GameVersion Has no Content! +13:03:09.546 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-130038-aircraft-target/error.log.txt b/docs/evidence/native-2026-09-19-130038-aircraft-target/error.log.txt new file mode 100644 index 0000000..8e0cd43 --- /dev/null +++ b/docs/evidence/native-2026-09-19-130038-aircraft-target/error.log.txt @@ -0,0 +1,121 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-00-38\error.log started at 2026-09-19 13:00:40 (2026-09-19 11:00:40 UTC) + +13:00:40.394 INIT : Workbench startup +13:00:40.394 INIT : Workbench Init Engine +13:00:40.394 RESOURCES : ResourceDB: full scan +13:00:40.394 RESOURCES : processing files... +13:00:40.394 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +13:00:40.394 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +13:00:40.394 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +13:00:45.368 INIT : Workbench Create Game +13:00:45.368 SCRIPT : Compiling Game scripts +13:00:45.368 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:00:45.368 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:00:45.577 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:00:45.695 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:00:45.726 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:00:45.831 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:00:45.831 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:00:45.831 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:00:45.831 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:00:45.865 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:00:45.928 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:00:45.928 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:00:45.929 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:00:45.969 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:00:45.969 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:00:45.970 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:00:45.970 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:00:45.995 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:00:46.030 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:00:55.193 WORLD : CreateEntities +13:00:55.194 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" +13:00:55.194 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:00:55.194 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:01:11.495 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +13:01:16.245 WORLD : Game::LoadEntities +13:01:16.245 WORLD : CreateEntities +13:01:16.245 WORLD : CreateEntities +13:01:16.245 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" +13:01:16.245 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:01:16.245 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:01:17.728 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +13:01:17.728 ENTITY : CreateComponent 'Hierarchy' +13:01:17.728 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +13:01:17.728 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +13:01:17.728 ENTITY : CreateComponent 'Hierarchy' +13:01:17.728 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +13:01:17.728 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +13:01:17.728 ENTITY : CreateComponent 'Hierarchy' +13:01:17.728 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +13:01:17.733 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +13:01:17.733 ENTITY : CreateComponent 'Hierarchy' +13:01:17.733 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +13:01:17.733 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +13:01:17.733 ENTITY : CreateComponent 'Hierarchy' +13:01:17.733 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +13:01:17.733 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +13:01:17.733 ENTITY : CreateComponent 'Hierarchy' +13:01:17.733 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +13:01:17.738 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +13:01:17.738 ENTITY : CreateComponent 'Hierarchy' +13:01:17.738 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +13:01:17.738 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +13:01:17.738 ENTITY : CreateComponent 'Hierarchy' +13:01:17.738 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +13:01:17.738 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +13:01:17.738 ENTITY : CreateComponent 'Hierarchy' +13:01:17.738 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +13:01:25.161 WORLD : InitEntities 'world' +13:01:25.161 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:01:25.161 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:01:25.689 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:01:25.690 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +13:01:25.690 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:01:25.690 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:01:25.690 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:01:25.693 SCRIPT (W): Can't open config file "" +13:01:25.699 WORLD : InitEntities 'world' +13:01:25.700 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:01:25.700 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +13:01:25.700 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:01:25.700 SCRIPT (W): Slot_Chat Has no Content! +13:01:25.700 SCRIPT (W): Slot_VON Has no Content! +13:01:25.701 SCRIPT (W): Slot_AvailableActions Has no Content! +13:01:25.701 SCRIPT (W): Slot_Vehicle Has no Content! +13:01:25.701 SCRIPT (W): Slot_GameVersion Has no Content! +13:01:25.701 SCRIPT (W): Slot_Notifications Has no Content! +13:01:25.701 SCRIPT (W): Slot_Hints Has no Content! +13:01:25.714 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:01:25.714 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +13:01:25.714 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:01:25.714 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:01:25.715 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:01:25.717 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +13:01:25.973 WORLD : UpdateEntities +13:01:25.973 WORLD : PostFrame +13:01:25.973 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +13:01:25.974 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:01:26.022 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:01:26.022 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:01:26.022 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +13:01:26.023 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +13:01:28.462 WORLD : UpdateEntities +13:01:28.462 WORLD : AfterPostSimulate +13:01:28.463 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +13:01:56.207 WORLD : UpdateEntities +13:01:56.208 WORLD : AfterPostSimulate +13:01:56.208 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +13:03:07.464 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:03:07.464 SCRIPT (W): Slot_Chat Has no Content! +13:03:07.464 SCRIPT (W): Slot_VON Has no Content! +13:03:07.464 SCRIPT (W): Slot_GameVersion Has no Content! +13:03:07.464 SCRIPT (W): Slot_Notifications Has no Content! +13:03:09.541 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:03:09.543 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:03:09.545 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:03:09.545 SCRIPT (W): Slot_Chat Has no Content! +13:03:09.545 SCRIPT (W): Slot_VON Has no Content! +13:03:09.546 SCRIPT (W): Slot_GameVersion Has no Content! +13:03:09.546 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-130038-aircraft-target/headless-launch.log.txt b/docs/evidence/native-2026-09-19-130038-aircraft-target/headless-launch.log.txt new file mode 100644 index 0000000..5b0dc68 --- /dev/null +++ b/docs/evidence/native-2026-09-19-130038-aircraft-target/headless-launch.log.txt @@ -0,0 +1,150 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 122 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 1 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerWorkbenchSteamDiag.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a001a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a001a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a001a4 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a0039a +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a0039a +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a0039a + wayland surface res id: 10 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x5555743942b0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555743942b0 +[Gamescope WSI] Destroyed swapchain: 0x5555743942b0 +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x5555743221f0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555743221f0 +[Gamescope WSI] Destroyed swapchain: 0x5555743221f0 +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x5555743221c0 - imageCount: 4 +[gamescope] [Error] xwm: X11 I/O error! This is fatal. Aborting... diff --git a/docs/evidence/native-2026-09-19-130038-aircraft-target/launch-source-sha256.json b/docs/evidence/native-2026-09-19-130038-aircraft-target/launch-source-sha256.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/native-2026-09-19-130038-aircraft-target/launch-source-sha256.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/native-2026-09-19-130038-aircraft-target/launch-source.json b/docs/evidence/native-2026-09-19-130038-aircraft-target/launch-source.json new file mode 100644 index 0000000..c543a37 --- /dev/null +++ b/docs/evidence/native-2026-09-19-130038-aircraft-target/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "ced19336-6189-466f-82df-12361bf62e66", + "captured_unix": 1789815636.9583144, + "source_root": "/home/jakub/devel/escapistsrereintroduced", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj", + "-addonsDir", + "Z:/home/jakub/devel/escapistsrereintroduced/addons", + "-profile", + "Z:/tmp/erri-workbench-profile", + "-logconsole", + "-wbModule=WorldEditor", + "-load", + "Worlds/ERR_Everon.ent", + "-plugin=ERR_ValidateWorldPlugin", + "-errPlay", + "1", + "-errSmoke", + "1", + "-errSmokeOutcome", + "aircraft-translate", + "-noThrow", + "-disableCrashReporter" + ], + "manifest_sha256": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5" +} diff --git a/docs/evidence/native-2026-09-19-130038-aircraft-target/report.json b/docs/evidence/native-2026-09-19-130038-aircraft-target/report.json new file mode 100644 index 0000000..5eb3e2e --- /dev/null +++ b/docs/evidence/native-2026-09-19-130038-aircraft-target/report.json @@ -0,0 +1,9 @@ +{ + "log": "docs/evidence/native-2026-09-19-130038-aircraft-target/console.log.txt", + "smoke_completions": 1, + "assertions_passed": 38, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" +} diff --git a/docs/evidence/native-2026-09-19-130038-aircraft-target/rereintroduced-hq.log.txt b/docs/evidence/native-2026-09-19-130038-aircraft-target/rereintroduced-hq.log.txt new file mode 100644 index 0000000..33181ff --- /dev/null +++ b/docs/evidence/native-2026-09-19-130038-aircraft-target/rereintroduced-hq.log.txt @@ -0,0 +1,12 @@ +#1 t=6.8s M0 REGISTER group 1 [session=1789815685-1] +#2 t=6.8s M0 MORTAR DEPLOY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; authored gun and four-person crew; finite ammunition initialization pending [session=1789815685-1] +#3 t=7.7s M0 COURIER READY trip=0 state=1 delivered=0; 12 distinct original HE shells physically confirmed in existing western cache [session=1789815685-1] +#4 t=8.8s M0 REGISTER group 2 [session=1789815685-1] +#5 t=8.8s M0 REGISTER group 3 [session=1789815685-1] +#6 t=8.8s M0 REGISTER group 4 [session=1789815685-1] +#7 t=8.8s M0 REGISTER group 5 [session=1789815685-1] +#8 t=8.8s M0 REGISTER group 6 [session=1789815685-1] +#9 t=8.8s M0 REGISTER group 7 [session=1789815685-1] +#10 t=17.8s M0 MORTAR CREW READY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; four original physical members, one manpack, 27 confirmed HE; new shell requests=27; allocation permanently closed [session=1789815685-1] +#11 t=101s M0 AIRCRAFT CONTROL token=771001 state=8 reason=; physical availability remains with the allocating owner [session=1789815685-1] +#12 t=101s M0 STOP HQ stopped; tactical orders released [session=1789815685-1] diff --git a/docs/evidence/native-2026-09-19-130038-aircraft-target/runner.json.txt b/docs/evidence/native-2026-09-19-130038-aircraft-target/runner.json.txt new file mode 100644 index 0000000..5fa531e --- /dev/null +++ b/docs/evidence/native-2026-09-19-130038-aircraft-target/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789815794.4199593, + "console_sha256": "69d47719d5aca1bd4fba516a4ab76157ca32ef7a18f36c1583026f15c683845a", + "end_source_sha256": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "ced19336-6189-466f-82df-12361bf62e66", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "started_unix": 1789815636.9583874, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_13-00-38", + "rounds_required": 1, + "project": "chat", + "display": "headless Gamescope 1280x720/30Hz", + "dedicated_server": false, + "audio": "silent sink and per-test-stream mute" +} diff --git a/docs/evidence/native-2026-09-19-130038-aircraft-target/script.log.txt b/docs/evidence/native-2026-09-19-130038-aircraft-target/script.log.txt new file mode 100644 index 0000000..0289277 --- /dev/null +++ b/docs/evidence/native-2026-09-19-130038-aircraft-target/script.log.txt @@ -0,0 +1,352 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-00-38\script.log started at 2026-09-19 13:00:41 (2026-09-19 11:00:41 UTC) + +13:00:41.645 SCRIPT : SCRIPT : Initializing scripts +13:00:41.645 SCRIPT : SCRIPT : ScriptProjectManager init +13:00:43.943 SCRIPT : SCRIPT : Compiling GameLib scripts +13:00:44.013 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:00:44.013 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:00:44.014 SCRIPT : SCRIPT : Compiling Game scripts +13:00:45.368 SCRIPT : Compiling Game scripts +13:00:45.368 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:00:45.368 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:00:45.577 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:00:45.695 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:00:45.726 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:00:45.831 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:00:45.831 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:00:45.831 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:00:45.831 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:00:45.865 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:00:45.928 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:00:45.928 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:00:45.929 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:00:45.969 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:00:45.969 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:00:45.970 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:00:45.970 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:00:45.995 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:00:46.030 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:00:46.306 SCRIPT : Module: WorkbenchGame; loaded 172x files; 617x classes; used 2482K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: e963af0e +13:00:46.313 SCRIPT : Module: Game; loaded 5780x files; 11382x classes; used 33615K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 6264db09 +13:00:47.259 SCRIPT : Unable to register a script command due keyword duplicity: ban +13:00:47.259 SCRIPT : Unable to register a script command due keyword duplicity: kick +13:01:08.189 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +13:01:08.189 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +13:01:08.189 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +13:01:08.189 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +13:01:08.189 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +13:01:08.189 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +13:01:08.190 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +13:01:08.190 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +13:01:08.190 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +13:01:08.190 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +13:01:08.190 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +13:01:08.190 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +13:01:08.191 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +13:01:08.191 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +13:01:08.191 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +13:01:08.191 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +13:01:08.191 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +13:01:08.192 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +13:01:08.192 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +13:01:08.192 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +13:01:08.192 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +13:01:08.192 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +13:01:08.192 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +13:01:08.193 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +13:01:08.193 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +13:01:08.193 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +13:01:08.220 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +13:01:11.492 SCRIPT : Unable to register a script command due keyword duplicity: ban +13:01:11.493 SCRIPT : Unable to register a script command due keyword duplicity: kick +13:01:25.161 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:01:25.191 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +13:01:25.690 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:01:25.690 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:01:25.693 SCRIPT (W): Can't open config file "" +13:01:25.700 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:01:25.700 SCRIPT (W): Slot_Chat Has no Content! +13:01:25.700 SCRIPT (W): Slot_VON Has no Content! +13:01:25.701 SCRIPT (W): Slot_AvailableActions Has no Content! +13:01:25.701 SCRIPT (W): Slot_Vehicle Has no Content! +13:01:25.701 SCRIPT (W): Slot_GameVersion Has no Content! +13:01:25.701 SCRIPT (W): Slot_Notifications Has no Content! +13:01:25.701 SCRIPT (W): Slot_Hints Has no Content! +13:01:25.714 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:01:25.715 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:01:25.718 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +13:01:25.772 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +13:01:25.785 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +13:01:25.974 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:01:27.508 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +13:01:27.528 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +13:01:27.529 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +13:01:27.557 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +13:01:27.560 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +13:01:27.611 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +13:01:27.612 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +13:01:27.617 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +13:01:27.664 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +13:01:27.665 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +13:01:27.667 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +13:01:27.667 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +13:01:27.670 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +13:01:27.672 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +13:01:27.672 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +13:01:27.673 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +13:01:27.673 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +13:01:27.673 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +13:01:27.673 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +13:01:27.674 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +13:01:27.674 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +13:01:27.674 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:01:27.674 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +13:01:27.674 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +13:01:27.675 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:01:27.675 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +13:01:27.675 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +13:01:27.675 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:01:27.675 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:01:27.675 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:01:27.676 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:01:27.676 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:01:27.676 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +13:01:27.676 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:01:28.517 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:01:28.517 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:01:28.517 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:01:28.517 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:01:28.767 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5329,7499.7> up=0.99568 +13:01:28.767 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.315906 angularSpeed=0.0413675 +13:01:28.767 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:01:28.768 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6128,7501.97> +13:01:28.768 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3128,7501.97> terrainY=63.3163 tireTerrainGap=-0.00356674 +13:01:28.768 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6128,7501.97> radius=0.3 bottom=<7012.07,63.3128,7501.97> fraction=0.438655 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00349426 +13:01:28.768 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.599,7497.71> +13:01:28.769 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.149,7497.71> terrainY=64.1555 tireTerrainGap=-0.00650024 +13:01:28.769 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.599,7497.71> radius=0.45 bottom=<7009.88,64.149,7497.71> fraction=0.425126 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00646973 +13:01:28.769 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2625,7497.74> +13:01:28.769 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8125,7497.74> terrainY=63.8179 tireTerrainGap=-0.00542068 +13:01:28.770 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2625,7497.74> radius=0.45 bottom=<7014.42,63.8125,7497.74> fraction=0.43 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0053978 +13:01:28.770 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:01:29.018 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:01:29.018 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:01:29.018 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +13:01:29.018 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:01:29.530 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:01:29.531 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +13:01:29.531 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:01:29.780 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5342,7499.71> up=0.994326 +13:01:29.780 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954449 angularSpeed=0.027426 +13:01:29.780 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:01:29.781 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6204,7501.98> +13:01:29.781 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3204,7501.98> terrainY=63.3146 tireTerrainGap=0.00574875 +13:01:29.781 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6204,7501.98> radius=0.3 bottom=<7012.07,63.3204,7501.98> fraction=0.481232 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00587082 +13:01:29.781 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6028,7497.71> +13:01:29.781 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1528,7497.71> terrainY=64.149 tireTerrainGap=0.00371552 +13:01:29.781 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6028,7497.71> radius=0.45 bottom=<7009.93,64.1528,7497.71> fraction=0.47138 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00370789 +13:01:29.782 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2656,7497.78> +13:01:29.782 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8156,7497.78> terrainY=63.8155 tireTerrainGap=7.24792e-05 +13:01:29.782 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2656,7497.78> radius=0.45 bottom=<7014.47,63.8156,7497.78> fraction=0.455 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=9.91821e-05 +13:01:29.782 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:01:30.030 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:01:30.030 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:01:30.031 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:01:30.031 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:01:30.280 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +13:01:30.538 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:01:30.539 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:01:30.539 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:01:30.539 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +13:01:30.788 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5333,7499.74> up=0.994103 +13:01:30.789 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0655739 angularSpeed=0.0324818 +13:01:30.789 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:01:30.789 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.615,7502.01> +13:01:30.789 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.315,7502.01> terrainY=63.3119 tireTerrainGap=0.00312042 +13:01:30.789 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.615,7502.01> radius=0.3 bottom=<7012.07,63.315,7502.01> fraction=0.468689 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00311279 +13:01:30.789 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5945,7497.71> +13:01:30.790 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1445,7497.71> terrainY=64.143 tireTerrainGap=0.00149536 +13:01:30.790 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5945,7497.71> radius=0.45 bottom=<7009.97,64.1445,7497.71> fraction=0.461279 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.0014801 +13:01:30.790 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.83> +13:01:30.790 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.83> terrainY=63.8127 tireTerrainGap=-0.00261307 +13:01:30.791 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.83> radius=0.45 bottom=<7014.51,63.8101,7497.83> fraction=0.4425 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00265121 +13:01:30.791 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:01:31.045 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:01:31.045 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:01:31.045 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:01:31.046 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +13:01:31.554 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:01:31.555 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:01:31.555 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:01:31.555 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:01:31.804 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5297,7499.75> up=0.994379 +13:01:31.804 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:01:31.805 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:01:31.805 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6126,7502.02> +13:01:31.805 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3126,7502.02> terrainY=63.3108 tireTerrainGap=0.00183105 +13:01:31.806 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6126,7502.02> radius=0.3 bottom=<7012.07,63.3126,7502.02> fraction=0.462844 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00182724 +13:01:31.806 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.594,7497.72> +13:01:31.806 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.144,7497.72> terrainY=64.1415 tireTerrainGap=0.0025177 +13:01:31.806 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.594,7497.72> radius=0.45 bottom=<7009.98,64.144,7497.72> fraction=0.466368 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00260162 +13:01:31.806 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2601,7497.84> +13:01:31.807 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00185013 +13:01:31.807 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2601,7497.84> radius=0.45 bottom=<7014.52,63.8101,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +13:01:31.807 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:01:32.059 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:01:32.059 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:01:32.059 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +13:01:32.060 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:01:32.571 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:01:32.571 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:01:32.572 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +13:01:32.572 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:01:32.825 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5297,7499.75> up=0.994379 +13:01:32.825 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:01:32.825 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:01:32.825 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6126,7502.02> +13:01:32.826 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3126,7502.02> terrainY=63.3108 tireTerrainGap=0.00183105 +13:01:32.826 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6126,7502.02> radius=0.3 bottom=<7012.07,63.3126,7502.02> fraction=0.462844 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00182724 +13:01:32.826 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.594,7497.72> +13:01:32.826 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.144,7497.72> terrainY=64.1415 tireTerrainGap=0.0025177 +13:01:32.827 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.594,7497.72> radius=0.45 bottom=<7009.98,64.144,7497.72> fraction=0.466368 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00260162 +13:01:32.827 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2601,7497.84> +13:01:32.827 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00185013 +13:01:32.827 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2601,7497.84> radius=0.45 bottom=<7014.52,63.8101,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +13:01:32.827 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:01:33.077 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:01:33.078 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +13:01:33.092 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +13:01:33.093 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +13:01:33.093 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +13:01:33.093 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +13:01:33.093 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +13:01:33.093 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +13:01:33.094 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +13:01:34.054 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +13:01:34.108 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +13:01:34.295 SCRIPT : ERR SMOKE PASS: new identity may enter prison +13:01:34.295 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +13:01:34.295 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +13:01:34.296 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +13:01:34.296 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +13:01:34.296 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +13:01:34.296 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +13:01:34.296 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +13:01:34.296 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +13:01:34.297 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +13:01:34.297 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +13:01:34.297 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +13:01:34.297 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +13:01:34.297 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +13:01:34.298 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +13:01:34.298 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +13:01:34.307 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +13:01:34.307 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +13:01:34.308 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +13:01:34.308 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +13:01:34.312 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +13:01:34.312 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +13:01:34.312 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +13:01:34.312 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +13:01:34.313 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +13:01:34.313 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +13:01:34.313 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +13:01:34.313 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +13:01:34.794 SCRIPT : ERR AIRCRAFT FIXTURE PAD: candidate=<4800.95,27.8202,11487.4> tested=213 terrainDelta=0.4625; no fallback +13:01:34.794 SCRIPT : ERR SMOKE PASS: aircraft-translate independent qualified candidate found before one finite allocation +13:01:34.802 SCRIPT : ERR SMOKE PASS: aircraft-translate one finite native Mi8 and memberless enemy group created +13:01:35.297 SCRIPT : ERR SMOKE PASS: aircraft-translate one original native pilot request only +13:01:35.311 SCRIPT : ERR SMOKE PASS: aircraft-translate pilot seated by native mechanism in original group +13:01:35.801 SCRIPT : ERR AIRCRAFT FIXTURE: step=2 state=-1 height=0 drift=0 speed=0 contact=0 engine=0 fuelUsed=-1938.75 reason= +13:01:37.826 SCRIPT : ERR AIRCRAFT FIXTURE: step=2 state=-1 height=-0.246445 drift=0.0566743 speed=0.204606 contact=1 engine=0 fuelUsed=-1938.75 reason= +13:01:38.329 SCRIPT : ERR SMOKE PASS: aircraft-translate post-spawn qualification precedes native engine start +13:01:38.329 SCRIPT : ERR AIRCRAFT FOOTPRINT ROTOR: index=1 pivot=<4800.59,31.4016,11473.5> damageRadius=2.3 thickness=0.75 scale=1.73205 sphereBound=19.779 +13:01:38.330 SCRIPT : ERR AIRCRAFT FOOTPRINT ROTOR: index=0 pivot=<4801.17,31.7262,11486.3> damageRadius=12 thickness=1.5 scale=1.73205 sphereBound=27.6822 +13:01:38.330 SCRIPT : ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=0 localPivot=<0.0081524,4.18279,-0.790322> radius=10.645 sphereBound=14.9018 +13:01:38.330 SCRIPT : ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=1 localPivot=<-0.524318,4.96713,-13.6158> radius=1.955 sphereBound=16.458 +13:01:38.330 SCRIPT : ERR AIRCRAFT FOOTPRINT: entities=110 meshes=93 zones=74 modelSphere=20.7041 damageSphere=27.6822 simulationSphere=16.458 completeSphere=27.6822 initialDrift=0 initialHeight=-0.234812 +13:01:38.331 SCRIPT : ERR SMOKE PASS: aircraft-translate actual post-spawn column and complete rotor/model footprint issue exact qualification +13:01:38.331 SCRIPT : ERR AIRCRAFT CONTROL: token=771001 bound qualified finite aircraft; no HQ dispatch installed +13:01:38.331 SCRIPT : ERR SMOKE PASS: aircraft-translate actual controller accepts one qualified original pilot/aircraft order +13:01:39.852 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00756073 drift=0.0638436 speed=0 contact=1 engine=0 fuelUsed=0 reason= +13:01:41.887 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00439072 drift=0.106606 speed=0.0427796 contact=1 engine=1 fuelUsed=0.0444336 reason= +13:01:43.897 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00139427 drift=0.197841 speed=0.0450264 contact=1 engine=1 fuelUsed=0.133301 reason= +13:01:45.919 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.0017128 drift=0.288634 speed=0.0445778 contact=1 engine=1 fuelUsed=0.222168 reason= +13:01:47.941 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.0049572 drift=0.381393 speed=0.0453459 contact=1 engine=1 fuelUsed=0.311035 reason= +13:01:49.962 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00772476 drift=0.476123 speed=0.0451974 contact=1 engine=1 fuelUsed=0.399902 reason= +13:01:51.979 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=-0.00504494 drift=0.566447 speed=0.0404979 contact=1 engine=1 fuelUsed=0.48877 reason= +13:01:53.996 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.00552177 drift=0.627991 speed=0.0347518 contact=1 engine=1 fuelUsed=0.577637 reason= +13:01:56.027 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0145855 drift=0.693916 speed=0.0282516 contact=1 engine=1 fuelUsed=0.666504 reason= +13:01:58.055 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0240707 drift=0.753997 speed=0.029101 contact=1 engine=1 fuelUsed=0.755371 reason= +13:02:00.083 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0361443 drift=0.781353 speed=0.0244946 contact=1 engine=1 fuelUsed=0.844238 reason= +13:02:02.117 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0507431 drift=0.790545 speed=0.053406 contact=1 engine=1 fuelUsed=0.933105 reason= +13:02:04.136 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0663548 drift=0.819417 speed=0.029027 contact=1 engine=1 fuelUsed=1.02197 reason= +13:02:06.153 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=2 height=0.0814705 drift=0.881916 speed=0.0602577 contact=1 engine=1 fuelUsed=1.11084 reason= +13:02:08.167 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=4 height=0.0718994 drift=1.49361 speed=0.128956 contact=1 engine=1 fuelUsed=1.19971 reason= +13:02:10.190 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=-0.0375843 drift=1.57597 speed=0.0517537 contact=1 engine=1 fuelUsed=1.28857 reason= +13:02:12.212 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=0.00847054 drift=1.59212 speed=0.266351 contact=1 engine=1 fuelUsed=1.37744 reason= +13:02:14.232 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=1.74747 drift=2.56896 speed=1.3884 contact=0 engine=1 fuelUsed=1.46631 reason= +13:02:16.254 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=4.40762 drift=3.42712 speed=1.41874 contact=0 engine=1 fuelUsed=1.55518 reason= +13:02:18.269 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=6.97688 drift=3.45313 speed=0.8856 contact=0 engine=1 fuelUsed=1.64404 reason= +13:02:20.279 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=8.00281 drift=3.33404 speed=0.231835 contact=0 engine=1 fuelUsed=1.73291 reason= +13:02:22.297 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=8.16153 drift=3.30641 speed=0.00905151 contact=0 engine=1 fuelUsed=1.82178 reason= +13:02:24.308 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=5 height=8.09695 drift=3.3096 speed=0.0458402 contact=0 engine=1 fuelUsed=1.91064 reason= +13:02:24.308 SCRIPT : ERR AIRCRAFT TRANSLATION: token=771001 origin=<4802.63,35.68,11484.5> immutableTarget=<4801.03,35.5831,11487.4> home=<4801.03,27.5831,11487.4> distance=3.3096 deadline=102988 +13:02:24.809 SCRIPT : ERR SMOKE PASS: aircraft-translate pre-takeoff translation target remains the original qualified home +13:02:26.320 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.02124 drift=3.20123 speed=0.0463466 contact=0 engine=1 fuelUsed=1.99951 reason= +13:02:28.350 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.01009 drift=2.77177 speed=0.284711 contact=0 engine=1 fuelUsed=2.08838 reason= +13:02:30.372 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=7.99794 drift=2.27049 speed=0.237843 contact=0 engine=1 fuelUsed=2.17725 reason= +13:02:32.390 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=7.99174 drift=2.07979 speed=0.241598 contact=0 engine=1 fuelUsed=2.26611 reason= +13:02:34.411 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00114 drift=1.78678 speed=0.250334 contact=0 engine=1 fuelUsed=2.35498 reason= +13:02:36.435 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00069 drift=1.55791 speed=0.205832 contact=0 engine=1 fuelUsed=2.44385 reason= +13:02:38.470 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00175 drift=1.35022 speed=0.179895 contact=0 engine=1 fuelUsed=2.53271 reason= +13:02:40.491 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00118 drift=1.16783 speed=0.157988 contact=0 engine=1 fuelUsed=2.62158 reason= +13:02:42.530 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00087 drift=1.0115 speed=0.134863 contact=0 engine=1 fuelUsed=2.71045 reason= +13:02:44.540 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00059 drift=0.882599 speed=0.116511 contact=0 engine=1 fuelUsed=2.79932 reason= +13:02:46.561 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00042 drift=0.771765 speed=0.0990723 contact=0 engine=1 fuelUsed=2.88818 reason= +13:02:48.583 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.0008 drift=0.658812 speed=0.0923792 contact=0 engine=1 fuelUsed=2.97705 reason= +13:02:50.606 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=12 height=8.00046 drift=0.56974 speed=0.0798025 contact=0 engine=1 fuelUsed=3.06592 reason= +13:02:52.133 SCRIPT : ERR AIRCRAFT TRANSLATION HELD: token=771001 targetError=0.531544 displacement=2.77808 updates=484 +13:02:52.638 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=7.78161 drift=0.493976 speed=0.539418 contact=0 engine=1 fuelUsed=3.15479 reason= +13:02:54.672 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=6.46765 drift=0.344504 speed=0.721647 contact=0 engine=1 fuelUsed=3.24365 reason= +13:02:56.715 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=4.92727 drift=0.314212 speed=0.774749 contact=0 engine=1 fuelUsed=3.33252 reason= +13:02:58.755 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=3.32855 drift=0.316674 speed=0.792122 contact=0 engine=1 fuelUsed=3.42139 reason= +13:03:00.773 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=1.72046 drift=0.317497 speed=0.797424 contact=0 engine=1 fuelUsed=3.51025 reason= +13:03:02.801 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=0.399364 drift=0.315589 speed=0.410891 contact=0 engine=1 fuelUsed=3.59912 reason= +13:03:04.820 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=0.00572586 drift=0.317623 speed=0.207074 contact=1 engine=1 fuelUsed=3.68799 reason= +13:03:06.840 SCRIPT : ERR AIRCRAFT FIXTURE: step=3 state=6 height=0.00138474 drift=0.387893 speed=0.0566765 contact=1 engine=1 fuelUsed=3.77686 reason= +13:03:07.349 SCRIPT : ERR AIRCRAFT CONTROL: token=771001 state=8 reason=; physical availability remains with the allocating owner +13:03:07.349 SCRIPT : ERR AIRCRAFT FIXTURE RESULT: state=8 token=771001 engineStarts=1 controllerStarts=1 wakes=1 pilotHooks=1572 helicopterHooks=1572 reason= +13:03:07.349 SCRIPT : ERR AIRCRAFT TRANSLATION RESULT: proven=1 held=1 requested=3.3096 displacement=2.91183 targetError=0.399235 updates=484 +13:03:07.349 SCRIPT : ERR SMOKE PASS: aircraft-translate actual control order completes on original physical grounded aircraft with engine off, finite fuel use and exact pilot +13:03:07.356 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +13:03:07.357 SCRIPT : ERR SMOKE PASS: actual aircraft controller completed before explicit fixture reset +13:03:07.357 SCRIPT : ERR SMOKE COMPLETE: actual aircraft controller immutable target translation, observed target hold and contact landing; bounded mechanism, not route support or HQ dispatch +13:03:07.461 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +13:03:07.464 SCRIPT (W): Slot_Chat Has no Content! +13:03:07.464 SCRIPT (W): Slot_VON Has no Content! +13:03:07.464 SCRIPT (W): Slot_GameVersion Has no Content! +13:03:07.464 SCRIPT (W): Slot_Notifications Has no Content! +13:03:09.541 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:03:09.542 SCRIPT : -- Stack trace -- +13:03:09.542 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:03:09.542 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:03:09.542 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +13:03:09.542 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:03:09.542 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:03:09.542 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:03:09.542 SCRIPT : ----------------- +13:03:09.543 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:03:09.543 SCRIPT : -- Stack trace -- +13:03:09.543 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:03:09.543 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:03:09.543 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +13:03:09.543 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:03:09.543 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:03:09.543 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:03:09.543 SCRIPT : ----------------- +13:03:09.545 SCRIPT (W): Slot_Chat Has no Content! +13:03:09.545 SCRIPT (W): Slot_VON Has no Content! +13:03:09.546 SCRIPT (W): Slot_GameVersion Has no Content! +13:03:09.546 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-130038-aircraft-target/source-provenance.json b/docs/evidence/native-2026-09-19-130038-aircraft-target/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-130038-aircraft-target/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-130038-aircraft-target/source-sha256.json b/docs/evidence/native-2026-09-19-130038-aircraft-target/source-sha256.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/native-2026-09-19-130038-aircraft-target/source-sha256.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/native-2026-09-19-130347-core-loops/console.log.txt b/docs/evidence/native-2026-09-19-130347-core-loops/console.log.txt new file mode 100644 index 0000000..4c25d32 --- /dev/null +++ b/docs/evidence/native-2026-09-19-130347-core-loops/console.log.txt @@ -0,0 +1,1530 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-03-47\console.log started at 2026-09-19 13:03:47 (2026-09-19 11:03:47 UTC) + +13:03:47.171 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-03-47' to filesystem under name logs +13:03:47.171 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +13:03:47.171 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +13:03:47.172 PROFILING : Workbench Create Engine took: 9.974800 ms +13:03:48.211 INIT : INIT : Workbench Init Engine +13:03:48.211 ENGINE : Initializing engine, version 192142 +13:03:48.211 ENGINE : CLI Params: -gproj Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/addons -profile Z:/tmp/erri-workbench-profile -logconsole -wbModule WorldEditor -load Worlds/ERR_Everon.ent -plugin ERR_ValidateBaseWorldPlugin -errPlay 1 -errBaseSmoke 1 -errSmokeOutcome victory -noThrow -disableCrashReporter +13:03:48.221 ENGINE : Addon dirs: +13:03:48.221 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/' +13:03:48.221 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +13:03:48.221 ENGINE : dir: './addons' +13:03:48.221 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +13:03:48.221 ENGINE : Available addons: +13:03:48.221 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:03:48.221 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:03:48.221 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:03:48.221 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:03:48.221 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:03:48.221 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +13:03:48.221 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +13:03:48.221 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +13:03:48.351 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +13:03:48.354 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +13:03:48.354 ENGINE : CPU vendor : AuthenticAMD +13:03:48.354 ENGINE : CPU type : 2 +13:03:48.354 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +13:03:48.354 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +13:03:48.354 ENGINE : CPU count logical : 16 +13:03:48.354 ENGINE : CPU count physical : 8 +13:03:48.354 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +13:03:48.354 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +13:03:48.355 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +13:03:48.507 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +13:03:48.509 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +13:03:48.509 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-03-47/resourceDatabase.rdb) +13:03:48.661 RESOURCES : RESOURCES : ResourceDB: full scan +13:03:48.665 RESOURCES : RESOURCES : scanning... +13:03:48.665 RESOURCES : RESOURCES : scanning @"ERR_Core" +13:03:48.670 RESOURCES : RESOURCES : scanning @"ArmaReforger" +13:03:48.810 RESOURCES : RESOURCES : scanning @"core" +13:03:48.814 RESOURCES : RESOURCES : scanning @"profile" +13:03:48.814 RESOURCES : RESOURCES : scanning @"logs" +13:03:48.815 RESOURCES : RESOURCES : processing meta-files... +13:03:48.880 RESOURCES : RESOURCES : processing files... +13:03:48.891 INIT : Workbench startup +13:03:48.891 INIT : Workbench Init Engine +13:03:48.891 RESOURCES : ResourceDB: full scan +13:03:48.891 RESOURCES : processing files... +13:03:48.891 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +13:03:48.891 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +13:03:48.891 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +13:03:48.891 RESOURCES : RESOURCES : processing folders... +13:03:48.898 RESOURCES : RESOURCES : creating GUID-item mapping... +13:03:48.913 RESOURCES : RESOURCES : building tree... +13:03:48.970 PROFILING : ResourceDB: full scan took: 309.268300 ms +13:03:48.971 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +13:03:48.973 RESOURCES : ResourceDB: written 6865/6865 bytes +13:03:48.973 RESOURCES : ResourceDB: cache successfully saved +13:03:48.973 RESOURCES : ResourceDB: saving cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +13:03:48.974 RESOURCES : ResourceDB: written 206/206 bytes +13:03:48.974 RESOURCES : ResourceDB: cache successfully saved +13:03:48.974 RESOURCES : ResourceDB: saving cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-03-47/resourceDatabase.rdb) +13:03:48.976 RESOURCES : ResourceDB: written 162/162 bytes +13:03:48.976 RESOURCES : ResourceDB: cache successfully saved +13:03:48.976 ENGINE : GameProject load +13:03:48.976 ENGINE : Loaded addons: +13:03:48.976 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +13:03:48.976 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +13:03:48.976 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:03:48.978 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +13:03:48.978 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +13:03:48.978 ENGINE : Engine user settings config loaded +13:03:48.978 PROFILING : Settings changed took: 0.001900 ms +13:03:49.080 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +13:03:49.082 RENDER : Basic screen setup: +13:03:49.082 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +13:03:49.082 RENDER : MSAA : none +13:03:49.096 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +13:03:49.096 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +13:03:49.096 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +13:03:49.096 RENDER : * core clocks 2720 MHz, memory 1124 MHz +13:03:49.096 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +13:03:49.096 RENDER : AMD AGS correctly initialized +13:03:49.096 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +13:03:49.096 RENDER : Detected output devices: +13:03:49.096 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +13:03:49.096 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +13:03:49.096 RENDER : Concurrent frames limit 2 +13:03:49.170 RENDER : DX12 device successfully created by AMD AGS library +13:03:49.170 RENDER : * user markers not supported in this version AMD SW +13:03:49.170 RENDER : Graphics device features +13:03:49.170 RENDER : Needed: +13:03:49.170 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +13:03:49.170 RENDER : Optional: +13:03:49.170 RENDER : * Allow tearing (VSYNC) : 1 +13:03:49.170 RENDER : * 16 bits : 1 +13:03:49.170 RENDER : * Resource heap tier : 3 +13:03:49.170 RENDER : * Persistent heaps (DRED) : 1 +13:03:49.170 RENDER : * DRED 1.2 is supported by compiler +13:03:49.191 RENDER : Main RT format setup. +13:03:49.191 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +13:03:49.191 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +13:03:49.193 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +13:03:49.226 PROFILING : Settings changed took: 0.017700 ms +13:03:49.832 AUDIO : Endpoint: Speakers (PulseAudio Output) +13:03:49.832 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +13:03:49.832 AUDIO : Audio client: +13:03:49.832 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +13:03:49.836 RENDER : RENDER : Reload shaders +13:03:49.836 RENDER : Enfusion shader version 13 +13:03:49.836 INIT : INIT : ShaderListReload +13:03:49.836 PROFILING : ShaderListReload took: 0.000500 ms +13:03:49.979 AUDIO : Endpoint: Speakers (PulseAudio Output) +13:03:49.979 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +13:03:49.979 AUDIO : Audio client: +13:03:49.979 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +13:03:50.084 RENDER : Loaded 3752 newer shader binaries +13:03:50.084 PROFILING : Reload shaders took: 248.175700 ms +13:03:50.084 ENGINE : Initializing inputs. +13:03:50.099 NETWORK : Initializing networking. +13:03:50.099 NETWORK : Using new GameRplScheduler. +13:03:50.099 SCRIPT : SCRIPT : Initializing scripts +13:03:50.100 SCRIPT : SCRIPT : ScriptProjectManager init +13:03:50.980 PROFILING : ScriptProjectManager init took: 880.815800 ms +13:03:51.015 PROFILING : Initializing scripts took: 915.840500 ms +13:03:51.033 ENGINE : Enfusion engine successfully created. +13:03:51.033 PROFILING : Workbench Init Engine took: 2822.558000 ms +13:03:51.033 INIT : INIT : Workbench Create Game +13:03:51.043 GUI : Using default language (en_us) +13:03:51.043 GUI : Loading 'en_us' localization file. +13:03:51.043 INIT : INIT : Loading StringTable +13:03:51.067 PROFILING : Loading StringTable took: 23.975900 ms +13:03:51.067 SCRIPT : SCRIPT : Compiling GameLib scripts +13:03:51.132 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:03:51.132 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:03:51.133 PROFILING : Compiling GameLib scripts took: 65.670800 ms +13:03:51.133 SCRIPT : SCRIPT : Compiling Game scripts +13:03:52.279 INIT : Workbench Create Game +13:03:52.279 SCRIPT : Compiling Game scripts +13:03:52.279 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:03:52.279 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:03:52.435 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:03:52.551 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:03:52.587 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:03:52.688 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:03:52.688 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:03:52.688 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:03:52.688 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:03:52.721 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:03:52.779 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:03:52.779 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:03:52.780 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:03:52.820 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:03:52.820 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:03:52.822 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:03:52.822 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:03:52.845 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:03:52.879 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:03:53.144 SCRIPT : Module: WorkbenchGame; loaded 171x files; 616x classes; used 2478K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: db6febb9 +13:03:53.151 SCRIPT : Module: Game; loaded 5742x files; 11258x classes; used 33029K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 0945dd83 +13:03:53.191 PROFILING : Compiling Game scripts took: 2058.112700 ms +13:03:53.197 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:03:53.236 ENGINE : Game successfully created. +13:03:53.237 PROFILING : Workbench Create Game took: 2203.979500 ms +13:03:53.245 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/thumbnails +13:03:54.090 INIT : INIT : Workbench Reload Game +13:03:54.092 ENGINE : Game destroyed. +13:03:54.099 GUI : Using default language (en_us) +13:03:54.100 GUI : Loading 'en_us' localization file. +13:03:54.100 INIT : INIT : Loading StringTable +13:03:54.109 PROFILING : Loading StringTable took: 9.223300 ms +13:03:54.109 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:03:54.116 SCRIPT : Unable to register a script command due keyword duplicity: ban +13:03:54.117 SCRIPT : Unable to register a script command due keyword duplicity: kick +13:03:54.117 ENGINE : Game successfully created. +13:03:54.117 ENGINE : Game successfully initialized. +13:03:54.117 PROFILING : Workbench Reload Game took: 26.176600 ms +13:03:54.809 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +13:03:55.837 PROFILING : Entities load took: 1027.640500 ms +13:03:55.849 WORLD : WORLD : CreateEntities +13:03:55.856 WORLD : WORLD : NotifyBeforeEntitiesCreated +13:03:55.856 PROFILING : NotifyBeforeEntitiesCreated took: 0.002900 ms +13:03:55.856 WORLD : WORLD : Wait for preloading data +13:03:55.856 PROFILING : Wait for preloading data took: 0.004100 ms +13:03:55.971 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +13:03:55.971 PROFILING : PROFILING : Terrain load +13:03:57.557 PROFILING : Terrain load took: 1585.317700 ms +13:04:01.553 WORLD : CreateEntities +13:04:01.554 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" +13:04:01.554 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:04:01.554 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:04:11.418 WORLD : WORLD : NotifyBeforeEntitiesInitialized +13:04:11.418 PROFILING : NotifyBeforeEntitiesInitialized took: 0.007600 ms +13:04:11.842 WORLD : WORLD : NotifyEntitiesInitialized +13:04:11.842 TERRAIN : TERRAIN : Initializing road networks... +13:04:11.845 PROFILING : Initializing road networks... took: 2.363500 ms +13:04:11.845 PROFILING : NotifyEntitiesInitialized took: 2.804300 ms +13:04:11.845 PROFILING : CreateEntities took: 15995.813500 ms +13:04:12.032 PROFILING : * WorldEditor: LoadWorld: 17228.443500 ms +13:04:13.552 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +13:04:13.553 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +13:04:13.554 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +13:04:13.554 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +13:04:13.642 SCRIPT : ERR SITE SURVEY: supply=6150/7050 elevationRange=0.625 min=202.875 max=203.5 +13:04:13.669 BACKEND : Attempting online Game Config instead. +13:04:16.900 INIT : INIT : Workbench Reload Game +13:04:16.902 ENGINE : Game destroyed. +13:04:16.910 GUI : Using default language (en_us) +13:04:16.910 GUI : Loading 'en_us' localization file. +13:04:16.910 INIT : INIT : Loading StringTable +13:04:16.929 PROFILING : Loading StringTable took: 18.969500 ms +13:04:16.930 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:04:16.937 SCRIPT : Unable to register a script command due keyword duplicity: ban +13:04:16.937 SCRIPT : Unable to register a script command due keyword duplicity: kick +13:04:16.937 ENGINE : Game successfully created. +13:04:16.937 ENGINE : Game successfully initialized. +13:04:16.937 PROFILING : Workbench Reload Game took: 37.599800 ms +13:04:16.940 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +13:04:16.990 PLATFORM : Save data from container 'settings' have been loaded +13:04:17.080 PLATFORM : Save data from container 'sessions' have been loaded +13:04:17.081 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +13:04:17.081 ENGINE : Game user settings config loaded +13:04:17.177 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +13:04:17.184 WORLD : WORLD : Game::LoadEntities +13:04:17.184 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +13:04:17.185 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +13:04:17.185 WORLD : WORLD : CreateEntities +13:04:17.185 WORLD : WORLD : CreateEntities +13:04:17.185 WORLD : WORLD : NotifyBeforeEntitiesCreated +13:04:17.190 RESOURCES : Loaded mission headers from 7 addon(s)! +13:04:17.190 PROFILING : NotifyBeforeEntitiesCreated took: 5.269800 ms +13:04:17.190 WORLD : WORLD : Wait for preloading data +13:04:17.190 PROFILING : Wait for preloading data took: 0.000500 ms +13:04:21.869 WORLD : Game::LoadEntities +13:04:21.869 WORLD : CreateEntities +13:04:21.869 WORLD : CreateEntities +13:04:21.869 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" +13:04:21.869 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:04:21.869 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:04:23.303 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +13:04:23.303 ENTITY : CreateComponent 'Hierarchy' +13:04:23.303 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +13:04:23.303 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +13:04:23.303 ENTITY : CreateComponent 'Hierarchy' +13:04:23.303 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +13:04:23.303 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +13:04:23.303 ENTITY : CreateComponent 'Hierarchy' +13:04:23.303 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +13:04:23.308 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +13:04:23.308 ENTITY : CreateComponent 'Hierarchy' +13:04:23.308 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +13:04:23.308 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +13:04:23.308 ENTITY : CreateComponent 'Hierarchy' +13:04:23.308 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +13:04:23.308 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +13:04:23.308 ENTITY : CreateComponent 'Hierarchy' +13:04:23.308 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +13:04:23.313 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +13:04:23.313 ENTITY : CreateComponent 'Hierarchy' +13:04:23.313 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +13:04:23.313 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +13:04:23.313 ENTITY : CreateComponent 'Hierarchy' +13:04:23.313 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +13:04:23.313 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +13:04:23.313 ENTITY : CreateComponent 'Hierarchy' +13:04:23.313 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +13:04:28.266 WORLD : WORLD : NotifyBeforeEntitiesInitialized +13:04:28.266 PROFILING : NotifyBeforeEntitiesInitialized took: 0.036300 ms +13:04:30.268 WORLD : InitEntities 'world' +13:04:30.268 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:04:30.268 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:04:30.295 WORLD : InitEntities 'world' +13:04:30.295 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:04:30.295 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +13:04:30.295 WORLD : WORLD : NotifyEntitiesInitialized +13:04:30.295 TERRAIN : TERRAIN : Initializing road networks... +13:04:30.298 PROFILING : Initializing road networks... took: 2.966400 ms +13:04:30.298 DEFAULT : DEFAULT : WorldVolumesCollection +13:04:30.359 PROFILING : WorldVolumesCollection took: 60.212500 ms +13:04:30.359 INIT : INIT : SoundWorldInit +13:04:30.372 PROFILING : SoundWorldInit took: 13.609800 ms +13:04:30.372 PROFILING : NotifyEntitiesInitialized took: 77.072800 ms +13:04:30.373 PROFILING : CreateEntities took: 13187.341700 ms +13:04:30.373 PROFILING : CreateEntities took: 13187.527600 ms +13:04:30.373 WORLD : WORLD : Wait for preloading data around camera +13:04:30.373 PROFILING : Wait for preloading data around camera took: 0.001000 ms +13:04:30.373 WORLD : WORLD : EOnActivate +13:04:30.407 PROFILING : EOnActivate took: 34.002900 ms +13:04:30.408 PROFILING : Game::LoadEntities took: 13223.608800 ms +13:04:30.666 DEFAULT : Entered offline game state. +13:04:30.769 NETWORK : Player connected: connectionID=2147483646 +13:04:30.769 NETWORK : ### Connecting player: connectionID=2147483646, Name= +13:04:30.770 NETWORK : ### Creating player: PlayerId=1, Name=jakub +13:04:30.774 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:04:30.774 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +13:04:30.774 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:04:30.775 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:04:30.775 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:04:30.777 SCRIPT (W): Can't open config file "" +13:04:30.783 WORLD : InitEntities 'world' +13:04:30.783 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:04:30.783 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +13:04:30.783 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:04:30.783 SCRIPT (W): Slot_Chat Has no Content! +13:04:30.783 SCRIPT (W): Slot_VON Has no Content! +13:04:30.783 SCRIPT (W): Slot_AvailableActions Has no Content! +13:04:30.784 SCRIPT (W): Slot_Vehicle Has no Content! +13:04:30.784 SCRIPT (W): Slot_GameVersion Has no Content! +13:04:30.784 SCRIPT (W): Slot_Notifications Has no Content! +13:04:30.784 SCRIPT (W): Slot_Hints Has no Content! +13:04:30.794 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:04:30.794 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +13:04:30.794 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:04:30.795 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:04:30.795 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:04:30.799 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +13:04:30.799 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +13:04:30.800 NETWORK : Players connecting: 0 +13:04:30.800 NETWORK : Players connected: 1 / 1 +13:04:30.826 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/autosaves +13:04:30.827 PROFILING : Workbench startup took: 43714.654100 ms +13:04:30.852 WORLD : Frame start +13:04:30.852 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +13:04:30.866 WORLD : UpdateEntities +13:04:30.866 WORLD : Frame +13:04:30.866 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +13:04:31.041 WORLD : UpdateEntities +13:04:31.042 WORLD : PostFrame +13:04:31.042 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +13:04:31.042 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:04:31.088 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:04:31.088 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:04:31.088 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +13:04:31.089 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +13:04:31.220 RENDER : RENDER : ObjectsHeightMap::Build +13:04:31.220 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +13:04:31.382 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 161.305800 ms +13:04:31.390 PROFILING : ObjectsHeightMap::Build took: 169.078400 ms +13:04:32.555 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +13:04:32.573 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +13:04:32.574 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +13:04:32.601 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +13:04:32.603 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +13:04:32.653 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +13:04:32.653 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +13:04:32.658 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +13:04:32.706 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +13:04:32.706 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +13:04:32.708 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +13:04:32.709 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +13:04:32.713 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +13:04:32.715 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +13:04:32.715 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +13:04:32.716 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +13:04:32.717 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +13:04:32.717 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +13:04:32.717 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +13:04:32.717 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +13:04:32.717 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +13:04:32.718 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:04:32.718 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +13:04:32.718 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +13:04:32.718 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:04:32.718 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +13:04:32.718 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +13:04:32.718 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:04:32.719 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:04:32.719 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:04:32.719 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:04:32.719 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:04:32.719 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +13:04:32.719 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:04:33.473 WORLD : UpdateEntities +13:04:33.473 WORLD : AfterPostSimulate +13:04:33.473 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +13:04:33.571 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:04:33.572 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:04:33.572 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:04:33.572 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:04:33.825 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.522,7499.7> up=0.995641 +13:04:33.825 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.259243 angularSpeed=0.0359662 +13:04:33.825 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:04:33.825 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6163,7501.97> +13:04:33.826 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3163,7501.97> terrainY=63.3167 tireTerrainGap=-0.000350952 +13:04:33.826 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6163,7501.97> radius=0.3 bottom=<7012.06,63.3163,7501.97> fraction=0.453221 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.000289917 +13:04:33.826 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6051,7497.71> +13:04:33.826 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1551,7497.71> terrainY=64.1557 tireTerrainGap=-0.000610352 +13:04:33.826 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6051,7497.71> radius=0.45 bottom=<7009.88,64.1551,7497.71> fraction=0.452047 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.000549316 +13:04:33.826 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2645,7497.75> +13:04:33.827 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8145,7497.75> terrainY=63.8178 tireTerrainGap=-0.0033226 +13:04:33.827 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2645,7497.75> radius=0.45 bottom=<7014.42,63.8145,7497.75> fraction=0.439444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0033226 +13:04:33.827 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:04:34.075 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:04:34.075 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:04:34.075 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +13:04:34.075 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:04:34.368 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:04:34.368 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +13:04:34.368 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:04:34.879 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5339,7499.71> up=0.994322 +13:04:34.880 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +13:04:34.880 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:04:34.880 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6201,7501.98> +13:04:34.880 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3201,7501.98> terrainY=63.3146 tireTerrainGap=0.00542831 +13:04:34.881 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6201,7501.98> radius=0.3 bottom=<7012.07,63.3201,7501.98> fraction=0.479552 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00550079 +13:04:34.881 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6026,7497.71> +13:04:34.881 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1526,7497.71> terrainY=64.1491 tireTerrainGap=0.00353241 +13:04:34.881 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6026,7497.71> radius=0.45 bottom=<7009.93,64.1526,7497.71> fraction=0.470555 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00352478 +13:04:34.882 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2653,7497.78> +13:04:34.882 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8153,7497.78> terrainY=63.8155 tireTerrainGap=-0.000217438 +13:04:34.882 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2653,7497.78> radius=0.45 bottom=<7014.47,63.8153,7497.78> fraction=0.453611 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000205994 +13:04:34.882 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:04:34.882 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:04:34.883 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:04:34.883 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:04:34.883 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:04:35.376 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +13:04:35.376 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:04:35.376 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:04:35.377 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:04:35.377 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +13:04:35.889 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5312,7499.74> up=0.994218 +13:04:35.889 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0403679 angularSpeed=0.0725902 +13:04:35.889 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:04:35.889 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6136,7502.01> +13:04:35.889 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3136,7502.01> terrainY=63.3115 tireTerrainGap=0.00211334 +13:04:35.889 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6136,7502.01> radius=0.3 bottom=<7012.08,63.3136,7502.01> fraction=0.464107 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00210571 +13:04:35.890 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5945,7497.72> +13:04:35.890 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1445,7497.72> terrainY=64.1427 tireTerrainGap=0.00177765 +13:04:35.890 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5945,7497.72> radius=0.45 bottom=<7009.97,64.1445,7497.72> fraction=0.462703 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00180054 +13:04:35.890 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2599,7497.83> +13:04:35.890 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8099,7497.83> terrainY=63.8127 tireTerrainGap=-0.00285721 +13:04:35.890 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2599,7497.83> radius=0.45 bottom=<7014.51,63.8099,7497.83> fraction=0.441389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00289536 +13:04:35.891 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:04:35.891 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:04:35.891 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:04:35.891 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:04:35.891 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +13:04:36.402 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:04:36.402 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:04:36.402 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:04:36.403 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:04:36.905 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +13:04:36.905 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:04:36.905 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:04:36.905 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +13:04:36.905 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.0016098 +13:04:36.905 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461881 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00161362 +13:04:36.906 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +13:04:36.906 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00246429 +13:04:36.906 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +13:04:36.906 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +13:04:36.906 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.0021019 +13:04:36.907 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +13:04:36.907 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:04:36.907 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:04:36.907 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:04:36.908 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +13:04:36.908 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:04:37.411 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:04:37.412 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:04:37.412 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +13:04:37.412 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:04:37.922 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +13:04:37.922 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:04:37.922 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:04:37.922 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +13:04:37.923 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.0016098 +13:04:37.923 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461881 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00161362 +13:04:37.923 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +13:04:37.923 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00246429 +13:04:37.923 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +13:04:37.924 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +13:04:37.924 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.0021019 +13:04:37.924 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +13:04:37.924 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:04:37.924 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:04:37.925 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +13:04:37.925 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +13:04:37.926 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +13:04:37.926 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +13:04:37.927 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +13:04:37.927 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +13:04:37.927 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +13:04:37.927 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +13:04:38.080 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +13:04:38.118 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +13:04:38.310 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +13:04:38.310 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +13:04:38.310 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +13:04:38.311 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +13:04:38.311 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +13:04:38.311 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +13:04:38.311 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +13:04:38.311 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +13:04:38.311 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:04:38.311 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +13:04:38.312 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:04:38.312 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +13:04:38.312 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +13:04:38.312 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +13:04:38.312 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +13:04:38.312 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.312 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +13:04:38.313 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +13:04:38.313 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.313 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +13:04:38.313 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +13:04:38.313 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.313 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +13:04:38.313 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +13:04:38.314 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.314 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +13:04:38.314 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +13:04:38.314 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +13:04:38.314 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +13:04:38.314 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:04:38.315 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +13:04:38.315 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:04:38.315 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +13:04:38.315 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +13:04:38.315 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +13:04:38.315 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +13:04:38.315 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.316 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +13:04:38.316 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +13:04:38.316 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.316 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +13:04:38.316 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +13:04:38.316 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.316 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +13:04:38.317 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +13:04:38.317 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.317 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +13:04:38.317 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +13:04:38.317 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +13:04:38.317 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +13:04:38.317 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +13:04:38.318 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +13:04:38.318 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +13:04:38.318 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +13:04:38.318 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +13:04:38.318 SCRIPT : ERR SMOKE PASS: discovery map native local controller and marker manager available +13:04:38.338 SCRIPT : ERR SMOKE PASS: discovery map native baseline label rendered in actual hidden marker layout +13:04:38.338 SCRIPT : ERR SMOKE PASS: discovery map native data-only setter reproduces stale already-open label +13:04:38.338 SCRIPT : ERR SMOKE PASS: discovery map plain local marker exposes native delete/edit/drag eligibility +13:04:38.338 SCRIPT : ERR SMOKE PASS: discovery map local insertion retains objective identity and disables native edit/drag/delete eligibility +13:04:38.340 SCRIPT : ERR SMOKE PASS: discovery map objective first label rendered through actual native layout +13:04:38.340 SCRIPT : ERR SMOKE PASS: discovery map first clue stores only stable 500m search-square center +13:04:38.340 SCRIPT : ERR SMOKE PASS: discovery map identification moves same native marker to exact rounded coordinates +13:04:38.340 SCRIPT : ERR SMOKE PASS: discovery map identification refreshes existing native widget without recreating marker +13:04:38.340 SCRIPT : ERR SMOKE PASS: discovery map label change creates no additional marker +13:04:38.340 SCRIPT : ERR SMOKE PASS: discovery map closed widget accepts data-only update safely +13:04:38.342 SCRIPT : ERR SMOKE PASS: discovery map new native widget renders latest saved label +13:04:38.342 SCRIPT : ERR SMOKE PASS: discovery map native culling retains objective only in disabled list +13:04:38.342 SCRIPT : ERR SMOKE PASS: discovery map deleting culled objective removes both memberships and its widget +13:04:38.342 SCRIPT : ERR SMOKE PASS: discovery map duplicate owned cleanup cannot reactivate objective +13:04:38.342 SCRIPT : ERR SMOKE PASS: discovery map owned probe widgets and markers removed; mission markers preserved +13:04:38.343 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:04:38.345 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:04:38.345 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:04:38.346 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:04:38.346 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:04:38.346 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:04:38.346 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:04:38.347 SCRIPT : ERR SMOKE PASS: objective UI rebinding keeps one subscription to each native task event +13:04:38.347 SCRIPT : ERR SMOKE PASS: objective UI closing native widget uses production detach and releases its task +13:04:38.347 SCRIPT : ERR SMOKE PASS: objective UI closed native widget receives no task callbacks +13:04:38.810 SCRIPT : ERR SMOKE PASS: objective UI closed native widget has no delayed overflow callbacks +13:04:38.810 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:04:38.812 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:04:38.812 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:04:38.813 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:04:38.813 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:04:38.813 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:04:38.813 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:04:38.813 SCRIPT : ERR SMOKE PASS: objective UI details reopen through native layout and current objective binding +13:04:39.311 SCRIPT : ERR SMOKE PASS: admin settings native Core command service and settings ready +13:04:39.311 SCRIPT : ERR SMOKE PASS: admin settings actual unauthorized command cannot mutate discovery +13:04:39.311 SCRIPT : ERR SMOKE PASS: admin settings actual Core alias dispatches without Chat +13:04:39.312 SCRIPT : ERR SMOKE PASS: admin settings actual dispatch rejects out-of-range value with guidance +13:04:39.312 SCRIPT : ERR SMOKE PASS: admin settings actual Core help describes physical document progression +13:04:39.312 SCRIPT : ERR SMOKE PASS: admin settings disposable fixture filenames are unused +13:04:39.314 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 0 +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +13:04:39.316 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +13:04:39.316 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +13:04:39.318 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 100 +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +13:04:39.320 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +13:04:39.320 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +13:04:39.322 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 15 +13:04:39.322 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +13:04:39.322 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +13:04:39.322 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +13:04:39.323 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +13:04:39.323 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +13:04:39.323 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +13:04:39.323 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +13:04:39.323 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +13:04:39.323 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +13:04:39.323 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +13:04:39.324 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: -1 +13:04:39.324 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 101 +13:04:39.325 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 1.5 +13:04:39.325 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 100junk +13:04:39.325 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 999999 +13:04:39.326 SCRIPT : ERR SMOKE PASS: admin settings help explains exact versus rough discovery and apply timing +13:04:39.326 SCRIPT : ERR SMOKE PASS: admin settings existing radio alias and response remain intact +13:04:39.326 SCRIPT : ERR SMOKE PASS: admin settings fixture removed its files and never changed actual mission settings +13:04:39.326 SCRIPT : ERR SMOKE PASS: definition authored configuration resolves +13:04:39.327 SCRIPT : ERR SMOKE PASS: definition duplicate site identity rejected +13:04:39.327 SCRIPT : ERR SMOKE PASS: definition dangling document target rejected +13:04:39.327 SCRIPT : ERR SMOKE PASS: definition non-radio document target rejected +13:04:39.327 SCRIPT : ERR SMOKE PASS: definition insufficient guaranteed radio clues rejected +13:04:39.327 SCRIPT : ERR SMOKE PASS: definition unbounded stock rejected +13:04:39.327 SCRIPT : ERR SMOKE PASS: definition unguaranteed clue route rejected +13:04:39.328 SCRIPT : ERR SMOKE PASS: definition radio sources sharing one footprint rejected +13:04:39.328 SCRIPT : ERR SMOKE PASS: definition unnamed location rejected +13:04:39.328 SCRIPT : ERR SMOKE PASS: definition radio identification beyond eight metres rejected +13:04:39.328 SCRIPT : ERR SMOKE PASS: definition close physical radio identification allowed +13:04:39.328 SCRIPT : ERR SMOKE PASS: definition escape cannot reveal the radio directly +13:04:39.328 SCRIPT : ERR SMOKE PASS: definition unbounded scenery offset rejected +13:04:39.329 SCRIPT : ERR SMOKE PASS: definition valid configuration restored after isolated mutations +13:04:39.329 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +13:04:39.329 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +13:04:39.329 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +13:04:39.329 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +13:04:39.329 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +13:04:39.329 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +13:04:39.330 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +13:04:39.330 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +13:04:39.330 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +13:04:39.330 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +13:04:39.333 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +13:04:39.333 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +13:04:39.333 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +13:04:39.334 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +13:04:39.336 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +13:04:39.336 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +13:04:39.336 SCRIPT : ERR COVER GEOMETRY: low=<6738.99,140.839,7295.42> high=<6740.98,141.655,7296.62> trace=0.377114 +13:04:39.336 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +13:04:39.337 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +13:04:39.337 SCRIPT : ERR COVER GEOMETRY: low=<6735.42,140.901,7299.02> high=<6736.62,141.718,7301.01> trace=0.377114 +13:04:39.337 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +13:04:39.337 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +13:04:39.337 SCRIPT : ERR COVER GEOMETRY: low=<6743.42,140.214,7299.02> high=<6744.62,141.03,7301.01> trace=0.377114 +13:04:39.337 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +13:04:39.337 SCRIPT : ERR SMOKE PASS: base exactly three authored outpost barriers exist +13:04:39.337 SCRIPT : ERR SMOKE PASS: mission time clock parsing includes midnight and final minute +13:04:39.338 SCRIPT : ERR SMOKE PASS: mission time malformed clock commands rejected +13:04:39.338 SCRIPT : ERR SMOKE PASS: mission time isolated fixture paths unused +13:04:39.338 SCRIPT : ERR SMOKE PASS: mission time legacy fixture created +13:04:39.339 SCRIPT : ERR SMOKE PASS: mission time existing six-key settings preserved +13:04:39.339 SCRIPT : ERR SMOKE PASS: mission time only absent time settings receive defaults +13:04:39.339 SCRIPT : ERR SMOKE PASS: mission time loading does not rewrite legacy file +13:04:39.344 SCRIPT : ERR SMOKE PASS: mission time explicit save upgrades valid legacy settings +13:04:39.344 SCRIPT : ERR SMOKE PASS: mission time new keys and old values survive reload +13:04:39.345 SCRIPT : ERR SMOKE PASS: mission time present out-of-range time cannot silently default +13:04:39.346 SCRIPT : ERR SMOKE PASS: mission time fractional clock setting rejected +13:04:39.347 SCRIPT : ERR SMOKE PASS: mission time zero multiplier rejected +13:04:39.347 SCRIPT : ERR SMOKE PASS: mission time missing legacy setting remains invalid +13:04:39.348 SCRIPT : ERR SMOKE PASS: mission time partially upgraded file defaults only missing new field +13:04:39.349 SCRIPT : ERR SMOKE PASS: mission time valid saved backup recovers invalid primary +13:04:39.349 SCRIPT : ERR SMOKE PASS: mission time server starts world clock before prison phase +13:04:39.350 SCRIPT : ERR SMOKE PASS: mission time engine progression matches applied multiplier +13:04:39.350 SCRIPT : ERR SMOKE PASS: mission time unauthorized clock mutation rejected +13:04:39.350 SCRIPT : ERR SMOKE PASS: mission time invalid clock command preserves setting +13:04:39.358 SCRIPT : ERR SMOKE PASS: mission time authorized settings persist and test restores originals +13:04:39.358 SCRIPT : ERR SMOKE PASS: mission time saved changes and repeated start leave current clock and speed intact +13:04:39.359 SCRIPT : ERR SMOKE PASS: mission time admin sees current clock separately from next round settings +13:04:39.359 SCRIPT : ERR SMOKE PASS: base native prison objective exists +13:04:39.359 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:04:39.359 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:04:39.359 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:04:39.359 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:04:39.360 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:04:39.360 SCRIPT : ERR SMOKE PASS: base authored supply cache is a separate scavenging location +13:04:39.360 SCRIPT : ERR BASE STOCK: cache items=54 +13:04:39.360 SCRIPT : ERR SMOKE PASS: base cache holds finite physical equipment and objective documents +13:04:39.360 SCRIPT : ERR SMOKE PASS: base no companion HQ or support controller loaded +13:04:39.360 SCRIPT : ERR SMOKE PASS: base prisoner spawned in authored prison +13:04:39.361 SCRIPT : ERR SMOKE PASS: base gate, clues, radio and helicopter created by core +13:04:39.361 SCRIPT : ERR SMOKE PASS: progression identity actual local conscious prisoner is canonical and inside lock range +13:04:39.361 SCRIPT : ERR SMOKE PASS: progression identity synchronous body-mismatch fault injection rejects normal prison unlock without progression +13:04:39.361 SCRIPT : ERR SMOKE PASS: progression identity exact actor, account, connection and used-life state restored before assertions +13:04:39.361 SCRIPT : ERR IDENTITY FIXTURE LIMIT: synchronous roster Actor=null fault injection, immediately restored; no actual possession, reconnect, foreign faction or multiplayer test +13:04:39.362 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +13:04:39.363 SCRIPT : ERR SMOKE PASS: base gate action begins escape +13:04:39.366 SCRIPT : ERR SMOKE PASS: base test defence duration accepted +13:04:39.366 SCRIPT : ERR SMOKE PASS: base previous native objective completes on phase change +13:04:39.366 SCRIPT : ERR SMOKE PASS: base search objective does not expose a hidden site +13:04:39.366 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:04:39.368 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:04:39.369 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:04:39.369 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:04:39.369 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:04:39.369 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:04:39.369 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:04:39.369 SCRIPT : ERR SMOKE PASS: base both named supply routes revealed after escape +13:04:39.370 SCRIPT : ERR SMOKE PASS: base optional sites remain hidden until approached +13:04:45.411 SCRIPT : ERR SMOKE PASS: base unconscious player cannot discover optional sites +13:04:51.488 SCRIPT : ERR SMOKE PASS: base distant player cannot discover optional sites +13:04:51.489 SCRIPT : ERR SMOKE PASS: base isolated visibility obstacle created +13:04:51.489 SCRIPT : ERR VISIBILITY OBSTACLE: low=<6338.5,174.97,7403.87> high=<6341.5,178.737,7404.13> observer=<6340.4,174.694,7466.57> target=<6340,175.788,7400> +13:04:57.585 SCRIPT : ERR SMOKE PASS: base physical wall prevents nearby site discovery +13:05:03.642 SCRIPT : ERR SMOKE PASS: base conscious nearby player visually discovers named medical stash once +13:05:03.642 SCRIPT : ERR SMOKE PASS: base distant medical-site discovery does not reveal the radio +13:05:04.147 SCRIPT : ERR SMOKE PASS: base physical clue recovered +13:05:04.239 SCRIPT : ERR SMOKE PASS: progression identity real held unspent targeted document has an eligible unidentified site and canonical carrier +13:05:04.239 SCRIPT : ERR SMOKE PASS: progression identity synchronous body-mismatch fault injection neither spends the held document nor changes any discovery knowledge +13:05:04.239 SCRIPT : ERR SMOKE PASS: progression identity document rejection restores exact canonical actor and unchanged used-life identity before normal recovery +13:05:04.240 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +13:05:04.240 SCRIPT : ERR SMOKE PASS: progression identity immediately restored ordinary recovery spends the same actual document and advances its target +13:05:06.673 SCRIPT : ERR SMOKE PASS: base physical clue recovered +13:05:07.250 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +13:05:09.215 SCRIPT : ERR SMOKE PASS: base objective guidance reacts to discovered radio +13:05:09.216 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:05:09.216 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:05:09.216 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:05:09.216 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:05:09.216 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:05:09.219 SCRIPT : ERR SMOKE PASS: base discovery ticks do not repeat the location event +13:05:09.219 SCRIPT : ERR SMOKE PASS: base actual held-document rejection and restored recovery were exercised this round +13:05:09.219 SCRIPT : ERR SMOKE PASS: base documents identify radio without Intel addon +13:05:10.732 SCRIPT : ERR SMOKE PASS: radio service identified radio and real controlled prisoner available +13:05:10.732 SCRIPT : ERR SMOKE PASS: radio service controlled prisoner supports native state restoration +13:05:10.735 SCRIPT : ERR SMOKE PASS: radio service isolated thirty-second duration saved +13:05:10.741 SCRIPT : ERR SMOKE PASS: radio service second physical defender spawned +13:05:11.756 SCRIPT : ERR SMOKE PASS: radio service second physical defender settles with simulated connection membership +13:05:11.756 SCRIPT : ERR SMOKE PASS: radio service ordinary AI cannot tune even while alive and nearby +13:05:11.756 SCRIPT : ERR SMOKE PASS: radio service missing radio rejected +13:05:12.770 SCRIPT : ERR RADIO POSITION: outside tuning range after deferred teleport actor=<6506.01,159.313,7200> radio=<6500,159.756,7200> distanceXZ=6.00537 +13:05:12.770 SCRIPT : ERR SMOKE PASS: radio service tuning outside five metres rejected +13:05:13.781 SCRIPT : ERR RADIO POSITION: unconscious tuning range after deferred teleport actor=<6502.03,159.671,7200.04> radio=<6500,159.756,7200> distanceXZ=2.03218 +13:05:13.782 SCRIPT : ERR SMOKE PASS: radio service unconscious prisoner cannot tune +13:05:14.795 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.03,159.671,7200.04> +13:05:15.805 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.03,159.671,7200.04> +13:05:16.812 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.03,159.53,7200.04> +13:05:17.321 SCRIPT : ERR RADIO RECOVERY: tuning prisoner ready step=4 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.03,159.53,7200.04> +13:05:17.321 SCRIPT : ERR RADIO AUTH: active=1 phase=2 registered=1 kind=1 knowledge=2 serviceState=0 distance=2.03352 +13:05:17.321 SCRIPT : ERR RADIO AUTH: playerId=1 connected=1 usedLife=1 sameActor=1 friendly=1 canFight=1 canBegin=1 +13:05:17.322 SCRIPT : ERR SMOKE PASS: radio service registered friendly conscious prisoner remains authorized +13:05:17.322 SCRIPT : ERR SMOKE PASS: radio service unregistered defender cannot start the isolated service +13:05:17.322 SCRIPT : ERR SMOKE PASS: radio service physical defender has native faction affiliation +13:05:18.337 SCRIPT : ERR SMOKE PASS: radio service hostile controlled defender cannot tune +13:05:19.344 SCRIPT : ERR SMOKE PASS: radio service start event emitted once and duplicate start rejected +13:05:19.345 SCRIPT : ERR SMOKE PASS: radio service two conscious physical defenders share one timer +13:05:20.352 SCRIPT : ERR SMOKE PASS: radio service hostile actor cannot defend even with simulated connection membership +13:05:21.367 SCRIPT : ERR SMOKE PASS: radio service elapsed countdown does not emit redundant progress events +13:05:22.372 SCRIPT : ERR SMOKE PASS: radio service second defender preserves progress while first is unconscious +13:05:23.377 SCRIPT : ERR SMOKE PASS: radio service all unconscious defenders reset accumulated time +13:05:24.399 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.08,159.668,7200.08> +13:05:25.412 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.08,159.528,7200.08> +13:05:25.913 SCRIPT : ERR RADIO RECOVERY: first defender ready step=11 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.08,159.528,7200.08> +13:05:25.914 SCRIPT : ERR SMOKE PASS: radio service conscious recovery starts a fresh continuous interval +13:05:26.924 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.74,159.873,7199.23> +13:05:27.937 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.74,159.873,7199.23> +13:05:28.441 SCRIPT : ERR RADIO RECOVERY: second defender ready step=12 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6497.74,159.873,7199.23> +13:05:28.441 SCRIPT : ERR SMOKE PASS: radio service empty server resets despite remaining character bodies +13:05:29.444 SCRIPT : ERR RADIO POSITION: outside defence radius after deferred teleport actor=<6560.5,155.594,7199.99> radio=<6500,159.756,7200> distanceXZ=60.4951 +13:05:29.444 SCRIPT : ERR SMOKE PASS: radio service outside sixty metres excludes first defender without resetting second +13:05:30.453 SCRIPT : ERR SMOKE PASS: radio service dead defender cannot maintain transmission +13:05:31.469 SCRIPT : ERR RADIO POSITION: returned to radio after deferred teleport actor=<6502.01,159.532,7200.01> radio=<6500,159.756,7200> distanceXZ=2.00538 +13:05:31.469 SCRIPT : ERR SMOKE PASS: radio service survivor returns physically before final transmission samples +13:05:31.472 SCRIPT : ERR SMOKE PASS: radio service live duration increase saved +13:05:31.472 SCRIPT : ERR SMOKE PASS: radio service live duration increase preserves accumulated occupancy +13:05:31.474 SCRIPT : ERR SMOKE PASS: radio service live duration reduction saved +13:05:31.475 SCRIPT : ERR SMOKE PASS: radio service live duration reduction completes at exact continuous boundary +13:05:31.475 SCRIPT : ERR SMOKE PASS: radio service completed service cannot restart or emit duplicate completion after stop +13:05:31.475 SCRIPT : ERR SMOKE PASS: radio service isolated cancellation service begins +13:05:31.475 SCRIPT : ERR SMOKE PASS: radio service stop cancels progress and future starts without completing +13:05:31.475 SCRIPT : ERR SMOKE PASS: radio service isolated terminal-phase service begins +13:05:31.475 SCRIPT : ERR SMOKE PASS: radio service terminal phase event prevents later completion +13:05:31.476 SCRIPT : ERR SMOKE PASS: radio service isolated event tests leave live objective ready for normal tuning +13:05:32.475 SCRIPT : ERR RADIO RECOVERY: restored prisoner ready step=90 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6501.99,159.532,7199.98> +13:05:32.475 SCRIPT : ERR RADIO RESTORE: actual=<6501.99,159.532,7199.98> original=<6501.99,159.533,7199.98> distance=0.00109863 +13:05:32.475 SCRIPT : ERR SMOKE PASS: radio service isolated test restores live duration and physical player state after a world frame +13:05:32.475 SCRIPT : ERR SMOKE PASS: base radio feedback remains inactive before tuning +13:05:32.476 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +13:05:32.477 SCRIPT : ERR SMOKE PASS: base identified radio accepts transmission +13:05:32.477 SCRIPT : ERR SMOKE PASS: base radio feedback publishes waiting before first occupancy sample +13:05:37.527 SCRIPT : ERR SMOKE PASS: base depleted stock stays empty when preparation is queried again +13:05:37.528 SCRIPT : ERR SMOKE PASS: base native objective reports advancing radio progress +13:05:37.528 SCRIPT : ERR SMOKE PASS: base radio guide reports transmitting without querying a countdown +13:05:37.528 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:05:37.531 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:05:37.531 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:05:37.531 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:05:37.532 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:05:37.532 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:05:37.532 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:06:12.878 SCRIPT : ERR SMOKE PASS: base unconscious survivor does not trigger defeat after the full grace period +13:06:12.878 SCRIPT : ERR SMOKE PASS: base unconscious radio defender cannot advance transmission +13:06:12.878 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after unconsciousness +13:06:12.878 SCRIPT : ERR SMOKE PASS: base unconscious player retains their body and camera +13:06:18.979 SCRIPT : ERR SMOKE PASS: base regaining consciousness resumes transmission from zero +13:06:18.979 SCRIPT : ERR SMOKE PASS: base radio guide returns to transmitting after recovery +13:06:18.979 SCRIPT : ERR SMOKE PASS: base regaining consciousness does not grant another life +13:06:21.505 SCRIPT : ERR SMOKE PASS: base lost supply cache is not replaced +13:06:21.505 SCRIPT : ERR SMOKE PASS: base objective reports interruption and reset +13:06:21.505 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after leaving the area +13:06:21.505 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:06:21.506 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:06:21.506 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:06:21.506 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:06:21.506 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:06:51.819 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +13:06:54.865 SCRIPT : ERR SMOKE PASS: base radio defence reveals extraction +13:06:54.865 SCRIPT : ERR SMOKE PASS: mission time clock advancement remains enabled +13:06:54.866 SCRIPT : ERR SMOKE PASS: mission time progression sampled across at least ten engine seconds +13:06:54.866 SCRIPT : ERR SMOKE PASS: mission time native clock advances at configured rate without periodic resets +13:06:54.866 SCRIPT : ERR SMOKE PASS: base radio feedback clears after completion +13:06:54.866 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:06:54.868 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:06:54.868 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:06:54.869 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:06:54.869 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:06:54.869 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:06:54.869 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:06:54.869 SCRIPT : ERR SMOKE PASS: base player physically boards extraction helicopter +13:06:57.894 SCRIPT : ERR SMOKE PASS: base extraction requires real occupancy +13:06:58.863 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +13:06:58.863 SCRIPT : ERR SMOKE PASS: base escape and restart reached without companion services +13:06:58.863 SCRIPT : ERR SMOKE COMPLETE: core-only escape +13:06:58.960 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +13:06:58.962 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:06:58.962 SCRIPT (W): Slot_Chat Has no Content! +13:06:58.962 SCRIPT (W): Slot_VON Has no Content! +13:06:58.963 SCRIPT (W): Slot_GameVersion Has no Content! +13:06:58.963 SCRIPT (W): Slot_Notifications Has no Content! +13:07:01.002 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +13:07:01.002 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:07:01.002 SCRIPT : -- Stack trace -- +13:07:01.003 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:07:01.003 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:07:01.003 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +13:07:01.003 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:07:01.003 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:07:01.003 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:07:01.003 SCRIPT : ----------------- +13:07:01.003 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:07:01.004 SCRIPT : -- Stack trace -- +13:07:01.004 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:07:01.004 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:07:01.004 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +13:07:01.004 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:07:01.004 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:07:01.004 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:07:01.004 SCRIPT : ----------------- +13:07:01.006 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:07:01.006 SCRIPT (W): Slot_Chat Has no Content! +13:07:01.006 SCRIPT (W): Slot_VON Has no Content! +13:07:01.007 SCRIPT (W): Slot_GameVersion Has no Content! +13:07:01.007 SCRIPT (W): Slot_Notifications Has no Content! +13:07:01.009 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +13:07:28.874 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +13:07:28.875 SCRIPT (W): SCR_PlayerData:CalculateStatsChange: Specialization stats, experience or rank stats were modified prematurely. The career data for this session might be compromised +13:07:29.097 DEFAULT (W): Achievements cannot be saved. +13:07:29.097 DEFAULT (W): Achievements failed to save. Consecutive calls to Achievements API may fail. +13:07:29.395 PLATFORM : Save data from container 'settings' have been loaded +13:07:29.495 PLATFORM : Save data from container 'sessions' have been loaded +13:07:29.495 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +13:07:29.495 ENGINE : Game user settings config loaded +13:07:32.587 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +13:07:32.589 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +13:07:33.338 PROFILING : Entities load took: 748.832500 ms +13:07:33.339 WORLD : WORLD : Game::LoadEntities +13:07:33.340 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +13:07:33.341 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +13:07:33.341 WORLD : WORLD : CreateEntities +13:07:33.341 WORLD : WORLD : CreateEntities 'world' +13:07:33.341 WORLD : WORLD : NotifyBeforeEntitiesCreated +13:07:33.341 RESOURCES : Unloading all loaded mission headers from 7 addon(s)! +13:07:33.344 RESOURCES : Loaded mission headers from 7 addon(s)! +13:07:33.344 PROFILING : NotifyBeforeEntitiesCreated took: 2.933900 ms +13:07:33.344 WORLD : WORLD : Wait for preloading data +13:07:33.344 PROFILING : Wait for preloading data took: 0.000900 ms +13:07:33.344 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +13:07:33.344 PROFILING : PROFILING : Terrain load +13:07:34.500 PROFILING : Terrain load took: 1155.184800 ms +13:07:37.494 WORLD : Game::LoadEntities +13:07:37.494 WORLD : CreateEntities +13:07:37.494 WORLD : CreateEntities 'world' +13:07:37.494 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" +13:07:37.494 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:07:37.494 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:07:38.881 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +13:07:38.881 ENTITY : CreateComponent 'Hierarchy' +13:07:38.881 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +13:07:38.881 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +13:07:38.881 ENTITY : CreateComponent 'Hierarchy' +13:07:38.881 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +13:07:38.881 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +13:07:38.881 ENTITY : CreateComponent 'Hierarchy' +13:07:38.881 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +13:07:38.886 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +13:07:38.886 ENTITY : CreateComponent 'Hierarchy' +13:07:38.886 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +13:07:38.886 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +13:07:38.886 ENTITY : CreateComponent 'Hierarchy' +13:07:38.886 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +13:07:38.886 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +13:07:38.886 ENTITY : CreateComponent 'Hierarchy' +13:07:38.886 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +13:07:38.890 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +13:07:38.890 ENTITY : CreateComponent 'Hierarchy' +13:07:38.890 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +13:07:38.890 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +13:07:38.890 ENTITY : CreateComponent 'Hierarchy' +13:07:38.890 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +13:07:38.891 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +13:07:38.891 ENTITY : CreateComponent 'Hierarchy' +13:07:38.891 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +13:07:43.737 WORLD : WORLD : NotifyBeforeEntitiesInitialized +13:07:43.737 PROFILING : NotifyBeforeEntitiesInitialized took: 0.052600 ms +13:07:45.725 WORLD : InitEntities 'world' +13:07:45.725 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:07:45.725 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:07:45.726 WORLD : InitEntities 'world' +13:07:45.726 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:07:45.726 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +13:07:45.726 WORLD : WORLD : NotifyEntitiesInitialized +13:07:45.727 TERRAIN : TERRAIN : Initializing road networks... +13:07:45.729 PROFILING : Initializing road networks... took: 2.070500 ms +13:07:45.729 DEFAULT : DEFAULT : WorldVolumesCollection +13:07:45.788 PROFILING : WorldVolumesCollection took: 59.669000 ms +13:07:45.788 INIT : INIT : SoundWorldInit +13:07:45.789 PROFILING : SoundWorldInit took: 0.230800 ms +13:07:45.789 PROFILING : NotifyEntitiesInitialized took: 62.171100 ms +13:07:45.789 PROFILING : CreateEntities took: 12447.582100 ms +13:07:45.789 PROFILING : CreateEntities took: 12447.820600 ms +13:07:45.790 WORLD : WORLD : Wait for preloading data around camera +13:07:45.790 PROFILING : Wait for preloading data around camera took: 0.001300 ms +13:07:45.790 WORLD : WORLD : EOnActivate +13:07:45.817 PROFILING : EOnActivate took: 27.270600 ms +13:07:45.817 PROFILING : Game::LoadEntities took: 12477.443000 ms +13:07:45.817 PROFILING : * LoadEntities: 12477.752800 ms +13:07:46.271 DEFAULT : Entered offline game state. +13:07:46.380 NETWORK : Player connected: connectionID=2147483646 +13:07:46.380 NETWORK : ### Connecting player: connectionID=2147483646, Name= +13:07:46.380 NETWORK : ### Creating player: PlayerId=1, Name=jakub +13:07:46.382 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:07:46.382 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +13:07:46.382 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:07:46.382 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:07:46.382 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:07:46.384 SCRIPT (W): Can't open config file "" +13:07:46.384 SCRIPT (W): Cannot update game blocklist. Another request in progress. +13:07:46.384 WORLD : InitEntities 'world' +13:07:46.385 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:07:46.385 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +13:07:46.385 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:07:46.385 SCRIPT (W): Slot_Chat Has no Content! +13:07:46.385 SCRIPT (W): Slot_VON Has no Content! +13:07:46.385 SCRIPT (W): Slot_AvailableActions Has no Content! +13:07:46.385 SCRIPT (W): Slot_Vehicle Has no Content! +13:07:46.385 SCRIPT (W): Slot_GameVersion Has no Content! +13:07:46.386 SCRIPT (W): Slot_Notifications Has no Content! +13:07:46.386 SCRIPT (W): Slot_Hints Has no Content! +13:07:46.389 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:07:46.390 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +13:07:46.390 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:07:46.390 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:07:46.390 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:07:46.393 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +13:07:46.393 NETWORK : Players connecting: 0 +13:07:46.393 NETWORK : Players connected: 1 / 1 +13:07:46.411 WORLD : Frame start +13:07:46.411 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +13:07:46.423 WORLD : UpdateEntities +13:07:46.423 WORLD : Frame +13:07:46.423 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +13:07:46.540 WORLD : UpdateEntities +13:07:46.541 WORLD : PostFrame +13:07:46.541 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +13:07:46.541 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:07:46.566 RENDER : RENDER : ObjectsHeightMap::Build +13:07:46.567 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +13:07:46.745 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 178.407300 ms +13:07:46.751 PROFILING : ObjectsHeightMap::Build took: 184.184200 ms +13:07:47.946 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +13:07:47.951 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +13:07:47.951 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +13:07:47.961 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +13:07:47.962 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +13:07:47.971 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +13:07:47.971 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +13:07:47.976 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +13:07:47.986 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +13:07:47.986 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +13:07:47.988 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +13:07:47.988 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +13:07:47.991 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +13:07:47.992 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +13:07:47.992 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +13:07:47.993 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +13:07:47.993 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +13:07:47.993 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +13:07:47.994 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +13:07:47.994 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +13:07:47.994 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +13:07:47.994 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:07:47.994 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +13:07:47.995 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +13:07:47.995 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:07:47.995 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +13:07:47.995 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +13:07:47.995 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:07:47.995 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:07:47.995 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:07:47.996 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:07:47.996 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:07:47.996 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +13:07:47.996 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:07:48.700 WORLD : UpdateEntities +13:07:48.700 WORLD : AfterPostSimulate +13:07:48.700 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +13:07:48.709 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:07:48.710 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:07:48.710 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:07:48.710 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:07:48.967 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.08,63.5641,7499.7> up=0.995289 +13:07:48.967 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.370608 angularSpeed=0.148358 +13:07:48.967 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:07:48.967 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6161,7501.98> +13:07:48.967 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3161,7501.98> terrainY=63.3155 tireTerrainGap=0.00062561 +13:07:48.968 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6161,7501.98> radius=0.3 bottom=<7012.07,63.3161,7501.98> fraction=0.457399 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.000629425 +13:07:48.968 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.5917,7497.71> +13:07:48.968 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1417,7497.71> terrainY=64.1552 tireTerrainGap=-0.0135117 +13:07:48.968 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.5917,7497.71> radius=0.45 bottom=<7009.88,64.1417,7497.71> fraction=0.393158 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.013504 +13:07:48.969 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.266,7497.74> +13:07:48.969 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.816,7497.74> terrainY=63.8181 tireTerrainGap=-0.00201035 +13:07:48.969 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.266,7497.74> radius=0.45 bottom=<7014.42,63.816,7497.74> fraction=0.445278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00203705 +13:07:48.969 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:07:49.223 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:07:49.223 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:07:49.223 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +13:07:49.223 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:07:49.731 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:07:49.732 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +13:07:49.732 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:07:49.983 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.526,7499.71> up=0.994049 +13:07:49.983 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0653376 angularSpeed=0.0542322 +13:07:49.983 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:07:49.983 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6191,7501.98> +13:07:49.984 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3191,7501.98> terrainY=63.3148 tireTerrainGap=0.00429535 +13:07:49.984 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6191,7501.98> radius=0.3 bottom=<7012.07,63.3191,7501.98> fraction=0.474215 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00432587 +13:07:49.984 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.91,64.6021,7497.72> +13:07:49.984 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.91,64.1521,7497.72> terrainY=64.1504 tireTerrainGap=0.00171661 +13:07:49.984 SCRIPT : ERR GEAR SUPPORT: center=<7009.91,64.6021,7497.72> radius=0.45 bottom=<7009.91,64.1521,7497.72> fraction=0.462402 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00173187 +13:07:49.984 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2656,7497.77> +13:07:49.984 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8156,7497.77> terrainY=63.8159 tireTerrainGap=-0.000278473 +13:07:49.985 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2656,7497.77> radius=0.45 bottom=<7014.46,63.8156,7497.77> fraction=0.453333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000267029 +13:07:49.985 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:07:50.235 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +13:07:50.235 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:07:50.236 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:07:50.236 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:07:50.236 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:07:50.744 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:07:50.745 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:07:50.745 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:07:50.745 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +13:07:50.997 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5346,7499.74> up=0.993831 +13:07:50.997 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0328354 angularSpeed=0.056782 +13:07:50.998 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:07:50.998 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6146,7502.01> +13:07:50.998 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3146,7502.01> terrainY=63.3117 tireTerrainGap=0.0029068 +13:07:50.998 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6146,7502.01> radius=0.3 bottom=<7012.07,63.3146,7502.01> fraction=0.467724 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00289917 +13:07:50.998 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.5954,7497.72> +13:07:50.998 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.1454,7497.72> terrainY=64.1436 tireTerrainGap=0.00174713 +13:07:50.999 SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.5954,7497.72> radius=0.45 bottom=<7009.96,64.1454,7497.72> fraction=0.462402 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00173187 +13:07:50.999 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.2607,7497.82> +13:07:50.999 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.8106,7497.82> terrainY=63.813 tireTerrainGap=-0.00233841 +13:07:50.999 SCRIPT : ERR GEAR SUPPORT: center=<7014.5,64.2607,7497.82> radius=0.45 bottom=<7014.5,63.8106,7497.82> fraction=0.443889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00234222 +13:07:50.999 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:07:51.249 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:07:51.249 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:07:51.250 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:07:51.250 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +13:07:51.755 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:07:51.756 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:07:51.756 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:07:51.756 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:07:52.006 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.76> up=0.994222 +13:07:52.006 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:07:52.007 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:07:52.007 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6114,7502.03> +13:07:52.007 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3114,7502.03> terrainY=63.3099 tireTerrainGap=0.00146103 +13:07:52.007 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6114,7502.03> radius=0.3 bottom=<7012.08,63.3114,7502.03> fraction=0.461175 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00145721 +13:07:52.007 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5932,7497.73> +13:07:52.007 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1432,7497.73> terrainY=64.1407 tireTerrainGap=0.00254059 +13:07:52.008 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5932,7497.73> radius=0.45 bottom=<7009.98,64.1432,7497.73> fraction=0.466068 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00254059 +13:07:52.008 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2596,7497.85> +13:07:52.008 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8096,7497.85> terrainY=63.8114 tireTerrainGap=-0.00183487 +13:07:52.008 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2596,7497.85> radius=0.45 bottom=<7014.52,63.8096,7497.85> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +13:07:52.009 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:07:52.262 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:07:52.262 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:07:52.262 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +13:07:52.262 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:07:52.775 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:07:52.775 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:07:52.775 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +13:07:52.775 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:07:53.025 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.76> up=0.994222 +13:07:53.025 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:07:53.025 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:07:53.025 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6114,7502.03> +13:07:53.026 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3114,7502.03> terrainY=63.3099 tireTerrainGap=0.00146103 +13:07:53.026 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6114,7502.03> radius=0.3 bottom=<7012.08,63.3114,7502.03> fraction=0.461175 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00145721 +13:07:53.026 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5932,7497.73> +13:07:53.026 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1432,7497.73> terrainY=64.1407 tireTerrainGap=0.00254059 +13:07:53.026 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5932,7497.73> radius=0.45 bottom=<7009.98,64.1432,7497.73> fraction=0.466068 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00254059 +13:07:53.026 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2596,7497.85> +13:07:53.026 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8096,7497.85> terrainY=63.8114 tireTerrainGap=-0.00183487 +13:07:53.027 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2596,7497.85> radius=0.45 bottom=<7014.52,63.8096,7497.85> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +13:07:53.027 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:07:53.275 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:07:53.276 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +13:07:53.276 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +13:07:53.277 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +13:07:53.277 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +13:07:53.277 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +13:07:53.278 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +13:07:53.278 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +13:07:53.278 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +13:07:53.450 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +13:07:53.481 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +13:07:53.511 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +13:07:53.511 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +13:07:53.511 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +13:07:53.512 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +13:07:53.512 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +13:07:53.512 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +13:07:53.512 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +13:07:53.512 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +13:07:53.512 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:07:53.512 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +13:07:53.513 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:07:53.513 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +13:07:53.513 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +13:07:53.513 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +13:07:53.513 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +13:07:53.514 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.514 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +13:07:53.514 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +13:07:53.514 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.514 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +13:07:53.514 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +13:07:53.515 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.515 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +13:07:53.515 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +13:07:53.515 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.515 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +13:07:53.516 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +13:07:53.516 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +13:07:53.516 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +13:07:53.516 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:07:53.516 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +13:07:53.516 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:07:53.517 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +13:07:53.517 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +13:07:53.517 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +13:07:53.517 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +13:07:53.517 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.517 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +13:07:53.518 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +13:07:53.518 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.518 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +13:07:53.518 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +13:07:53.518 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.518 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +13:07:53.519 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +13:07:53.519 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.519 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +13:07:53.519 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +13:07:53.519 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +13:07:53.519 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +13:07:53.520 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +13:07:53.520 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +13:07:53.520 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +13:07:53.520 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +13:07:53.520 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +13:07:53.520 SCRIPT : ERR SMOKE PASS: discovery map native local controller and marker manager available +13:07:53.525 SCRIPT : ERR SMOKE PASS: discovery map native baseline label rendered in actual hidden marker layout +13:07:53.526 SCRIPT : ERR SMOKE PASS: discovery map native data-only setter reproduces stale already-open label +13:07:53.526 SCRIPT : ERR SMOKE PASS: discovery map plain local marker exposes native delete/edit/drag eligibility +13:07:53.526 SCRIPT : ERR SMOKE PASS: discovery map local insertion retains objective identity and disables native edit/drag/delete eligibility +13:07:53.529 SCRIPT : ERR SMOKE PASS: discovery map objective first label rendered through actual native layout +13:07:53.529 SCRIPT : ERR SMOKE PASS: discovery map first clue stores only stable 500m search-square center +13:07:53.529 SCRIPT : ERR SMOKE PASS: discovery map identification moves same native marker to exact rounded coordinates +13:07:53.530 SCRIPT : ERR SMOKE PASS: discovery map identification refreshes existing native widget without recreating marker +13:07:53.530 SCRIPT : ERR SMOKE PASS: discovery map label change creates no additional marker +13:07:53.530 SCRIPT : ERR SMOKE PASS: discovery map closed widget accepts data-only update safely +13:07:53.532 SCRIPT : ERR SMOKE PASS: discovery map new native widget renders latest saved label +13:07:53.532 SCRIPT : ERR SMOKE PASS: discovery map native culling retains objective only in disabled list +13:07:53.532 SCRIPT : ERR SMOKE PASS: discovery map deleting culled objective removes both memberships and its widget +13:07:53.532 SCRIPT : ERR SMOKE PASS: discovery map duplicate owned cleanup cannot reactivate objective +13:07:53.533 SCRIPT : ERR SMOKE PASS: discovery map owned probe widgets and markers removed; mission markers preserved +13:07:53.533 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:07:53.535 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:07:53.535 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:07:53.536 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:07:53.536 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:07:53.536 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:07:53.536 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:07:53.537 SCRIPT : ERR SMOKE PASS: objective UI rebinding keeps one subscription to each native task event +13:07:53.537 SCRIPT : ERR SMOKE PASS: objective UI closing native widget uses production detach and releases its task +13:07:53.537 SCRIPT : ERR SMOKE PASS: objective UI closed native widget receives no task callbacks +13:07:54.018 SCRIPT : ERR SMOKE PASS: objective UI closed native widget has no delayed overflow callbacks +13:07:54.018 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:07:54.021 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:07:54.021 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:07:54.021 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:07:54.022 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:07:54.022 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:07:54.022 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:07:54.022 SCRIPT : ERR SMOKE PASS: objective UI details reopen through native layout and current objective binding +13:07:54.517 SCRIPT : ERR SMOKE PASS: admin settings native Core command service and settings ready +13:07:54.517 SCRIPT : ERR SMOKE PASS: admin settings actual unauthorized command cannot mutate discovery +13:07:54.518 SCRIPT : ERR SMOKE PASS: admin settings actual Core alias dispatches without Chat +13:07:54.518 SCRIPT : ERR SMOKE PASS: admin settings actual dispatch rejects out-of-range value with guidance +13:07:54.518 SCRIPT : ERR SMOKE PASS: admin settings actual Core help describes physical document progression +13:07:54.518 SCRIPT : ERR SMOKE PASS: admin settings disposable fixture filenames are unused +13:07:54.520 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 0 +13:07:54.522 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +13:07:54.522 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +13:07:54.522 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +13:07:54.522 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +13:07:54.522 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +13:07:54.523 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +13:07:54.523 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +13:07:54.523 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +13:07:54.523 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +13:07:54.523 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +13:07:54.526 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 100 +13:07:54.527 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +13:07:54.527 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +13:07:54.527 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +13:07:54.527 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +13:07:54.527 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +13:07:54.527 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +13:07:54.527 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +13:07:54.528 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +13:07:54.528 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +13:07:54.528 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +13:07:54.530 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 15 +13:07:54.530 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +13:07:54.532 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +13:07:54.532 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: -1 +13:07:54.533 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 101 +13:07:54.533 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 1.5 +13:07:54.534 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 100junk +13:07:54.534 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 999999 +13:07:54.534 SCRIPT : ERR SMOKE PASS: admin settings help explains exact versus rough discovery and apply timing +13:07:54.534 SCRIPT : ERR SMOKE PASS: admin settings existing radio alias and response remain intact +13:07:54.535 SCRIPT : ERR SMOKE PASS: admin settings fixture removed its files and never changed actual mission settings +13:07:54.535 SCRIPT : ERR SMOKE PASS: definition authored configuration resolves +13:07:54.535 SCRIPT : ERR SMOKE PASS: definition duplicate site identity rejected +13:07:54.536 SCRIPT : ERR SMOKE PASS: definition dangling document target rejected +13:07:54.536 SCRIPT : ERR SMOKE PASS: definition non-radio document target rejected +13:07:54.536 SCRIPT : ERR SMOKE PASS: definition insufficient guaranteed radio clues rejected +13:07:54.536 SCRIPT : ERR SMOKE PASS: definition unbounded stock rejected +13:07:54.536 SCRIPT : ERR SMOKE PASS: definition unguaranteed clue route rejected +13:07:54.537 SCRIPT : ERR SMOKE PASS: definition radio sources sharing one footprint rejected +13:07:54.537 SCRIPT : ERR SMOKE PASS: definition unnamed location rejected +13:07:54.537 SCRIPT : ERR SMOKE PASS: definition radio identification beyond eight metres rejected +13:07:54.537 SCRIPT : ERR SMOKE PASS: definition close physical radio identification allowed +13:07:54.537 SCRIPT : ERR SMOKE PASS: definition escape cannot reveal the radio directly +13:07:54.538 SCRIPT : ERR SMOKE PASS: definition unbounded scenery offset rejected +13:07:54.538 SCRIPT : ERR SMOKE PASS: definition valid configuration restored after isolated mutations +13:07:54.538 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +13:07:54.538 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +13:07:54.539 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +13:07:54.539 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +13:07:54.539 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +13:07:54.539 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +13:07:54.540 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +13:07:54.540 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +13:07:54.540 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +13:07:54.541 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +13:07:54.543 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +13:07:54.543 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +13:07:54.544 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +13:07:54.544 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +13:07:54.546 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +13:07:54.547 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +13:07:54.547 SCRIPT : ERR COVER GEOMETRY: low=<6738.99,140.839,7295.42> high=<6740.98,141.655,7296.62> trace=0.377114 +13:07:54.547 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +13:07:54.547 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +13:07:54.547 SCRIPT : ERR COVER GEOMETRY: low=<6735.42,140.901,7299.02> high=<6736.62,141.718,7301.01> trace=0.377114 +13:07:54.548 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +13:07:54.548 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +13:07:54.548 SCRIPT : ERR COVER GEOMETRY: low=<6743.42,140.214,7299.02> high=<6744.62,141.03,7301.01> trace=0.377114 +13:07:54.548 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +13:07:54.548 SCRIPT : ERR SMOKE PASS: base exactly three authored outpost barriers exist +13:07:54.548 SCRIPT : ERR SMOKE PASS: mission time clock parsing includes midnight and final minute +13:07:54.548 SCRIPT : ERR SMOKE PASS: mission time malformed clock commands rejected +13:07:54.549 SCRIPT : ERR SMOKE PASS: mission time isolated fixture paths unused +13:07:54.549 SCRIPT : ERR SMOKE PASS: mission time legacy fixture created +13:07:54.550 SCRIPT : ERR SMOKE PASS: mission time existing six-key settings preserved +13:07:54.550 SCRIPT : ERR SMOKE PASS: mission time only absent time settings receive defaults +13:07:54.550 SCRIPT : ERR SMOKE PASS: mission time loading does not rewrite legacy file +13:07:54.555 SCRIPT : ERR SMOKE PASS: mission time explicit save upgrades valid legacy settings +13:07:54.555 SCRIPT : ERR SMOKE PASS: mission time new keys and old values survive reload +13:07:54.557 SCRIPT : ERR SMOKE PASS: mission time present out-of-range time cannot silently default +13:07:54.557 SCRIPT : ERR SMOKE PASS: mission time fractional clock setting rejected +13:07:54.558 SCRIPT : ERR SMOKE PASS: mission time zero multiplier rejected +13:07:54.559 SCRIPT : ERR SMOKE PASS: mission time missing legacy setting remains invalid +13:07:54.560 SCRIPT : ERR SMOKE PASS: mission time partially upgraded file defaults only missing new field +13:07:54.560 SCRIPT : ERR SMOKE PASS: mission time valid saved backup recovers invalid primary +13:07:54.561 SCRIPT : ERR SMOKE PASS: mission time server starts world clock before prison phase +13:07:54.561 SCRIPT : ERR SMOKE PASS: mission time engine progression matches applied multiplier +13:07:54.561 SCRIPT : ERR SMOKE PASS: mission time unauthorized clock mutation rejected +13:07:54.561 SCRIPT : ERR SMOKE PASS: mission time invalid clock command preserves setting +13:07:54.569 SCRIPT : ERR SMOKE PASS: mission time authorized settings persist and test restores originals +13:07:54.569 SCRIPT : ERR SMOKE PASS: mission time saved changes and repeated start leave current clock and speed intact +13:07:54.570 SCRIPT : ERR SMOKE PASS: mission time admin sees current clock separately from next round settings +13:07:54.570 SCRIPT : ERR SMOKE PASS: base native prison objective exists +13:07:54.570 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:07:54.570 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:07:54.571 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:07:54.571 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:07:54.571 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:07:54.571 SCRIPT : ERR SMOKE PASS: base authored supply cache is a separate scavenging location +13:07:54.571 SCRIPT : ERR BASE STOCK: cache items=54 +13:07:54.572 SCRIPT : ERR SMOKE PASS: base cache holds finite physical equipment and objective documents +13:07:54.572 SCRIPT : ERR SMOKE PASS: base no companion HQ or support controller loaded +13:07:54.572 SCRIPT : ERR SMOKE PASS: base prisoner spawned in authored prison +13:07:54.572 SCRIPT : ERR SMOKE PASS: base gate, clues, radio and helicopter created by core +13:07:54.572 SCRIPT : ERR SMOKE PASS: progression identity actual local conscious prisoner is canonical and inside lock range +13:07:54.573 SCRIPT : ERR SMOKE PASS: progression identity synchronous body-mismatch fault injection rejects normal prison unlock without progression +13:07:54.573 SCRIPT : ERR SMOKE PASS: progression identity exact actor, account, connection and used-life state restored before assertions +13:07:54.573 SCRIPT : ERR IDENTITY FIXTURE LIMIT: synchronous roster Actor=null fault injection, immediately restored; no actual possession, reconnect, foreign faction or multiplayer test +13:07:54.573 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +13:07:54.575 SCRIPT : ERR SMOKE PASS: base gate action begins escape +13:07:54.577 SCRIPT : ERR SMOKE PASS: base test defence duration accepted +13:07:54.578 SCRIPT : ERR SMOKE PASS: base previous native objective completes on phase change +13:07:54.578 SCRIPT : ERR SMOKE PASS: base search objective does not expose a hidden site +13:07:54.578 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:07:54.581 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:07:54.581 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:07:54.582 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:07:54.582 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:07:54.583 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:07:54.583 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:07:54.583 SCRIPT : ERR SMOKE PASS: base both named supply routes revealed after escape +13:07:54.583 SCRIPT : ERR SMOKE PASS: base optional sites remain hidden until approached +13:08:00.553 SCRIPT : ERR SMOKE PASS: base unconscious player cannot discover optional sites +13:08:06.612 SCRIPT : ERR SMOKE PASS: base distant player cannot discover optional sites +13:08:06.613 SCRIPT : ERR SMOKE PASS: base isolated visibility obstacle created +13:08:06.613 SCRIPT : ERR VISIBILITY OBSTACLE: low=<6338.5,174.97,7403.87> high=<6341.5,178.737,7404.13> observer=<6340.76,174.699,7466.69> target=<6340,175.788,7400> +13:08:12.679 SCRIPT : ERR SMOKE PASS: base physical wall prevents nearby site discovery +13:08:18.742 SCRIPT : ERR SMOKE PASS: base conscious nearby player visually discovers named medical stash once +13:08:18.742 SCRIPT : ERR SMOKE PASS: base distant medical-site discovery does not reveal the radio +13:08:19.248 SCRIPT : ERR SMOKE PASS: base physical clue recovered +13:08:19.577 SCRIPT : ERR SMOKE PASS: progression identity real held unspent targeted document has an eligible unidentified site and canonical carrier +13:08:19.577 SCRIPT : ERR SMOKE PASS: progression identity synchronous body-mismatch fault injection neither spends the held document nor changes any discovery knowledge +13:08:19.578 SCRIPT : ERR SMOKE PASS: progression identity document rejection restores exact canonical actor and unchanged used-life identity before normal recovery +13:08:19.578 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +13:08:19.578 SCRIPT : ERR SMOKE PASS: progression identity immediately restored ordinary recovery spends the same actual document and advances its target +13:08:21.812 SCRIPT : ERR SMOKE PASS: base physical clue recovered +13:08:22.589 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +13:08:24.344 SCRIPT : ERR SMOKE PASS: base objective guidance reacts to discovered radio +13:08:24.345 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:08:24.345 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:08:24.345 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:08:24.345 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:08:24.345 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:08:24.348 SCRIPT : ERR SMOKE PASS: base discovery ticks do not repeat the location event +13:08:24.348 SCRIPT : ERR SMOKE PASS: base actual held-document rejection and restored recovery were exercised this round +13:08:24.348 SCRIPT : ERR SMOKE PASS: base documents identify radio without Intel addon +13:08:25.852 SCRIPT : ERR SMOKE PASS: radio service identified radio and real controlled prisoner available +13:08:25.852 SCRIPT : ERR SMOKE PASS: radio service controlled prisoner supports native state restoration +13:08:25.856 SCRIPT : ERR SMOKE PASS: radio service isolated thirty-second duration saved +13:08:25.863 SCRIPT : ERR SMOKE PASS: radio service second physical defender spawned +13:08:26.870 SCRIPT : ERR SMOKE PASS: radio service second physical defender settles with simulated connection membership +13:08:26.870 SCRIPT : ERR SMOKE PASS: radio service ordinary AI cannot tune even while alive and nearby +13:08:26.870 SCRIPT : ERR SMOKE PASS: radio service missing radio rejected +13:08:27.876 SCRIPT : ERR RADIO POSITION: outside tuning range after deferred teleport actor=<6506.01,159.313,7200.01> radio=<6500,159.756,7200> distanceXZ=6.00586 +13:08:27.876 SCRIPT : ERR SMOKE PASS: radio service tuning outside five metres rejected +13:08:28.887 SCRIPT : ERR RADIO POSITION: unconscious tuning range after deferred teleport actor=<6502.04,159.67,7200.04> radio=<6500,159.756,7200> distanceXZ=2.03809 +13:08:28.887 SCRIPT : ERR SMOKE PASS: radio service unconscious prisoner cannot tune +13:08:29.909 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.04,159.671,7200.04> +13:08:30.926 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.04,159.671,7200.04> +13:08:31.937 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.04,159.53,7200.04> +13:08:32.445 SCRIPT : ERR RADIO RECOVERY: tuning prisoner ready step=4 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.04,159.53,7200.04> +13:08:32.445 SCRIPT : ERR RADIO AUTH: active=1 phase=2 registered=1 kind=1 knowledge=2 serviceState=0 distance=2.0376 +13:08:32.445 SCRIPT : ERR RADIO AUTH: playerId=1 connected=1 usedLife=1 sameActor=1 friendly=1 canFight=1 canBegin=1 +13:08:32.445 SCRIPT : ERR SMOKE PASS: radio service registered friendly conscious prisoner remains authorized +13:08:32.445 SCRIPT : ERR SMOKE PASS: radio service unregistered defender cannot start the isolated service +13:08:32.445 SCRIPT : ERR SMOKE PASS: radio service physical defender has native faction affiliation +13:08:33.462 SCRIPT : ERR SMOKE PASS: radio service hostile controlled defender cannot tune +13:08:34.481 SCRIPT : ERR SMOKE PASS: radio service start event emitted once and duplicate start rejected +13:08:34.481 SCRIPT : ERR SMOKE PASS: radio service two conscious physical defenders share one timer +13:08:35.498 SCRIPT : ERR SMOKE PASS: radio service hostile actor cannot defend even with simulated connection membership +13:08:36.507 SCRIPT : ERR SMOKE PASS: radio service elapsed countdown does not emit redundant progress events +13:08:37.518 SCRIPT : ERR SMOKE PASS: radio service second defender preserves progress while first is unconscious +13:08:38.531 SCRIPT : ERR SMOKE PASS: radio service all unconscious defenders reset accumulated time +13:08:39.552 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.07,159.668,7200.09> +13:08:40.553 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.07,159.528,7200.09> +13:08:41.056 SCRIPT : ERR RADIO RECOVERY: first defender ready step=11 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.07,159.528,7200.09> +13:08:41.057 SCRIPT : ERR SMOKE PASS: radio service conscious recovery starts a fresh continuous interval +13:08:42.066 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.74,159.873,7199.23> +13:08:43.076 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.74,159.873,7199.23> +13:08:43.583 SCRIPT : ERR RADIO RECOVERY: second defender ready step=12 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6497.74,159.873,7199.23> +13:08:43.583 SCRIPT : ERR SMOKE PASS: radio service empty server resets despite remaining character bodies +13:08:44.596 SCRIPT : ERR RADIO POSITION: outside defence radius after deferred teleport actor=<6560.49,155.594,7199.99> radio=<6500,159.756,7200> distanceXZ=60.4941 +13:08:44.597 SCRIPT : ERR SMOKE PASS: radio service outside sixty metres excludes first defender without resetting second +13:08:45.597 SCRIPT : ERR SMOKE PASS: radio service dead defender cannot maintain transmission +13:08:46.609 SCRIPT : ERR RADIO POSITION: returned to radio after deferred teleport actor=<6502.01,159.532,7200> radio=<6500,159.756,7200> distanceXZ=2.00538 +13:08:46.609 SCRIPT : ERR SMOKE PASS: radio service survivor returns physically before final transmission samples +13:08:46.612 SCRIPT : ERR SMOKE PASS: radio service live duration increase saved +13:08:46.612 SCRIPT : ERR SMOKE PASS: radio service live duration increase preserves accumulated occupancy +13:08:46.614 SCRIPT : ERR SMOKE PASS: radio service live duration reduction saved +13:08:46.614 SCRIPT : ERR SMOKE PASS: radio service live duration reduction completes at exact continuous boundary +13:08:46.614 SCRIPT : ERR SMOKE PASS: radio service completed service cannot restart or emit duplicate completion after stop +13:08:46.614 SCRIPT : ERR SMOKE PASS: radio service isolated cancellation service begins +13:08:46.614 SCRIPT : ERR SMOKE PASS: radio service stop cancels progress and future starts without completing +13:08:46.614 SCRIPT : ERR SMOKE PASS: radio service isolated terminal-phase service begins +13:08:46.615 SCRIPT : ERR SMOKE PASS: radio service terminal phase event prevents later completion +13:08:46.615 SCRIPT : ERR SMOKE PASS: radio service isolated event tests leave live objective ready for normal tuning +13:08:47.622 SCRIPT : ERR RADIO RECOVERY: restored prisoner ready step=90 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6501.99,159.533,7199.98> +13:08:47.622 SCRIPT : ERR RADIO RESTORE: actual=<6501.99,159.533,7199.98> original=<6501.99,159.533,7199.98> distance=0.00133198 +13:08:47.622 SCRIPT : ERR SMOKE PASS: radio service isolated test restores live duration and physical player state after a world frame +13:08:47.622 SCRIPT : ERR SMOKE PASS: base radio feedback remains inactive before tuning +13:08:47.622 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +13:08:47.623 SCRIPT : ERR SMOKE PASS: base identified radio accepts transmission +13:08:47.624 SCRIPT : ERR SMOKE PASS: base radio feedback publishes waiting before first occupancy sample +13:08:52.703 SCRIPT : ERR SMOKE PASS: base depleted stock stays empty when preparation is queried again +13:08:52.704 SCRIPT : ERR SMOKE PASS: base native objective reports advancing radio progress +13:08:52.704 SCRIPT : ERR SMOKE PASS: base radio guide reports transmitting without querying a countdown +13:08:52.704 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:08:52.707 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:08:52.707 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:08:52.707 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:08:52.708 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:08:52.708 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:08:52.708 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:09:28.035 SCRIPT : ERR SMOKE PASS: base unconscious survivor does not trigger defeat after the full grace period +13:09:28.035 SCRIPT : ERR SMOKE PASS: base unconscious radio defender cannot advance transmission +13:09:28.035 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after unconsciousness +13:09:28.035 SCRIPT : ERR SMOKE PASS: base unconscious player retains their body and camera +13:09:34.111 SCRIPT : ERR SMOKE PASS: base regaining consciousness resumes transmission from zero +13:09:34.111 SCRIPT : ERR SMOKE PASS: base radio guide returns to transmitting after recovery +13:09:34.112 SCRIPT : ERR SMOKE PASS: base regaining consciousness does not grant another life +13:09:36.623 SCRIPT : ERR SMOKE PASS: base lost supply cache is not replaced +13:09:36.624 SCRIPT : ERR SMOKE PASS: base objective reports interruption and reset +13:09:36.624 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after leaving the area +13:09:36.624 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:09:36.624 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:09:36.624 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:09:36.624 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:09:36.624 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:10:07.200 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +13:10:10.037 SCRIPT : ERR SMOKE PASS: base radio defence reveals extraction +13:10:10.037 SCRIPT : ERR SMOKE PASS: mission time clock advancement remains enabled +13:10:10.037 SCRIPT : ERR SMOKE PASS: mission time progression sampled across at least ten engine seconds +13:10:10.037 SCRIPT : ERR SMOKE PASS: mission time native clock advances at configured rate without periodic resets +13:10:10.038 SCRIPT : ERR SMOKE PASS: base radio feedback clears after completion +13:10:10.038 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:10:10.041 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:10:10.041 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:10:10.041 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:10:10.041 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:10:10.041 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:10:10.042 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:10:10.042 SCRIPT : ERR SMOKE PASS: base player physically boards extraction helicopter +13:10:13.070 SCRIPT : ERR SMOKE PASS: base extraction requires real occupancy +13:10:13.239 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +13:10:13.240 SCRIPT : ERR SMOKE PASS: base escape and restart reached without companion services +13:10:13.240 SCRIPT : ERR SMOKE COMPLETE: core-only escape +13:10:13.333 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +13:10:13.335 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:10:13.335 SCRIPT (W): Slot_Chat Has no Content! +13:10:13.335 SCRIPT (W): Slot_VON Has no Content! +13:10:13.335 SCRIPT (W): Slot_GameVersion Has no Content! +13:10:13.335 SCRIPT (W): Slot_Notifications Has no Content! +13:10:15.361 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +13:10:15.362 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:10:15.362 SCRIPT : -- Stack trace -- +13:10:15.362 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:10:15.362 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:10:15.362 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +13:10:15.362 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:10:15.362 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:10:15.363 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:10:15.363 SCRIPT : ----------------- +13:10:15.363 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:10:15.363 SCRIPT : -- Stack trace -- +13:10:15.363 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:10:15.363 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:10:15.363 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +13:10:15.363 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:10:15.364 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:10:15.364 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:10:15.364 SCRIPT : ----------------- +13:10:15.366 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:10:15.366 SCRIPT (W): Slot_Chat Has no Content! +13:10:15.366 SCRIPT (W): Slot_VON Has no Content! +13:10:15.366 SCRIPT (W): Slot_GameVersion Has no Content! +13:10:15.366 SCRIPT (W): Slot_Notifications Has no Content! +13:10:15.367 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon diff --git a/docs/evidence/native-2026-09-19-130347-core-loops/error.log.txt b/docs/evidence/native-2026-09-19-130347-core-loops/error.log.txt new file mode 100644 index 0000000..05ed42f --- /dev/null +++ b/docs/evidence/native-2026-09-19-130347-core-loops/error.log.txt @@ -0,0 +1,200 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-03-47\error.log started at 2026-09-19 13:03:48 (2026-09-19 11:03:48 UTC) + +13:03:48.891 INIT : Workbench startup +13:03:48.891 INIT : Workbench Init Engine +13:03:48.891 RESOURCES : ResourceDB: full scan +13:03:48.891 RESOURCES : processing files... +13:03:48.891 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +13:03:48.891 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +13:03:48.891 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +13:03:52.279 INIT : Workbench Create Game +13:03:52.279 SCRIPT : Compiling Game scripts +13:03:52.279 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:03:52.279 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:03:52.435 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:03:52.551 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:03:52.587 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:03:52.688 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:03:52.688 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:03:52.688 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:03:52.688 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:03:52.721 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:03:52.779 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:03:52.779 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:03:52.780 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:03:52.820 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:03:52.820 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:03:52.822 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:03:52.822 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:03:52.845 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:03:52.879 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:04:01.553 WORLD : CreateEntities +13:04:01.554 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" +13:04:01.554 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:04:01.554 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:04:16.940 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +13:04:21.869 WORLD : Game::LoadEntities +13:04:21.869 WORLD : CreateEntities +13:04:21.869 WORLD : CreateEntities +13:04:21.869 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" +13:04:21.869 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:04:21.869 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:04:23.303 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +13:04:23.303 ENTITY : CreateComponent 'Hierarchy' +13:04:23.303 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +13:04:23.303 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +13:04:23.303 ENTITY : CreateComponent 'Hierarchy' +13:04:23.303 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +13:04:23.303 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +13:04:23.303 ENTITY : CreateComponent 'Hierarchy' +13:04:23.303 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +13:04:23.308 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +13:04:23.308 ENTITY : CreateComponent 'Hierarchy' +13:04:23.308 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +13:04:23.308 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +13:04:23.308 ENTITY : CreateComponent 'Hierarchy' +13:04:23.308 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +13:04:23.308 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +13:04:23.308 ENTITY : CreateComponent 'Hierarchy' +13:04:23.308 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +13:04:23.313 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +13:04:23.313 ENTITY : CreateComponent 'Hierarchy' +13:04:23.313 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +13:04:23.313 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +13:04:23.313 ENTITY : CreateComponent 'Hierarchy' +13:04:23.313 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +13:04:23.313 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +13:04:23.313 ENTITY : CreateComponent 'Hierarchy' +13:04:23.313 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +13:04:30.268 WORLD : InitEntities 'world' +13:04:30.268 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:04:30.268 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:04:30.774 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:04:30.774 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +13:04:30.774 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:04:30.775 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:04:30.775 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:04:30.777 SCRIPT (W): Can't open config file "" +13:04:30.783 WORLD : InitEntities 'world' +13:04:30.783 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:04:30.783 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +13:04:30.783 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:04:30.783 SCRIPT (W): Slot_Chat Has no Content! +13:04:30.783 SCRIPT (W): Slot_VON Has no Content! +13:04:30.783 SCRIPT (W): Slot_AvailableActions Has no Content! +13:04:30.784 SCRIPT (W): Slot_Vehicle Has no Content! +13:04:30.784 SCRIPT (W): Slot_GameVersion Has no Content! +13:04:30.784 SCRIPT (W): Slot_Notifications Has no Content! +13:04:30.784 SCRIPT (W): Slot_Hints Has no Content! +13:04:30.794 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:04:30.794 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +13:04:30.794 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:04:30.795 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:04:30.795 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:04:30.799 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +13:04:31.041 WORLD : UpdateEntities +13:04:31.042 WORLD : PostFrame +13:04:31.042 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +13:04:31.042 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:04:31.088 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:04:31.088 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:04:31.088 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +13:04:31.088 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +13:04:33.473 WORLD : UpdateEntities +13:04:33.473 WORLD : AfterPostSimulate +13:04:33.473 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +13:06:58.962 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:06:58.962 SCRIPT (W): Slot_Chat Has no Content! +13:06:58.962 SCRIPT (W): Slot_VON Has no Content! +13:06:58.963 SCRIPT (W): Slot_GameVersion Has no Content! +13:06:58.963 SCRIPT (W): Slot_Notifications Has no Content! +13:07:01.002 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:07:01.003 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:07:01.006 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:07:01.006 SCRIPT (W): Slot_Chat Has no Content! +13:07:01.006 SCRIPT (W): Slot_VON Has no Content! +13:07:01.007 SCRIPT (W): Slot_GameVersion Has no Content! +13:07:01.007 SCRIPT (W): Slot_Notifications Has no Content! +13:07:28.874 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +13:07:28.875 SCRIPT (W): SCR_PlayerData:CalculateStatsChange: Specialization stats, experience or rank stats were modified prematurely. The career data for this session might be compromised +13:07:29.097 DEFAULT (W): Achievements cannot be saved. +13:07:29.097 DEFAULT (W): Achievements failed to save. Consecutive calls to Achievements API may fail. +13:07:37.494 WORLD : Game::LoadEntities +13:07:37.494 WORLD : CreateEntities +13:07:37.494 WORLD : CreateEntities 'world' +13:07:37.494 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" +13:07:37.494 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:07:37.494 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:07:38.880 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +13:07:38.881 ENTITY : CreateComponent 'Hierarchy' +13:07:38.881 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +13:07:38.881 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +13:07:38.881 ENTITY : CreateComponent 'Hierarchy' +13:07:38.881 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +13:07:38.881 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +13:07:38.881 ENTITY : CreateComponent 'Hierarchy' +13:07:38.881 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +13:07:38.886 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +13:07:38.886 ENTITY : CreateComponent 'Hierarchy' +13:07:38.886 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +13:07:38.886 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +13:07:38.886 ENTITY : CreateComponent 'Hierarchy' +13:07:38.886 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +13:07:38.886 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +13:07:38.886 ENTITY : CreateComponent 'Hierarchy' +13:07:38.886 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +13:07:38.890 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +13:07:38.890 ENTITY : CreateComponent 'Hierarchy' +13:07:38.890 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +13:07:38.890 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +13:07:38.890 ENTITY : CreateComponent 'Hierarchy' +13:07:38.890 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +13:07:38.891 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +13:07:38.891 ENTITY : CreateComponent 'Hierarchy' +13:07:38.891 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +13:07:45.725 WORLD : InitEntities 'world' +13:07:45.725 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:07:45.725 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:07:46.382 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:07:46.382 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +13:07:46.382 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:07:46.382 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:07:46.382 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:07:46.384 SCRIPT (W): Can't open config file "" +13:07:46.384 SCRIPT (W): Cannot update game blocklist. Another request in progress. +13:07:46.384 WORLD : InitEntities 'world' +13:07:46.385 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:07:46.385 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +13:07:46.385 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:07:46.385 SCRIPT (W): Slot_Chat Has no Content! +13:07:46.385 SCRIPT (W): Slot_VON Has no Content! +13:07:46.385 SCRIPT (W): Slot_AvailableActions Has no Content! +13:07:46.385 SCRIPT (W): Slot_Vehicle Has no Content! +13:07:46.385 SCRIPT (W): Slot_GameVersion Has no Content! +13:07:46.386 SCRIPT (W): Slot_Notifications Has no Content! +13:07:46.386 SCRIPT (W): Slot_Hints Has no Content! +13:07:46.389 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:07:46.390 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +13:07:46.390 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:07:46.390 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:07:46.390 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:07:46.540 WORLD : UpdateEntities +13:07:46.541 WORLD : PostFrame +13:07:46.541 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +13:07:46.541 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:07:48.700 WORLD : UpdateEntities +13:07:48.700 WORLD : AfterPostSimulate +13:07:48.700 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +13:10:13.335 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:10:13.335 SCRIPT (W): Slot_Chat Has no Content! +13:10:13.335 SCRIPT (W): Slot_VON Has no Content! +13:10:13.335 SCRIPT (W): Slot_GameVersion Has no Content! +13:10:13.335 SCRIPT (W): Slot_Notifications Has no Content! +13:10:15.362 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:10:15.363 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:10:15.366 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:10:15.366 SCRIPT (W): Slot_Chat Has no Content! +13:10:15.366 SCRIPT (W): Slot_VON Has no Content! +13:10:15.366 SCRIPT (W): Slot_GameVersion Has no Content! +13:10:15.366 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-130347-core-loops/headless-launch.log.txt b/docs/evidence/native-2026-09-19-130347-core-loops/headless-launch.log.txt new file mode 100644 index 0000000..8750200 --- /dev/null +++ b/docs/evidence/native-2026-09-19-130347-core-loops/headless-launch.log.txt @@ -0,0 +1,156 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 111 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 1 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerWorkbenchSteamDiag.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a001a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a001a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a001a4 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a0039a +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a0039a +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a0039a + wayland surface res id: 10 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x55555d974ea0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x55555d974ea0 +[Gamescope WSI] Destroyed swapchain: 0x55555d974ea0 +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x55555d901c60 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x55555d901c60 +[Gamescope WSI] Destroyed swapchain: 0x55555d901c60 +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x55555d8fade0 - imageCount: 4 +[Gamescope WSI] Creating swapchain for xid: 0x1a001a4 - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_R8G8B8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true +[Gamescope WSI] Created swapchain for xid: 0x1a001a4 swapchain: 0x55555e76b9a0 - imageCount: 3 +[Gamescope WSI] Destroying swapchain: 0x55555e76b9a0 +[Gamescope WSI] Destroyed swapchain: 0x55555e76b9a0 +[Gamescope WSI] Creating swapchain for xid: 0x1a001a4 - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_R8G8B8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true +[Gamescope WSI] Created swapchain for xid: 0x1a001a4 swapchain: 0x55555e76b9a0 - imageCount: 3 +[gamescope] [Error] xwm: X11 I/O error! This is fatal. Aborting... diff --git a/docs/evidence/native-2026-09-19-130347-core-loops/launch-source-sha256.json b/docs/evidence/native-2026-09-19-130347-core-loops/launch-source-sha256.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/native-2026-09-19-130347-core-loops/launch-source-sha256.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/native-2026-09-19-130347-core-loops/launch-source.json b/docs/evidence/native-2026-09-19-130347-core-loops/launch-source.json new file mode 100644 index 0000000..4ab0efe --- /dev/null +++ b/docs/evidence/native-2026-09-19-130347-core-loops/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "9bd65bce-8599-4a0a-a310-9095f91af64a", + "captured_unix": 1789815825.4010317, + "source_root": "/home/jakub/devel/escapistsrereintroduced", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj", + "-addonsDir", + "Z:/home/jakub/devel/escapistsrereintroduced/addons", + "-profile", + "Z:/tmp/erri-workbench-profile", + "-logconsole", + "-wbModule=WorldEditor", + "-load", + "Worlds/ERR_Everon.ent", + "-plugin=ERR_ValidateBaseWorldPlugin", + "-errPlay", + "1", + "-errBaseSmoke", + "1", + "-errSmokeOutcome", + "victory", + "-noThrow", + "-disableCrashReporter" + ], + "manifest_sha256": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5" +} diff --git a/docs/evidence/native-2026-09-19-130347-core-loops/report.json b/docs/evidence/native-2026-09-19-130347-core-loops/report.json new file mode 100644 index 0000000..f2d1a84 --- /dev/null +++ b/docs/evidence/native-2026-09-19-130347-core-loops/report.json @@ -0,0 +1,9 @@ +{ + "log": "docs/evidence/native-2026-09-19-130347-core-loops/console.log.txt", + "smoke_completions": 2, + "assertions_passed": 612, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" +} diff --git a/docs/evidence/native-2026-09-19-130347-core-loops/runner.json.txt b/docs/evidence/native-2026-09-19-130347-core-loops/runner.json.txt new file mode 100644 index 0000000..4773b7c --- /dev/null +++ b/docs/evidence/native-2026-09-19-130347-core-loops/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789816220.1480262, + "console_sha256": "7a9be8036e1dfc4560d5980a935016da578df9c7513f06d5e971ceb641a0597a", + "end_source_sha256": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "9bd65bce-8599-4a0a-a310-9095f91af64a", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "started_unix": 1789815825.4011004, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_13-03-47", + "rounds_required": 2, + "project": "core", + "display": "headless Gamescope 1280x720/30Hz", + "dedicated_server": false, + "audio": "silent sink and per-test-stream mute" +} diff --git a/docs/evidence/native-2026-09-19-130347-core-loops/script.log.txt b/docs/evidence/native-2026-09-19-130347-core-loops/script.log.txt new file mode 100644 index 0000000..dce50a9 --- /dev/null +++ b/docs/evidence/native-2026-09-19-130347-core-loops/script.log.txt @@ -0,0 +1,1130 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-03-47\script.log started at 2026-09-19 13:03:50 (2026-09-19 11:03:50 UTC) + +13:03:50.100 SCRIPT : SCRIPT : Initializing scripts +13:03:50.100 SCRIPT : SCRIPT : ScriptProjectManager init +13:03:51.067 SCRIPT : SCRIPT : Compiling GameLib scripts +13:03:51.132 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:03:51.132 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:03:51.133 SCRIPT : SCRIPT : Compiling Game scripts +13:03:52.279 SCRIPT : Compiling Game scripts +13:03:52.279 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:03:52.279 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:03:52.435 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:03:52.551 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:03:52.587 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:03:52.688 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:03:52.688 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:03:52.688 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:03:52.688 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:03:52.721 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:03:52.779 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:03:52.779 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:03:52.780 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:03:52.820 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:03:52.820 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:03:52.822 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:03:52.822 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:03:52.845 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:03:52.879 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:03:53.144 SCRIPT : Module: WorkbenchGame; loaded 171x files; 616x classes; used 2478K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: db6febb9 +13:03:53.151 SCRIPT : Module: Game; loaded 5742x files; 11258x classes; used 33029K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 0945dd83 +13:03:54.116 SCRIPT : Unable to register a script command due keyword duplicity: ban +13:03:54.117 SCRIPT : Unable to register a script command due keyword duplicity: kick +13:04:13.642 SCRIPT : ERR SITE SURVEY: supply=6150/7050 elevationRange=0.625 min=202.875 max=203.5 +13:04:16.937 SCRIPT : Unable to register a script command due keyword duplicity: ban +13:04:16.937 SCRIPT : Unable to register a script command due keyword duplicity: kick +13:04:30.268 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:04:30.295 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +13:04:30.775 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:04:30.775 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:04:30.777 SCRIPT (W): Can't open config file "" +13:04:30.783 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:04:30.783 SCRIPT (W): Slot_Chat Has no Content! +13:04:30.783 SCRIPT (W): Slot_VON Has no Content! +13:04:30.783 SCRIPT (W): Slot_AvailableActions Has no Content! +13:04:30.784 SCRIPT (W): Slot_Vehicle Has no Content! +13:04:30.784 SCRIPT (W): Slot_GameVersion Has no Content! +13:04:30.784 SCRIPT (W): Slot_Notifications Has no Content! +13:04:30.784 SCRIPT (W): Slot_Hints Has no Content! +13:04:30.795 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:04:30.795 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:04:30.799 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +13:04:30.852 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +13:04:30.866 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +13:04:31.042 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:04:32.555 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +13:04:32.573 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +13:04:32.574 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +13:04:32.601 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +13:04:32.603 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +13:04:32.653 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +13:04:32.653 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +13:04:32.658 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +13:04:32.706 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +13:04:32.706 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +13:04:32.708 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +13:04:32.709 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +13:04:32.713 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +13:04:32.715 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +13:04:32.715 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +13:04:32.716 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +13:04:32.717 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +13:04:32.717 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +13:04:32.717 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +13:04:32.717 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +13:04:32.717 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +13:04:32.718 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:04:32.718 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +13:04:32.718 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +13:04:32.718 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:04:32.718 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +13:04:32.718 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +13:04:32.718 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:04:32.719 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:04:32.719 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:04:32.719 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:04:32.719 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:04:32.719 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +13:04:32.719 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:04:33.571 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:04:33.572 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:04:33.572 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:04:33.572 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:04:33.825 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.522,7499.7> up=0.995641 +13:04:33.825 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.259243 angularSpeed=0.0359662 +13:04:33.825 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:04:33.825 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6163,7501.97> +13:04:33.826 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3163,7501.97> terrainY=63.3167 tireTerrainGap=-0.000350952 +13:04:33.826 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6163,7501.97> radius=0.3 bottom=<7012.06,63.3163,7501.97> fraction=0.453221 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.000289917 +13:04:33.826 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6051,7497.71> +13:04:33.826 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1551,7497.71> terrainY=64.1557 tireTerrainGap=-0.000610352 +13:04:33.826 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6051,7497.71> radius=0.45 bottom=<7009.88,64.1551,7497.71> fraction=0.452047 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.000549316 +13:04:33.826 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2645,7497.75> +13:04:33.827 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8145,7497.75> terrainY=63.8178 tireTerrainGap=-0.0033226 +13:04:33.827 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2645,7497.75> radius=0.45 bottom=<7014.42,63.8145,7497.75> fraction=0.439444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0033226 +13:04:33.827 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:04:34.075 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:04:34.075 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:04:34.075 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +13:04:34.075 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:04:34.368 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:04:34.368 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +13:04:34.368 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:04:34.879 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5339,7499.71> up=0.994322 +13:04:34.880 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +13:04:34.880 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:04:34.880 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6201,7501.98> +13:04:34.880 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3201,7501.98> terrainY=63.3146 tireTerrainGap=0.00542831 +13:04:34.881 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6201,7501.98> radius=0.3 bottom=<7012.07,63.3201,7501.98> fraction=0.479552 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00550079 +13:04:34.881 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6026,7497.71> +13:04:34.881 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1526,7497.71> terrainY=64.1491 tireTerrainGap=0.00353241 +13:04:34.881 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6026,7497.71> radius=0.45 bottom=<7009.93,64.1526,7497.71> fraction=0.470555 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00352478 +13:04:34.882 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2653,7497.78> +13:04:34.882 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8153,7497.78> terrainY=63.8155 tireTerrainGap=-0.000217438 +13:04:34.882 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2653,7497.78> radius=0.45 bottom=<7014.47,63.8153,7497.78> fraction=0.453611 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000205994 +13:04:34.882 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:04:34.882 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:04:34.883 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:04:34.883 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:04:34.883 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:04:35.376 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +13:04:35.376 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:04:35.376 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:04:35.377 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:04:35.377 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +13:04:35.889 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5312,7499.74> up=0.994218 +13:04:35.889 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0403679 angularSpeed=0.0725902 +13:04:35.889 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:04:35.889 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6136,7502.01> +13:04:35.889 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3136,7502.01> terrainY=63.3115 tireTerrainGap=0.00211334 +13:04:35.889 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6136,7502.01> radius=0.3 bottom=<7012.08,63.3136,7502.01> fraction=0.464107 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00210571 +13:04:35.890 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5945,7497.72> +13:04:35.890 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1445,7497.72> terrainY=64.1427 tireTerrainGap=0.00177765 +13:04:35.890 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5945,7497.72> radius=0.45 bottom=<7009.97,64.1445,7497.72> fraction=0.462703 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00180054 +13:04:35.890 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2599,7497.83> +13:04:35.890 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8099,7497.83> terrainY=63.8127 tireTerrainGap=-0.00285721 +13:04:35.890 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2599,7497.83> radius=0.45 bottom=<7014.51,63.8099,7497.83> fraction=0.441389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00289536 +13:04:35.891 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:04:35.891 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:04:35.891 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:04:35.891 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:04:35.891 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +13:04:36.402 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:04:36.402 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:04:36.402 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:04:36.403 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:04:36.905 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +13:04:36.905 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:04:36.905 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:04:36.905 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +13:04:36.905 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.0016098 +13:04:36.905 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461881 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00161362 +13:04:36.906 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +13:04:36.906 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00246429 +13:04:36.906 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +13:04:36.906 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +13:04:36.906 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.0021019 +13:04:36.907 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +13:04:36.907 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:04:36.907 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:04:36.907 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:04:36.908 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +13:04:36.908 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:04:37.411 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:04:37.412 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:04:37.412 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +13:04:37.412 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:04:37.922 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +13:04:37.922 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:04:37.922 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:04:37.923 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +13:04:37.923 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.0016098 +13:04:37.923 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6125,7502.02> radius=0.3 bottom=<7012.08,63.3125,7502.02> fraction=0.461881 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00161362 +13:04:37.923 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +13:04:37.923 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00246429 +13:04:37.923 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +13:04:37.924 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +13:04:37.924 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.0021019 +13:04:37.924 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +13:04:37.924 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:04:37.924 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:04:37.925 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +13:04:37.925 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +13:04:37.926 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +13:04:37.926 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +13:04:37.927 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +13:04:37.927 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +13:04:37.927 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +13:04:37.927 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +13:04:38.080 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +13:04:38.118 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +13:04:38.310 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +13:04:38.310 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +13:04:38.310 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +13:04:38.311 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +13:04:38.311 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +13:04:38.311 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +13:04:38.311 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +13:04:38.311 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +13:04:38.311 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:04:38.311 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +13:04:38.312 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:04:38.312 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +13:04:38.312 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +13:04:38.312 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +13:04:38.312 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +13:04:38.312 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.312 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +13:04:38.313 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +13:04:38.313 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.313 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +13:04:38.313 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +13:04:38.313 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.313 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +13:04:38.313 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +13:04:38.314 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.314 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +13:04:38.314 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +13:04:38.314 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +13:04:38.314 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +13:04:38.314 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:04:38.315 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +13:04:38.315 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:04:38.315 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +13:04:38.315 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +13:04:38.315 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +13:04:38.315 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +13:04:38.315 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.316 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +13:04:38.316 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +13:04:38.316 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.316 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +13:04:38.316 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +13:04:38.316 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.316 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +13:04:38.317 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +13:04:38.317 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:04:38.317 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +13:04:38.317 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +13:04:38.317 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +13:04:38.317 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +13:04:38.317 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +13:04:38.318 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +13:04:38.318 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +13:04:38.318 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +13:04:38.318 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +13:04:38.318 SCRIPT : ERR SMOKE PASS: discovery map native local controller and marker manager available +13:04:38.338 SCRIPT : ERR SMOKE PASS: discovery map native baseline label rendered in actual hidden marker layout +13:04:38.338 SCRIPT : ERR SMOKE PASS: discovery map native data-only setter reproduces stale already-open label +13:04:38.338 SCRIPT : ERR SMOKE PASS: discovery map plain local marker exposes native delete/edit/drag eligibility +13:04:38.338 SCRIPT : ERR SMOKE PASS: discovery map local insertion retains objective identity and disables native edit/drag/delete eligibility +13:04:38.340 SCRIPT : ERR SMOKE PASS: discovery map objective first label rendered through actual native layout +13:04:38.340 SCRIPT : ERR SMOKE PASS: discovery map first clue stores only stable 500m search-square center +13:04:38.340 SCRIPT : ERR SMOKE PASS: discovery map identification moves same native marker to exact rounded coordinates +13:04:38.340 SCRIPT : ERR SMOKE PASS: discovery map identification refreshes existing native widget without recreating marker +13:04:38.340 SCRIPT : ERR SMOKE PASS: discovery map label change creates no additional marker +13:04:38.340 SCRIPT : ERR SMOKE PASS: discovery map closed widget accepts data-only update safely +13:04:38.342 SCRIPT : ERR SMOKE PASS: discovery map new native widget renders latest saved label +13:04:38.342 SCRIPT : ERR SMOKE PASS: discovery map native culling retains objective only in disabled list +13:04:38.342 SCRIPT : ERR SMOKE PASS: discovery map deleting culled objective removes both memberships and its widget +13:04:38.342 SCRIPT : ERR SMOKE PASS: discovery map duplicate owned cleanup cannot reactivate objective +13:04:38.342 SCRIPT : ERR SMOKE PASS: discovery map owned probe widgets and markers removed; mission markers preserved +13:04:38.343 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:04:38.345 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:04:38.345 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:04:38.346 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:04:38.346 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:04:38.346 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:04:38.346 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:04:38.347 SCRIPT : ERR SMOKE PASS: objective UI rebinding keeps one subscription to each native task event +13:04:38.347 SCRIPT : ERR SMOKE PASS: objective UI closing native widget uses production detach and releases its task +13:04:38.347 SCRIPT : ERR SMOKE PASS: objective UI closed native widget receives no task callbacks +13:04:38.810 SCRIPT : ERR SMOKE PASS: objective UI closed native widget has no delayed overflow callbacks +13:04:38.810 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:04:38.812 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:04:38.812 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:04:38.813 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:04:38.813 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:04:38.813 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:04:38.813 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:04:38.813 SCRIPT : ERR SMOKE PASS: objective UI details reopen through native layout and current objective binding +13:04:39.311 SCRIPT : ERR SMOKE PASS: admin settings native Core command service and settings ready +13:04:39.311 SCRIPT : ERR SMOKE PASS: admin settings actual unauthorized command cannot mutate discovery +13:04:39.311 SCRIPT : ERR SMOKE PASS: admin settings actual Core alias dispatches without Chat +13:04:39.312 SCRIPT : ERR SMOKE PASS: admin settings actual dispatch rejects out-of-range value with guidance +13:04:39.312 SCRIPT : ERR SMOKE PASS: admin settings actual Core help describes physical document progression +13:04:39.312 SCRIPT : ERR SMOKE PASS: admin settings disposable fixture filenames are unused +13:04:39.314 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 0 +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +13:04:39.315 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +13:04:39.316 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +13:04:39.316 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +13:04:39.318 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 100 +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +13:04:39.319 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +13:04:39.320 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +13:04:39.320 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +13:04:39.322 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 15 +13:04:39.322 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +13:04:39.322 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +13:04:39.322 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +13:04:39.323 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +13:04:39.323 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +13:04:39.323 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +13:04:39.323 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +13:04:39.323 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +13:04:39.323 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +13:04:39.323 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +13:04:39.324 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: -1 +13:04:39.324 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 101 +13:04:39.325 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 1.5 +13:04:39.325 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 100junk +13:04:39.325 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 999999 +13:04:39.326 SCRIPT : ERR SMOKE PASS: admin settings help explains exact versus rough discovery and apply timing +13:04:39.326 SCRIPT : ERR SMOKE PASS: admin settings existing radio alias and response remain intact +13:04:39.326 SCRIPT : ERR SMOKE PASS: admin settings fixture removed its files and never changed actual mission settings +13:04:39.326 SCRIPT : ERR SMOKE PASS: definition authored configuration resolves +13:04:39.327 SCRIPT : ERR SMOKE PASS: definition duplicate site identity rejected +13:04:39.327 SCRIPT : ERR SMOKE PASS: definition dangling document target rejected +13:04:39.327 SCRIPT : ERR SMOKE PASS: definition non-radio document target rejected +13:04:39.327 SCRIPT : ERR SMOKE PASS: definition insufficient guaranteed radio clues rejected +13:04:39.327 SCRIPT : ERR SMOKE PASS: definition unbounded stock rejected +13:04:39.327 SCRIPT : ERR SMOKE PASS: definition unguaranteed clue route rejected +13:04:39.328 SCRIPT : ERR SMOKE PASS: definition radio sources sharing one footprint rejected +13:04:39.328 SCRIPT : ERR SMOKE PASS: definition unnamed location rejected +13:04:39.328 SCRIPT : ERR SMOKE PASS: definition radio identification beyond eight metres rejected +13:04:39.328 SCRIPT : ERR SMOKE PASS: definition close physical radio identification allowed +13:04:39.328 SCRIPT : ERR SMOKE PASS: definition escape cannot reveal the radio directly +13:04:39.328 SCRIPT : ERR SMOKE PASS: definition unbounded scenery offset rejected +13:04:39.329 SCRIPT : ERR SMOKE PASS: definition valid configuration restored after isolated mutations +13:04:39.329 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +13:04:39.329 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +13:04:39.329 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +13:04:39.329 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +13:04:39.329 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +13:04:39.329 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +13:04:39.330 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +13:04:39.330 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +13:04:39.330 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +13:04:39.330 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +13:04:39.333 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +13:04:39.333 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +13:04:39.334 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +13:04:39.334 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +13:04:39.336 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +13:04:39.336 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +13:04:39.336 SCRIPT : ERR COVER GEOMETRY: low=<6738.99,140.839,7295.42> high=<6740.98,141.655,7296.62> trace=0.377114 +13:04:39.336 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +13:04:39.337 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +13:04:39.337 SCRIPT : ERR COVER GEOMETRY: low=<6735.42,140.901,7299.02> high=<6736.62,141.718,7301.01> trace=0.377114 +13:04:39.337 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +13:04:39.337 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +13:04:39.337 SCRIPT : ERR COVER GEOMETRY: low=<6743.42,140.214,7299.02> high=<6744.62,141.03,7301.01> trace=0.377114 +13:04:39.337 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +13:04:39.337 SCRIPT : ERR SMOKE PASS: base exactly three authored outpost barriers exist +13:04:39.337 SCRIPT : ERR SMOKE PASS: mission time clock parsing includes midnight and final minute +13:04:39.338 SCRIPT : ERR SMOKE PASS: mission time malformed clock commands rejected +13:04:39.338 SCRIPT : ERR SMOKE PASS: mission time isolated fixture paths unused +13:04:39.338 SCRIPT : ERR SMOKE PASS: mission time legacy fixture created +13:04:39.339 SCRIPT : ERR SMOKE PASS: mission time existing six-key settings preserved +13:04:39.339 SCRIPT : ERR SMOKE PASS: mission time only absent time settings receive defaults +13:04:39.339 SCRIPT : ERR SMOKE PASS: mission time loading does not rewrite legacy file +13:04:39.344 SCRIPT : ERR SMOKE PASS: mission time explicit save upgrades valid legacy settings +13:04:39.344 SCRIPT : ERR SMOKE PASS: mission time new keys and old values survive reload +13:04:39.345 SCRIPT : ERR SMOKE PASS: mission time present out-of-range time cannot silently default +13:04:39.346 SCRIPT : ERR SMOKE PASS: mission time fractional clock setting rejected +13:04:39.347 SCRIPT : ERR SMOKE PASS: mission time zero multiplier rejected +13:04:39.347 SCRIPT : ERR SMOKE PASS: mission time missing legacy setting remains invalid +13:04:39.348 SCRIPT : ERR SMOKE PASS: mission time partially upgraded file defaults only missing new field +13:04:39.349 SCRIPT : ERR SMOKE PASS: mission time valid saved backup recovers invalid primary +13:04:39.349 SCRIPT : ERR SMOKE PASS: mission time server starts world clock before prison phase +13:04:39.350 SCRIPT : ERR SMOKE PASS: mission time engine progression matches applied multiplier +13:04:39.350 SCRIPT : ERR SMOKE PASS: mission time unauthorized clock mutation rejected +13:04:39.350 SCRIPT : ERR SMOKE PASS: mission time invalid clock command preserves setting +13:04:39.358 SCRIPT : ERR SMOKE PASS: mission time authorized settings persist and test restores originals +13:04:39.358 SCRIPT : ERR SMOKE PASS: mission time saved changes and repeated start leave current clock and speed intact +13:04:39.359 SCRIPT : ERR SMOKE PASS: mission time admin sees current clock separately from next round settings +13:04:39.359 SCRIPT : ERR SMOKE PASS: base native prison objective exists +13:04:39.359 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:04:39.359 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:04:39.359 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:04:39.359 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:04:39.360 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:04:39.360 SCRIPT : ERR SMOKE PASS: base authored supply cache is a separate scavenging location +13:04:39.360 SCRIPT : ERR BASE STOCK: cache items=54 +13:04:39.360 SCRIPT : ERR SMOKE PASS: base cache holds finite physical equipment and objective documents +13:04:39.360 SCRIPT : ERR SMOKE PASS: base no companion HQ or support controller loaded +13:04:39.360 SCRIPT : ERR SMOKE PASS: base prisoner spawned in authored prison +13:04:39.361 SCRIPT : ERR SMOKE PASS: base gate, clues, radio and helicopter created by core +13:04:39.361 SCRIPT : ERR SMOKE PASS: progression identity actual local conscious prisoner is canonical and inside lock range +13:04:39.361 SCRIPT : ERR SMOKE PASS: progression identity synchronous body-mismatch fault injection rejects normal prison unlock without progression +13:04:39.361 SCRIPT : ERR SMOKE PASS: progression identity exact actor, account, connection and used-life state restored before assertions +13:04:39.361 SCRIPT : ERR IDENTITY FIXTURE LIMIT: synchronous roster Actor=null fault injection, immediately restored; no actual possession, reconnect, foreign faction or multiplayer test +13:04:39.362 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +13:04:39.363 SCRIPT : ERR SMOKE PASS: base gate action begins escape +13:04:39.366 SCRIPT : ERR SMOKE PASS: base test defence duration accepted +13:04:39.366 SCRIPT : ERR SMOKE PASS: base previous native objective completes on phase change +13:04:39.366 SCRIPT : ERR SMOKE PASS: base search objective does not expose a hidden site +13:04:39.366 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:04:39.368 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:04:39.369 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:04:39.369 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:04:39.369 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:04:39.369 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:04:39.369 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:04:39.369 SCRIPT : ERR SMOKE PASS: base both named supply routes revealed after escape +13:04:39.370 SCRIPT : ERR SMOKE PASS: base optional sites remain hidden until approached +13:04:45.411 SCRIPT : ERR SMOKE PASS: base unconscious player cannot discover optional sites +13:04:51.488 SCRIPT : ERR SMOKE PASS: base distant player cannot discover optional sites +13:04:51.489 SCRIPT : ERR SMOKE PASS: base isolated visibility obstacle created +13:04:51.489 SCRIPT : ERR VISIBILITY OBSTACLE: low=<6338.5,174.97,7403.87> high=<6341.5,178.737,7404.13> observer=<6340.4,174.694,7466.57> target=<6340,175.788,7400> +13:04:57.585 SCRIPT : ERR SMOKE PASS: base physical wall prevents nearby site discovery +13:05:03.642 SCRIPT : ERR SMOKE PASS: base conscious nearby player visually discovers named medical stash once +13:05:03.642 SCRIPT : ERR SMOKE PASS: base distant medical-site discovery does not reveal the radio +13:05:04.147 SCRIPT : ERR SMOKE PASS: base physical clue recovered +13:05:04.239 SCRIPT : ERR SMOKE PASS: progression identity real held unspent targeted document has an eligible unidentified site and canonical carrier +13:05:04.239 SCRIPT : ERR SMOKE PASS: progression identity synchronous body-mismatch fault injection neither spends the held document nor changes any discovery knowledge +13:05:04.239 SCRIPT : ERR SMOKE PASS: progression identity document rejection restores exact canonical actor and unchanged used-life identity before normal recovery +13:05:04.240 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +13:05:04.240 SCRIPT : ERR SMOKE PASS: progression identity immediately restored ordinary recovery spends the same actual document and advances its target +13:05:06.673 SCRIPT : ERR SMOKE PASS: base physical clue recovered +13:05:07.250 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +13:05:09.216 SCRIPT : ERR SMOKE PASS: base objective guidance reacts to discovered radio +13:05:09.216 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:05:09.216 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:05:09.216 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:05:09.216 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:05:09.216 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:05:09.219 SCRIPT : ERR SMOKE PASS: base discovery ticks do not repeat the location event +13:05:09.219 SCRIPT : ERR SMOKE PASS: base actual held-document rejection and restored recovery were exercised this round +13:05:09.219 SCRIPT : ERR SMOKE PASS: base documents identify radio without Intel addon +13:05:10.732 SCRIPT : ERR SMOKE PASS: radio service identified radio and real controlled prisoner available +13:05:10.732 SCRIPT : ERR SMOKE PASS: radio service controlled prisoner supports native state restoration +13:05:10.735 SCRIPT : ERR SMOKE PASS: radio service isolated thirty-second duration saved +13:05:10.741 SCRIPT : ERR SMOKE PASS: radio service second physical defender spawned +13:05:11.756 SCRIPT : ERR SMOKE PASS: radio service second physical defender settles with simulated connection membership +13:05:11.756 SCRIPT : ERR SMOKE PASS: radio service ordinary AI cannot tune even while alive and nearby +13:05:11.756 SCRIPT : ERR SMOKE PASS: radio service missing radio rejected +13:05:12.770 SCRIPT : ERR RADIO POSITION: outside tuning range after deferred teleport actor=<6506.01,159.313,7200> radio=<6500,159.756,7200> distanceXZ=6.00537 +13:05:12.770 SCRIPT : ERR SMOKE PASS: radio service tuning outside five metres rejected +13:05:13.781 SCRIPT : ERR RADIO POSITION: unconscious tuning range after deferred teleport actor=<6502.03,159.671,7200.04> radio=<6500,159.756,7200> distanceXZ=2.03218 +13:05:13.782 SCRIPT : ERR SMOKE PASS: radio service unconscious prisoner cannot tune +13:05:14.795 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.03,159.671,7200.04> +13:05:15.805 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.03,159.671,7200.04> +13:05:16.812 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.03,159.53,7200.04> +13:05:17.321 SCRIPT : ERR RADIO RECOVERY: tuning prisoner ready step=4 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.03,159.53,7200.04> +13:05:17.321 SCRIPT : ERR RADIO AUTH: active=1 phase=2 registered=1 kind=1 knowledge=2 serviceState=0 distance=2.03352 +13:05:17.321 SCRIPT : ERR RADIO AUTH: playerId=1 connected=1 usedLife=1 sameActor=1 friendly=1 canFight=1 canBegin=1 +13:05:17.322 SCRIPT : ERR SMOKE PASS: radio service registered friendly conscious prisoner remains authorized +13:05:17.322 SCRIPT : ERR SMOKE PASS: radio service unregistered defender cannot start the isolated service +13:05:17.322 SCRIPT : ERR SMOKE PASS: radio service physical defender has native faction affiliation +13:05:18.337 SCRIPT : ERR SMOKE PASS: radio service hostile controlled defender cannot tune +13:05:19.345 SCRIPT : ERR SMOKE PASS: radio service start event emitted once and duplicate start rejected +13:05:19.345 SCRIPT : ERR SMOKE PASS: radio service two conscious physical defenders share one timer +13:05:20.352 SCRIPT : ERR SMOKE PASS: radio service hostile actor cannot defend even with simulated connection membership +13:05:21.367 SCRIPT : ERR SMOKE PASS: radio service elapsed countdown does not emit redundant progress events +13:05:22.372 SCRIPT : ERR SMOKE PASS: radio service second defender preserves progress while first is unconscious +13:05:23.377 SCRIPT : ERR SMOKE PASS: radio service all unconscious defenders reset accumulated time +13:05:24.399 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.08,159.668,7200.08> +13:05:25.412 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.08,159.528,7200.08> +13:05:25.913 SCRIPT : ERR RADIO RECOVERY: first defender ready step=11 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.08,159.528,7200.08> +13:05:25.914 SCRIPT : ERR SMOKE PASS: radio service conscious recovery starts a fresh continuous interval +13:05:26.924 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.74,159.873,7199.23> +13:05:27.937 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.74,159.873,7199.23> +13:05:28.441 SCRIPT : ERR RADIO RECOVERY: second defender ready step=12 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6497.74,159.873,7199.23> +13:05:28.441 SCRIPT : ERR SMOKE PASS: radio service empty server resets despite remaining character bodies +13:05:29.444 SCRIPT : ERR RADIO POSITION: outside defence radius after deferred teleport actor=<6560.5,155.594,7199.99> radio=<6500,159.756,7200> distanceXZ=60.4951 +13:05:29.444 SCRIPT : ERR SMOKE PASS: radio service outside sixty metres excludes first defender without resetting second +13:05:30.453 SCRIPT : ERR SMOKE PASS: radio service dead defender cannot maintain transmission +13:05:31.469 SCRIPT : ERR RADIO POSITION: returned to radio after deferred teleport actor=<6502.01,159.532,7200.01> radio=<6500,159.756,7200> distanceXZ=2.00538 +13:05:31.469 SCRIPT : ERR SMOKE PASS: radio service survivor returns physically before final transmission samples +13:05:31.472 SCRIPT : ERR SMOKE PASS: radio service live duration increase saved +13:05:31.472 SCRIPT : ERR SMOKE PASS: radio service live duration increase preserves accumulated occupancy +13:05:31.474 SCRIPT : ERR SMOKE PASS: radio service live duration reduction saved +13:05:31.475 SCRIPT : ERR SMOKE PASS: radio service live duration reduction completes at exact continuous boundary +13:05:31.475 SCRIPT : ERR SMOKE PASS: radio service completed service cannot restart or emit duplicate completion after stop +13:05:31.475 SCRIPT : ERR SMOKE PASS: radio service isolated cancellation service begins +13:05:31.475 SCRIPT : ERR SMOKE PASS: radio service stop cancels progress and future starts without completing +13:05:31.475 SCRIPT : ERR SMOKE PASS: radio service isolated terminal-phase service begins +13:05:31.475 SCRIPT : ERR SMOKE PASS: radio service terminal phase event prevents later completion +13:05:31.476 SCRIPT : ERR SMOKE PASS: radio service isolated event tests leave live objective ready for normal tuning +13:05:32.475 SCRIPT : ERR RADIO RECOVERY: restored prisoner ready step=90 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6501.99,159.532,7199.98> +13:05:32.475 SCRIPT : ERR RADIO RESTORE: actual=<6501.99,159.532,7199.98> original=<6501.99,159.533,7199.98> distance=0.00109863 +13:05:32.475 SCRIPT : ERR SMOKE PASS: radio service isolated test restores live duration and physical player state after a world frame +13:05:32.475 SCRIPT : ERR SMOKE PASS: base radio feedback remains inactive before tuning +13:05:32.476 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +13:05:32.477 SCRIPT : ERR SMOKE PASS: base identified radio accepts transmission +13:05:32.477 SCRIPT : ERR SMOKE PASS: base radio feedback publishes waiting before first occupancy sample +13:05:37.527 SCRIPT : ERR SMOKE PASS: base depleted stock stays empty when preparation is queried again +13:05:37.528 SCRIPT : ERR SMOKE PASS: base native objective reports advancing radio progress +13:05:37.528 SCRIPT : ERR SMOKE PASS: base radio guide reports transmitting without querying a countdown +13:05:37.528 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:05:37.531 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:05:37.531 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:05:37.531 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:05:37.532 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:05:37.532 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:05:37.532 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:06:12.878 SCRIPT : ERR SMOKE PASS: base unconscious survivor does not trigger defeat after the full grace period +13:06:12.878 SCRIPT : ERR SMOKE PASS: base unconscious radio defender cannot advance transmission +13:06:12.878 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after unconsciousness +13:06:12.878 SCRIPT : ERR SMOKE PASS: base unconscious player retains their body and camera +13:06:18.979 SCRIPT : ERR SMOKE PASS: base regaining consciousness resumes transmission from zero +13:06:18.979 SCRIPT : ERR SMOKE PASS: base radio guide returns to transmitting after recovery +13:06:18.979 SCRIPT : ERR SMOKE PASS: base regaining consciousness does not grant another life +13:06:21.505 SCRIPT : ERR SMOKE PASS: base lost supply cache is not replaced +13:06:21.505 SCRIPT : ERR SMOKE PASS: base objective reports interruption and reset +13:06:21.505 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after leaving the area +13:06:21.505 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:06:21.506 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:06:21.506 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:06:21.506 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:06:21.506 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:06:51.819 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +13:06:54.865 SCRIPT : ERR SMOKE PASS: base radio defence reveals extraction +13:06:54.865 SCRIPT : ERR SMOKE PASS: mission time clock advancement remains enabled +13:06:54.866 SCRIPT : ERR SMOKE PASS: mission time progression sampled across at least ten engine seconds +13:06:54.866 SCRIPT : ERR SMOKE PASS: mission time native clock advances at configured rate without periodic resets +13:06:54.866 SCRIPT : ERR SMOKE PASS: base radio feedback clears after completion +13:06:54.866 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:06:54.868 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:06:54.868 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:06:54.869 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:06:54.869 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:06:54.869 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:06:54.869 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:06:54.869 SCRIPT : ERR SMOKE PASS: base player physically boards extraction helicopter +13:06:57.894 SCRIPT : ERR SMOKE PASS: base extraction requires real occupancy +13:06:58.863 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +13:06:58.863 SCRIPT : ERR SMOKE PASS: base escape and restart reached without companion services +13:06:58.863 SCRIPT : ERR SMOKE COMPLETE: core-only escape +13:06:58.960 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +13:06:58.962 SCRIPT (W): Slot_Chat Has no Content! +13:06:58.962 SCRIPT (W): Slot_VON Has no Content! +13:06:58.963 SCRIPT (W): Slot_GameVersion Has no Content! +13:06:58.963 SCRIPT (W): Slot_Notifications Has no Content! +13:07:01.002 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +13:07:01.002 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:07:01.002 SCRIPT : -- Stack trace -- +13:07:01.003 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:07:01.003 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:07:01.003 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +13:07:01.003 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:07:01.003 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:07:01.003 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:07:01.003 SCRIPT : ----------------- +13:07:01.003 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:07:01.004 SCRIPT : -- Stack trace -- +13:07:01.004 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:07:01.004 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:07:01.004 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +13:07:01.004 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:07:01.004 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:07:01.004 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:07:01.004 SCRIPT : ----------------- +13:07:01.006 SCRIPT (W): Slot_Chat Has no Content! +13:07:01.006 SCRIPT (W): Slot_VON Has no Content! +13:07:01.007 SCRIPT (W): Slot_GameVersion Has no Content! +13:07:01.007 SCRIPT (W): Slot_Notifications Has no Content! +13:07:01.009 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +13:07:28.874 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +13:07:28.875 SCRIPT (W): SCR_PlayerData:CalculateStatsChange: Specialization stats, experience or rank stats were modified prematurely. The career data for this session might be compromised +13:07:45.725 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:07:45.726 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +13:07:46.382 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:07:46.382 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:07:46.384 SCRIPT (W): Can't open config file "" +13:07:46.384 SCRIPT (W): Cannot update game blocklist. Another request in progress. +13:07:46.385 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:07:46.385 SCRIPT (W): Slot_Chat Has no Content! +13:07:46.385 SCRIPT (W): Slot_VON Has no Content! +13:07:46.385 SCRIPT (W): Slot_AvailableActions Has no Content! +13:07:46.385 SCRIPT (W): Slot_Vehicle Has no Content! +13:07:46.385 SCRIPT (W): Slot_GameVersion Has no Content! +13:07:46.386 SCRIPT (W): Slot_Notifications Has no Content! +13:07:46.386 SCRIPT (W): Slot_Hints Has no Content! +13:07:46.390 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:07:46.390 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:07:46.411 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +13:07:46.423 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +13:07:46.541 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:07:47.946 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +13:07:47.951 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +13:07:47.951 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +13:07:47.961 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +13:07:47.962 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +13:07:47.971 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +13:07:47.971 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +13:07:47.976 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +13:07:47.986 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +13:07:47.986 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +13:07:47.988 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +13:07:47.988 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +13:07:47.991 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +13:07:47.992 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +13:07:47.992 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +13:07:47.993 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +13:07:47.993 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +13:07:47.994 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +13:07:47.994 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +13:07:47.994 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +13:07:47.994 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +13:07:47.994 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:07:47.994 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +13:07:47.995 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +13:07:47.995 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:07:47.995 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +13:07:47.995 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +13:07:47.995 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:07:47.995 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:07:47.995 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:07:47.996 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:07:47.996 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:07:47.996 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +13:07:47.996 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:07:48.709 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:07:48.710 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:07:48.710 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:07:48.710 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:07:48.967 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.08,63.5641,7499.7> up=0.995289 +13:07:48.967 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.370608 angularSpeed=0.148358 +13:07:48.967 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:07:48.967 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6161,7501.98> +13:07:48.968 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3161,7501.98> terrainY=63.3155 tireTerrainGap=0.00062561 +13:07:48.968 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6161,7501.98> radius=0.3 bottom=<7012.07,63.3161,7501.98> fraction=0.457399 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.000629425 +13:07:48.968 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.5917,7497.71> +13:07:48.968 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1417,7497.71> terrainY=64.1552 tireTerrainGap=-0.0135117 +13:07:48.968 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.5917,7497.71> radius=0.45 bottom=<7009.88,64.1417,7497.71> fraction=0.393158 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.013504 +13:07:48.969 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.266,7497.74> +13:07:48.969 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.816,7497.74> terrainY=63.8181 tireTerrainGap=-0.00201035 +13:07:48.969 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.266,7497.74> radius=0.45 bottom=<7014.42,63.816,7497.74> fraction=0.445278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00203705 +13:07:48.969 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:07:49.223 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:07:49.223 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:07:49.223 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +13:07:49.223 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:07:49.732 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:07:49.732 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +13:07:49.732 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:07:49.983 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.526,7499.71> up=0.994049 +13:07:49.983 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0653376 angularSpeed=0.0542322 +13:07:49.983 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:07:49.983 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6191,7501.98> +13:07:49.984 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3191,7501.98> terrainY=63.3148 tireTerrainGap=0.00429535 +13:07:49.984 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6191,7501.98> radius=0.3 bottom=<7012.07,63.3191,7501.98> fraction=0.474215 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00432587 +13:07:49.984 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.91,64.6021,7497.72> +13:07:49.984 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.91,64.1521,7497.72> terrainY=64.1504 tireTerrainGap=0.00171661 +13:07:49.984 SCRIPT : ERR GEAR SUPPORT: center=<7009.91,64.6021,7497.72> radius=0.45 bottom=<7009.91,64.1521,7497.72> fraction=0.462402 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00173187 +13:07:49.984 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2656,7497.77> +13:07:49.984 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8156,7497.77> terrainY=63.8159 tireTerrainGap=-0.000278473 +13:07:49.985 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2656,7497.77> radius=0.45 bottom=<7014.46,63.8156,7497.77> fraction=0.453333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000267029 +13:07:49.985 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:07:50.235 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +13:07:50.235 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:07:50.236 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:07:50.236 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:07:50.236 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:07:50.744 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:07:50.745 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:07:50.745 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:07:50.745 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +13:07:50.997 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5346,7499.74> up=0.993831 +13:07:50.997 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0328354 angularSpeed=0.056782 +13:07:50.998 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:07:50.998 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6146,7502.01> +13:07:50.998 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3146,7502.01> terrainY=63.3117 tireTerrainGap=0.0029068 +13:07:50.998 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6146,7502.01> radius=0.3 bottom=<7012.07,63.3146,7502.01> fraction=0.467724 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00289917 +13:07:50.998 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.5954,7497.72> +13:07:50.998 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.1454,7497.72> terrainY=64.1436 tireTerrainGap=0.00174713 +13:07:50.999 SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.5954,7497.72> radius=0.45 bottom=<7009.96,64.1454,7497.72> fraction=0.462402 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00173187 +13:07:50.999 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.2607,7497.82> +13:07:50.999 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.8106,7497.82> terrainY=63.813 tireTerrainGap=-0.00233841 +13:07:50.999 SCRIPT : ERR GEAR SUPPORT: center=<7014.5,64.2607,7497.82> radius=0.45 bottom=<7014.5,63.8106,7497.82> fraction=0.443889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00234222 +13:07:50.999 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:07:51.249 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:07:51.249 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:07:51.250 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:07:51.250 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +13:07:51.755 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:07:51.756 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:07:51.756 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:07:51.756 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:07:52.006 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.76> up=0.994222 +13:07:52.006 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:07:52.007 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:07:52.007 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6114,7502.03> +13:07:52.007 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3114,7502.03> terrainY=63.3099 tireTerrainGap=0.00146103 +13:07:52.007 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6114,7502.03> radius=0.3 bottom=<7012.08,63.3114,7502.03> fraction=0.461175 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00145721 +13:07:52.007 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5932,7497.73> +13:07:52.007 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1432,7497.73> terrainY=64.1407 tireTerrainGap=0.00254059 +13:07:52.008 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5932,7497.73> radius=0.45 bottom=<7009.98,64.1432,7497.73> fraction=0.466068 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00254059 +13:07:52.008 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2596,7497.85> +13:07:52.008 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8096,7497.85> terrainY=63.8114 tireTerrainGap=-0.00183487 +13:07:52.008 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2596,7497.85> radius=0.45 bottom=<7014.52,63.8096,7497.85> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +13:07:52.009 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:07:52.262 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:07:52.262 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:07:52.262 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +13:07:52.262 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:07:52.775 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:07:52.775 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:07:52.775 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +13:07:52.775 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:07:53.025 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.76> up=0.994222 +13:07:53.025 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:07:53.025 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:07:53.025 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6114,7502.03> +13:07:53.026 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3114,7502.03> terrainY=63.3099 tireTerrainGap=0.00146103 +13:07:53.026 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6114,7502.03> radius=0.3 bottom=<7012.08,63.3114,7502.03> fraction=0.461175 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00145721 +13:07:53.026 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5932,7497.73> +13:07:53.026 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1432,7497.73> terrainY=64.1407 tireTerrainGap=0.00254059 +13:07:53.026 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5932,7497.73> radius=0.45 bottom=<7009.98,64.1432,7497.73> fraction=0.466068 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00254059 +13:07:53.026 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2596,7497.85> +13:07:53.026 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8096,7497.85> terrainY=63.8114 tireTerrainGap=-0.00183487 +13:07:53.027 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2596,7497.85> radius=0.45 bottom=<7014.52,63.8096,7497.85> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +13:07:53.027 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:07:53.275 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:07:53.276 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +13:07:53.276 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +13:07:53.277 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +13:07:53.277 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +13:07:53.277 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +13:07:53.278 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +13:07:53.278 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +13:07:53.278 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +13:07:53.450 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +13:07:53.481 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +13:07:53.511 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +13:07:53.511 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +13:07:53.511 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +13:07:53.512 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +13:07:53.512 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +13:07:53.512 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +13:07:53.512 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +13:07:53.512 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +13:07:53.512 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:07:53.513 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +13:07:53.513 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:07:53.513 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +13:07:53.513 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +13:07:53.513 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +13:07:53.513 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +13:07:53.514 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.514 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +13:07:53.514 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +13:07:53.514 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.514 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +13:07:53.514 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +13:07:53.515 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.515 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +13:07:53.515 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +13:07:53.515 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.515 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +13:07:53.516 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +13:07:53.516 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +13:07:53.516 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +13:07:53.516 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:07:53.516 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +13:07:53.516 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +13:07:53.517 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +13:07:53.517 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +13:07:53.517 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +13:07:53.517 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +13:07:53.517 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.517 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +13:07:53.518 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +13:07:53.518 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.518 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +13:07:53.518 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +13:07:53.518 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.518 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +13:07:53.519 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +13:07:53.519 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +13:07:53.519 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +13:07:53.519 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +13:07:53.519 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +13:07:53.519 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +13:07:53.520 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +13:07:53.520 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +13:07:53.520 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +13:07:53.520 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +13:07:53.520 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +13:07:53.520 SCRIPT : ERR SMOKE PASS: discovery map native local controller and marker manager available +13:07:53.525 SCRIPT : ERR SMOKE PASS: discovery map native baseline label rendered in actual hidden marker layout +13:07:53.526 SCRIPT : ERR SMOKE PASS: discovery map native data-only setter reproduces stale already-open label +13:07:53.526 SCRIPT : ERR SMOKE PASS: discovery map plain local marker exposes native delete/edit/drag eligibility +13:07:53.526 SCRIPT : ERR SMOKE PASS: discovery map local insertion retains objective identity and disables native edit/drag/delete eligibility +13:07:53.529 SCRIPT : ERR SMOKE PASS: discovery map objective first label rendered through actual native layout +13:07:53.529 SCRIPT : ERR SMOKE PASS: discovery map first clue stores only stable 500m search-square center +13:07:53.529 SCRIPT : ERR SMOKE PASS: discovery map identification moves same native marker to exact rounded coordinates +13:07:53.530 SCRIPT : ERR SMOKE PASS: discovery map identification refreshes existing native widget without recreating marker +13:07:53.530 SCRIPT : ERR SMOKE PASS: discovery map label change creates no additional marker +13:07:53.530 SCRIPT : ERR SMOKE PASS: discovery map closed widget accepts data-only update safely +13:07:53.532 SCRIPT : ERR SMOKE PASS: discovery map new native widget renders latest saved label +13:07:53.532 SCRIPT : ERR SMOKE PASS: discovery map native culling retains objective only in disabled list +13:07:53.532 SCRIPT : ERR SMOKE PASS: discovery map deleting culled objective removes both memberships and its widget +13:07:53.532 SCRIPT : ERR SMOKE PASS: discovery map duplicate owned cleanup cannot reactivate objective +13:07:53.533 SCRIPT : ERR SMOKE PASS: discovery map owned probe widgets and markers removed; mission markers preserved +13:07:53.533 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:07:53.535 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:07:53.535 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:07:53.536 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:07:53.536 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:07:53.536 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:07:53.536 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:07:53.537 SCRIPT : ERR SMOKE PASS: objective UI rebinding keeps one subscription to each native task event +13:07:53.537 SCRIPT : ERR SMOKE PASS: objective UI closing native widget uses production detach and releases its task +13:07:53.537 SCRIPT : ERR SMOKE PASS: objective UI closed native widget receives no task callbacks +13:07:54.018 SCRIPT : ERR SMOKE PASS: objective UI closed native widget has no delayed overflow callbacks +13:07:54.018 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:07:54.021 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:07:54.021 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:07:54.021 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:07:54.022 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:07:54.022 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:07:54.022 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:07:54.022 SCRIPT : ERR SMOKE PASS: objective UI details reopen through native layout and current objective binding +13:07:54.517 SCRIPT : ERR SMOKE PASS: admin settings native Core command service and settings ready +13:07:54.517 SCRIPT : ERR SMOKE PASS: admin settings actual unauthorized command cannot mutate discovery +13:07:54.518 SCRIPT : ERR SMOKE PASS: admin settings actual Core alias dispatches without Chat +13:07:54.518 SCRIPT : ERR SMOKE PASS: admin settings actual dispatch rejects out-of-range value with guidance +13:07:54.518 SCRIPT : ERR SMOKE PASS: admin settings actual Core help describes physical document progression +13:07:54.518 SCRIPT : ERR SMOKE PASS: admin settings disposable fixture filenames are unused +13:07:54.520 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 0 +13:07:54.522 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +13:07:54.522 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +13:07:54.522 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +13:07:54.522 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +13:07:54.522 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +13:07:54.523 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +13:07:54.523 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +13:07:54.523 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +13:07:54.523 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +13:07:54.523 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +13:07:54.526 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 100 +13:07:54.527 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +13:07:54.527 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +13:07:54.527 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +13:07:54.527 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +13:07:54.527 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +13:07:54.527 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +13:07:54.527 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +13:07:54.528 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +13:07:54.528 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +13:07:54.528 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +13:07:54.530 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 15 +13:07:54.530 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +13:07:54.531 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +13:07:54.532 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +13:07:54.532 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: -1 +13:07:54.533 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 101 +13:07:54.533 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 1.5 +13:07:54.534 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 100junk +13:07:54.534 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 999999 +13:07:54.534 SCRIPT : ERR SMOKE PASS: admin settings help explains exact versus rough discovery and apply timing +13:07:54.534 SCRIPT : ERR SMOKE PASS: admin settings existing radio alias and response remain intact +13:07:54.535 SCRIPT : ERR SMOKE PASS: admin settings fixture removed its files and never changed actual mission settings +13:07:54.535 SCRIPT : ERR SMOKE PASS: definition authored configuration resolves +13:07:54.535 SCRIPT : ERR SMOKE PASS: definition duplicate site identity rejected +13:07:54.536 SCRIPT : ERR SMOKE PASS: definition dangling document target rejected +13:07:54.536 SCRIPT : ERR SMOKE PASS: definition non-radio document target rejected +13:07:54.536 SCRIPT : ERR SMOKE PASS: definition insufficient guaranteed radio clues rejected +13:07:54.536 SCRIPT : ERR SMOKE PASS: definition unbounded stock rejected +13:07:54.536 SCRIPT : ERR SMOKE PASS: definition unguaranteed clue route rejected +13:07:54.537 SCRIPT : ERR SMOKE PASS: definition radio sources sharing one footprint rejected +13:07:54.537 SCRIPT : ERR SMOKE PASS: definition unnamed location rejected +13:07:54.537 SCRIPT : ERR SMOKE PASS: definition radio identification beyond eight metres rejected +13:07:54.537 SCRIPT : ERR SMOKE PASS: definition close physical radio identification allowed +13:07:54.537 SCRIPT : ERR SMOKE PASS: definition escape cannot reveal the radio directly +13:07:54.538 SCRIPT : ERR SMOKE PASS: definition unbounded scenery offset rejected +13:07:54.538 SCRIPT : ERR SMOKE PASS: definition valid configuration restored after isolated mutations +13:07:54.538 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +13:07:54.538 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +13:07:54.539 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +13:07:54.539 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +13:07:54.539 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +13:07:54.539 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +13:07:54.540 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +13:07:54.540 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +13:07:54.540 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +13:07:54.541 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +13:07:54.543 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +13:07:54.543 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +13:07:54.544 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +13:07:54.544 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +13:07:54.546 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +13:07:54.547 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +13:07:54.547 SCRIPT : ERR COVER GEOMETRY: low=<6738.99,140.839,7295.42> high=<6740.98,141.655,7296.62> trace=0.377114 +13:07:54.547 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +13:07:54.547 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +13:07:54.547 SCRIPT : ERR COVER GEOMETRY: low=<6735.42,140.901,7299.02> high=<6736.62,141.718,7301.01> trace=0.377114 +13:07:54.548 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +13:07:54.548 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +13:07:54.548 SCRIPT : ERR COVER GEOMETRY: low=<6743.42,140.214,7299.02> high=<6744.62,141.03,7301.01> trace=0.377114 +13:07:54.548 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +13:07:54.548 SCRIPT : ERR SMOKE PASS: base exactly three authored outpost barriers exist +13:07:54.548 SCRIPT : ERR SMOKE PASS: mission time clock parsing includes midnight and final minute +13:07:54.548 SCRIPT : ERR SMOKE PASS: mission time malformed clock commands rejected +13:07:54.549 SCRIPT : ERR SMOKE PASS: mission time isolated fixture paths unused +13:07:54.549 SCRIPT : ERR SMOKE PASS: mission time legacy fixture created +13:07:54.550 SCRIPT : ERR SMOKE PASS: mission time existing six-key settings preserved +13:07:54.550 SCRIPT : ERR SMOKE PASS: mission time only absent time settings receive defaults +13:07:54.550 SCRIPT : ERR SMOKE PASS: mission time loading does not rewrite legacy file +13:07:54.555 SCRIPT : ERR SMOKE PASS: mission time explicit save upgrades valid legacy settings +13:07:54.555 SCRIPT : ERR SMOKE PASS: mission time new keys and old values survive reload +13:07:54.557 SCRIPT : ERR SMOKE PASS: mission time present out-of-range time cannot silently default +13:07:54.557 SCRIPT : ERR SMOKE PASS: mission time fractional clock setting rejected +13:07:54.558 SCRIPT : ERR SMOKE PASS: mission time zero multiplier rejected +13:07:54.559 SCRIPT : ERR SMOKE PASS: mission time missing legacy setting remains invalid +13:07:54.560 SCRIPT : ERR SMOKE PASS: mission time partially upgraded file defaults only missing new field +13:07:54.560 SCRIPT : ERR SMOKE PASS: mission time valid saved backup recovers invalid primary +13:07:54.561 SCRIPT : ERR SMOKE PASS: mission time server starts world clock before prison phase +13:07:54.561 SCRIPT : ERR SMOKE PASS: mission time engine progression matches applied multiplier +13:07:54.561 SCRIPT : ERR SMOKE PASS: mission time unauthorized clock mutation rejected +13:07:54.561 SCRIPT : ERR SMOKE PASS: mission time invalid clock command preserves setting +13:07:54.569 SCRIPT : ERR SMOKE PASS: mission time authorized settings persist and test restores originals +13:07:54.569 SCRIPT : ERR SMOKE PASS: mission time saved changes and repeated start leave current clock and speed intact +13:07:54.570 SCRIPT : ERR SMOKE PASS: mission time admin sees current clock separately from next round settings +13:07:54.570 SCRIPT : ERR SMOKE PASS: base native prison objective exists +13:07:54.570 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:07:54.570 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:07:54.571 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:07:54.571 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:07:54.571 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:07:54.571 SCRIPT : ERR SMOKE PASS: base authored supply cache is a separate scavenging location +13:07:54.571 SCRIPT : ERR BASE STOCK: cache items=54 +13:07:54.572 SCRIPT : ERR SMOKE PASS: base cache holds finite physical equipment and objective documents +13:07:54.572 SCRIPT : ERR SMOKE PASS: base no companion HQ or support controller loaded +13:07:54.572 SCRIPT : ERR SMOKE PASS: base prisoner spawned in authored prison +13:07:54.572 SCRIPT : ERR SMOKE PASS: base gate, clues, radio and helicopter created by core +13:07:54.572 SCRIPT : ERR SMOKE PASS: progression identity actual local conscious prisoner is canonical and inside lock range +13:07:54.573 SCRIPT : ERR SMOKE PASS: progression identity synchronous body-mismatch fault injection rejects normal prison unlock without progression +13:07:54.573 SCRIPT : ERR SMOKE PASS: progression identity exact actor, account, connection and used-life state restored before assertions +13:07:54.573 SCRIPT : ERR IDENTITY FIXTURE LIMIT: synchronous roster Actor=null fault injection, immediately restored; no actual possession, reconnect, foreign faction or multiplayer test +13:07:54.573 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +13:07:54.575 SCRIPT : ERR SMOKE PASS: base gate action begins escape +13:07:54.577 SCRIPT : ERR SMOKE PASS: base test defence duration accepted +13:07:54.578 SCRIPT : ERR SMOKE PASS: base previous native objective completes on phase change +13:07:54.578 SCRIPT : ERR SMOKE PASS: base search objective does not expose a hidden site +13:07:54.578 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:07:54.581 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:07:54.581 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:07:54.582 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:07:54.582 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:07:54.583 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:07:54.583 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:07:54.583 SCRIPT : ERR SMOKE PASS: base both named supply routes revealed after escape +13:07:54.583 SCRIPT : ERR SMOKE PASS: base optional sites remain hidden until approached +13:08:00.553 SCRIPT : ERR SMOKE PASS: base unconscious player cannot discover optional sites +13:08:06.612 SCRIPT : ERR SMOKE PASS: base distant player cannot discover optional sites +13:08:06.613 SCRIPT : ERR SMOKE PASS: base isolated visibility obstacle created +13:08:06.613 SCRIPT : ERR VISIBILITY OBSTACLE: low=<6338.5,174.97,7403.87> high=<6341.5,178.737,7404.13> observer=<6340.76,174.699,7466.69> target=<6340,175.788,7400> +13:08:12.679 SCRIPT : ERR SMOKE PASS: base physical wall prevents nearby site discovery +13:08:18.742 SCRIPT : ERR SMOKE PASS: base conscious nearby player visually discovers named medical stash once +13:08:18.742 SCRIPT : ERR SMOKE PASS: base distant medical-site discovery does not reveal the radio +13:08:19.249 SCRIPT : ERR SMOKE PASS: base physical clue recovered +13:08:19.577 SCRIPT : ERR SMOKE PASS: progression identity real held unspent targeted document has an eligible unidentified site and canonical carrier +13:08:19.577 SCRIPT : ERR SMOKE PASS: progression identity synchronous body-mismatch fault injection neither spends the held document nor changes any discovery knowledge +13:08:19.578 SCRIPT : ERR SMOKE PASS: progression identity document rejection restores exact canonical actor and unchanged used-life identity before normal recovery +13:08:19.578 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +13:08:19.578 SCRIPT : ERR SMOKE PASS: progression identity immediately restored ordinary recovery spends the same actual document and advances its target +13:08:21.812 SCRIPT : ERR SMOKE PASS: base physical clue recovered +13:08:22.589 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +13:08:24.344 SCRIPT : ERR SMOKE PASS: base objective guidance reacts to discovered radio +13:08:24.345 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:08:24.345 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:08:24.345 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:08:24.345 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:08:24.345 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:08:24.348 SCRIPT : ERR SMOKE PASS: base discovery ticks do not repeat the location event +13:08:24.348 SCRIPT : ERR SMOKE PASS: base actual held-document rejection and restored recovery were exercised this round +13:08:24.348 SCRIPT : ERR SMOKE PASS: base documents identify radio without Intel addon +13:08:25.852 SCRIPT : ERR SMOKE PASS: radio service identified radio and real controlled prisoner available +13:08:25.852 SCRIPT : ERR SMOKE PASS: radio service controlled prisoner supports native state restoration +13:08:25.856 SCRIPT : ERR SMOKE PASS: radio service isolated thirty-second duration saved +13:08:25.863 SCRIPT : ERR SMOKE PASS: radio service second physical defender spawned +13:08:26.870 SCRIPT : ERR SMOKE PASS: radio service second physical defender settles with simulated connection membership +13:08:26.870 SCRIPT : ERR SMOKE PASS: radio service ordinary AI cannot tune even while alive and nearby +13:08:26.870 SCRIPT : ERR SMOKE PASS: radio service missing radio rejected +13:08:27.876 SCRIPT : ERR RADIO POSITION: outside tuning range after deferred teleport actor=<6506.01,159.313,7200.01> radio=<6500,159.756,7200> distanceXZ=6.00586 +13:08:27.876 SCRIPT : ERR SMOKE PASS: radio service tuning outside five metres rejected +13:08:28.887 SCRIPT : ERR RADIO POSITION: unconscious tuning range after deferred teleport actor=<6502.04,159.67,7200.04> radio=<6500,159.756,7200> distanceXZ=2.03809 +13:08:28.887 SCRIPT : ERR SMOKE PASS: radio service unconscious prisoner cannot tune +13:08:29.909 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.04,159.671,7200.04> +13:08:30.926 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.04,159.671,7200.04> +13:08:31.937 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.04,159.53,7200.04> +13:08:32.445 SCRIPT : ERR RADIO RECOVERY: tuning prisoner ready step=4 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.04,159.53,7200.04> +13:08:32.445 SCRIPT : ERR RADIO AUTH: active=1 phase=2 registered=1 kind=1 knowledge=2 serviceState=0 distance=2.0376 +13:08:32.445 SCRIPT : ERR RADIO AUTH: playerId=1 connected=1 usedLife=1 sameActor=1 friendly=1 canFight=1 canBegin=1 +13:08:32.445 SCRIPT : ERR SMOKE PASS: radio service registered friendly conscious prisoner remains authorized +13:08:32.445 SCRIPT : ERR SMOKE PASS: radio service unregistered defender cannot start the isolated service +13:08:32.445 SCRIPT : ERR SMOKE PASS: radio service physical defender has native faction affiliation +13:08:33.462 SCRIPT : ERR SMOKE PASS: radio service hostile controlled defender cannot tune +13:08:34.481 SCRIPT : ERR SMOKE PASS: radio service start event emitted once and duplicate start rejected +13:08:34.481 SCRIPT : ERR SMOKE PASS: radio service two conscious physical defenders share one timer +13:08:35.498 SCRIPT : ERR SMOKE PASS: radio service hostile actor cannot defend even with simulated connection membership +13:08:36.507 SCRIPT : ERR SMOKE PASS: radio service elapsed countdown does not emit redundant progress events +13:08:37.518 SCRIPT : ERR SMOKE PASS: radio service second defender preserves progress while first is unconscious +13:08:38.531 SCRIPT : ERR SMOKE PASS: radio service all unconscious defenders reset accumulated time +13:08:39.552 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.07,159.668,7200.09> +13:08:40.553 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.07,159.528,7200.09> +13:08:41.056 SCRIPT : ERR RADIO RECOVERY: first defender ready step=11 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.07,159.528,7200.09> +13:08:41.057 SCRIPT : ERR SMOKE PASS: radio service conscious recovery starts a fresh continuous interval +13:08:42.066 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.74,159.873,7199.23> +13:08:43.076 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.74,159.873,7199.23> +13:08:43.583 SCRIPT : ERR RADIO RECOVERY: second defender ready step=12 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6497.74,159.873,7199.23> +13:08:43.583 SCRIPT : ERR SMOKE PASS: radio service empty server resets despite remaining character bodies +13:08:44.596 SCRIPT : ERR RADIO POSITION: outside defence radius after deferred teleport actor=<6560.49,155.594,7199.99> radio=<6500,159.756,7200> distanceXZ=60.4941 +13:08:44.597 SCRIPT : ERR SMOKE PASS: radio service outside sixty metres excludes first defender without resetting second +13:08:45.597 SCRIPT : ERR SMOKE PASS: radio service dead defender cannot maintain transmission +13:08:46.609 SCRIPT : ERR RADIO POSITION: returned to radio after deferred teleport actor=<6502.01,159.532,7200> radio=<6500,159.756,7200> distanceXZ=2.00538 +13:08:46.609 SCRIPT : ERR SMOKE PASS: radio service survivor returns physically before final transmission samples +13:08:46.612 SCRIPT : ERR SMOKE PASS: radio service live duration increase saved +13:08:46.612 SCRIPT : ERR SMOKE PASS: radio service live duration increase preserves accumulated occupancy +13:08:46.614 SCRIPT : ERR SMOKE PASS: radio service live duration reduction saved +13:08:46.614 SCRIPT : ERR SMOKE PASS: radio service live duration reduction completes at exact continuous boundary +13:08:46.614 SCRIPT : ERR SMOKE PASS: radio service completed service cannot restart or emit duplicate completion after stop +13:08:46.614 SCRIPT : ERR SMOKE PASS: radio service isolated cancellation service begins +13:08:46.614 SCRIPT : ERR SMOKE PASS: radio service stop cancels progress and future starts without completing +13:08:46.614 SCRIPT : ERR SMOKE PASS: radio service isolated terminal-phase service begins +13:08:46.615 SCRIPT : ERR SMOKE PASS: radio service terminal phase event prevents later completion +13:08:46.615 SCRIPT : ERR SMOKE PASS: radio service isolated event tests leave live objective ready for normal tuning +13:08:47.622 SCRIPT : ERR RADIO RECOVERY: restored prisoner ready step=90 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6501.99,159.533,7199.98> +13:08:47.622 SCRIPT : ERR RADIO RESTORE: actual=<6501.99,159.533,7199.98> original=<6501.99,159.533,7199.98> distance=0.00133198 +13:08:47.622 SCRIPT : ERR SMOKE PASS: radio service isolated test restores live duration and physical player state after a world frame +13:08:47.622 SCRIPT : ERR SMOKE PASS: base radio feedback remains inactive before tuning +13:08:47.622 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +13:08:47.623 SCRIPT : ERR SMOKE PASS: base identified radio accepts transmission +13:08:47.624 SCRIPT : ERR SMOKE PASS: base radio feedback publishes waiting before first occupancy sample +13:08:52.703 SCRIPT : ERR SMOKE PASS: base depleted stock stays empty when preparation is queried again +13:08:52.704 SCRIPT : ERR SMOKE PASS: base native objective reports advancing radio progress +13:08:52.704 SCRIPT : ERR SMOKE PASS: base radio guide reports transmitting without querying a countdown +13:08:52.704 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:08:52.707 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:08:52.707 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:08:52.707 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:08:52.708 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:08:52.708 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:08:52.708 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:09:28.035 SCRIPT : ERR SMOKE PASS: base unconscious survivor does not trigger defeat after the full grace period +13:09:28.035 SCRIPT : ERR SMOKE PASS: base unconscious radio defender cannot advance transmission +13:09:28.035 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after unconsciousness +13:09:28.035 SCRIPT : ERR SMOKE PASS: base unconscious player retains their body and camera +13:09:34.111 SCRIPT : ERR SMOKE PASS: base regaining consciousness resumes transmission from zero +13:09:34.111 SCRIPT : ERR SMOKE PASS: base radio guide returns to transmitting after recovery +13:09:34.112 SCRIPT : ERR SMOKE PASS: base regaining consciousness does not grant another life +13:09:36.623 SCRIPT : ERR SMOKE PASS: base lost supply cache is not replaced +13:09:36.624 SCRIPT : ERR SMOKE PASS: base objective reports interruption and reset +13:09:36.624 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after leaving the area +13:09:36.624 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:09:36.624 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:09:36.624 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:09:36.624 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:09:36.624 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:10:07.200 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +13:10:10.037 SCRIPT : ERR SMOKE PASS: base radio defence reveals extraction +13:10:10.037 SCRIPT : ERR SMOKE PASS: mission time clock advancement remains enabled +13:10:10.037 SCRIPT : ERR SMOKE PASS: mission time progression sampled across at least ten engine seconds +13:10:10.037 SCRIPT : ERR SMOKE PASS: mission time native clock advances at configured rate without periodic resets +13:10:10.038 SCRIPT : ERR SMOKE PASS: base radio feedback clears after completion +13:10:10.038 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +13:10:10.041 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +13:10:10.041 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +13:10:10.041 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +13:10:10.041 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +13:10:10.041 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +13:10:10.042 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +13:10:10.042 SCRIPT : ERR SMOKE PASS: base player physically boards extraction helicopter +13:10:13.070 SCRIPT : ERR SMOKE PASS: base extraction requires real occupancy +13:10:13.239 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +13:10:13.240 SCRIPT : ERR SMOKE PASS: base escape and restart reached without companion services +13:10:13.240 SCRIPT : ERR SMOKE COMPLETE: core-only escape +13:10:13.333 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +13:10:13.335 SCRIPT (W): Slot_Chat Has no Content! +13:10:13.335 SCRIPT (W): Slot_VON Has no Content! +13:10:13.335 SCRIPT (W): Slot_GameVersion Has no Content! +13:10:13.335 SCRIPT (W): Slot_Notifications Has no Content! +13:10:15.361 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +13:10:15.362 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:10:15.362 SCRIPT : -- Stack trace -- +13:10:15.362 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:10:15.362 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:10:15.362 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +13:10:15.362 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:10:15.362 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:10:15.363 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:10:15.363 SCRIPT : ----------------- +13:10:15.363 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:10:15.363 SCRIPT : -- Stack trace -- +13:10:15.363 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:10:15.363 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:10:15.363 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +13:10:15.363 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:10:15.364 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:10:15.364 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:10:15.364 SCRIPT : ----------------- +13:10:15.366 SCRIPT (W): Slot_Chat Has no Content! +13:10:15.366 SCRIPT (W): Slot_VON Has no Content! +13:10:15.366 SCRIPT (W): Slot_GameVersion Has no Content! +13:10:15.366 SCRIPT (W): Slot_Notifications Has no Content! +13:10:15.367 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon diff --git a/docs/evidence/native-2026-09-19-130347-core-loops/source-provenance.json b/docs/evidence/native-2026-09-19-130347-core-loops/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-130347-core-loops/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-130347-core-loops/source-sha256.json b/docs/evidence/native-2026-09-19-130347-core-loops/source-sha256.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/native-2026-09-19-130347-core-loops/source-sha256.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/native-2026-09-19-131041-companion-loops/console.log.txt b/docs/evidence/native-2026-09-19-131041-companion-loops/console.log.txt new file mode 100644 index 0000000..ef2e550 --- /dev/null +++ b/docs/evidence/native-2026-09-19-131041-companion-loops/console.log.txt @@ -0,0 +1,1029 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-10-41\console.log started at 2026-09-19 13:10:41 (2026-09-19 11:10:41 UTC) + +13:10:41.262 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-10-41' to filesystem under name logs +13:10:41.262 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +13:10:41.262 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +13:10:41.264 PROFILING : Workbench Create Engine took: 11.574000 ms +13:10:42.301 INIT : INIT : Workbench Init Engine +13:10:42.301 ENGINE : Initializing engine, version 192142 +13:10:42.301 ENGINE : CLI Params: -gproj Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/addons -profile Z:/tmp/erri-workbench-profile -logconsole -wbModule WorldEditor -load Worlds/ERR_Everon.ent -plugin ERR_ValidateWorldPlugin -errPlay 1 -errSmoke 1 -errSmokeOutcome victory -noThrow -disableCrashReporter +13:10:42.308 ENGINE : Addon dirs: +13:10:42.308 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/' +13:10:42.308 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +13:10:42.308 ENGINE : dir: './addons' +13:10:42.308 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +13:10:42.308 ENGINE : Available addons: +13:10:42.308 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:10:42.308 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:10:42.308 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:10:42.309 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:10:42.309 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:10:42.309 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +13:10:42.309 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +13:10:42.309 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +13:10:42.309 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +13:10:42.309 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +13:10:42.309 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +13:10:42.309 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +13:10:42.423 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +13:10:42.426 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +13:10:42.426 ENGINE : CPU vendor : AuthenticAMD +13:10:42.426 ENGINE : CPU type : 2 +13:10:42.426 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +13:10:42.426 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +13:10:42.426 ENGINE : CPU count logical : 16 +13:10:42.426 ENGINE : CPU count physical : 8 +13:10:42.426 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +13:10:42.426 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +13:10:42.426 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +13:10:42.427 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +13:10:42.427 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +13:10:42.427 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +13:10:42.427 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +13:10:42.564 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +13:10:42.565 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +13:10:42.565 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-10-41/resourceDatabase.rdb) +13:10:42.709 RESOURCES : RESOURCES : ResourceDB: full scan +13:10:42.714 RESOURCES : RESOURCES : scanning... +13:10:42.714 RESOURCES : RESOURCES : scanning @"ERR_Chat" +13:10:42.715 RESOURCES : RESOURCES : scanning @"ERR_Map" +13:10:42.717 RESOURCES : RESOURCES : scanning @"ERR_Intel" +13:10:42.718 RESOURCES : RESOURCES : scanning @"ERR_Ai" +13:10:42.719 RESOURCES : RESOURCES : scanning @"ERR_Core" +13:10:42.723 RESOURCES : RESOURCES : scanning @"ArmaReforger" +13:10:42.856 RESOURCES : RESOURCES : scanning @"core" +13:10:42.860 RESOURCES : RESOURCES : scanning @"profile" +13:10:42.860 RESOURCES : RESOURCES : scanning @"logs" +13:10:42.861 RESOURCES : RESOURCES : processing meta-files... +13:10:42.928 RESOURCES : RESOURCES : processing files... +13:10:42.940 INIT : Workbench startup +13:10:42.940 INIT : Workbench Init Engine +13:10:42.940 RESOURCES : ResourceDB: full scan +13:10:42.940 RESOURCES : processing files... +13:10:42.940 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +13:10:42.940 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +13:10:42.940 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +13:10:42.940 RESOURCES : RESOURCES : processing folders... +13:10:42.947 RESOURCES : RESOURCES : creating GUID-item mapping... +13:10:42.962 RESOURCES : RESOURCES : building tree... +13:10:43.021 PROFILING : ResourceDB: full scan took: 311.549900 ms +13:10:43.022 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +13:10:43.023 RESOURCES : ResourceDB: written 804/804 bytes +13:10:43.023 RESOURCES : ResourceDB: cache successfully saved +13:10:43.023 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +13:10:43.025 RESOURCES : ResourceDB: written 819/819 bytes +13:10:43.025 RESOURCES : ResourceDB: cache successfully saved +13:10:43.025 RESOURCES : ResourceDB: saving cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +13:10:43.026 RESOURCES : ResourceDB: written 227/227 bytes +13:10:43.027 RESOURCES : ResourceDB: cache successfully saved +13:10:43.027 RESOURCES : ResourceDB: saving cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +13:10:43.028 RESOURCES : ResourceDB: written 1909/1909 bytes +13:10:43.028 RESOURCES : ResourceDB: cache successfully saved +13:10:43.028 RESOURCES : ResourceDB: saving cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +13:10:43.030 RESOURCES : ResourceDB: written 6865/6865 bytes +13:10:43.030 RESOURCES : ResourceDB: cache successfully saved +13:10:43.030 RESOURCES : ResourceDB: saving cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +13:10:43.032 RESOURCES : ResourceDB: written 206/206 bytes +13:10:43.032 RESOURCES : ResourceDB: cache successfully saved +13:10:43.032 RESOURCES : ResourceDB: saving cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-10-41/resourceDatabase.rdb) +13:10:43.034 RESOURCES : ResourceDB: written 162/162 bytes +13:10:43.034 RESOURCES : ResourceDB: cache successfully saved +13:10:43.034 ENGINE : GameProject load +13:10:43.034 ENGINE : Loaded addons: +13:10:43.034 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +13:10:43.034 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +13:10:43.034 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:10:43.034 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:10:43.034 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:10:43.034 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:10:43.034 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:10:43.036 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +13:10:43.037 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +13:10:43.037 ENGINE : Engine user settings config loaded +13:10:43.037 PROFILING : Settings changed took: 0.001800 ms +13:10:43.149 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +13:10:43.151 RENDER : Basic screen setup: +13:10:43.151 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +13:10:43.151 RENDER : MSAA : none +13:10:43.167 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +13:10:43.167 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +13:10:43.167 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +13:10:43.167 RENDER : * core clocks 2720 MHz, memory 1124 MHz +13:10:43.167 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +13:10:43.167 RENDER : AMD AGS correctly initialized +13:10:43.168 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +13:10:43.168 RENDER : Detected output devices: +13:10:43.168 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +13:10:43.168 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +13:10:43.168 RENDER : Concurrent frames limit 2 +13:10:43.259 RENDER : DX12 device successfully created by AMD AGS library +13:10:43.259 RENDER : * user markers not supported in this version AMD SW +13:10:43.259 RENDER : Graphics device features +13:10:43.259 RENDER : Needed: +13:10:43.259 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +13:10:43.259 RENDER : Optional: +13:10:43.259 RENDER : * Allow tearing (VSYNC) : 1 +13:10:43.259 RENDER : * 16 bits : 1 +13:10:43.259 RENDER : * Resource heap tier : 3 +13:10:43.259 RENDER : * Persistent heaps (DRED) : 1 +13:10:43.259 RENDER : * DRED 1.2 is supported by compiler +13:10:43.279 RENDER : Main RT format setup. +13:10:43.279 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +13:10:43.279 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +13:10:43.281 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +13:10:43.310 PROFILING : Settings changed took: 0.021500 ms +13:10:43.887 AUDIO : Endpoint: Speakers (PulseAudio Output) +13:10:43.887 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +13:10:43.887 AUDIO : Audio client: +13:10:43.887 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +13:10:43.891 RENDER : RENDER : Reload shaders +13:10:43.891 RENDER : Enfusion shader version 13 +13:10:43.891 INIT : INIT : ShaderListReload +13:10:43.891 PROFILING : ShaderListReload took: 0.000500 ms +13:10:44.030 AUDIO : Endpoint: Speakers (PulseAudio Output) +13:10:44.030 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +13:10:44.030 AUDIO : Audio client: +13:10:44.030 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +13:10:44.247 RENDER : Loaded 3752 newer shader binaries +13:10:44.247 PROFILING : Reload shaders took: 356.409700 ms +13:10:44.247 ENGINE : Initializing inputs. +13:10:44.262 NETWORK : Initializing networking. +13:10:44.262 NETWORK : Using new GameRplScheduler. +13:10:44.263 SCRIPT : SCRIPT : Initializing scripts +13:10:44.263 SCRIPT : SCRIPT : ScriptProjectManager init +13:10:46.489 PROFILING : ScriptProjectManager init took: 2226.402500 ms +13:10:46.582 PROFILING : Initializing scripts took: 2318.828300 ms +13:10:46.600 ENGINE : Enfusion engine successfully created. +13:10:46.600 PROFILING : Workbench Init Engine took: 4298.739300 ms +13:10:46.600 INIT : INIT : Workbench Create Game +13:10:46.612 GUI : Using default language (en_us) +13:10:46.612 GUI : Loading 'en_us' localization file. +13:10:46.612 INIT : INIT : Loading StringTable +13:10:46.638 PROFILING : Loading StringTable took: 26.050300 ms +13:10:46.638 SCRIPT : SCRIPT : Compiling GameLib scripts +13:10:46.716 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:10:46.716 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:10:46.717 PROFILING : Compiling GameLib scripts took: 79.204900 ms +13:10:46.717 SCRIPT : SCRIPT : Compiling Game scripts +13:10:47.996 INIT : Workbench Create Game +13:10:47.996 SCRIPT : Compiling Game scripts +13:10:47.996 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:10:47.996 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:10:48.155 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:10:48.285 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:10:48.318 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:10:48.429 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:10:48.429 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:10:48.429 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:10:48.429 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:10:48.464 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:10:48.527 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:10:48.527 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:10:48.529 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:10:48.568 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:10:48.569 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:10:48.570 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:10:48.570 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:10:48.595 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:10:48.630 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:10:48.914 SCRIPT : Module: WorkbenchGame; loaded 172x files; 617x classes; used 2482K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: e963af0e +13:10:48.922 SCRIPT : Module: Game; loaded 5780x files; 11382x classes; used 33615K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 6264db09 +13:10:48.964 PROFILING : Compiling Game scripts took: 2247.265200 ms +13:10:48.970 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:10:49.009 ENGINE : Game successfully created. +13:10:49.010 PROFILING : Workbench Create Game took: 2410.432000 ms +13:10:49.018 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/thumbnails +13:10:49.878 INIT : INIT : Workbench Reload Game +13:10:49.879 ENGINE : Game destroyed. +13:10:49.888 GUI : Using default language (en_us) +13:10:49.888 GUI : Loading 'en_us' localization file. +13:10:49.888 INIT : INIT : Loading StringTable +13:10:49.900 PROFILING : Loading StringTable took: 11.689400 ms +13:10:49.900 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:10:49.907 SCRIPT : Unable to register a script command due keyword duplicity: ban +13:10:49.907 SCRIPT : Unable to register a script command due keyword duplicity: kick +13:10:49.907 ENGINE : Game successfully created. +13:10:49.907 ENGINE : Game successfully initialized. +13:10:49.907 PROFILING : Workbench Reload Game took: 29.651500 ms +13:10:50.716 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +13:10:51.806 PROFILING : Entities load took: 1090.441100 ms +13:10:51.818 WORLD : WORLD : CreateEntities +13:10:51.823 WORLD : WORLD : NotifyBeforeEntitiesCreated +13:10:51.823 PROFILING : NotifyBeforeEntitiesCreated took: 0.002500 ms +13:10:51.824 WORLD : WORLD : Wait for preloading data +13:10:51.824 PROFILING : Wait for preloading data took: 0.004100 ms +13:10:51.946 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +13:10:51.946 PROFILING : PROFILING : Terrain load +13:10:54.010 PROFILING : Terrain load took: 2063.661700 ms +13:10:57.930 WORLD : CreateEntities +13:10:57.931 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" +13:10:57.931 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:10:57.931 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:11:08.832 WORLD : WORLD : NotifyBeforeEntitiesInitialized +13:11:08.833 PROFILING : NotifyBeforeEntitiesInitialized took: 0.005300 ms +13:11:09.287 WORLD : WORLD : NotifyEntitiesInitialized +13:11:09.287 TERRAIN : TERRAIN : Initializing road networks... +13:11:09.289 PROFILING : Initializing road networks... took: 2.175200 ms +13:11:09.290 PROFILING : NotifyEntitiesInitialized took: 2.507900 ms +13:11:09.290 PROFILING : CreateEntities took: 17471.066300 ms +13:11:09.462 PROFILING : * WorldEditor: LoadWorld: 18753.282500 ms +13:11:10.932 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +13:11:10.933 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +13:11:10.935 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +13:11:10.936 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +13:11:11.027 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +13:11:11.027 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +13:11:11.027 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +13:11:11.027 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +13:11:11.027 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +13:11:11.027 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +13:11:11.027 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +13:11:11.027 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +13:11:11.052 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +13:11:11.077 BACKEND : Attempting online Game Config instead. +13:11:14.460 INIT : INIT : Workbench Reload Game +13:11:14.462 ENGINE : Game destroyed. +13:11:14.468 GUI : Using default language (en_us) +13:11:14.468 GUI : Loading 'en_us' localization file. +13:11:14.468 INIT : INIT : Loading StringTable +13:11:14.488 PROFILING : Loading StringTable took: 19.219000 ms +13:11:14.488 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:11:14.497 SCRIPT : Unable to register a script command due keyword duplicity: ban +13:11:14.497 SCRIPT : Unable to register a script command due keyword duplicity: kick +13:11:14.497 ENGINE : Game successfully created. +13:11:14.497 ENGINE : Game successfully initialized. +13:11:14.497 PROFILING : Workbench Reload Game took: 37.291100 ms +13:11:14.500 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +13:11:14.554 PLATFORM : Save data from container 'settings' have been loaded +13:11:14.645 PLATFORM : Save data from container 'sessions' have been loaded +13:11:14.645 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +13:11:14.645 ENGINE : Game user settings config loaded +13:11:14.743 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +13:11:14.750 WORLD : WORLD : Game::LoadEntities +13:11:14.750 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +13:11:14.751 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +13:11:14.751 WORLD : WORLD : CreateEntities +13:11:14.751 WORLD : WORLD : CreateEntities +13:11:14.751 WORLD : WORLD : NotifyBeforeEntitiesCreated +13:11:14.764 RESOURCES : Loaded mission headers from 7 addon(s)! +13:11:14.764 PROFILING : NotifyBeforeEntitiesCreated took: 12.890900 ms +13:11:14.764 WORLD : WORLD : Wait for preloading data +13:11:14.764 PROFILING : Wait for preloading data took: 0.000400 ms +13:11:19.322 WORLD : Game::LoadEntities +13:11:19.322 WORLD : CreateEntities +13:11:19.322 WORLD : CreateEntities +13:11:19.322 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" +13:11:19.322 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:11:19.322 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:11:20.748 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +13:11:20.748 ENTITY : CreateComponent 'Hierarchy' +13:11:20.748 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +13:11:20.748 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +13:11:20.748 ENTITY : CreateComponent 'Hierarchy' +13:11:20.748 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +13:11:20.749 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +13:11:20.749 ENTITY : CreateComponent 'Hierarchy' +13:11:20.749 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +13:11:20.754 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +13:11:20.754 ENTITY : CreateComponent 'Hierarchy' +13:11:20.754 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +13:11:20.754 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +13:11:20.754 ENTITY : CreateComponent 'Hierarchy' +13:11:20.754 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +13:11:20.754 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +13:11:20.754 ENTITY : CreateComponent 'Hierarchy' +13:11:20.754 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +13:11:20.758 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +13:11:20.758 ENTITY : CreateComponent 'Hierarchy' +13:11:20.758 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +13:11:20.758 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +13:11:20.758 ENTITY : CreateComponent 'Hierarchy' +13:11:20.758 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +13:11:20.758 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +13:11:20.758 ENTITY : CreateComponent 'Hierarchy' +13:11:20.758 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +13:11:26.120 WORLD : WORLD : NotifyBeforeEntitiesInitialized +13:11:26.120 PROFILING : NotifyBeforeEntitiesInitialized took: 0.038400 ms +13:11:28.179 WORLD : InitEntities 'world' +13:11:28.179 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:11:28.179 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:11:28.207 WORLD : InitEntities 'world' +13:11:28.207 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:11:28.207 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +13:11:28.208 WORLD : WORLD : NotifyEntitiesInitialized +13:11:28.208 TERRAIN : TERRAIN : Initializing road networks... +13:11:28.210 PROFILING : Initializing road networks... took: 2.515000 ms +13:11:28.210 DEFAULT : DEFAULT : WorldVolumesCollection +13:11:28.272 PROFILING : WorldVolumesCollection took: 61.835100 ms +13:11:28.272 INIT : INIT : SoundWorldInit +13:11:28.288 PROFILING : SoundWorldInit took: 15.187000 ms +13:11:28.288 PROFILING : NotifyEntitiesInitialized took: 79.857700 ms +13:11:28.288 PROFILING : CreateEntities took: 13536.351200 ms +13:11:28.288 PROFILING : CreateEntities took: 13536.529500 ms +13:11:28.288 WORLD : WORLD : Wait for preloading data around camera +13:11:28.288 PROFILING : Wait for preloading data around camera took: 0.001000 ms +13:11:28.288 WORLD : WORLD : EOnActivate +13:11:28.322 PROFILING : EOnActivate took: 33.115200 ms +13:11:28.322 PROFILING : Game::LoadEntities took: 13571.524300 ms +13:11:28.631 DEFAULT : Entered offline game state. +13:11:28.734 NETWORK : Player connected: connectionID=2147483646 +13:11:28.734 NETWORK : ### Connecting player: connectionID=2147483646, Name= +13:11:28.735 NETWORK : ### Creating player: PlayerId=1, Name=jakub +13:11:28.739 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:11:28.739 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +13:11:28.740 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:11:28.740 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:11:28.740 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:11:28.741 SCRIPT (W): Can't open config file "" +13:11:28.749 WORLD : InitEntities 'world' +13:11:28.750 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:11:28.750 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +13:11:28.750 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:11:28.750 SCRIPT (W): Slot_Chat Has no Content! +13:11:28.751 SCRIPT (W): Slot_VON Has no Content! +13:11:28.751 SCRIPT (W): Slot_AvailableActions Has no Content! +13:11:28.751 SCRIPT (W): Slot_Vehicle Has no Content! +13:11:28.751 SCRIPT (W): Slot_GameVersion Has no Content! +13:11:28.751 SCRIPT (W): Slot_Notifications Has no Content! +13:11:28.751 SCRIPT (W): Slot_Hints Has no Content! +13:11:28.765 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:11:28.766 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +13:11:28.766 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:11:28.767 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:11:28.767 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:11:28.771 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +13:11:28.771 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +13:11:28.771 NETWORK : Players connecting: 0 +13:11:28.772 NETWORK : Players connected: 1 / 1 +13:11:28.800 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/autosaves +13:11:28.802 PROFILING : Workbench startup took: 47608.530700 ms +13:11:28.824 WORLD : Frame start +13:11:28.824 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +13:11:28.838 WORLD : UpdateEntities +13:11:28.838 WORLD : Frame +13:11:28.838 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +13:11:29.012 WORLD : UpdateEntities +13:11:29.012 WORLD : PostFrame +13:11:29.012 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +13:11:29.012 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:11:29.055 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:11:29.055 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:11:29.055 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +13:11:29.055 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +13:11:29.198 RENDER : RENDER : ObjectsHeightMap::Build +13:11:29.198 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +13:11:29.373 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 175.311900 ms +13:11:29.382 PROFILING : ObjectsHeightMap::Build took: 183.747800 ms +13:11:30.541 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +13:11:30.560 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +13:11:30.561 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +13:11:30.588 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +13:11:30.590 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +13:11:30.638 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +13:11:30.639 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +13:11:30.645 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +13:11:30.696 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +13:11:30.697 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +13:11:30.699 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +13:11:30.699 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +13:11:30.703 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +13:11:30.704 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +13:11:30.704 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +13:11:30.705 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +13:11:30.705 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +13:11:30.706 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +13:11:30.706 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +13:11:30.706 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +13:11:30.706 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +13:11:30.706 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:11:30.707 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +13:11:30.707 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +13:11:30.707 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:11:30.707 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +13:11:30.707 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +13:11:30.708 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:11:30.708 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:11:30.708 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:11:30.708 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:11:30.708 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:11:30.708 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +13:11:30.709 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:11:31.480 WORLD : UpdateEntities +13:11:31.480 WORLD : AfterPostSimulate +13:11:31.480 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +13:11:31.552 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:11:31.552 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:11:31.552 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:11:31.553 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:11:31.804 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5299,7499.7> up=0.995681 +13:11:31.804 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.315906 angularSpeed=0.0413675 +13:11:31.805 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:11:31.805 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6149,7501.97> +13:11:31.805 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3149,7501.97> terrainY=63.3165 tireTerrainGap=-0.00161362 +13:11:31.805 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6149,7501.97> radius=0.3 bottom=<7012.07,63.3149,7501.97> fraction=0.447619 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00152206 +13:11:31.805 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6021,7497.71> +13:11:31.805 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1521,7497.71> terrainY=64.1556 tireTerrainGap=-0.0035553 +13:11:31.805 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6021,7497.71> radius=0.45 bottom=<7009.88,64.1521,7497.71> fraction=0.438341 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00356293 +13:11:31.806 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2638,7497.74> +13:11:31.806 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8138,7497.74> terrainY=63.8179 tireTerrainGap=-0.00416946 +13:11:31.806 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2638,7497.74> radius=0.45 bottom=<7014.42,63.8138,7497.74> fraction=0.435556 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00417709 +13:11:31.806 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:11:32.058 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:11:32.058 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:11:32.058 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +13:11:32.058 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:11:32.566 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:11:32.566 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +13:11:32.566 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:11:32.822 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5353,7499.71> up=0.994344 +13:11:32.822 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954449 angularSpeed=0.027426 +13:11:32.822 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:11:32.823 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6195,7501.99> +13:11:32.823 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3195,7501.99> terrainY=63.3145 tireTerrainGap=0.0050087 +13:11:32.823 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6195,7501.99> radius=0.3 bottom=<7012.07,63.3195,7501.99> fraction=0.477578 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00506592 +13:11:32.823 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6024,7497.71> +13:11:32.823 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1524,7497.71> terrainY=64.1491 tireTerrainGap=0.00331879 +13:11:32.823 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6024,7497.71> radius=0.45 bottom=<7009.93,64.1524,7497.71> fraction=0.469731 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00334167 +13:11:32.824 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2654,7497.78> +13:11:32.824 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8154,7497.78> terrainY=63.8155 tireTerrainGap=-6.48499e-05 +13:11:32.824 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2654,7497.78> radius=0.45 bottom=<7014.47,63.8154,7497.78> fraction=0.454167 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-8.39233e-05 +13:11:32.824 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:11:33.077 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:11:33.078 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:11:33.078 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:11:33.078 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:11:33.332 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +13:11:33.583 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:11:33.584 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:11:33.584 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +13:11:33.837 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5328,7499.74> up=0.994157 +13:11:33.837 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0576569 angularSpeed=0.0589654 +13:11:33.837 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:11:33.837 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.615,7502.01> +13:11:33.837 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.315,7502.01> terrainY=63.3118 tireTerrainGap=0.00312424 +13:11:33.838 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.615,7502.01> radius=0.3 bottom=<7012.07,63.315,7502.01> fraction=0.468689 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00311279 +13:11:33.838 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5941,7497.71> +13:11:33.838 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1441,7497.71> terrainY=64.143 tireTerrainGap=0.00112152 +13:11:33.838 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5941,7497.71> radius=0.45 bottom=<7009.97,64.1441,7497.71> fraction=0.459899 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00118256 +13:11:33.838 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.26,7497.82> +13:11:33.838 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.81,7497.82> terrainY=63.8128 tireTerrainGap=-0.00278854 +13:11:33.839 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.26,7497.82> radius=0.45 bottom=<7014.51,63.81,7497.82> fraction=0.441944 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00277328 +13:11:33.839 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:11:34.088 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:11:34.088 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:11:34.089 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:11:34.089 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +13:11:34.590 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:11:34.591 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:11:34.591 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:11:34.591 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:11:34.841 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5298,7499.75> up=0.994384 +13:11:34.841 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:11:34.841 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:11:34.842 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6128,7502.02> +13:11:34.842 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3128,7502.02> terrainY=63.3108 tireTerrainGap=0.00199509 +13:11:34.842 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6128,7502.02> radius=0.3 bottom=<7012.07,63.3128,7502.02> fraction=0.46355 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00197983 +13:11:34.842 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.594,7497.72> +13:11:34.842 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.144,7497.72> terrainY=64.1415 tireTerrainGap=0.00247955 +13:11:34.843 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.594,7497.72> radius=0.45 bottom=<7009.98,64.144,7497.72> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +13:11:34.843 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2601,7497.84> +13:11:34.843 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00180435 +13:11:34.843 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2601,7497.84> radius=0.45 bottom=<7014.52,63.8101,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +13:11:34.843 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:11:35.096 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:11:35.097 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:11:35.097 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +13:11:35.097 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:11:35.603 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:11:35.603 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:11:35.604 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +13:11:35.604 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:11:35.860 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5298,7499.75> up=0.994384 +13:11:35.860 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:11:35.860 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:11:35.861 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6128,7502.02> +13:11:35.861 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3128,7502.02> terrainY=63.3108 tireTerrainGap=0.00199509 +13:11:35.861 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6128,7502.02> radius=0.3 bottom=<7012.07,63.3128,7502.02> fraction=0.46355 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00197983 +13:11:35.861 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.594,7497.72> +13:11:35.861 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.144,7497.72> terrainY=64.1415 tireTerrainGap=0.00247955 +13:11:35.862 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.594,7497.72> radius=0.45 bottom=<7009.98,64.144,7497.72> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +13:11:35.862 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2601,7497.84> +13:11:35.862 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00180435 +13:11:35.862 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2601,7497.84> radius=0.45 bottom=<7014.52,63.8101,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +13:11:35.862 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:11:36.117 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:11:36.118 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:11:36.119 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +13:11:36.133 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +13:11:36.134 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +13:11:36.134 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +13:11:36.135 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +13:11:36.135 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +13:11:36.135 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +13:11:36.135 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +13:11:37.082 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +13:11:37.122 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +13:11:37.303 SCRIPT : ERR SMOKE PASS: new identity may enter prison +13:11:37.303 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +13:11:37.303 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +13:11:37.303 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +13:11:37.303 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +13:11:37.304 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +13:11:37.304 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +13:11:37.304 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +13:11:37.304 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +13:11:37.304 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +13:11:37.304 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +13:11:37.304 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +13:11:37.305 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +13:11:37.305 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +13:11:37.305 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +13:11:37.305 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +13:11:37.309 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +13:11:37.310 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +13:11:37.310 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +13:11:37.310 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +13:11:37.313 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +13:11:37.313 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +13:11:37.313 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +13:11:37.313 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +13:11:37.313 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +13:11:37.313 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +13:11:37.313 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +13:11:37.314 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +13:11:37.314 SCRIPT : ERR SMOKE PASS: initial prisoner position +13:11:37.314 SCRIPT : ERR SMOKE PASS: radio and extraction vehicle exist +13:11:37.314 SCRIPT : ERR SMOKE PASS: authored gate exposes lock action +13:11:37.314 SCRIPT : ERR GEOMETRY: gate low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +13:11:37.315 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7160> low=<6090,211.444,7160> high=<6090,211.444,7160> +13:11:37.315 SCRIPT : ERR GEOMETRY: child origin=<6090,211.344,7154> low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +13:11:37.315 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7154> low=<6093,210.641,7153.87> high=<6096,214.409,7154.13> +13:11:37.315 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7154> low=<6087,210.641,7153.87> high=<6090,214.409,7154.13> +13:11:37.315 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6084,210.641,7153.87> high=<6087,214.409,7154.13> +13:11:37.316 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7163> low=<6095.87,210.641,7163> high=<6096.13,214.409,7166> +13:11:37.316 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7163> low=<6083.87,210.641,7163> high=<6084.13,214.409,7166> +13:11:37.316 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7160> low=<6095.87,210.641,7160> high=<6096.13,214.409,7163> +13:11:37.316 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7160> low=<6083.87,210.641,7160> high=<6084.13,214.409,7163> +13:11:37.316 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7157> low=<6095.87,210.641,7157> high=<6096.13,214.409,7160> +13:11:37.316 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7157> low=<6083.87,210.641,7157> high=<6084.13,214.409,7160> +13:11:37.317 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7154> low=<6095.87,210.641,7154> high=<6096.13,214.409,7157> +13:11:37.317 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6083.87,210.641,7154> high=<6084.13,214.409,7157> +13:11:37.317 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7166> low=<6093,210.641,7165.87> high=<6096,214.409,7166.13> +13:11:37.317 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7166> low=<6090,210.641,7165.87> high=<6093,214.409,7166.13> +13:11:37.317 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7166> low=<6087,210.641,7165.87> high=<6090,214.409,7166.13> +13:11:37.317 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7166> low=<6084,210.641,7165.87> high=<6087,214.409,7166.13> +13:11:37.317 SCRIPT : ERR SMOKE PASS: lock permits prisoner +13:11:37.318 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +13:11:37.319 SCRIPT : ERR SMOKE PASS: lock action advances mission +13:11:37.319 SCRIPT : ERR SMOKE PASS: two guaranteed physical cache documents +13:11:37.322 SCRIPT : ERR SMOKE PASS: test does not rely on random intel +13:11:37.326 SCRIPT : ERR SMOKE PASS: isolated test profile defence duration +13:11:37.813 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +13:11:38.085 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +13:11:39.328 RESOURCES : Screenshot saved to $logs:err-prison.png +13:11:40.351 SCRIPT : ERR SMOKE PASS: unlocked gate physically permits passage +13:11:40.352 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +13:11:42.885 SCRIPT : ERR SMOKE PASS: carried intel identifies radio through intel service +13:11:42.885 SCRIPT : ERR SMOKE PASS: radio rejects distant player +13:11:43.905 SCRIPT : ERR SMOKE: radio=<6500,159.756,7200> player=<6502,159.53,7200> +13:11:43.905 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +13:11:43.906 SCRIPT : ERR SMOKE PASS: identified radio starts defence +13:11:46.936 SCRIPT : ERR SMOKE PASS: occupied defence timer running +13:11:49.466 SCRIPT : ERR SMOKE PASS: leaving area resets defence +13:12:20.374 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +13:12:22.868 SCRIPT : ERR SMOKE PASS: continuous occupied defence completes +13:12:22.868 SCRIPT : ERR SMOKE PASS: boarding extraction vehicle +13:12:25.911 SCRIPT : ERR SMOKE PASS: physical extraction occupancy +13:12:26.421 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +13:12:26.422 SCRIPT : ERR SMOKE PASS: scripted escape reaches victory after physical vehicle occupancy +13:12:26.422 SCRIPT : ERR SMOKE COMPLETE: terminal=5 lostHelicopterCase=0 playerDeathCase=0 +13:12:26.528 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +13:12:26.531 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:12:26.531 SCRIPT (W): Slot_Chat Has no Content! +13:12:26.531 SCRIPT (W): Slot_VON Has no Content! +13:12:26.531 SCRIPT (W): Slot_GameVersion Has no Content! +13:12:26.531 SCRIPT (W): Slot_Notifications Has no Content! +13:12:28.578 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +13:12:28.578 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:12:28.578 SCRIPT : -- Stack trace -- +13:12:28.578 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:12:28.578 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:12:28.578 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +13:12:28.579 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:12:28.579 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:12:28.579 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:12:28.579 SCRIPT : ----------------- +13:12:28.579 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:12:28.579 SCRIPT : -- Stack trace -- +13:12:28.579 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:12:28.579 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:12:28.579 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +13:12:28.580 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:12:28.580 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:12:28.580 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:12:28.580 SCRIPT : ----------------- +13:12:28.582 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:12:28.582 SCRIPT (W): Slot_Chat Has no Content! +13:12:28.582 SCRIPT (W): Slot_VON Has no Content! +13:12:28.582 SCRIPT (W): Slot_GameVersion Has no Content! +13:12:28.582 SCRIPT (W): Slot_Notifications Has no Content! +13:12:28.584 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +13:12:30.468 RESOURCES : Screenshot saved to $logs:err-result.png +13:12:56.456 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +13:12:56.678 DEFAULT (W): Achievements cannot be saved. +13:12:56.678 DEFAULT (W): Achievements failed to save. Consecutive calls to Achievements API may fail. +13:12:56.975 PLATFORM : Save data from container 'settings' have been loaded +13:12:57.074 PLATFORM : Save data from container 'sessions' have been loaded +13:12:57.075 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +13:12:57.075 ENGINE : Game user settings config loaded +13:13:00.165 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +13:13:00.166 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +13:13:00.864 PROFILING : Entities load took: 698.132600 ms +13:13:00.866 WORLD : WORLD : Game::LoadEntities +13:13:00.867 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +13:13:00.867 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +13:13:00.867 WORLD : WORLD : CreateEntities +13:13:00.867 WORLD : WORLD : CreateEntities 'world' +13:13:00.867 WORLD : WORLD : NotifyBeforeEntitiesCreated +13:13:00.867 RESOURCES : Unloading all loaded mission headers from 7 addon(s)! +13:13:00.877 RESOURCES : Loaded mission headers from 7 addon(s)! +13:13:00.877 PROFILING : NotifyBeforeEntitiesCreated took: 9.673900 ms +13:13:00.877 WORLD : WORLD : Wait for preloading data +13:13:00.877 PROFILING : Wait for preloading data took: 0.001100 ms +13:13:00.878 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +13:13:00.878 PROFILING : PROFILING : Terrain load +13:13:02.441 PROFILING : Terrain load took: 1563.135200 ms +13:13:05.362 WORLD : Game::LoadEntities +13:13:05.362 WORLD : CreateEntities +13:13:05.362 WORLD : CreateEntities 'world' +13:13:05.362 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" +13:13:05.362 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:13:05.362 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:13:06.743 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +13:13:06.743 ENTITY : CreateComponent 'Hierarchy' +13:13:06.743 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +13:13:06.743 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +13:13:06.743 ENTITY : CreateComponent 'Hierarchy' +13:13:06.743 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +13:13:06.743 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +13:13:06.743 ENTITY : CreateComponent 'Hierarchy' +13:13:06.743 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +13:13:06.750 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +13:13:06.750 ENTITY : CreateComponent 'Hierarchy' +13:13:06.750 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +13:13:06.750 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +13:13:06.750 ENTITY : CreateComponent 'Hierarchy' +13:13:06.750 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +13:13:06.750 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +13:13:06.750 ENTITY : CreateComponent 'Hierarchy' +13:13:06.750 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +13:13:06.755 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +13:13:06.755 ENTITY : CreateComponent 'Hierarchy' +13:13:06.755 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +13:13:06.755 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +13:13:06.755 ENTITY : CreateComponent 'Hierarchy' +13:13:06.755 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +13:13:06.755 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +13:13:06.755 ENTITY : CreateComponent 'Hierarchy' +13:13:06.755 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +13:13:12.056 WORLD : WORLD : NotifyBeforeEntitiesInitialized +13:13:12.056 PROFILING : NotifyBeforeEntitiesInitialized took: 0.053000 ms +13:13:14.059 WORLD : InitEntities 'world' +13:13:14.059 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:13:14.059 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:13:14.060 WORLD : InitEntities 'world' +13:13:14.060 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:13:14.060 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +13:13:14.061 WORLD : WORLD : NotifyEntitiesInitialized +13:13:14.061 TERRAIN : TERRAIN : Initializing road networks... +13:13:14.063 PROFILING : Initializing road networks... took: 1.772100 ms +13:13:14.063 DEFAULT : DEFAULT : WorldVolumesCollection +13:13:14.124 PROFILING : WorldVolumesCollection took: 61.631500 ms +13:13:14.124 INIT : INIT : SoundWorldInit +13:13:14.125 PROFILING : SoundWorldInit took: 0.407500 ms +13:13:14.125 PROFILING : NotifyEntitiesInitialized took: 63.987800 ms +13:13:14.125 PROFILING : CreateEntities took: 13257.132600 ms +13:13:14.125 PROFILING : CreateEntities took: 13257.351900 ms +13:13:14.126 WORLD : WORLD : Wait for preloading data around camera +13:13:14.126 PROFILING : Wait for preloading data around camera took: 0.001300 ms +13:13:14.126 WORLD : WORLD : EOnActivate +13:13:14.153 PROFILING : EOnActivate took: 27.472600 ms +13:13:14.153 PROFILING : Game::LoadEntities took: 13286.913800 ms +13:13:14.154 PROFILING : * LoadEntities: 13287.273800 ms +13:13:14.561 DEFAULT : Entered offline game state. +13:13:14.668 NETWORK : Player connected: connectionID=2147483646 +13:13:14.668 NETWORK : ### Connecting player: connectionID=2147483646, Name= +13:13:14.668 NETWORK : ### Creating player: PlayerId=1, Name=jakub +13:13:14.670 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:13:14.670 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +13:13:14.670 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:13:14.670 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:13:14.671 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:13:14.672 SCRIPT (W): Can't open config file "" +13:13:14.672 SCRIPT (W): Cannot update game blocklist. Another request in progress. +13:13:14.673 WORLD : InitEntities 'world' +13:13:14.673 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:13:14.673 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +13:13:14.673 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:13:14.674 SCRIPT (W): Slot_Chat Has no Content! +13:13:14.674 SCRIPT (W): Slot_VON Has no Content! +13:13:14.674 SCRIPT (W): Slot_AvailableActions Has no Content! +13:13:14.674 SCRIPT (W): Slot_Vehicle Has no Content! +13:13:14.674 SCRIPT (W): Slot_GameVersion Has no Content! +13:13:14.674 SCRIPT (W): Slot_Notifications Has no Content! +13:13:14.674 SCRIPT (W): Slot_Hints Has no Content! +13:13:14.678 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:13:14.679 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +13:13:14.679 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:13:14.679 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:13:14.680 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:13:14.682 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +13:13:14.686 NETWORK : Players connecting: 0 +13:13:14.686 NETWORK : Players connected: 1 / 1 +13:13:14.712 WORLD : Frame start +13:13:14.713 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +13:13:14.725 WORLD : UpdateEntities +13:13:14.726 WORLD : Frame +13:13:14.726 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +13:13:14.863 WORLD : UpdateEntities +13:13:14.863 WORLD : PostFrame +13:13:14.864 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +13:13:14.864 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:13:14.887 RENDER : RENDER : ObjectsHeightMap::Build +13:13:14.887 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +13:13:15.068 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 180.601200 ms +13:13:15.074 PROFILING : ObjectsHeightMap::Build took: 186.838500 ms +13:13:16.260 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +13:13:16.266 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +13:13:16.267 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +13:13:16.275 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +13:13:16.277 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +13:13:16.286 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +13:13:16.287 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +13:13:16.291 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +13:13:16.302 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +13:13:16.302 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +13:13:16.304 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +13:13:16.305 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +13:13:16.309 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +13:13:16.309 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +13:13:16.309 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +13:13:16.311 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +13:13:16.311 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +13:13:16.311 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +13:13:16.311 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +13:13:16.312 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +13:13:16.312 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +13:13:16.312 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:13:16.312 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +13:13:16.312 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +13:13:16.313 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:13:16.313 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +13:13:16.313 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +13:13:16.313 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:13:16.313 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:13:16.313 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:13:16.313 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:13:16.314 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:13:16.314 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +13:13:16.314 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:13:16.987 WORLD : UpdateEntities +13:13:16.987 WORLD : AfterPostSimulate +13:13:16.988 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +13:13:17.019 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:13:17.019 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:13:17.019 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:13:17.019 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:13:17.268 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.08,63.5685,7499.7> up=0.99516 +13:13:17.268 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.36388 angularSpeed=0.125462 +13:13:17.268 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:13:17.269 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6195,7501.98> +13:13:17.269 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3195,7501.98> terrainY=63.3148 tireTerrainGap=0.00463486 +13:13:17.269 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6195,7501.98> radius=0.3 bottom=<7012.07,63.3195,7501.98> fraction=0.47563 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00463867 +13:13:17.269 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6014,7497.72> +13:13:17.269 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1514,7497.72> terrainY=64.1552 tireTerrainGap=-0.00376129 +13:13:17.269 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6014,7497.72> radius=0.45 bottom=<7009.88,64.1514,7497.72> fraction=0.43771 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00370026 +13:13:17.270 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2667,7497.74> +13:13:17.270 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8167,7497.74> terrainY=63.818 tireTerrainGap=-0.00124741 +13:13:17.270 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2667,7497.74> radius=0.45 bottom=<7014.42,63.8167,7497.74> fraction=0.448889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00124359 +13:13:17.270 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:13:17.521 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:13:17.522 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:13:17.522 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +13:13:17.522 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:13:18.031 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:13:18.032 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +13:13:18.032 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:13:18.280 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5237,7499.71> up=0.993901 +13:13:18.281 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0532861 angularSpeed=0.0688037 +13:13:18.281 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:13:18.281 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6184,7501.99> +13:13:18.281 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3184,7501.99> terrainY=63.3144 tireTerrainGap=0.00402069 +13:13:18.281 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6184,7501.99> radius=0.3 bottom=<7012.06,63.3184,7501.99> fraction=0.472829 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00402451 +13:13:18.281 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.91,64.6016,7497.72> +13:13:18.282 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.91,64.1516,7497.72> terrainY=64.1503 tireTerrainGap=0.00125885 +13:13:18.282 SCRIPT : ERR GEAR SUPPORT: center=<7009.91,64.6016,7497.72> radius=0.45 bottom=<7009.91,64.1516,7497.72> fraction=0.460157 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00123596 +13:13:18.282 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2659,7497.78> +13:13:18.282 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8159,7497.78> terrainY=63.8156 tireTerrainGap=0.000217438 +13:13:18.282 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2659,7497.78> radius=0.45 bottom=<7014.46,63.8159,7497.78> fraction=0.455556 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.000221252 +13:13:18.282 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:13:18.536 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:13:18.536 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:13:18.536 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:13:18.537 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:13:18.786 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +13:13:19.035 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:13:19.036 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:13:19.036 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:13:19.036 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +13:13:19.292 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.11,63.5348,7499.74> up=0.993765 +13:13:19.293 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0252265 angularSpeed=0.0313119 +13:13:19.293 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:13:19.293 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6145,7502.01> +13:13:19.293 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3145,7502.01> terrainY=63.3117 tireTerrainGap=0.00279999 +13:13:19.293 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6145,7502.01> radius=0.3 bottom=<7012.06,63.3145,7502.01> fraction=0.467019 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00274277 +13:13:19.293 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.5962,7497.72> +13:13:19.294 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.1462,7497.72> terrainY=64.1441 tireTerrainGap=0.00205231 +13:13:19.294 SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.5962,7497.72> radius=0.45 bottom=<7009.96,64.1462,7497.72> fraction=0.464126 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00211334 +13:13:19.294 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.2606,7497.83> +13:13:19.294 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.8106,7497.83> terrainY=63.8128 tireTerrainGap=-0.00217819 +13:13:19.294 SCRIPT : ERR GEAR SUPPORT: center=<7014.5,64.2606,7497.83> radius=0.45 bottom=<7014.5,63.8106,7497.83> fraction=0.444444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00222015 +13:13:19.294 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:13:19.544 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:13:19.544 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:13:19.544 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:13:19.545 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +13:13:20.047 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:13:20.048 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:13:20.048 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:13:20.048 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:13:20.358 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993808 +13:13:20.358 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:13:20.358 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:13:20.358 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6134,7502.01> +13:13:20.358 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3134,7502.01> terrainY=63.3116 tireTerrainGap=0.00187683 +13:13:20.358 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6134,7502.01> radius=0.3 bottom=<7012.07,63.3134,7502.01> fraction=0.463123 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00188828 +13:13:20.359 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.72> +13:13:20.359 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.72> terrainY=64.1423 tireTerrainGap=0.00231171 +13:13:20.359 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5946,7497.72> radius=0.45 bottom=<7009.97,64.1446,7497.72> fraction=0.465247 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00235748 +13:13:20.359 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +13:13:20.359 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8121 tireTerrainGap=-0.00199509 +13:13:20.360 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445432 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00200653 +13:13:20.360 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:13:20.360 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:13:20.361 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:13:20.361 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +13:13:20.361 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:13:20.852 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:13:20.852 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:13:20.852 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +13:13:20.853 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:13:21.363 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993808 +13:13:21.363 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:13:21.363 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:13:21.363 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6134,7502.01> +13:13:21.363 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3134,7502.01> terrainY=63.3116 tireTerrainGap=0.00187683 +13:13:21.364 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6134,7502.01> radius=0.3 bottom=<7012.07,63.3134,7502.01> fraction=0.463123 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00188828 +13:13:21.364 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.72> +13:13:21.364 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.72> terrainY=64.1423 tireTerrainGap=0.00231171 +13:13:21.364 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5946,7497.72> radius=0.45 bottom=<7009.97,64.1446,7497.72> fraction=0.465247 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00235748 +13:13:21.364 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +13:13:21.365 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8121 tireTerrainGap=-0.00199509 +13:13:21.365 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445432 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00200653 +13:13:21.365 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:13:21.365 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:13:21.366 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +13:13:21.372 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +13:13:21.373 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +13:13:21.373 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +13:13:21.373 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +13:13:21.373 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +13:13:21.373 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +13:13:21.374 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +13:13:21.842 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +13:13:21.871 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +13:13:21.931 SCRIPT : ERR SMOKE PASS: new identity may enter prison +13:13:21.931 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +13:13:21.932 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +13:13:21.932 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +13:13:21.932 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +13:13:21.932 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +13:13:21.932 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +13:13:21.932 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +13:13:21.933 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +13:13:21.933 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +13:13:21.933 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +13:13:21.933 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +13:13:21.933 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +13:13:21.933 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +13:13:21.933 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +13:13:21.934 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +13:13:21.936 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +13:13:21.936 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +13:13:21.937 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +13:13:21.937 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +13:13:21.942 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +13:13:21.943 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +13:13:21.943 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +13:13:21.943 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +13:13:21.943 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +13:13:21.943 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +13:13:21.943 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +13:13:21.943 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +13:13:21.944 SCRIPT : ERR SMOKE PASS: initial prisoner position +13:13:21.944 SCRIPT : ERR SMOKE PASS: radio and extraction vehicle exist +13:13:21.944 SCRIPT : ERR SMOKE PASS: authored gate exposes lock action +13:13:21.944 SCRIPT : ERR GEOMETRY: gate low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +13:13:21.944 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7160> low=<6090,211.444,7160> high=<6090,211.444,7160> +13:13:21.944 SCRIPT : ERR GEOMETRY: child origin=<6090,211.344,7154> low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +13:13:21.944 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7154> low=<6093,210.641,7153.87> high=<6096,214.409,7154.13> +13:13:21.944 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7154> low=<6087,210.641,7153.87> high=<6090,214.409,7154.13> +13:13:21.945 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6084,210.641,7153.87> high=<6087,214.409,7154.13> +13:13:21.945 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7163> low=<6095.87,210.641,7163> high=<6096.13,214.409,7166> +13:13:21.945 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7163> low=<6083.87,210.641,7163> high=<6084.13,214.409,7166> +13:13:21.945 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7160> low=<6095.87,210.641,7160> high=<6096.13,214.409,7163> +13:13:21.945 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7160> low=<6083.87,210.641,7160> high=<6084.13,214.409,7163> +13:13:21.945 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7157> low=<6095.87,210.641,7157> high=<6096.13,214.409,7160> +13:13:21.945 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7157> low=<6083.87,210.641,7157> high=<6084.13,214.409,7160> +13:13:21.946 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7154> low=<6095.87,210.641,7154> high=<6096.13,214.409,7157> +13:13:21.946 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6083.87,210.641,7154> high=<6084.13,214.409,7157> +13:13:21.946 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7166> low=<6093,210.641,7165.87> high=<6096,214.409,7166.13> +13:13:21.946 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7166> low=<6090,210.641,7165.87> high=<6093,214.409,7166.13> +13:13:21.946 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7166> low=<6087,210.641,7165.87> high=<6090,214.409,7166.13> +13:13:21.946 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7166> low=<6084,210.641,7165.87> high=<6087,214.409,7166.13> +13:13:21.946 SCRIPT : ERR SMOKE PASS: lock permits prisoner +13:13:21.946 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +13:13:21.948 SCRIPT : ERR SMOKE PASS: lock action advances mission +13:13:21.948 SCRIPT : ERR SMOKE PASS: two guaranteed physical cache documents +13:13:21.950 SCRIPT : ERR SMOKE PASS: test does not rely on random intel +13:13:21.952 SCRIPT : ERR SMOKE PASS: isolated test profile defence duration +13:13:22.432 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +13:13:22.847 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +13:13:23.949 RESOURCES : Screenshot saved to $logs:err-prison.png +13:13:24.960 SCRIPT : ERR SMOKE PASS: unlocked gate physically permits passage +13:13:24.961 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +13:13:27.495 SCRIPT : ERR SMOKE PASS: carried intel identifies radio through intel service +13:13:27.495 SCRIPT : ERR SMOKE PASS: radio rejects distant player +13:13:28.504 SCRIPT : ERR SMOKE: radio=<6500,159.756,7200> player=<6502,159.53,7200> +13:13:28.504 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +13:13:28.505 SCRIPT : ERR SMOKE PASS: identified radio starts defence +13:13:31.536 SCRIPT : ERR SMOKE PASS: occupied defence timer running +13:13:34.066 SCRIPT : ERR SMOKE PASS: leaving area resets defence +13:14:05.068 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +13:14:07.517 SCRIPT : ERR SMOKE PASS: continuous occupied defence completes +13:14:07.518 SCRIPT : ERR SMOKE PASS: boarding extraction vehicle +13:14:10.551 SCRIPT : ERR SMOKE PASS: physical extraction occupancy +13:14:11.110 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +13:14:11.111 SCRIPT : ERR SMOKE PASS: scripted escape reaches victory after physical vehicle occupancy +13:14:11.111 SCRIPT : ERR SMOKE COMPLETE: terminal=5 lostHelicopterCase=0 playerDeathCase=0 +13:14:11.226 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +13:14:11.228 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:14:11.229 SCRIPT (W): Slot_Chat Has no Content! +13:14:11.229 SCRIPT (W): Slot_VON Has no Content! +13:14:11.229 SCRIPT (W): Slot_GameVersion Has no Content! +13:14:11.229 SCRIPT (W): Slot_Notifications Has no Content! +13:14:13.276 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +13:14:13.277 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:14:13.277 SCRIPT : -- Stack trace -- +13:14:13.277 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:14:13.277 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:14:13.277 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +13:14:13.277 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:14:13.278 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:14:13.278 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:14:13.278 SCRIPT : ----------------- +13:14:13.278 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:14:13.278 SCRIPT : -- Stack trace -- +13:14:13.278 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:14:13.278 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:14:13.278 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +13:14:13.278 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:14:13.279 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:14:13.279 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:14:13.279 SCRIPT : ----------------- +13:14:13.280 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:14:13.280 SCRIPT (W): Slot_Chat Has no Content! +13:14:13.281 SCRIPT (W): Slot_VON Has no Content! +13:14:13.281 SCRIPT (W): Slot_GameVersion Has no Content! +13:14:13.281 SCRIPT (W): Slot_Notifications Has no Content! +13:14:13.281 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +13:14:15.162 RESOURCES : Screenshot saved to $logs:err-result.png diff --git a/docs/evidence/native-2026-09-19-131041-companion-loops/err-prison.png b/docs/evidence/native-2026-09-19-131041-companion-loops/err-prison.png new file mode 100644 index 0000000..c3e211a Binary files /dev/null and b/docs/evidence/native-2026-09-19-131041-companion-loops/err-prison.png differ diff --git a/docs/evidence/native-2026-09-19-131041-companion-loops/err-result.png b/docs/evidence/native-2026-09-19-131041-companion-loops/err-result.png new file mode 100644 index 0000000..f0aa574 Binary files /dev/null and b/docs/evidence/native-2026-09-19-131041-companion-loops/err-result.png differ diff --git a/docs/evidence/native-2026-09-19-131041-companion-loops/error.log.txt b/docs/evidence/native-2026-09-19-131041-companion-loops/error.log.txt new file mode 100644 index 0000000..1a96f82 --- /dev/null +++ b/docs/evidence/native-2026-09-19-131041-companion-loops/error.log.txt @@ -0,0 +1,199 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-10-41\error.log started at 2026-09-19 13:10:42 (2026-09-19 11:10:42 UTC) + +13:10:42.940 INIT : Workbench startup +13:10:42.940 INIT : Workbench Init Engine +13:10:42.940 RESOURCES : ResourceDB: full scan +13:10:42.940 RESOURCES : processing files... +13:10:42.940 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +13:10:42.940 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +13:10:42.940 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +13:10:47.996 INIT : Workbench Create Game +13:10:47.996 SCRIPT : Compiling Game scripts +13:10:47.996 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:10:47.996 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:10:48.155 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:10:48.285 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:10:48.318 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:10:48.429 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:10:48.429 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:10:48.429 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:10:48.429 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:10:48.464 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:10:48.527 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:10:48.527 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:10:48.529 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:10:48.568 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:10:48.569 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:10:48.570 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:10:48.570 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:10:48.595 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:10:48.630 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:10:57.930 WORLD : CreateEntities +13:10:57.931 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" +13:10:57.931 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:10:57.931 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:11:14.500 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +13:11:19.322 WORLD : Game::LoadEntities +13:11:19.322 WORLD : CreateEntities +13:11:19.322 WORLD : CreateEntities +13:11:19.322 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" +13:11:19.322 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:11:19.322 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:11:20.748 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +13:11:20.748 ENTITY : CreateComponent 'Hierarchy' +13:11:20.748 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +13:11:20.748 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +13:11:20.748 ENTITY : CreateComponent 'Hierarchy' +13:11:20.748 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +13:11:20.749 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +13:11:20.749 ENTITY : CreateComponent 'Hierarchy' +13:11:20.749 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +13:11:20.754 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +13:11:20.754 ENTITY : CreateComponent 'Hierarchy' +13:11:20.754 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +13:11:20.754 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +13:11:20.754 ENTITY : CreateComponent 'Hierarchy' +13:11:20.754 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +13:11:20.754 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +13:11:20.754 ENTITY : CreateComponent 'Hierarchy' +13:11:20.754 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +13:11:20.758 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +13:11:20.758 ENTITY : CreateComponent 'Hierarchy' +13:11:20.758 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +13:11:20.758 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +13:11:20.758 ENTITY : CreateComponent 'Hierarchy' +13:11:20.758 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +13:11:20.758 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +13:11:20.758 ENTITY : CreateComponent 'Hierarchy' +13:11:20.758 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +13:11:28.179 WORLD : InitEntities 'world' +13:11:28.179 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:11:28.179 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:11:28.739 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:11:28.739 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +13:11:28.740 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:11:28.740 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:11:28.740 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:11:28.741 SCRIPT (W): Can't open config file "" +13:11:28.749 WORLD : InitEntities 'world' +13:11:28.750 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:11:28.750 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +13:11:28.750 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:11:28.750 SCRIPT (W): Slot_Chat Has no Content! +13:11:28.751 SCRIPT (W): Slot_VON Has no Content! +13:11:28.751 SCRIPT (W): Slot_AvailableActions Has no Content! +13:11:28.751 SCRIPT (W): Slot_Vehicle Has no Content! +13:11:28.751 SCRIPT (W): Slot_GameVersion Has no Content! +13:11:28.751 SCRIPT (W): Slot_Notifications Has no Content! +13:11:28.751 SCRIPT (W): Slot_Hints Has no Content! +13:11:28.765 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:11:28.766 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +13:11:28.766 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:11:28.767 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:11:28.767 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:11:28.771 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +13:11:29.012 WORLD : UpdateEntities +13:11:29.012 WORLD : PostFrame +13:11:29.012 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +13:11:29.012 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:11:29.055 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:11:29.055 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:11:29.055 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +13:11:29.055 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +13:11:31.480 WORLD : UpdateEntities +13:11:31.480 WORLD : AfterPostSimulate +13:11:31.480 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +13:12:26.531 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:12:26.531 SCRIPT (W): Slot_Chat Has no Content! +13:12:26.531 SCRIPT (W): Slot_VON Has no Content! +13:12:26.531 SCRIPT (W): Slot_GameVersion Has no Content! +13:12:26.531 SCRIPT (W): Slot_Notifications Has no Content! +13:12:28.578 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:12:28.579 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:12:28.582 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:12:28.582 SCRIPT (W): Slot_Chat Has no Content! +13:12:28.582 SCRIPT (W): Slot_VON Has no Content! +13:12:28.582 SCRIPT (W): Slot_GameVersion Has no Content! +13:12:28.582 SCRIPT (W): Slot_Notifications Has no Content! +13:12:56.456 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +13:12:56.678 DEFAULT (W): Achievements cannot be saved. +13:12:56.678 DEFAULT (W): Achievements failed to save. Consecutive calls to Achievements API may fail. +13:13:05.362 WORLD : Game::LoadEntities +13:13:05.362 WORLD : CreateEntities +13:13:05.362 WORLD : CreateEntities 'world' +13:13:05.362 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" +13:13:05.362 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:13:05.362 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:13:06.743 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +13:13:06.743 ENTITY : CreateComponent 'Hierarchy' +13:13:06.743 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>') +13:13:06.743 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +13:13:06.743 ENTITY : CreateComponent 'Hierarchy' +13:13:06.743 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>') +13:13:06.743 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +13:13:06.743 ENTITY : CreateComponent 'Hierarchy' +13:13:06.743 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>') +13:13:06.750 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +13:13:06.750 ENTITY : CreateComponent 'Hierarchy' +13:13:06.750 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>') +13:13:06.750 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +13:13:06.750 ENTITY : CreateComponent 'Hierarchy' +13:13:06.750 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>') +13:13:06.750 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +13:13:06.750 ENTITY : CreateComponent 'Hierarchy' +13:13:06.750 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>') +13:13:06.755 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +13:13:06.755 ENTITY : CreateComponent 'Hierarchy' +13:13:06.755 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>') +13:13:06.755 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +13:13:06.755 ENTITY : CreateComponent 'Hierarchy' +13:13:06.755 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>') +13:13:06.755 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +13:13:06.755 ENTITY : CreateComponent 'Hierarchy' +13:13:06.755 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>') +13:13:14.059 WORLD : InitEntities 'world' +13:13:14.059 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:13:14.059 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:13:14.670 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:13:14.670 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +13:13:14.670 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:13:14.670 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:13:14.671 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:13:14.672 SCRIPT (W): Can't open config file "" +13:13:14.672 SCRIPT (W): Cannot update game blocklist. Another request in progress. +13:13:14.673 WORLD : InitEntities 'world' +13:13:14.673 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:13:14.673 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +13:13:14.673 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:13:14.674 SCRIPT (W): Slot_Chat Has no Content! +13:13:14.674 SCRIPT (W): Slot_VON Has no Content! +13:13:14.674 SCRIPT (W): Slot_AvailableActions Has no Content! +13:13:14.674 SCRIPT (W): Slot_Vehicle Has no Content! +13:13:14.674 SCRIPT (W): Slot_GameVersion Has no Content! +13:13:14.674 SCRIPT (W): Slot_Notifications Has no Content! +13:13:14.674 SCRIPT (W): Slot_Hints Has no Content! +13:13:14.678 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:13:14.679 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +13:13:14.679 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +13:13:14.679 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:13:14.680 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:13:14.863 WORLD : UpdateEntities +13:13:14.863 WORLD : PostFrame +13:13:14.864 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +13:13:14.864 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:13:16.987 WORLD : UpdateEntities +13:13:16.987 WORLD : AfterPostSimulate +13:13:16.988 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +13:14:11.228 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:14:11.229 SCRIPT (W): Slot_Chat Has no Content! +13:14:11.229 SCRIPT (W): Slot_VON Has no Content! +13:14:11.229 SCRIPT (W): Slot_GameVersion Has no Content! +13:14:11.229 SCRIPT (W): Slot_Notifications Has no Content! +13:14:13.277 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:14:13.278 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:14:13.280 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +13:14:13.280 SCRIPT (W): Slot_Chat Has no Content! +13:14:13.281 SCRIPT (W): Slot_VON Has no Content! +13:14:13.281 SCRIPT (W): Slot_GameVersion Has no Content! +13:14:13.281 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-131041-companion-loops/headless-launch.log.txt b/docs/evidence/native-2026-09-19-131041-companion-loops/headless-launch.log.txt new file mode 100644 index 0000000..6f12324 --- /dev/null +++ b/docs/evidence/native-2026-09-19-131041-companion-loops/headless-launch.log.txt @@ -0,0 +1,156 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 132 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 1 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerWorkbenchSteamDiag.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a001a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a001a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a001a4 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a0039a +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a0039a +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a0039a + wayland surface res id: 10 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x5555737f31a0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555737f31a0 +[Gamescope WSI] Destroyed swapchain: 0x5555737f31a0 +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x5555737f31a0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555737f31a0 +[Gamescope WSI] Destroyed swapchain: 0x5555737f31a0 +[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false +[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x55557376dbf0 - imageCount: 4 +[Gamescope WSI] Creating swapchain for xid: 0x1a001a4 - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_R8G8B8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true +[Gamescope WSI] Created swapchain for xid: 0x1a001a4 swapchain: 0x5555745e05e0 - imageCount: 3 +[Gamescope WSI] Destroying swapchain: 0x5555745e05e0 +[Gamescope WSI] Destroyed swapchain: 0x5555745e05e0 +[Gamescope WSI] Creating swapchain for xid: 0x1a001a4 - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_R8G8B8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true +[Gamescope WSI] Created swapchain for xid: 0x1a001a4 swapchain: 0x5555745e05e0 - imageCount: 3 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/native-2026-09-19-131041-companion-loops/launch-source-sha256.json b/docs/evidence/native-2026-09-19-131041-companion-loops/launch-source-sha256.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/native-2026-09-19-131041-companion-loops/launch-source-sha256.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/native-2026-09-19-131041-companion-loops/launch-source.json b/docs/evidence/native-2026-09-19-131041-companion-loops/launch-source.json new file mode 100644 index 0000000..18a2400 --- /dev/null +++ b/docs/evidence/native-2026-09-19-131041-companion-loops/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "13088f73-ce06-49ad-9a99-3b1b3473c064", + "captured_unix": 1789816239.3705337, + "source_root": "/home/jakub/devel/escapistsrereintroduced", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj", + "-addonsDir", + "Z:/home/jakub/devel/escapistsrereintroduced/addons", + "-profile", + "Z:/tmp/erri-workbench-profile", + "-logconsole", + "-wbModule=WorldEditor", + "-load", + "Worlds/ERR_Everon.ent", + "-plugin=ERR_ValidateWorldPlugin", + "-errPlay", + "1", + "-errSmoke", + "1", + "-errSmokeOutcome", + "victory", + "-noThrow", + "-disableCrashReporter" + ], + "manifest_sha256": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5" +} diff --git a/docs/evidence/native-2026-09-19-131041-companion-loops/report.json b/docs/evidence/native-2026-09-19-131041-companion-loops/report.json new file mode 100644 index 0000000..10be125 --- /dev/null +++ b/docs/evidence/native-2026-09-19-131041-companion-loops/report.json @@ -0,0 +1,9 @@ +{ + "log": "docs/evidence/native-2026-09-19-131041-companion-loops/console.log.txt", + "smoke_completions": 2, + "assertions_passed": 96, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" +} diff --git a/docs/evidence/native-2026-09-19-131041-companion-loops/rereintroduced-hq.log.txt b/docs/evidence/native-2026-09-19-131041-companion-loops/rereintroduced-hq.log.txt new file mode 100644 index 0000000..e0a04ad --- /dev/null +++ b/docs/evidence/native-2026-09-19-131041-companion-loops/rereintroduced-hq.log.txt @@ -0,0 +1,66 @@ +#1 t=6.8s M0 REGISTER group 1 [session=1789816288-1] +#2 t=6.8s M0 MORTAR DEPLOY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; authored gun and four-person crew; finite ammunition initialization pending [session=1789816288-1] +#3 t=7.7s M0 COURIER READY trip=0 state=1 delivered=0; 12 distinct original HE shells physically confirmed in existing western cache [session=1789816288-1] +#4 t=8.8s M0 REGISTER group 2 [session=1789816288-1] +#5 t=8.8s M0 REGISTER group 3 [session=1789816288-1] +#6 t=8.8s M0 REGISTER group 4 [session=1789816288-1] +#7 t=8.8s M0 REGISTER group 5 [session=1789816288-1] +#8 t=8.8s M0 REGISTER group 6 [session=1789816288-1] +#9 t=8.8s M0 REGISTER group 7 [session=1789816288-1] +#10 t=12.8s M1 REPORT X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: none drawn; vector X/Z=unknown (0s ago) [session=1789816288-1] +#11 t=13.8s M1 TRANSMIT unit 3 -> HQ (long-range) [session=1789816288-1] +#12 t=15.8s M1 RECEIVE HQ received from unit 3 [session=1789816288-1] +#13 t=17.8s M0 MORTAR CREW READY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; four original physical members, one manpack, 27 confirmed HE; new shell requests=27; allocation permanently closed [session=1789816288-1] +#14 t=18.8s M5 TRANSMIT HQ -> unit 6 (long-range) [session=1789816288-1] +#15 t=18.8s M4 TRANSMIT HQ -> unit 5 (long-range) [session=1789816288-1] +#16 t=18.8s M3 TRANSMIT HQ -> unit 4 (long-range) [session=1789816288-1] +#17 t=18.8s M2 TRANSMIT HQ -> unit 2 (long-range) [session=1789816288-1] +#18 t=20.8s M5 RECEIVE unit 6 received from HQ [session=1789816288-1] +#19 t=20.8s M5 ORDER DELIVERED group 6 from report M1: X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: none drawn; vector X/Z=unknown (8s ago) [session=1789816288-1] +#20 t=20.8s M4 RECEIVE unit 5 received from HQ [session=1789816288-1] +#21 t=20.8s M4 ORDER DELIVERED group 5 from report M1: X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: none drawn; vector X/Z=unknown (8s ago) [session=1789816288-1] +#22 t=20.8s M3 RECEIVE unit 4 received from HQ [session=1789816288-1] +#23 t=20.8s M3 ORDER DELIVERED group 4 from report M1: X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: none drawn; vector X/Z=unknown (8s ago) [session=1789816288-1] +#24 t=20.8s M2 RECEIVE unit 2 received from HQ [session=1789816288-1] +#25 t=20.8s M2 ORDER DELIVERED group 2 from report M1: X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: none drawn; vector X/Z=unknown (8s ago) [session=1789816288-1] +#26 t=32.9s M6 REPORT X=6502 Z=7200: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (0s ago) [session=1789816288-1] +#27 t=33.9s M6 TRANSMIT unit 4 -> HQ (long-range) [session=1789816288-1] +#28 t=35.9s M6 RECEIVE HQ received from unit 4 [session=1789816288-1] +#29 t=43s M7 REPORT X=6502 Z=7200: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (0s ago) [session=1789816288-1] +#30 t=44s M7 TRANSMIT unit 4 -> HQ (long-range) [session=1789816288-1] +#31 t=46s M7 RECEIVE HQ received from unit 4 [session=1789816288-1] +#32 t=53s M8 REPORT X=6502 Z=7200: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (0s ago) [session=1789816288-1] +#33 t=54s M8 TRANSMIT unit 4 -> HQ (long-range) [session=1789816288-1] +#34 t=56.1s M8 RECEIVE HQ received from unit 4 [session=1789816288-1] +#35 t=57.1s M0 STOP HQ stopped; tactical orders released [session=1789816288-1] +#1 t=6.5s M0 REGISTER group 1 [session=1789816394-2] +#2 t=6.5s M0 MORTAR DEPLOY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; authored gun and four-person crew; finite ammunition initialization pending [session=1789816394-2] +#3 t=7s M0 COURIER READY trip=0 state=1 delivered=0; 12 distinct original HE shells physically confirmed in existing western cache [session=1789816394-2] +#4 t=8.5s M0 REGISTER group 2 [session=1789816394-2] +#5 t=8.5s M0 REGISTER group 3 [session=1789816394-2] +#6 t=8.5s M0 REGISTER group 4 [session=1789816394-2] +#7 t=8.5s M0 REGISTER group 5 [session=1789816394-2] +#8 t=8.5s M0 REGISTER group 6 [session=1789816394-2] +#9 t=8.5s M0 REGISTER group 7 [session=1789816394-2] +#10 t=12s M1 REPORT X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: none drawn; vector X/Z=unknown (0s ago) [session=1789816394-2] +#11 t=13s M1 TRANSMIT unit 3 -> HQ (long-range) [session=1789816394-2] +#12 t=15s M1 RECEIVE HQ received from unit 3 [session=1789816394-2] +#13 t=18s M5 TRANSMIT HQ -> unit 6 (long-range) [session=1789816394-2] +#14 t=18s M4 TRANSMIT HQ -> unit 5 (long-range) [session=1789816394-2] +#15 t=18s M3 TRANSMIT HQ -> unit 4 (long-range) [session=1789816394-2] +#16 t=18s M2 TRANSMIT HQ -> unit 2 (long-range) [session=1789816394-2] +#17 t=18s M0 MORTAR CREW READY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; four original physical members, one manpack, 27 confirmed HE; new shell requests=27; allocation permanently closed [session=1789816394-2] +#18 t=20s M5 RECEIVE unit 6 received from HQ [session=1789816394-2] +#19 t=20s M5 ORDER DELIVERED group 6 from report M1: X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: none drawn; vector X/Z=unknown (8s ago) [session=1789816394-2] +#20 t=20s M4 RECEIVE unit 5 received from HQ [session=1789816394-2] +#21 t=20s M4 ORDER DELIVERED group 5 from report M1: X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: none drawn; vector X/Z=unknown (8s ago) [session=1789816394-2] +#22 t=20s M3 RECEIVE unit 4 received from HQ [session=1789816394-2] +#23 t=20s M3 ORDER DELIVERED group 4 from report M1: X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: none drawn; vector X/Z=unknown (8s ago) [session=1789816394-2] +#24 t=20s M2 RECEIVE unit 2 received from HQ [session=1789816394-2] +#25 t=20s M2 ORDER DELIVERED group 2 from report M1: X=6150 Z=7052: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: none drawn; vector X/Z=unknown (8s ago) [session=1789816394-2] +#26 t=43.1s M6 REPORT X=6502 Z=7200: at least 1 spotted nearby; on foot; speed/direction unknown; seen weapons: none drawn; vector X/Z=unknown (0s ago) [session=1789816394-2] +#27 t=44.2s M6 TRANSMIT unit 4 -> HQ (long-range) [session=1789816394-2] +#28 t=46.2s M6 RECEIVE HQ received from unit 4 [session=1789816394-2] +#29 t=53.2s M7 REPORT X=6502 Z=7200: at least 1 spotted nearby; in vehicle; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (0s ago) [session=1789816394-2] +#30 t=54.2s M7 TRANSMIT unit 4 -> HQ (long-range) [session=1789816394-2] +#31 t=56.2s M0 STOP HQ stopped; tactical orders released [session=1789816394-2] diff --git a/docs/evidence/native-2026-09-19-131041-companion-loops/runner.json.txt b/docs/evidence/native-2026-09-19-131041-companion-loops/runner.json.txt new file mode 100644 index 0000000..f21a635 --- /dev/null +++ b/docs/evidence/native-2026-09-19-131041-companion-loops/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789816458.8513372, + "console_sha256": "9b26683fd31ab7c561accf73fdd3a5968d283a54cc16a4738b263cef747ed413", + "end_source_sha256": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "13088f73-ce06-49ad-9a99-3b1b3473c064", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "started_unix": 1789816239.370611, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_13-10-41", + "rounds_required": 2, + "project": "chat", + "display": "headless Gamescope 1280x720/30Hz", + "dedicated_server": false, + "audio": "silent sink and per-test-stream mute" +} diff --git a/docs/evidence/native-2026-09-19-131041-companion-loops/script.log.txt b/docs/evidence/native-2026-09-19-131041-companion-loops/script.log.txt new file mode 100644 index 0000000..d18d3d3 --- /dev/null +++ b/docs/evidence/native-2026-09-19-131041-companion-loops/script.log.txt @@ -0,0 +1,597 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_13-10-41\script.log started at 2026-09-19 13:10:44 (2026-09-19 11:10:44 UTC) + +13:10:44.263 SCRIPT : SCRIPT : Initializing scripts +13:10:44.263 SCRIPT : SCRIPT : ScriptProjectManager init +13:10:46.638 SCRIPT : SCRIPT : Compiling GameLib scripts +13:10:46.716 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:10:46.716 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:10:46.717 SCRIPT : SCRIPT : Compiling Game scripts +13:10:47.996 SCRIPT : Compiling Game scripts +13:10:47.996 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:10:47.996 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:10:48.155 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:10:48.285 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:10:48.318 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:10:48.429 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:10:48.429 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:10:48.429 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:10:48.429 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:10:48.464 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:10:48.527 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:10:48.527 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:10:48.529 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:10:48.568 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:10:48.569 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:10:48.570 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:10:48.570 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:10:48.595 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:10:48.630 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:10:48.914 SCRIPT : Module: WorkbenchGame; loaded 172x files; 617x classes; used 2482K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: e963af0e +13:10:48.922 SCRIPT : Module: Game; loaded 5780x files; 11382x classes; used 33615K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 6264db09 +13:10:49.907 SCRIPT : Unable to register a script command due keyword duplicity: ban +13:10:49.907 SCRIPT : Unable to register a script command due keyword duplicity: kick +13:11:11.027 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +13:11:11.027 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +13:11:11.027 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +13:11:11.027 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +13:11:11.027 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +13:11:11.027 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +13:11:11.027 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +13:11:11.027 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +13:11:11.028 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +13:11:11.029 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +13:11:11.052 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +13:11:14.497 SCRIPT : Unable to register a script command due keyword duplicity: ban +13:11:14.497 SCRIPT : Unable to register a script command due keyword duplicity: kick +13:11:28.179 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:11:28.207 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +13:11:28.740 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:11:28.740 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:11:28.741 SCRIPT (W): Can't open config file "" +13:11:28.750 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:11:28.750 SCRIPT (W): Slot_Chat Has no Content! +13:11:28.751 SCRIPT (W): Slot_VON Has no Content! +13:11:28.751 SCRIPT (W): Slot_AvailableActions Has no Content! +13:11:28.751 SCRIPT (W): Slot_Vehicle Has no Content! +13:11:28.751 SCRIPT (W): Slot_GameVersion Has no Content! +13:11:28.751 SCRIPT (W): Slot_Notifications Has no Content! +13:11:28.751 SCRIPT (W): Slot_Hints Has no Content! +13:11:28.767 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:11:28.767 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:11:28.771 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +13:11:28.824 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +13:11:28.838 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +13:11:29.012 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:11:30.541 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +13:11:30.560 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +13:11:30.561 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +13:11:30.588 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +13:11:30.590 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +13:11:30.638 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +13:11:30.639 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +13:11:30.645 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +13:11:30.696 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +13:11:30.697 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +13:11:30.699 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +13:11:30.699 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +13:11:30.703 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +13:11:30.704 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +13:11:30.704 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +13:11:30.705 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +13:11:30.705 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +13:11:30.706 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +13:11:30.706 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +13:11:30.706 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +13:11:30.706 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +13:11:30.706 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:11:30.707 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +13:11:30.707 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +13:11:30.707 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:11:30.707 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +13:11:30.707 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +13:11:30.708 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:11:30.708 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:11:30.708 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:11:30.708 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:11:30.708 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:11:30.708 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +13:11:30.709 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:11:31.552 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:11:31.552 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:11:31.552 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:11:31.553 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:11:31.804 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5299,7499.7> up=0.995681 +13:11:31.804 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.315906 angularSpeed=0.0413675 +13:11:31.805 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:11:31.805 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6149,7501.97> +13:11:31.805 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3149,7501.97> terrainY=63.3165 tireTerrainGap=-0.00161362 +13:11:31.805 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6149,7501.97> radius=0.3 bottom=<7012.07,63.3149,7501.97> fraction=0.447619 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00152206 +13:11:31.805 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6021,7497.71> +13:11:31.805 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1521,7497.71> terrainY=64.1556 tireTerrainGap=-0.0035553 +13:11:31.806 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6021,7497.71> radius=0.45 bottom=<7009.88,64.1521,7497.71> fraction=0.438341 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00356293 +13:11:31.806 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2638,7497.74> +13:11:31.806 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8138,7497.74> terrainY=63.8179 tireTerrainGap=-0.00416946 +13:11:31.806 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2638,7497.74> radius=0.45 bottom=<7014.42,63.8138,7497.74> fraction=0.435556 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00417709 +13:11:31.806 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:11:32.058 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:11:32.058 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:11:32.058 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +13:11:32.058 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:11:32.566 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:11:32.566 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +13:11:32.566 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:11:32.822 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5353,7499.71> up=0.994344 +13:11:32.822 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954449 angularSpeed=0.027426 +13:11:32.822 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:11:32.823 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6195,7501.99> +13:11:32.823 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3195,7501.99> terrainY=63.3145 tireTerrainGap=0.0050087 +13:11:32.823 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6195,7501.99> radius=0.3 bottom=<7012.07,63.3195,7501.99> fraction=0.477578 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00506592 +13:11:32.823 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6024,7497.71> +13:11:32.823 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1524,7497.71> terrainY=64.1491 tireTerrainGap=0.00331879 +13:11:32.823 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6024,7497.71> radius=0.45 bottom=<7009.93,64.1524,7497.71> fraction=0.469731 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00334167 +13:11:32.824 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2654,7497.78> +13:11:32.824 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8154,7497.78> terrainY=63.8155 tireTerrainGap=-6.48499e-05 +13:11:32.824 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2654,7497.78> radius=0.45 bottom=<7014.47,63.8154,7497.78> fraction=0.454167 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-8.39233e-05 +13:11:32.824 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:11:33.077 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:11:33.078 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:11:33.078 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:11:33.078 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:11:33.332 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +13:11:33.583 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:11:33.584 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:11:33.584 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +13:11:33.837 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5328,7499.74> up=0.994157 +13:11:33.837 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0576569 angularSpeed=0.0589654 +13:11:33.837 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:11:33.837 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.615,7502.01> +13:11:33.837 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.315,7502.01> terrainY=63.3118 tireTerrainGap=0.00312424 +13:11:33.838 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.615,7502.01> radius=0.3 bottom=<7012.07,63.315,7502.01> fraction=0.468689 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00311279 +13:11:33.838 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5941,7497.71> +13:11:33.838 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1441,7497.71> terrainY=64.143 tireTerrainGap=0.00112152 +13:11:33.838 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5941,7497.71> radius=0.45 bottom=<7009.97,64.1441,7497.71> fraction=0.459899 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00118256 +13:11:33.838 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.26,7497.82> +13:11:33.838 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.81,7497.82> terrainY=63.8128 tireTerrainGap=-0.00278854 +13:11:33.839 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.26,7497.82> radius=0.45 bottom=<7014.51,63.81,7497.82> fraction=0.441944 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00277328 +13:11:33.839 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:11:34.088 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:11:34.088 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:11:34.089 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:11:34.089 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +13:11:34.590 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:11:34.591 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:11:34.591 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:11:34.591 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:11:34.841 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5298,7499.75> up=0.994384 +13:11:34.841 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:11:34.841 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:11:34.842 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6128,7502.02> +13:11:34.842 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3128,7502.02> terrainY=63.3108 tireTerrainGap=0.00199509 +13:11:34.842 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6128,7502.02> radius=0.3 bottom=<7012.07,63.3128,7502.02> fraction=0.46355 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00197983 +13:11:34.842 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.594,7497.72> +13:11:34.842 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.144,7497.72> terrainY=64.1415 tireTerrainGap=0.00247955 +13:11:34.843 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.594,7497.72> radius=0.45 bottom=<7009.98,64.144,7497.72> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +13:11:34.843 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2601,7497.84> +13:11:34.843 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00180435 +13:11:34.843 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2601,7497.84> radius=0.45 bottom=<7014.52,63.8101,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +13:11:34.843 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:11:35.096 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:11:35.097 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:11:35.097 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +13:11:35.097 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:11:35.603 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:11:35.603 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:11:35.604 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +13:11:35.604 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:11:35.860 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5298,7499.75> up=0.994384 +13:11:35.860 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:11:35.860 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:11:35.861 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6128,7502.02> +13:11:35.861 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3128,7502.02> terrainY=63.3108 tireTerrainGap=0.00199509 +13:11:35.861 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6128,7502.02> radius=0.3 bottom=<7012.07,63.3128,7502.02> fraction=0.46355 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00197983 +13:11:35.861 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.594,7497.72> +13:11:35.861 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.144,7497.72> terrainY=64.1415 tireTerrainGap=0.00247955 +13:11:35.862 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.594,7497.72> radius=0.45 bottom=<7009.98,64.144,7497.72> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +13:11:35.862 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2601,7497.84> +13:11:35.862 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00180435 +13:11:35.862 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2601,7497.84> radius=0.45 bottom=<7014.52,63.8101,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +13:11:35.862 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:11:36.118 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:11:36.118 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:11:36.119 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +13:11:36.133 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +13:11:36.134 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +13:11:36.134 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +13:11:36.135 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +13:11:36.135 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +13:11:36.135 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +13:11:36.135 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +13:11:37.082 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +13:11:37.122 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +13:11:37.303 SCRIPT : ERR SMOKE PASS: new identity may enter prison +13:11:37.303 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +13:11:37.303 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +13:11:37.303 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +13:11:37.303 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +13:11:37.304 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +13:11:37.304 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +13:11:37.304 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +13:11:37.304 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +13:11:37.304 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +13:11:37.304 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +13:11:37.304 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +13:11:37.305 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +13:11:37.305 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +13:11:37.305 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +13:11:37.305 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +13:11:37.309 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +13:11:37.310 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +13:11:37.310 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +13:11:37.310 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +13:11:37.313 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +13:11:37.313 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +13:11:37.313 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +13:11:37.313 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +13:11:37.313 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +13:11:37.313 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +13:11:37.313 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +13:11:37.314 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +13:11:37.314 SCRIPT : ERR SMOKE PASS: initial prisoner position +13:11:37.314 SCRIPT : ERR SMOKE PASS: radio and extraction vehicle exist +13:11:37.314 SCRIPT : ERR SMOKE PASS: authored gate exposes lock action +13:11:37.314 SCRIPT : ERR GEOMETRY: gate low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +13:11:37.315 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7160> low=<6090,211.444,7160> high=<6090,211.444,7160> +13:11:37.315 SCRIPT : ERR GEOMETRY: child origin=<6090,211.344,7154> low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +13:11:37.315 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7154> low=<6093,210.641,7153.87> high=<6096,214.409,7154.13> +13:11:37.315 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7154> low=<6087,210.641,7153.87> high=<6090,214.409,7154.13> +13:11:37.315 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6084,210.641,7153.87> high=<6087,214.409,7154.13> +13:11:37.316 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7163> low=<6095.87,210.641,7163> high=<6096.13,214.409,7166> +13:11:37.316 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7163> low=<6083.87,210.641,7163> high=<6084.13,214.409,7166> +13:11:37.316 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7160> low=<6095.87,210.641,7160> high=<6096.13,214.409,7163> +13:11:37.316 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7160> low=<6083.87,210.641,7160> high=<6084.13,214.409,7163> +13:11:37.316 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7157> low=<6095.87,210.641,7157> high=<6096.13,214.409,7160> +13:11:37.316 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7157> low=<6083.87,210.641,7157> high=<6084.13,214.409,7160> +13:11:37.317 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7154> low=<6095.87,210.641,7154> high=<6096.13,214.409,7157> +13:11:37.317 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6083.87,210.641,7154> high=<6084.13,214.409,7157> +13:11:37.317 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7166> low=<6093,210.641,7165.87> high=<6096,214.409,7166.13> +13:11:37.317 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7166> low=<6090,210.641,7165.87> high=<6093,214.409,7166.13> +13:11:37.317 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7166> low=<6087,210.641,7165.87> high=<6090,214.409,7166.13> +13:11:37.317 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7166> low=<6084,210.641,7165.87> high=<6087,214.409,7166.13> +13:11:37.317 SCRIPT : ERR SMOKE PASS: lock permits prisoner +13:11:37.318 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +13:11:37.319 SCRIPT : ERR SMOKE PASS: lock action advances mission +13:11:37.319 SCRIPT : ERR SMOKE PASS: two guaranteed physical cache documents +13:11:37.322 SCRIPT : ERR SMOKE PASS: test does not rely on random intel +13:11:37.326 SCRIPT : ERR SMOKE PASS: isolated test profile defence duration +13:11:37.813 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +13:11:38.085 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +13:11:40.351 SCRIPT : ERR SMOKE PASS: unlocked gate physically permits passage +13:11:40.352 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +13:11:42.885 SCRIPT : ERR SMOKE PASS: carried intel identifies radio through intel service +13:11:42.885 SCRIPT : ERR SMOKE PASS: radio rejects distant player +13:11:43.905 SCRIPT : ERR SMOKE: radio=<6500,159.756,7200> player=<6502,159.53,7200> +13:11:43.905 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +13:11:43.906 SCRIPT : ERR SMOKE PASS: identified radio starts defence +13:11:46.936 SCRIPT : ERR SMOKE PASS: occupied defence timer running +13:11:49.466 SCRIPT : ERR SMOKE PASS: leaving area resets defence +13:12:20.374 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +13:12:22.868 SCRIPT : ERR SMOKE PASS: continuous occupied defence completes +13:12:22.868 SCRIPT : ERR SMOKE PASS: boarding extraction vehicle +13:12:25.911 SCRIPT : ERR SMOKE PASS: physical extraction occupancy +13:12:26.421 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +13:12:26.422 SCRIPT : ERR SMOKE PASS: scripted escape reaches victory after physical vehicle occupancy +13:12:26.422 SCRIPT : ERR SMOKE COMPLETE: terminal=5 lostHelicopterCase=0 playerDeathCase=0 +13:12:26.528 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +13:12:26.531 SCRIPT (W): Slot_Chat Has no Content! +13:12:26.531 SCRIPT (W): Slot_VON Has no Content! +13:12:26.531 SCRIPT (W): Slot_GameVersion Has no Content! +13:12:26.531 SCRIPT (W): Slot_Notifications Has no Content! +13:12:28.578 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +13:12:28.578 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:12:28.578 SCRIPT : -- Stack trace -- +13:12:28.578 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:12:28.578 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:12:28.578 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +13:12:28.579 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:12:28.579 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:12:28.579 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:12:28.579 SCRIPT : ----------------- +13:12:28.579 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:12:28.579 SCRIPT : -- Stack trace -- +13:12:28.579 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:12:28.579 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:12:28.579 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +13:12:28.580 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:12:28.580 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:12:28.580 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:12:28.580 SCRIPT : ----------------- +13:12:28.582 SCRIPT (W): Slot_Chat Has no Content! +13:12:28.582 SCRIPT (W): Slot_VON Has no Content! +13:12:28.582 SCRIPT (W): Slot_GameVersion Has no Content! +13:12:28.582 SCRIPT (W): Slot_Notifications Has no Content! +13:12:28.584 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +13:12:56.456 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +13:13:14.059 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:13:14.060 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +13:13:14.670 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:13:14.671 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:13:14.672 SCRIPT (W): Can't open config file "" +13:13:14.672 SCRIPT (W): Cannot update game blocklist. Another request in progress. +13:13:14.673 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:13:14.674 SCRIPT (W): Slot_Chat Has no Content! +13:13:14.674 SCRIPT (W): Slot_VON Has no Content! +13:13:14.674 SCRIPT (W): Slot_AvailableActions Has no Content! +13:13:14.674 SCRIPT (W): Slot_Vehicle Has no Content! +13:13:14.674 SCRIPT (W): Slot_GameVersion Has no Content! +13:13:14.674 SCRIPT (W): Slot_Notifications Has no Content! +13:13:14.674 SCRIPT (W): Slot_Hints Has no Content! +13:13:14.679 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {259EE7B78C51B624}UAZ469.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:13:14.680 SCRIPT (W): SCR_EntityCatalogManagerComponent.GetFilteredEditorPrefabsOfAllFactions: Detected that {DF5CCB7C0FF049F4}Mi8MT_unarmed_transport.et is present in at least two different faction entity catalogs! Since this may cause issues, such as dupliacted entries in build mode, one of them will be discarded! This is only supported for items. Other things require creation of faction specific variants. +13:13:14.713 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +13:13:14.726 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +13:13:14.864 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:13:16.260 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +13:13:16.266 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +13:13:16.267 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +13:13:16.276 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +13:13:16.277 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +13:13:16.287 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +13:13:16.287 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +13:13:16.291 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +13:13:16.302 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +13:13:16.302 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +13:13:16.304 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +13:13:16.305 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +13:13:16.309 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +13:13:16.309 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +13:13:16.309 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +13:13:16.311 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +13:13:16.311 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +13:13:16.311 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +13:13:16.311 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +13:13:16.312 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +13:13:16.312 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +13:13:16.312 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:13:16.312 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +13:13:16.312 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +13:13:16.313 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:13:16.313 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +13:13:16.313 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +13:13:16.313 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:13:16.313 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:13:16.313 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:13:16.313 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:13:16.314 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:13:16.314 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +13:13:16.314 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:13:17.019 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:13:17.019 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:13:17.019 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:13:17.019 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:13:17.268 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.08,63.5685,7499.7> up=0.99516 +13:13:17.268 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.36388 angularSpeed=0.125462 +13:13:17.268 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:13:17.269 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6195,7501.98> +13:13:17.269 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3195,7501.98> terrainY=63.3148 tireTerrainGap=0.00463486 +13:13:17.269 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6195,7501.98> radius=0.3 bottom=<7012.07,63.3195,7501.98> fraction=0.47563 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00463867 +13:13:17.269 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6014,7497.72> +13:13:17.269 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1514,7497.72> terrainY=64.1552 tireTerrainGap=-0.00376129 +13:13:17.269 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6014,7497.72> radius=0.45 bottom=<7009.88,64.1514,7497.72> fraction=0.43771 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00370026 +13:13:17.270 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2667,7497.74> +13:13:17.270 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8167,7497.74> terrainY=63.818 tireTerrainGap=-0.00124741 +13:13:17.270 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2667,7497.74> radius=0.45 bottom=<7014.42,63.8167,7497.74> fraction=0.448889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00124359 +13:13:17.270 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:13:17.521 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:13:17.522 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:13:17.522 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +13:13:17.522 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:13:18.031 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:13:18.032 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +13:13:18.032 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:13:18.280 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5237,7499.71> up=0.993901 +13:13:18.281 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0532861 angularSpeed=0.0688037 +13:13:18.281 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:13:18.281 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6184,7501.99> +13:13:18.281 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3184,7501.99> terrainY=63.3144 tireTerrainGap=0.00402069 +13:13:18.281 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6184,7501.99> radius=0.3 bottom=<7012.06,63.3184,7501.99> fraction=0.472829 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00402451 +13:13:18.281 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.91,64.6016,7497.72> +13:13:18.282 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.91,64.1516,7497.72> terrainY=64.1503 tireTerrainGap=0.00125885 +13:13:18.282 SCRIPT : ERR GEAR SUPPORT: center=<7009.91,64.6016,7497.72> radius=0.45 bottom=<7009.91,64.1516,7497.72> fraction=0.460157 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00123596 +13:13:18.282 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2659,7497.78> +13:13:18.282 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8159,7497.78> terrainY=63.8156 tireTerrainGap=0.000217438 +13:13:18.282 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2659,7497.78> radius=0.45 bottom=<7014.46,63.8159,7497.78> fraction=0.455556 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.000221252 +13:13:18.282 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:13:18.536 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:13:18.536 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:13:18.536 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:13:18.537 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:13:18.786 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +13:13:19.035 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:13:19.036 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:13:19.036 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:13:19.036 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +13:13:19.292 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.11,63.5348,7499.74> up=0.993765 +13:13:19.293 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0252265 angularSpeed=0.0313119 +13:13:19.293 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:13:19.293 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6145,7502.01> +13:13:19.293 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3145,7502.01> terrainY=63.3117 tireTerrainGap=0.00279999 +13:13:19.293 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6145,7502.01> radius=0.3 bottom=<7012.06,63.3145,7502.01> fraction=0.467019 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00274277 +13:13:19.293 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.5962,7497.72> +13:13:19.294 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.1462,7497.72> terrainY=64.1441 tireTerrainGap=0.00205231 +13:13:19.294 SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.5962,7497.72> radius=0.45 bottom=<7009.96,64.1462,7497.72> fraction=0.464126 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00211334 +13:13:19.294 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.2606,7497.83> +13:13:19.294 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.8106,7497.83> terrainY=63.8128 tireTerrainGap=-0.00217819 +13:13:19.294 SCRIPT : ERR GEAR SUPPORT: center=<7014.5,64.2606,7497.83> radius=0.45 bottom=<7014.5,63.8106,7497.83> fraction=0.444444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00222015 +13:13:19.294 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:13:19.544 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:13:19.544 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:13:19.544 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:13:19.545 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +13:13:20.047 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:13:20.048 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:13:20.048 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:13:20.048 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:13:20.358 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993808 +13:13:20.358 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:13:20.358 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:13:20.358 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6134,7502.01> +13:13:20.358 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3134,7502.01> terrainY=63.3116 tireTerrainGap=0.00187683 +13:13:20.358 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6134,7502.01> radius=0.3 bottom=<7012.07,63.3134,7502.01> fraction=0.463123 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00188828 +13:13:20.359 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.72> +13:13:20.359 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.72> terrainY=64.1423 tireTerrainGap=0.00231171 +13:13:20.359 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5946,7497.72> radius=0.45 bottom=<7009.97,64.1446,7497.72> fraction=0.465247 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00235748 +13:13:20.359 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +13:13:20.359 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8121 tireTerrainGap=-0.00199509 +13:13:20.360 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445432 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00200653 +13:13:20.360 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:13:20.360 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:13:20.361 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:13:20.361 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +13:13:20.361 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:13:20.852 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:13:20.852 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:13:20.852 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +13:13:20.853 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:13:21.363 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993808 +13:13:21.363 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:13:21.363 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:13:21.363 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6134,7502.01> +13:13:21.363 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3134,7502.01> terrainY=63.3116 tireTerrainGap=0.00187683 +13:13:21.364 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6134,7502.01> radius=0.3 bottom=<7012.07,63.3134,7502.01> fraction=0.463123 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00188828 +13:13:21.364 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.72> +13:13:21.364 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.72> terrainY=64.1423 tireTerrainGap=0.00231171 +13:13:21.364 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5946,7497.72> radius=0.45 bottom=<7009.97,64.1446,7497.72> fraction=0.465247 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00235748 +13:13:21.364 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +13:13:21.365 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8121 tireTerrainGap=-0.00199509 +13:13:21.365 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445432 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00200653 +13:13:21.365 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:13:21.365 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:13:21.366 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +13:13:21.372 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +13:13:21.373 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +13:13:21.373 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +13:13:21.373 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +13:13:21.373 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +13:13:21.373 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +13:13:21.374 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +13:13:21.842 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +13:13:21.871 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +13:13:21.931 SCRIPT : ERR SMOKE PASS: new identity may enter prison +13:13:21.931 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +13:13:21.932 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +13:13:21.932 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +13:13:21.932 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +13:13:21.932 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +13:13:21.932 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +13:13:21.932 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +13:13:21.933 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +13:13:21.933 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +13:13:21.933 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +13:13:21.933 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +13:13:21.933 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +13:13:21.933 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +13:13:21.934 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +13:13:21.934 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +13:13:21.936 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +13:13:21.936 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +13:13:21.937 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +13:13:21.937 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +13:13:21.942 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +13:13:21.943 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +13:13:21.943 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +13:13:21.943 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +13:13:21.943 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +13:13:21.943 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +13:13:21.943 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +13:13:21.943 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +13:13:21.944 SCRIPT : ERR SMOKE PASS: initial prisoner position +13:13:21.944 SCRIPT : ERR SMOKE PASS: radio and extraction vehicle exist +13:13:21.944 SCRIPT : ERR SMOKE PASS: authored gate exposes lock action +13:13:21.944 SCRIPT : ERR GEOMETRY: gate low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +13:13:21.944 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7160> low=<6090,211.444,7160> high=<6090,211.444,7160> +13:13:21.944 SCRIPT : ERR GEOMETRY: child origin=<6090,211.344,7154> low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +13:13:21.944 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7154> low=<6093,210.641,7153.87> high=<6096,214.409,7154.13> +13:13:21.944 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7154> low=<6087,210.641,7153.87> high=<6090,214.409,7154.13> +13:13:21.945 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6084,210.641,7153.87> high=<6087,214.409,7154.13> +13:13:21.945 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7163> low=<6095.87,210.641,7163> high=<6096.13,214.409,7166> +13:13:21.945 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7163> low=<6083.87,210.641,7163> high=<6084.13,214.409,7166> +13:13:21.945 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7160> low=<6095.87,210.641,7160> high=<6096.13,214.409,7163> +13:13:21.945 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7160> low=<6083.87,210.641,7160> high=<6084.13,214.409,7163> +13:13:21.945 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7157> low=<6095.87,210.641,7157> high=<6096.13,214.409,7160> +13:13:21.945 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7157> low=<6083.87,210.641,7157> high=<6084.13,214.409,7160> +13:13:21.946 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7154> low=<6095.87,210.641,7154> high=<6096.13,214.409,7157> +13:13:21.946 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6083.87,210.641,7154> high=<6084.13,214.409,7157> +13:13:21.946 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7166> low=<6093,210.641,7165.87> high=<6096,214.409,7166.13> +13:13:21.946 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7166> low=<6090,210.641,7165.87> high=<6093,214.409,7166.13> +13:13:21.946 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7166> low=<6087,210.641,7165.87> high=<6090,214.409,7166.13> +13:13:21.946 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7166> low=<6084,210.641,7165.87> high=<6087,214.409,7166.13> +13:13:21.946 SCRIPT : ERR SMOKE PASS: lock permits prisoner +13:13:21.946 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +13:13:21.948 SCRIPT : ERR SMOKE PASS: lock action advances mission +13:13:21.948 SCRIPT : ERR SMOKE PASS: two guaranteed physical cache documents +13:13:21.950 SCRIPT : ERR SMOKE PASS: test does not rely on random intel +13:13:21.952 SCRIPT : ERR SMOKE PASS: isolated test profile defence duration +13:13:22.432 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +13:13:22.847 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +13:13:24.960 SCRIPT : ERR SMOKE PASS: unlocked gate physically permits passage +13:13:24.961 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +13:13:27.495 SCRIPT : ERR SMOKE PASS: carried intel identifies radio through intel service +13:13:27.495 SCRIPT : ERR SMOKE PASS: radio rejects distant player +13:13:28.504 SCRIPT : ERR SMOKE: radio=<6500,159.756,7200> player=<6502,159.53,7200> +13:13:28.504 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +13:13:28.505 SCRIPT : ERR SMOKE PASS: identified radio starts defence +13:13:31.536 SCRIPT : ERR SMOKE PASS: occupied defence timer running +13:13:34.066 SCRIPT : ERR SMOKE PASS: leaving area resets defence +13:14:05.068 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +13:14:07.517 SCRIPT : ERR SMOKE PASS: continuous occupied defence completes +13:14:07.518 SCRIPT : ERR SMOKE PASS: boarding extraction vehicle +13:14:10.551 SCRIPT : ERR SMOKE PASS: physical extraction occupancy +13:14:11.110 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +13:14:11.111 SCRIPT : ERR SMOKE PASS: scripted escape reaches victory after physical vehicle occupancy +13:14:11.111 SCRIPT : ERR SMOKE COMPLETE: terminal=5 lostHelicopterCase=0 playerDeathCase=0 +13:14:11.226 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +13:14:11.229 SCRIPT (W): Slot_Chat Has no Content! +13:14:11.229 SCRIPT (W): Slot_VON Has no Content! +13:14:11.229 SCRIPT (W): Slot_GameVersion Has no Content! +13:14:11.229 SCRIPT (W): Slot_Notifications Has no Content! +13:14:13.276 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +13:14:13.277 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +13:14:13.277 SCRIPT : -- Stack trace -- +13:14:13.277 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:14:13.277 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:14:13.277 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +13:14:13.277 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:14:13.278 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:14:13.278 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:14:13.278 SCRIPT : ----------------- +13:14:13.278 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +13:14:13.278 SCRIPT : -- Stack trace -- +13:14:13.278 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +13:14:13.278 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +13:14:13.278 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +13:14:13.278 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +13:14:13.279 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +13:14:13.279 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +13:14:13.279 SCRIPT : ----------------- +13:14:13.280 SCRIPT (W): Slot_Chat Has no Content! +13:14:13.281 SCRIPT (W): Slot_VON Has no Content! +13:14:13.281 SCRIPT (W): Slot_GameVersion Has no Content! +13:14:13.281 SCRIPT (W): Slot_Notifications Has no Content! +13:14:13.281 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon diff --git a/docs/evidence/native-2026-09-19-131041-companion-loops/source-provenance.json b/docs/evidence/native-2026-09-19-131041-companion-loops/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-131041-companion-loops/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-131041-companion-loops/source-sha256.json b/docs/evidence/native-2026-09-19-131041-companion-loops/source-sha256.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/native-2026-09-19-131041-companion-loops/source-sha256.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/archive-sha256.json b/docs/evidence/package-2026-09-19-1317-all/archive-sha256.json new file mode 100644 index 0000000..0be40f1 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/archive-sha256.json @@ -0,0 +1,259 @@ +{ + "authored-before.json": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "evidence/ai/authored-after.json": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "evidence/ai/launch.json": "e8a021288d228c0d41618a1fb454e465c1eb477f9532e3832e5d13070efc101b", + "evidence/ai/launch.log": "aa9a9d97ae7a78134d880a27792112c25c76a630949a61154ec98ba05e5bcd44", + "evidence/ai/native-child.py": "e9bffed11eda616ae4059eb8276f2e546ec203d4ec53106edf37a37333a55d86", + "evidence/ai/native-exit.json": "d00490b742c2ccbe62320409a96655d3079fa4a26a5c1072c6e21072d06455fe", + "evidence/ai/native-prefix-environment.json": "593c75429a2e30d413230e5bb3c1e2a439b0f8b95eceeb76f241603ea6da089c", + "evidence/ai/report.json": "2ea1741ee31db57b24ce5a1dbe14097b37133bd9e6a012cac8391eb587a1c317", + "evidence/chat/authored-after.json": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "evidence/chat/launch.json": "a74cd5b4341dc555c85b8235c383220894e538bde88ba7a987ae0539fb90595a", + "evidence/chat/launch.log": "3ecad52669f279e6537e03f73c938a675168f2c5818efc712273e6a1d6f24ab4", + "evidence/chat/native-child.py": "e9bffed11eda616ae4059eb8276f2e546ec203d4ec53106edf37a37333a55d86", + "evidence/chat/native-exit.json": "e95e9512678a1e01092dcb00ed86fa9bbbce8a2acf84a8277e1bf8cd2d9f471b", + "evidence/chat/native-prefix-environment.json": "593c75429a2e30d413230e5bb3c1e2a439b0f8b95eceeb76f241603ea6da089c", + "evidence/chat/report.json": "4f17e1032f36692787f83747f74544674f44afc6d8f42aed19007c0025377c6b", + "evidence/core/authored-after.json": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "evidence/core/launch.json": "3ea9d1111da6dc689d79c5dd26e3bec99694f8b95642f48f44435b45017ec764", + "evidence/core/launch.log": "3ecad52669f279e6537e03f73c938a675168f2c5818efc712273e6a1d6f24ab4", + "evidence/core/native-child.py": "e9bffed11eda616ae4059eb8276f2e546ec203d4ec53106edf37a37333a55d86", + "evidence/core/native-exit.json": "902a50eee206b1404ea8fc46c1c47ea24414e764a968991864dda786eece58bb", + "evidence/core/native-prefix-environment.json": "593c75429a2e30d413230e5bb3c1e2a439b0f8b95eceeb76f241603ea6da089c", + "evidence/core/report.json": "1e280b772ec1ca6447391a08bfbab7577f8f3b2d06477b30ef415ee54a089007", + "evidence/intel/authored-after.json": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "evidence/intel/launch.json": "82e2eda3f619f83764637e44e637d7f0c8aa73e4404bdf5465e1392632eb5770", + "evidence/intel/launch.log": "3ecad52669f279e6537e03f73c938a675168f2c5818efc712273e6a1d6f24ab4", + "evidence/intel/native-child.py": "e9bffed11eda616ae4059eb8276f2e546ec203d4ec53106edf37a37333a55d86", + "evidence/intel/native-exit.json": "fca947c60eb4a9d319726d9f6c2b61e35bc5534cc728f5fdb1cdf2e3c9f89334", + "evidence/intel/native-prefix-environment.json": "593c75429a2e30d413230e5bb3c1e2a439b0f8b95eceeb76f241603ea6da089c", + "evidence/intel/report.json": "b99d1da613fbeb4f05288e1f038256fcd09f345888bb4b24ddc8df80c66a3fbd", + "evidence/map/authored-after.json": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "evidence/map/launch.json": "46e9538fb4313a5ba39ed6140d4142a59217df62aae9a2c327edc282e46fe540", + "evidence/map/launch.log": "3ecad52669f279e6537e03f73c938a675168f2c5818efc712273e6a1d6f24ab4", + "evidence/map/native-child.py": "e9bffed11eda616ae4059eb8276f2e546ec203d4ec53106edf37a37333a55d86", + "evidence/map/native-exit.json": "3aa53b09fa1eb6de9ecae81edb5efc90a9d6d79fab7bd7b244af590e5b08fbd3", + "evidence/map/native-prefix-environment.json": "593c75429a2e30d413230e5bb3c1e2a439b0f8b95eceeb76f241603ea6da089c", + "evidence/map/report.json": "a13eaa2362e41a7da171d990f1d3dee373536a0ea2af0570f45d3bc7bdfa2512", + "package-report.json": "74f1d90523d614a18c054f3aaba56356aeaf662aa13db30d148986884554b638", + "packages/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "packages/ai/data.pak": "627b7389f0656a78f90acc5ead405e494b27b8bcb0cfb85dc812e177bc0f04f6", + "packages/ai/resourceDatabase.rdb": "7dc88e5e7a9dfc6d3ddf9f046d211b083c1f379b61cdc32f6d93084add37e53f", + "packages/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "packages/chat/data.pak": "26fa2ce81dada224fcb0c24ea3e2ebca01eb67c149bd06bf77f04c6b5faeca53", + "packages/chat/resourceDatabase.rdb": "42820c285d135a00f44be372b5611f568d0030aaa45b05091f59e723eec46dc4", + "packages/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "packages/core/data.pak": "3f84b9622afe2ff1683f05917a1e8e190f4f7dcf62f48a8c29adde95ce8a1b50", + "packages/core/resourceDatabase.rdb": "e85f078208a86591a4b0f791d2b56661018bf46e4b14b5405b183df0baf485f3", + "packages/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "packages/intel/data.pak": "5396732e193eb36d4ce86f9999f3cb112b5e1766f0e1b1911b6baa5e761fa37a", + "packages/intel/resourceDatabase.rdb": "062996b9102e99d19eb680bed04880b0e087d9f8789681c0f3ff8ab6772339ba", + "packages/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a", + "packages/map/data.pak": "211835e6afd1b9b18f0a0e4ebd235afa03b1436810c355d6cfeec636c8935dd0", + "packages/map/resourceDatabase.rdb": "9b7f50a84d4fb2d390e42c25ecb68d264038bb81926065653e3e9f87556b2462", + "profiles/ai/logs/logs_2026-09-19_13-17-17/console.log": "83a9bf493cbbc17589ee94531993e4fe926d7cb82a4e9d1d7131f54291d7b249", + "profiles/ai/logs/logs_2026-09-19_13-17-17/error.log": "66baa9b4da7049283fcade891d6c05e9891f5aa52292eda3da7166c65e671f03", + "profiles/ai/logs/logs_2026-09-19_13-17-17/resourceDatabase.rdb": "b252eb3ace77f2a6bd11719e1c752e2359eb2f6f3a4146bfc622688d6c88077e", + "profiles/ai/logs/logs_2026-09-19_13-17-17/script.log": "59f4aff4ba996c4237a8d241a11bbabc0f528a3cd68a5091b23cb625613d7c8c", + "profiles/chat/logs/logs_2026-09-19_13-18-06/console.log": "0a6dc48f729e63c5677773c44a6609d719908ca71c70e0100e86ff8610575fe6", + "profiles/chat/logs/logs_2026-09-19_13-18-06/error.log": "e90810c9739a6f224babd45bd972b5f6c9cdf4e68f6ac72309c4f1bfc6ba74ca", + "profiles/chat/logs/logs_2026-09-19_13-18-06/resourceDatabase.rdb": "b252eb3ace77f2a6bd11719e1c752e2359eb2f6f3a4146bfc622688d6c88077e", + "profiles/chat/logs/logs_2026-09-19_13-18-06/script.log": "2fef8f0e4101c370ef0e1e6b455a606fa5204972305750b8efd0f2a87f0d67ef", + "profiles/core/logs/logs_2026-09-19_13-16-58/console.log": "16f4a97052e6e373a769a4dc3884ba6f607f7e31eeb798ab64e26a3c07bb845e", + "profiles/core/logs/logs_2026-09-19_13-16-58/error.log": "341147a5bbeca6c9536c3bf299a8f9aa2b79fa1201ea4ecef3069be33cdd7048", + "profiles/core/logs/logs_2026-09-19_13-16-58/resourceDatabase.rdb": "b252eb3ace77f2a6bd11719e1c752e2359eb2f6f3a4146bfc622688d6c88077e", + "profiles/core/logs/logs_2026-09-19_13-16-58/script.log": "dd2b4a46f9d0599aad0112ddd1d67a08b1ce8be9f152d20294c11f8c840d7acb", + "profiles/intel/logs/logs_2026-09-19_13-17-27/console.log": "216b0ae19d9a9e9672fb9e5c9c522a8c09cd6251ddee1ecfcbabd776ea1077e3", + "profiles/intel/logs/logs_2026-09-19_13-17-27/error.log": "aa7128707e9f5c69c67f9de5f5a261b403560249d28c5881ff427f911f8137e0", + "profiles/intel/logs/logs_2026-09-19_13-17-27/resourceDatabase.rdb": "b252eb3ace77f2a6bd11719e1c752e2359eb2f6f3a4146bfc622688d6c88077e", + "profiles/intel/logs/logs_2026-09-19_13-17-27/script.log": "c28fb5dfb9f4e76a1c9c86babbeefa6d2c74edcc5e70b0d8257a1e745a9b8951", + "profiles/map/logs/logs_2026-09-19_13-17-46/console.log": "036115c86da07e7b27153a8b4169350405a9271d02c73929acfba28e7c4990b6", + "profiles/map/logs/logs_2026-09-19_13-17-46/error.log": "1074894c01ceb49edb59d8a1ee81fb9c2f6280f5c567223b801a76bacd299058", + "profiles/map/logs/logs_2026-09-19_13-17-46/resourceDatabase.rdb": "b252eb3ace77f2a6bd11719e1c752e2359eb2f6f3a4146bfc622688d6c88077e", + "profiles/map/logs/logs_2026-09-19_13-17-46/script.log": "0a69094b8da5a0f32f97c0dbdcb93e4ed06d5c5a25a7ccb32675f739c9b06918", + "repository-after.json": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "review.json": "d2f56a9853f2fff11cfec0793db647d2a08c1b5fa0a25cd0f0df2a22a5eb3522", + "source/addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "source/addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "source/addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "source/addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "source/addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "source/addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "source/addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "source/addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "source/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "source/addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "source/addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "source/addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "source/addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "source/addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "source/addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "source/addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "source/addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "source/addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "source/addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "source/addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "source/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "source/addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "source/addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "source/addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "source/addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "source/addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "source/addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "source/addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "source/addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "source/addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "source/addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "source/addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "source/addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "source/addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "source/addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "source/addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "source/addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "source/addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "source/addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "source/addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "source/addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "source/addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "source/addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "source/addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "source/addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "source/addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "source/addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "source/addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "source/addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "source/addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "source/addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "source/addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "source/addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "source/addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "source/addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "source/addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "source/addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "source/addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "source/addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "source/addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "source/addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "source/addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "source/addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "source/addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "source/addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "source/addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "source/addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "source/addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "source/addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "source/addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "source/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "source/addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "source/addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "source/addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "source/addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "source/addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "source/addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "source/addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "source/addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "source/addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "source/addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "source/addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "source/addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "source/addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "source/addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "source/addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "source/addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "source/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "source/addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "source/addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "source/addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "source/addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "source/addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "source/addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "source/addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "source/addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "source/addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "source/addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "source/addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "source/addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "source/addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "source/addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "source/addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "source/addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "source/addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "source/addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "source/addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "source/addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "source/addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "source/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "source/addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "source/addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "source/addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "source/addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "source/addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "source/addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "source/addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "source/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "source/addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "source/addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "source/addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "source/addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "source/addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "source/addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "source/addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "source/addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "source/addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "source/addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "source/addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "source/addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "source/addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "source/addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "source/addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "source/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "source/addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "source/addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "source/addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "source/addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "source/addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "source/addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "source/addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "source/addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "source/addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "source/addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "source/addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "source/addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "source/addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "source/addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "source/addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "source/addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "source/addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/authored-before.json b/docs/evidence/package-2026-09-19-1317-all/authored-before.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/authored-before.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/ai/authored-after.json b/docs/evidence/package-2026-09-19-1317-all/evidence/ai/authored-after.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/ai/authored-after.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/ai/launch.json b/docs/evidence/package-2026-09-19-1317-all/evidence/ai/launch.json new file mode 100644 index 0000000..b73be07 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/ai/launch.json @@ -0,0 +1,255 @@ +{ + "authored": { + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" + }, + "child_recorder_sha256": "e9bffed11eda616ae4059eb8276f2e546ec203d4ec53106edf37a37333a55d86", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/usr/bin/python3", + "/tmp/erri-native-package-current-20260919-1317/evidence/ai/native-child.py", + "/tmp/erri-native-package-current-20260919-1317/evidence/ai/native-exit.json", + "/tmp/erri-native-package-current-20260919-1317/evidence/ai/native-prefix-environment.json", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/ai/addon.gproj", + "-addonsDir", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", + "-profile", + "Z:/tmp/erri-native-package-current-20260919-1317/profiles/ai", + "-logconsole", + "-noBackend", + "-noSound", + "-disableCrashReporter", + "-wbModule=ResourceManager", + "-packAddon", + "-packAddonDir", + "Z:/tmp/erri-native-package-current-20260919-1317/packages/ai", + "-packAddonCacheDir", + "Z:/tmp/erri-native-package-current-20260919-1317/cache/ai", + "-wbSilent" + ], + "executable_sha256": "7dd36ca1f662b0c13669a4f2f7f10e3c461c2906b021e742272d64b3ab7e9798", + "native_command": [ + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/ai/addon.gproj", + "-addonsDir", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", + "-profile", + "Z:/tmp/erri-native-package-current-20260919-1317/profiles/ai", + "-logconsole", + "-noBackend", + "-noSound", + "-disableCrashReporter", + "-wbModule=ResourceManager", + "-packAddon", + "-packAddonDir", + "Z:/tmp/erri-native-package-current-20260919-1317/packages/ai", + "-packAddonCacheDir", + "Z:/tmp/erri-native-package-current-20260919-1317/cache/ai", + "-wbSilent" + ], + "native_environment_sha256": "593c75429a2e30d413230e5bb3c1e2a439b0f8b95eceeb76f241603ea6da089c", + "proton_sha256": "05116cb33e020b6ae6fd8578e7d59f082ffd5b4530d6ae7cdbe948ba96406332", + "silent_workbench_experiment": true, + "started_unix": 1789816635.3883102 +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/ai/launch.log b/docs/evidence/package-2026-09-19-1317-all/evidence/ai/launch.log new file mode 100644 index 0000000..9e2f74e --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/ai/launch.log @@ -0,0 +1,130 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 101 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 1 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerWorkbenchSteamDiag.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a001a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a001a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a001a4 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[gamescope] [Error] xwm: X11 I/O error! This is fatal. Aborting... diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/ai/native-child.py b/docs/evidence/package-2026-09-19-1317-all/evidence/ai/native-child.py new file mode 100644 index 0000000..4681c2c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/ai/native-child.py @@ -0,0 +1,9 @@ +import json, os, subprocess, sys +from pathlib import Path +command = sys.argv[3:] +environment = os.environ.copy() +environment.update(json.loads(Path(sys.argv[2]).read_text())) +code = subprocess.call(command, env=environment) +with Path(sys.argv[1]).open('x') as output: + json.dump({'command': command, 'exit_code': code}, output) +sys.exit(code) diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/ai/native-exit.json b/docs/evidence/package-2026-09-19-1317-all/evidence/ai/native-exit.json new file mode 100644 index 0000000..55f0a29 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/ai/native-exit.json @@ -0,0 +1 @@ +{"command": ["/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", "run", "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", "-gproj", "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/ai/addon.gproj", "-addonsDir", "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", "-profile", "Z:/tmp/erri-native-package-current-20260919-1317/profiles/ai", "-logconsole", "-noBackend", "-noSound", "-disableCrashReporter", "-wbModule=ResourceManager", "-packAddon", "-packAddonDir", "Z:/tmp/erri-native-package-current-20260919-1317/packages/ai", "-packAddonCacheDir", "Z:/tmp/erri-native-package-current-20260919-1317/cache/ai", "-wbSilent"], "exit_code": 0} \ No newline at end of file diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/ai/native-prefix-environment.json b/docs/evidence/package-2026-09-19-1317-all/evidence/ai/native-prefix-environment.json new file mode 100644 index 0000000..807f6db --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/ai/native-prefix-environment.json @@ -0,0 +1,5 @@ +{ + "STEAM_COMPAT_CLIENT_INSTALL_PATH": "/home/jakub/.local/share/Steam", + "STEAM_COMPAT_DATA_PATH": "/tmp/erri-headless-compat", + "WINEPREFIX": "/tmp/erri-headless-compat/pfx" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/ai/report.json b/docs/evidence/package-2026-09-19-1317-all/evidence/ai/report.json new file mode 100644 index 0000000..fc1ce91 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/ai/report.json @@ -0,0 +1,161 @@ +{ + "candidate_created": false, + "cleanup_confirmed": true, + "completion_observed": "native-child-exited", + "copied_authored_unchanged": true, + "display_cleanup_after_native_exit": true, + "errors": [ + "13:17:24.298 RESOURCES (E): ==== Resource leaks ====", + "13:17:24.298 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:24.298 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "13:17:24.298 RESOURCES (E): ==== Resource leaks ====", + "13:17:24.298 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:24.298 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "launcher_exit_code": null, + "logs": { + "/tmp/erri-native-package-current-20260919-1317/evidence/ai/launch.log": { + "bytes": 9204, + "errors": [], + "sha256": "aa9a9d97ae7a78134d880a27792112c25c76a630949a61154ec98ba05e5bcd44" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/ai/logs/logs_2026-09-19_13-17-17/console.log": { + "bytes": 22927, + "errors": [ + "13:17:24.298 RESOURCES (E): ==== Resource leaks ====", + "13:17:24.298 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:24.298 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "sha256": "83a9bf493cbbc17589ee94531993e4fe926d7cb82a4e9d1d7131f54291d7b249" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/ai/logs/logs_2026-09-19_13-17-17/error.log": { + "bytes": 4892, + "errors": [ + "13:17:24.298 RESOURCES (E): ==== Resource leaks ====", + "13:17:24.298 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:24.298 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "sha256": "66baa9b4da7049283fcade891d6c05e9891f5aa52292eda3da7166c65e671f03" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/ai/logs/logs_2026-09-19_13-17-17/script.log": { + "bytes": 4304, + "errors": [], + "sha256": "59f4aff4ba996c4237a8d241a11bbabc0f528a3cd68a5091b23cb625613d7c8c" + } + }, + "native_consumption_verified": false, + "native_exit_code": 0, + "native_status_sha256": "d00490b742c2ccbe62320409a96655d3079fa4a26a5c1072c6e21072d06455fe", + "package_contents_verified": false, + "packages": { + "addon.gproj": { + "bytes": 154, + "sha256": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1" + }, + "data.pak": { + "bytes": 85107, + "sha256": "627b7389f0656a78f90acc5ead405e494b27b8bcb0cfb85dc812e177bc0f04f6" + }, + "resourceDatabase.rdb": { + "bytes": 1909, + "sha256": "7dc88e5e7a9dfc6d3ddf9f046d211b083c1f379b61cdc32f6d93084add37e53f" + } + }, + "project": "ai", + "qualification": "PENDING: inspect native contents and load packed-only addon closure; no release claim", + "release_qualified": false, + "result": "validation-failed", + "runner_error": null, + "silent_workbench_experiment": true, + "tool_completion_semantics_verified": false +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/chat/authored-after.json b/docs/evidence/package-2026-09-19-1317-all/evidence/chat/authored-after.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/chat/authored-after.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/chat/launch.json b/docs/evidence/package-2026-09-19-1317-all/evidence/chat/launch.json new file mode 100644 index 0000000..76e5abb --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/chat/launch.json @@ -0,0 +1,255 @@ +{ + "authored": { + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" + }, + "child_recorder_sha256": "e9bffed11eda616ae4059eb8276f2e546ec203d4ec53106edf37a37333a55d86", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/usr/bin/python3", + "/tmp/erri-native-package-current-20260919-1317/evidence/chat/native-child.py", + "/tmp/erri-native-package-current-20260919-1317/evidence/chat/native-exit.json", + "/tmp/erri-native-package-current-20260919-1317/evidence/chat/native-prefix-environment.json", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/chat/addon.gproj", + "-addonsDir", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", + "-profile", + "Z:/tmp/erri-native-package-current-20260919-1317/profiles/chat", + "-logconsole", + "-noBackend", + "-noSound", + "-disableCrashReporter", + "-wbModule=ResourceManager", + "-packAddon", + "-packAddonDir", + "Z:/tmp/erri-native-package-current-20260919-1317/packages/chat", + "-packAddonCacheDir", + "Z:/tmp/erri-native-package-current-20260919-1317/cache/chat", + "-wbSilent" + ], + "executable_sha256": "7dd36ca1f662b0c13669a4f2f7f10e3c461c2906b021e742272d64b3ab7e9798", + "native_command": [ + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/chat/addon.gproj", + "-addonsDir", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", + "-profile", + "Z:/tmp/erri-native-package-current-20260919-1317/profiles/chat", + "-logconsole", + "-noBackend", + "-noSound", + "-disableCrashReporter", + "-wbModule=ResourceManager", + "-packAddon", + "-packAddonDir", + "Z:/tmp/erri-native-package-current-20260919-1317/packages/chat", + "-packAddonCacheDir", + "Z:/tmp/erri-native-package-current-20260919-1317/cache/chat", + "-wbSilent" + ], + "native_environment_sha256": "593c75429a2e30d413230e5bb3c1e2a439b0f8b95eceeb76f241603ea6da089c", + "proton_sha256": "05116cb33e020b6ae6fd8578e7d59f082ffd5b4530d6ae7cdbe948ba96406332", + "silent_workbench_experiment": true, + "started_unix": 1789816684.230656 +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/chat/launch.log b/docs/evidence/package-2026-09-19-1317-all/evidence/chat/launch.log new file mode 100644 index 0000000..7c52fda --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/chat/launch.log @@ -0,0 +1,129 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 101 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 1 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerWorkbenchSteamDiag.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a001a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a001a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a001a4 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/chat/native-child.py b/docs/evidence/package-2026-09-19-1317-all/evidence/chat/native-child.py new file mode 100644 index 0000000..4681c2c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/chat/native-child.py @@ -0,0 +1,9 @@ +import json, os, subprocess, sys +from pathlib import Path +command = sys.argv[3:] +environment = os.environ.copy() +environment.update(json.loads(Path(sys.argv[2]).read_text())) +code = subprocess.call(command, env=environment) +with Path(sys.argv[1]).open('x') as output: + json.dump({'command': command, 'exit_code': code}, output) +sys.exit(code) diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/chat/native-exit.json b/docs/evidence/package-2026-09-19-1317-all/evidence/chat/native-exit.json new file mode 100644 index 0000000..014a022 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/chat/native-exit.json @@ -0,0 +1 @@ +{"command": ["/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", "run", "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", "-gproj", "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/chat/addon.gproj", "-addonsDir", "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", "-profile", "Z:/tmp/erri-native-package-current-20260919-1317/profiles/chat", "-logconsole", "-noBackend", "-noSound", "-disableCrashReporter", "-wbModule=ResourceManager", "-packAddon", "-packAddonDir", "Z:/tmp/erri-native-package-current-20260919-1317/packages/chat", "-packAddonCacheDir", "Z:/tmp/erri-native-package-current-20260919-1317/cache/chat", "-wbSilent"], "exit_code": 0} \ No newline at end of file diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/chat/native-prefix-environment.json b/docs/evidence/package-2026-09-19-1317-all/evidence/chat/native-prefix-environment.json new file mode 100644 index 0000000..807f6db --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/chat/native-prefix-environment.json @@ -0,0 +1,5 @@ +{ + "STEAM_COMPAT_CLIENT_INSTALL_PATH": "/home/jakub/.local/share/Steam", + "STEAM_COMPAT_DATA_PATH": "/tmp/erri-headless-compat", + "WINEPREFIX": "/tmp/erri-headless-compat/pfx" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/chat/report.json b/docs/evidence/package-2026-09-19-1317-all/evidence/chat/report.json new file mode 100644 index 0000000..fdcd752 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/chat/report.json @@ -0,0 +1,161 @@ +{ + "candidate_created": false, + "cleanup_confirmed": true, + "completion_observed": "native-child-exited", + "copied_authored_unchanged": true, + "display_cleanup_after_native_exit": true, + "errors": [ + "13:18:14.065 RESOURCES (E): ==== Resource leaks ====", + "13:18:14.065 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:18:14.065 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "13:18:14.065 RESOURCES (E): ==== Resource leaks ====", + "13:18:14.065 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:18:14.065 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "launcher_exit_code": null, + "logs": { + "/tmp/erri-native-package-current-20260919-1317/evidence/chat/launch.log": { + "bytes": 9115, + "errors": [], + "sha256": "3ecad52669f279e6537e03f73c938a675168f2c5818efc712273e6a1d6f24ab4" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/chat/logs/logs_2026-09-19_13-18-06/console.log": { + "bytes": 27367, + "errors": [ + "13:18:14.065 RESOURCES (E): ==== Resource leaks ====", + "13:18:14.065 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:18:14.065 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "sha256": "0a6dc48f729e63c5677773c44a6609d719908ca71c70e0100e86ff8610575fe6" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/chat/logs/logs_2026-09-19_13-18-06/error.log": { + "bytes": 4894, + "errors": [ + "13:18:14.065 RESOURCES (E): ==== Resource leaks ====", + "13:18:14.065 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:18:14.065 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "sha256": "e90810c9739a6f224babd45bd972b5f6c9cdf4e68f6ac72309c4f1bfc6ba74ca" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/chat/logs/logs_2026-09-19_13-18-06/script.log": { + "bytes": 4306, + "errors": [], + "sha256": "2fef8f0e4101c370ef0e1e6b455a606fa5204972305750b8efd0f2a87f0d67ef" + } + }, + "native_consumption_verified": false, + "native_exit_code": 0, + "native_status_sha256": "e95e9512678a1e01092dcb00ed86fa9bbbce8a2acf84a8277e1bf8cd2d9f471b", + "package_contents_verified": false, + "packages": { + "addon.gproj": { + "bytes": 221, + "sha256": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e" + }, + "data.pak": { + "bytes": 15163, + "sha256": "26fa2ce81dada224fcb0c24ea3e2ebca01eb67c149bd06bf77f04c6b5faeca53" + }, + "resourceDatabase.rdb": { + "bytes": 804, + "sha256": "42820c285d135a00f44be372b5611f568d0030aaa45b05091f59e723eec46dc4" + } + }, + "project": "chat", + "qualification": "PENDING: inspect native contents and load packed-only addon closure; no release claim", + "release_qualified": false, + "result": "validation-failed", + "runner_error": null, + "silent_workbench_experiment": true, + "tool_completion_semantics_verified": false +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/core/authored-after.json b/docs/evidence/package-2026-09-19-1317-all/evidence/core/authored-after.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/core/authored-after.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/core/launch.json b/docs/evidence/package-2026-09-19-1317-all/evidence/core/launch.json new file mode 100644 index 0000000..3456811 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/core/launch.json @@ -0,0 +1,255 @@ +{ + "authored": { + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" + }, + "child_recorder_sha256": "e9bffed11eda616ae4059eb8276f2e546ec203d4ec53106edf37a37333a55d86", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/usr/bin/python3", + "/tmp/erri-native-package-current-20260919-1317/evidence/core/native-child.py", + "/tmp/erri-native-package-current-20260919-1317/evidence/core/native-exit.json", + "/tmp/erri-native-package-current-20260919-1317/evidence/core/native-prefix-environment.json", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/addon.gproj", + "-addonsDir", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", + "-profile", + "Z:/tmp/erri-native-package-current-20260919-1317/profiles/core", + "-logconsole", + "-noBackend", + "-noSound", + "-disableCrashReporter", + "-wbModule=ResourceManager", + "-packAddon", + "-packAddonDir", + "Z:/tmp/erri-native-package-current-20260919-1317/packages/core", + "-packAddonCacheDir", + "Z:/tmp/erri-native-package-current-20260919-1317/cache/core", + "-wbSilent" + ], + "executable_sha256": "7dd36ca1f662b0c13669a4f2f7f10e3c461c2906b021e742272d64b3ab7e9798", + "native_command": [ + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/addon.gproj", + "-addonsDir", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", + "-profile", + "Z:/tmp/erri-native-package-current-20260919-1317/profiles/core", + "-logconsole", + "-noBackend", + "-noSound", + "-disableCrashReporter", + "-wbModule=ResourceManager", + "-packAddon", + "-packAddonDir", + "Z:/tmp/erri-native-package-current-20260919-1317/packages/core", + "-packAddonCacheDir", + "Z:/tmp/erri-native-package-current-20260919-1317/cache/core", + "-wbSilent" + ], + "native_environment_sha256": "593c75429a2e30d413230e5bb3c1e2a439b0f8b95eceeb76f241603ea6da089c", + "proton_sha256": "05116cb33e020b6ae6fd8578e7d59f082ffd5b4530d6ae7cdbe948ba96406332", + "silent_workbench_experiment": true, + "started_unix": 1789816616.2800207 +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/core/launch.log b/docs/evidence/package-2026-09-19-1317-all/evidence/core/launch.log new file mode 100644 index 0000000..7c52fda --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/core/launch.log @@ -0,0 +1,129 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 101 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 1 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerWorkbenchSteamDiag.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a001a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a001a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a001a4 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/core/native-child.py b/docs/evidence/package-2026-09-19-1317-all/evidence/core/native-child.py new file mode 100644 index 0000000..4681c2c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/core/native-child.py @@ -0,0 +1,9 @@ +import json, os, subprocess, sys +from pathlib import Path +command = sys.argv[3:] +environment = os.environ.copy() +environment.update(json.loads(Path(sys.argv[2]).read_text())) +code = subprocess.call(command, env=environment) +with Path(sys.argv[1]).open('x') as output: + json.dump({'command': command, 'exit_code': code}, output) +sys.exit(code) diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/core/native-exit.json b/docs/evidence/package-2026-09-19-1317-all/evidence/core/native-exit.json new file mode 100644 index 0000000..726b53c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/core/native-exit.json @@ -0,0 +1 @@ +{"command": ["/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", "run", "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", "-gproj", "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/addon.gproj", "-addonsDir", "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", "-profile", "Z:/tmp/erri-native-package-current-20260919-1317/profiles/core", "-logconsole", "-noBackend", "-noSound", "-disableCrashReporter", "-wbModule=ResourceManager", "-packAddon", "-packAddonDir", "Z:/tmp/erri-native-package-current-20260919-1317/packages/core", "-packAddonCacheDir", "Z:/tmp/erri-native-package-current-20260919-1317/cache/core", "-wbSilent"], "exit_code": 0} \ No newline at end of file diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/core/native-prefix-environment.json b/docs/evidence/package-2026-09-19-1317-all/evidence/core/native-prefix-environment.json new file mode 100644 index 0000000..807f6db --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/core/native-prefix-environment.json @@ -0,0 +1,5 @@ +{ + "STEAM_COMPAT_CLIENT_INSTALL_PATH": "/home/jakub/.local/share/Steam", + "STEAM_COMPAT_DATA_PATH": "/tmp/erri-headless-compat", + "WINEPREFIX": "/tmp/erri-headless-compat/pfx" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/core/report.json b/docs/evidence/package-2026-09-19-1317-all/evidence/core/report.json new file mode 100644 index 0000000..4f44e45 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/core/report.json @@ -0,0 +1,161 @@ +{ + "candidate_created": false, + "cleanup_confirmed": true, + "completion_observed": "native-child-exited", + "copied_authored_unchanged": true, + "display_cleanup_after_native_exit": true, + "errors": [ + "13:17:04.450 RESOURCES (E): ==== Resource leaks ====", + "13:17:04.450 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:04.450 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "13:17:04.450 RESOURCES (E): ==== Resource leaks ====", + "13:17:04.450 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:04.450 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "launcher_exit_code": null, + "logs": { + "/tmp/erri-native-package-current-20260919-1317/evidence/core/launch.log": { + "bytes": 9115, + "errors": [], + "sha256": "3ecad52669f279e6537e03f73c938a675168f2c5818efc712273e6a1d6f24ab4" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/core/logs/logs_2026-09-19_13-16-58/console.log": { + "bytes": 21527, + "errors": [ + "13:17:04.450 RESOURCES (E): ==== Resource leaks ====", + "13:17:04.450 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:04.450 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "sha256": "16f4a97052e6e373a769a4dc3884ba6f607f7e31eeb798ab64e26a3c07bb845e" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/core/logs/logs_2026-09-19_13-16-58/error.log": { + "bytes": 4894, + "errors": [ + "13:17:04.450 RESOURCES (E): ==== Resource leaks ====", + "13:17:04.450 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:04.450 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "sha256": "341147a5bbeca6c9536c3bf299a8f9aa2b79fa1201ea4ecef3069be33cdd7048" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/core/logs/logs_2026-09-19_13-16-58/script.log": { + "bytes": 4306, + "errors": [], + "sha256": "dd2b4a46f9d0599aad0112ddd1d67a08b1ce8be9f152d20294c11f8c840d7acb" + } + }, + "native_consumption_verified": false, + "native_exit_code": 0, + "native_status_sha256": "902a50eee206b1404ea8fc46c1c47ea24414e764a968991864dda786eece58bb", + "package_contents_verified": false, + "packages": { + "addon.gproj": { + "bytes": 137, + "sha256": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46" + }, + "data.pak": { + "bytes": 199646, + "sha256": "3f84b9622afe2ff1683f05917a1e8e190f4f7dcf62f48a8c29adde95ce8a1b50" + }, + "resourceDatabase.rdb": { + "bytes": 6865, + "sha256": "e85f078208a86591a4b0f791d2b56661018bf46e4b14b5405b183df0baf485f3" + } + }, + "project": "core", + "qualification": "PENDING: inspect native contents and load packed-only addon closure; no release claim", + "release_qualified": false, + "result": "validation-failed", + "runner_error": null, + "silent_workbench_experiment": true, + "tool_completion_semantics_verified": false +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/intel/authored-after.json b/docs/evidence/package-2026-09-19-1317-all/evidence/intel/authored-after.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/intel/authored-after.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/intel/launch.json b/docs/evidence/package-2026-09-19-1317-all/evidence/intel/launch.json new file mode 100644 index 0000000..4e7b3cf --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/intel/launch.json @@ -0,0 +1,255 @@ +{ + "authored": { + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" + }, + "child_recorder_sha256": "e9bffed11eda616ae4059eb8276f2e546ec203d4ec53106edf37a37333a55d86", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/usr/bin/python3", + "/tmp/erri-native-package-current-20260919-1317/evidence/intel/native-child.py", + "/tmp/erri-native-package-current-20260919-1317/evidence/intel/native-exit.json", + "/tmp/erri-native-package-current-20260919-1317/evidence/intel/native-prefix-environment.json", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/intel/addon.gproj", + "-addonsDir", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", + "-profile", + "Z:/tmp/erri-native-package-current-20260919-1317/profiles/intel", + "-logconsole", + "-noBackend", + "-noSound", + "-disableCrashReporter", + "-wbModule=ResourceManager", + "-packAddon", + "-packAddonDir", + "Z:/tmp/erri-native-package-current-20260919-1317/packages/intel", + "-packAddonCacheDir", + "Z:/tmp/erri-native-package-current-20260919-1317/cache/intel", + "-wbSilent" + ], + "executable_sha256": "7dd36ca1f662b0c13669a4f2f7f10e3c461c2906b021e742272d64b3ab7e9798", + "native_command": [ + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/intel/addon.gproj", + "-addonsDir", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", + "-profile", + "Z:/tmp/erri-native-package-current-20260919-1317/profiles/intel", + "-logconsole", + "-noBackend", + "-noSound", + "-disableCrashReporter", + "-wbModule=ResourceManager", + "-packAddon", + "-packAddonDir", + "Z:/tmp/erri-native-package-current-20260919-1317/packages/intel", + "-packAddonCacheDir", + "Z:/tmp/erri-native-package-current-20260919-1317/cache/intel", + "-wbSilent" + ], + "native_environment_sha256": "593c75429a2e30d413230e5bb3c1e2a439b0f8b95eceeb76f241603ea6da089c", + "proton_sha256": "05116cb33e020b6ae6fd8578e7d59f082ffd5b4530d6ae7cdbe948ba96406332", + "silent_workbench_experiment": true, + "started_unix": 1789816645.4645731 +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/intel/launch.log b/docs/evidence/package-2026-09-19-1317-all/evidence/intel/launch.log new file mode 100644 index 0000000..7c52fda --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/intel/launch.log @@ -0,0 +1,129 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 101 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 1 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerWorkbenchSteamDiag.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a001a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a001a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a001a4 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/intel/native-child.py b/docs/evidence/package-2026-09-19-1317-all/evidence/intel/native-child.py new file mode 100644 index 0000000..4681c2c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/intel/native-child.py @@ -0,0 +1,9 @@ +import json, os, subprocess, sys +from pathlib import Path +command = sys.argv[3:] +environment = os.environ.copy() +environment.update(json.loads(Path(sys.argv[2]).read_text())) +code = subprocess.call(command, env=environment) +with Path(sys.argv[1]).open('x') as output: + json.dump({'command': command, 'exit_code': code}, output) +sys.exit(code) diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/intel/native-exit.json b/docs/evidence/package-2026-09-19-1317-all/evidence/intel/native-exit.json new file mode 100644 index 0000000..e585105 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/intel/native-exit.json @@ -0,0 +1 @@ +{"command": ["/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", "run", "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", "-gproj", "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/intel/addon.gproj", "-addonsDir", "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", "-profile", "Z:/tmp/erri-native-package-current-20260919-1317/profiles/intel", "-logconsole", "-noBackend", "-noSound", "-disableCrashReporter", "-wbModule=ResourceManager", "-packAddon", "-packAddonDir", "Z:/tmp/erri-native-package-current-20260919-1317/packages/intel", "-packAddonCacheDir", "Z:/tmp/erri-native-package-current-20260919-1317/cache/intel", "-wbSilent"], "exit_code": 0} \ No newline at end of file diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/intel/native-prefix-environment.json b/docs/evidence/package-2026-09-19-1317-all/evidence/intel/native-prefix-environment.json new file mode 100644 index 0000000..807f6db --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/intel/native-prefix-environment.json @@ -0,0 +1,5 @@ +{ + "STEAM_COMPAT_CLIENT_INSTALL_PATH": "/home/jakub/.local/share/Steam", + "STEAM_COMPAT_DATA_PATH": "/tmp/erri-headless-compat", + "WINEPREFIX": "/tmp/erri-headless-compat/pfx" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/intel/report.json b/docs/evidence/package-2026-09-19-1317-all/evidence/intel/report.json new file mode 100644 index 0000000..b1fe224 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/intel/report.json @@ -0,0 +1,161 @@ +{ + "candidate_created": false, + "cleanup_confirmed": true, + "completion_observed": "native-child-exited", + "copied_authored_unchanged": true, + "display_cleanup_after_native_exit": true, + "errors": [ + "13:17:33.958 RESOURCES (E): ==== Resource leaks ====", + "13:17:33.958 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:33.958 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "13:17:33.958 RESOURCES (E): ==== Resource leaks ====", + "13:17:33.958 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:33.958 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "launcher_exit_code": null, + "logs": { + "/tmp/erri-native-package-current-20260919-1317/evidence/intel/launch.log": { + "bytes": 9115, + "errors": [], + "sha256": "3ecad52669f279e6537e03f73c938a675168f2c5818efc712273e6a1d6f24ab4" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/intel/logs/logs_2026-09-19_13-17-27/console.log": { + "bytes": 23026, + "errors": [ + "13:17:33.958 RESOURCES (E): ==== Resource leaks ====", + "13:17:33.958 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:33.958 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "sha256": "216b0ae19d9a9e9672fb9e5c9c522a8c09cd6251ddee1ecfcbabd776ea1077e3" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/intel/logs/logs_2026-09-19_13-17-27/error.log": { + "bytes": 4895, + "errors": [ + "13:17:33.958 RESOURCES (E): ==== Resource leaks ====", + "13:17:33.958 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:33.958 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "sha256": "aa7128707e9f5c69c67f9de5f5a261b403560249d28c5881ff427f911f8137e0" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/intel/logs/logs_2026-09-19_13-17-27/script.log": { + "bytes": 4307, + "errors": [], + "sha256": "c28fb5dfb9f4e76a1c9c86babbeefa6d2c74edcc5e70b0d8257a1e745a9b8951" + } + }, + "native_consumption_verified": false, + "native_exit_code": 0, + "native_status_sha256": "fca947c60eb4a9d319726d9f6c2b61e35bc5534cc728f5fdb1cdf2e3c9f89334", + "package_contents_verified": false, + "packages": { + "addon.gproj": { + "bytes": 160, + "sha256": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe" + }, + "data.pak": { + "bytes": 1250, + "sha256": "5396732e193eb36d4ce86f9999f3cb112b5e1766f0e1b1911b6baa5e761fa37a" + }, + "resourceDatabase.rdb": { + "bytes": 227, + "sha256": "062996b9102e99d19eb680bed04880b0e087d9f8789681c0f3ff8ab6772339ba" + } + }, + "project": "intel", + "qualification": "PENDING: inspect native contents and load packed-only addon closure; no release claim", + "release_qualified": false, + "result": "validation-failed", + "runner_error": null, + "silent_workbench_experiment": true, + "tool_completion_semantics_verified": false +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/map/authored-after.json b/docs/evidence/package-2026-09-19-1317-all/evidence/map/authored-after.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/map/authored-after.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/map/launch.json b/docs/evidence/package-2026-09-19-1317-all/evidence/map/launch.json new file mode 100644 index 0000000..d6ddb5c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/map/launch.json @@ -0,0 +1,255 @@ +{ + "authored": { + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" + }, + "child_recorder_sha256": "e9bffed11eda616ae4059eb8276f2e546ec203d4ec53106edf37a37333a55d86", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/usr/bin/python3", + "/tmp/erri-native-package-current-20260919-1317/evidence/map/native-child.py", + "/tmp/erri-native-package-current-20260919-1317/evidence/map/native-exit.json", + "/tmp/erri-native-package-current-20260919-1317/evidence/map/native-prefix-environment.json", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/map/addon.gproj", + "-addonsDir", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", + "-profile", + "Z:/tmp/erri-native-package-current-20260919-1317/profiles/map", + "-logconsole", + "-noBackend", + "-noSound", + "-disableCrashReporter", + "-wbModule=ResourceManager", + "-packAddon", + "-packAddonDir", + "Z:/tmp/erri-native-package-current-20260919-1317/packages/map", + "-packAddonCacheDir", + "Z:/tmp/erri-native-package-current-20260919-1317/cache/map", + "-wbSilent" + ], + "executable_sha256": "7dd36ca1f662b0c13669a4f2f7f10e3c461c2906b021e742272d64b3ab7e9798", + "native_command": [ + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", + "-gproj", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/map/addon.gproj", + "-addonsDir", + "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", + "-profile", + "Z:/tmp/erri-native-package-current-20260919-1317/profiles/map", + "-logconsole", + "-noBackend", + "-noSound", + "-disableCrashReporter", + "-wbModule=ResourceManager", + "-packAddon", + "-packAddonDir", + "Z:/tmp/erri-native-package-current-20260919-1317/packages/map", + "-packAddonCacheDir", + "Z:/tmp/erri-native-package-current-20260919-1317/cache/map", + "-wbSilent" + ], + "native_environment_sha256": "593c75429a2e30d413230e5bb3c1e2a439b0f8b95eceeb76f241603ea6da089c", + "proton_sha256": "05116cb33e020b6ae6fd8578e7d59f082ffd5b4530d6ae7cdbe948ba96406332", + "silent_workbench_experiment": true, + "started_unix": 1789816664.5602422 +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/map/launch.log b/docs/evidence/package-2026-09-19-1317-all/evidence/map/launch.log new file mode 100644 index 0000000..7c52fda --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/map/launch.log @@ -0,0 +1,129 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 101 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 1 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerWorkbenchSteamDiag.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a001a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a001a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a001a4 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/map/native-child.py b/docs/evidence/package-2026-09-19-1317-all/evidence/map/native-child.py new file mode 100644 index 0000000..4681c2c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/map/native-child.py @@ -0,0 +1,9 @@ +import json, os, subprocess, sys +from pathlib import Path +command = sys.argv[3:] +environment = os.environ.copy() +environment.update(json.loads(Path(sys.argv[2]).read_text())) +code = subprocess.call(command, env=environment) +with Path(sys.argv[1]).open('x') as output: + json.dump({'command': command, 'exit_code': code}, output) +sys.exit(code) diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/map/native-exit.json b/docs/evidence/package-2026-09-19-1317-all/evidence/map/native-exit.json new file mode 100644 index 0000000..c8ad5e0 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/map/native-exit.json @@ -0,0 +1 @@ +{"command": ["/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", "run", "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe", "-gproj", "Z:/tmp/erri-native-package-current-20260919-1317/source/addons/map/addon.gproj", "-addonsDir", "Z:/tmp/erri-native-package-current-20260919-1317/source/addons", "-profile", "Z:/tmp/erri-native-package-current-20260919-1317/profiles/map", "-logconsole", "-noBackend", "-noSound", "-disableCrashReporter", "-wbModule=ResourceManager", "-packAddon", "-packAddonDir", "Z:/tmp/erri-native-package-current-20260919-1317/packages/map", "-packAddonCacheDir", "Z:/tmp/erri-native-package-current-20260919-1317/cache/map", "-wbSilent"], "exit_code": 0} \ No newline at end of file diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/map/native-prefix-environment.json b/docs/evidence/package-2026-09-19-1317-all/evidence/map/native-prefix-environment.json new file mode 100644 index 0000000..807f6db --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/map/native-prefix-environment.json @@ -0,0 +1,5 @@ +{ + "STEAM_COMPAT_CLIENT_INSTALL_PATH": "/home/jakub/.local/share/Steam", + "STEAM_COMPAT_DATA_PATH": "/tmp/erri-headless-compat", + "WINEPREFIX": "/tmp/erri-headless-compat/pfx" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/evidence/map/report.json b/docs/evidence/package-2026-09-19-1317-all/evidence/map/report.json new file mode 100644 index 0000000..2934cac --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/evidence/map/report.json @@ -0,0 +1,161 @@ +{ + "candidate_created": false, + "cleanup_confirmed": true, + "completion_observed": "native-child-exited", + "copied_authored_unchanged": true, + "display_cleanup_after_native_exit": true, + "errors": [ + "13:17:53.209 RESOURCES (E): ==== Resource leaks ====", + "13:17:53.209 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:53.209 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "13:17:53.209 RESOURCES (E): ==== Resource leaks ====", + "13:17:53.209 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:53.209 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "launcher_exit_code": null, + "logs": { + "/tmp/erri-native-package-current-20260919-1317/evidence/map/launch.log": { + "bytes": 9115, + "errors": [], + "sha256": "3ecad52669f279e6537e03f73c938a675168f2c5818efc712273e6a1d6f24ab4" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/map/logs/logs_2026-09-19_13-17-46/console.log": { + "bytes": 22954, + "errors": [ + "13:17:53.209 RESOURCES (E): ==== Resource leaks ====", + "13:17:53.209 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:53.209 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "sha256": "036115c86da07e7b27153a8b4169350405a9271d02c73929acfba28e7c4990b6" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/map/logs/logs_2026-09-19_13-17-46/error.log": { + "bytes": 4893, + "errors": [ + "13:17:53.209 RESOURCES (E): ==== Resource leaks ====", + "13:17:53.209 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:53.209 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "sha256": "1074894c01ceb49edb59d8a1ee81fb9c2f6280f5c567223b801a76bacd299058" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/map/logs/logs_2026-09-19_13-17-46/script.log": { + "bytes": 4305, + "errors": [], + "sha256": "0a69094b8da5a0f32f97c0dbdcb93e4ed06d5c5a25a7ccb32675f739c9b06918" + } + }, + "native_consumption_verified": false, + "native_exit_code": 0, + "native_status_sha256": "3aa53b09fa1eb6de9ecae81edb5efc90a9d6d79fab7bd7b244af590e5b08fbd3", + "package_contents_verified": false, + "packages": { + "addon.gproj": { + "bytes": 156, + "sha256": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" + }, + "data.pak": { + "bytes": 10463, + "sha256": "211835e6afd1b9b18f0a0e4ebd235afa03b1436810c355d6cfeec636c8935dd0" + }, + "resourceDatabase.rdb": { + "bytes": 819, + "sha256": "9b7f50a84d4fb2d390e42c25ecb68d264038bb81926065653e3e9f87556b2462" + } + }, + "project": "map", + "qualification": "PENDING: inspect native contents and load packed-only addon closure; no release claim", + "release_qualified": false, + "result": "validation-failed", + "runner_error": null, + "silent_workbench_experiment": true, + "tool_completion_semantics_verified": false +} diff --git a/docs/evidence/package-2026-09-19-1317-all/package-report.json b/docs/evidence/package-2026-09-19-1317-all/package-report.json new file mode 100644 index 0000000..3397635 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/package-report.json @@ -0,0 +1,826 @@ +{ + "all_candidates_created": false, + "continue_on_failure": true, + "kind": "UNQUALIFIED NATIVE PACKAGE ATTEMPT", + "project_order": [ + "core", + "ai", + "intel", + "map", + "chat" + ], + "projects": [ + { + "candidate_created": false, + "cleanup_confirmed": true, + "completion_observed": "native-child-exited", + "copied_authored_unchanged": true, + "display_cleanup_after_native_exit": true, + "errors": [ + "13:17:04.450 RESOURCES (E): ==== Resource leaks ====", + "13:17:04.450 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:04.450 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "13:17:04.450 RESOURCES (E): ==== Resource leaks ====", + "13:17:04.450 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:04.450 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "launcher_exit_code": null, + "logs": { + "/tmp/erri-native-package-current-20260919-1317/evidence/core/launch.log": { + "bytes": 9115, + "errors": [], + "sha256": "3ecad52669f279e6537e03f73c938a675168f2c5818efc712273e6a1d6f24ab4" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/core/logs/logs_2026-09-19_13-16-58/console.log": { + "bytes": 21527, + "errors": [ + "13:17:04.450 RESOURCES (E): ==== Resource leaks ====", + "13:17:04.450 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:04.450 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "sha256": "16f4a97052e6e373a769a4dc3884ba6f607f7e31eeb798ab64e26a3c07bb845e" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/core/logs/logs_2026-09-19_13-16-58/error.log": { + "bytes": 4894, + "errors": [ + "13:17:04.450 RESOURCES (E): ==== Resource leaks ====", + "13:17:04.450 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:04.450 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:04.450 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:04.450 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "sha256": "341147a5bbeca6c9536c3bf299a8f9aa2b79fa1201ea4ecef3069be33cdd7048" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/core/logs/logs_2026-09-19_13-16-58/script.log": { + "bytes": 4306, + "errors": [], + "sha256": "dd2b4a46f9d0599aad0112ddd1d67a08b1ce8be9f152d20294c11f8c840d7acb" + } + }, + "native_consumption_verified": false, + "native_exit_code": 0, + "native_status_sha256": "902a50eee206b1404ea8fc46c1c47ea24414e764a968991864dda786eece58bb", + "package_contents_verified": false, + "packages": { + "addon.gproj": { + "bytes": 137, + "sha256": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46" + }, + "data.pak": { + "bytes": 199646, + "sha256": "3f84b9622afe2ff1683f05917a1e8e190f4f7dcf62f48a8c29adde95ce8a1b50" + }, + "resourceDatabase.rdb": { + "bytes": 6865, + "sha256": "e85f078208a86591a4b0f791d2b56661018bf46e4b14b5405b183df0baf485f3" + } + }, + "project": "core", + "qualification": "PENDING: inspect native contents and load packed-only addon closure; no release claim", + "release_qualified": false, + "result": "validation-failed", + "runner_error": null, + "silent_workbench_experiment": true, + "tool_completion_semantics_verified": false + }, + { + "candidate_created": false, + "cleanup_confirmed": true, + "completion_observed": "native-child-exited", + "copied_authored_unchanged": true, + "display_cleanup_after_native_exit": true, + "errors": [ + "13:17:24.298 RESOURCES (E): ==== Resource leaks ====", + "13:17:24.298 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:24.298 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "13:17:24.298 RESOURCES (E): ==== Resource leaks ====", + "13:17:24.298 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:24.298 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "launcher_exit_code": null, + "logs": { + "/tmp/erri-native-package-current-20260919-1317/evidence/ai/launch.log": { + "bytes": 9204, + "errors": [], + "sha256": "aa9a9d97ae7a78134d880a27792112c25c76a630949a61154ec98ba05e5bcd44" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/ai/logs/logs_2026-09-19_13-17-17/console.log": { + "bytes": 22927, + "errors": [ + "13:17:24.298 RESOURCES (E): ==== Resource leaks ====", + "13:17:24.298 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:24.298 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "sha256": "83a9bf493cbbc17589ee94531993e4fe926d7cb82a4e9d1d7131f54291d7b249" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/ai/logs/logs_2026-09-19_13-17-17/error.log": { + "bytes": 4892, + "errors": [ + "13:17:24.298 RESOURCES (E): ==== Resource leaks ====", + "13:17:24.298 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:24.298 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:24.298 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:24.298 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "sha256": "66baa9b4da7049283fcade891d6c05e9891f5aa52292eda3da7166c65e671f03" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/ai/logs/logs_2026-09-19_13-17-17/script.log": { + "bytes": 4304, + "errors": [], + "sha256": "59f4aff4ba996c4237a8d241a11bbabc0f528a3cd68a5091b23cb625613d7c8c" + } + }, + "native_consumption_verified": false, + "native_exit_code": 0, + "native_status_sha256": "d00490b742c2ccbe62320409a96655d3079fa4a26a5c1072c6e21072d06455fe", + "package_contents_verified": false, + "packages": { + "addon.gproj": { + "bytes": 154, + "sha256": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1" + }, + "data.pak": { + "bytes": 85107, + "sha256": "627b7389f0656a78f90acc5ead405e494b27b8bcb0cfb85dc812e177bc0f04f6" + }, + "resourceDatabase.rdb": { + "bytes": 1909, + "sha256": "7dc88e5e7a9dfc6d3ddf9f046d211b083c1f379b61cdc32f6d93084add37e53f" + } + }, + "project": "ai", + "qualification": "PENDING: inspect native contents and load packed-only addon closure; no release claim", + "release_qualified": false, + "result": "validation-failed", + "runner_error": null, + "silent_workbench_experiment": true, + "tool_completion_semantics_verified": false + }, + { + "candidate_created": false, + "cleanup_confirmed": true, + "completion_observed": "native-child-exited", + "copied_authored_unchanged": true, + "display_cleanup_after_native_exit": true, + "errors": [ + "13:17:33.958 RESOURCES (E): ==== Resource leaks ====", + "13:17:33.958 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:33.958 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "13:17:33.958 RESOURCES (E): ==== Resource leaks ====", + "13:17:33.958 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:33.958 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "launcher_exit_code": null, + "logs": { + "/tmp/erri-native-package-current-20260919-1317/evidence/intel/launch.log": { + "bytes": 9115, + "errors": [], + "sha256": "3ecad52669f279e6537e03f73c938a675168f2c5818efc712273e6a1d6f24ab4" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/intel/logs/logs_2026-09-19_13-17-27/console.log": { + "bytes": 23026, + "errors": [ + "13:17:33.958 RESOURCES (E): ==== Resource leaks ====", + "13:17:33.958 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:33.958 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "sha256": "216b0ae19d9a9e9672fb9e5c9c522a8c09cd6251ddee1ecfcbabd776ea1077e3" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/intel/logs/logs_2026-09-19_13-17-27/error.log": { + "bytes": 4895, + "errors": [ + "13:17:33.958 RESOURCES (E): ==== Resource leaks ====", + "13:17:33.958 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:33.958 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:33.958 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:33.958 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "sha256": "aa7128707e9f5c69c67f9de5f5a261b403560249d28c5881ff427f911f8137e0" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/intel/logs/logs_2026-09-19_13-17-27/script.log": { + "bytes": 4307, + "errors": [], + "sha256": "c28fb5dfb9f4e76a1c9c86babbeefa6d2c74edcc5e70b0d8257a1e745a9b8951" + } + }, + "native_consumption_verified": false, + "native_exit_code": 0, + "native_status_sha256": "fca947c60eb4a9d319726d9f6c2b61e35bc5534cc728f5fdb1cdf2e3c9f89334", + "package_contents_verified": false, + "packages": { + "addon.gproj": { + "bytes": 160, + "sha256": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe" + }, + "data.pak": { + "bytes": 1250, + "sha256": "5396732e193eb36d4ce86f9999f3cb112b5e1766f0e1b1911b6baa5e761fa37a" + }, + "resourceDatabase.rdb": { + "bytes": 227, + "sha256": "062996b9102e99d19eb680bed04880b0e087d9f8789681c0f3ff8ab6772339ba" + } + }, + "project": "intel", + "qualification": "PENDING: inspect native contents and load packed-only addon closure; no release claim", + "release_qualified": false, + "result": "validation-failed", + "runner_error": null, + "silent_workbench_experiment": true, + "tool_completion_semantics_verified": false + }, + { + "candidate_created": false, + "cleanup_confirmed": true, + "completion_observed": "native-child-exited", + "copied_authored_unchanged": true, + "display_cleanup_after_native_exit": true, + "errors": [ + "13:17:53.209 RESOURCES (E): ==== Resource leaks ====", + "13:17:53.209 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:53.209 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "13:17:53.209 RESOURCES (E): ==== Resource leaks ====", + "13:17:53.209 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:53.209 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "launcher_exit_code": null, + "logs": { + "/tmp/erri-native-package-current-20260919-1317/evidence/map/launch.log": { + "bytes": 9115, + "errors": [], + "sha256": "3ecad52669f279e6537e03f73c938a675168f2c5818efc712273e6a1d6f24ab4" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/map/logs/logs_2026-09-19_13-17-46/console.log": { + "bytes": 22954, + "errors": [ + "13:17:53.209 RESOURCES (E): ==== Resource leaks ====", + "13:17:53.209 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:53.209 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "sha256": "036115c86da07e7b27153a8b4169350405a9271d02c73929acfba28e7c4990b6" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/map/logs/logs_2026-09-19_13-17-46/error.log": { + "bytes": 4893, + "errors": [ + "13:17:53.209 RESOURCES (E): ==== Resource leaks ====", + "13:17:53.209 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:17:53.209 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:17:53.209 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:17:53.209 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "sha256": "1074894c01ceb49edb59d8a1ee81fb9c2f6280f5c567223b801a76bacd299058" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/map/logs/logs_2026-09-19_13-17-46/script.log": { + "bytes": 4305, + "errors": [], + "sha256": "0a69094b8da5a0f32f97c0dbdcb93e4ed06d5c5a25a7ccb32675f739c9b06918" + } + }, + "native_consumption_verified": false, + "native_exit_code": 0, + "native_status_sha256": "3aa53b09fa1eb6de9ecae81edb5efc90a9d6d79fab7bd7b244af590e5b08fbd3", + "package_contents_verified": false, + "packages": { + "addon.gproj": { + "bytes": 156, + "sha256": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" + }, + "data.pak": { + "bytes": 10463, + "sha256": "211835e6afd1b9b18f0a0e4ebd235afa03b1436810c355d6cfeec636c8935dd0" + }, + "resourceDatabase.rdb": { + "bytes": 819, + "sha256": "9b7f50a84d4fb2d390e42c25ecb68d264038bb81926065653e3e9f87556b2462" + } + }, + "project": "map", + "qualification": "PENDING: inspect native contents and load packed-only addon closure; no release claim", + "release_qualified": false, + "result": "validation-failed", + "runner_error": null, + "silent_workbench_experiment": true, + "tool_completion_semantics_verified": false + }, + { + "candidate_created": false, + "cleanup_confirmed": true, + "completion_observed": "native-child-exited", + "copied_authored_unchanged": true, + "display_cleanup_after_native_exit": true, + "errors": [ + "13:18:14.065 RESOURCES (E): ==== Resource leaks ====", + "13:18:14.065 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:18:14.065 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "13:18:14.065 RESOURCES (E): ==== Resource leaks ====", + "13:18:14.065 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:18:14.065 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "launcher_exit_code": null, + "logs": { + "/tmp/erri-native-package-current-20260919-1317/evidence/chat/launch.log": { + "bytes": 9115, + "errors": [], + "sha256": "3ecad52669f279e6537e03f73c938a675168f2c5818efc712273e6a1d6f24ab4" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/chat/logs/logs_2026-09-19_13-18-06/console.log": { + "bytes": 27367, + "errors": [ + "13:18:14.065 RESOURCES (E): ==== Resource leaks ====", + "13:18:14.065 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:18:14.065 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "sha256": "0a6dc48f729e63c5677773c44a6609d719908ca71c70e0100e86ff8610575fe6" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/chat/logs/logs_2026-09-19_13-18-06/error.log": { + "bytes": 4894, + "errors": [ + "13:18:14.065 RESOURCES (E): ==== Resource leaks ====", + "13:18:14.065 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "13:18:14.065 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "13:18:14.065 RESOURCES (E): UI/Imagesets/default.edds 1", + "13:18:14.065 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1", + "Nonempty native error.log" + ], + "sha256": "e90810c9739a6f224babd45bd972b5f6c9cdf4e68f6ac72309c4f1bfc6ba74ca" + }, + "/tmp/erri-native-package-current-20260919-1317/profiles/chat/logs/logs_2026-09-19_13-18-06/script.log": { + "bytes": 4306, + "errors": [], + "sha256": "2fef8f0e4101c370ef0e1e6b455a606fa5204972305750b8efd0f2a87f0d67ef" + } + }, + "native_consumption_verified": false, + "native_exit_code": 0, + "native_status_sha256": "e95e9512678a1e01092dcb00ed86fa9bbbce8a2acf84a8277e1bf8cd2d9f471b", + "package_contents_verified": false, + "packages": { + "addon.gproj": { + "bytes": 221, + "sha256": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e" + }, + "data.pak": { + "bytes": 15163, + "sha256": "26fa2ce81dada224fcb0c24ea3e2ebca01eb67c149bd06bf77f04c6b5faeca53" + }, + "resourceDatabase.rdb": { + "bytes": 804, + "sha256": "42820c285d135a00f44be372b5611f568d0030aaa45b05091f59e723eec46dc4" + } + }, + "project": "chat", + "qualification": "PENDING: inspect native contents and load packed-only addon closure; no release claim", + "release_qualified": false, + "result": "validation-failed", + "runner_error": null, + "silent_workbench_experiment": true, + "tool_completion_semantics_verified": false + } + ], + "published": false, + "qualification": "PENDING native contents inspection and packed-only consumption", + "release_qualified": false, + "session": "/tmp/erri-native-package-current-20260919-1317", + "skipped_projects": [], + "source_repository_unchanged": true, + "stopped_reason": null +} diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/ai/addon.gproj b/docs/evidence/package-2026-09-19-1317-all/packages/ai/addon.gproj new file mode 100644 index 0000000..ec3100b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/packages/ai/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Ai" + GUID "5192138CB9D5B911" + TITLE "Escapists Rereintroduced - Ai" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/ai/data.pak b/docs/evidence/package-2026-09-19-1317-all/packages/ai/data.pak new file mode 100644 index 0000000..0acdb2a Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/packages/ai/data.pak differ diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/ai/resourceDatabase.rdb b/docs/evidence/package-2026-09-19-1317-all/packages/ai/resourceDatabase.rdb new file mode 100644 index 0000000..c0fa6b4 Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/packages/ai/resourceDatabase.rdb differ diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/chat/addon.gproj b/docs/evidence/package-2026-09-19-1317-all/packages/chat/addon.gproj new file mode 100644 index 0000000..d2e277c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/packages/chat/addon.gproj @@ -0,0 +1,12 @@ +GameProject { + ID "ERR_Chat" + GUID "FA804F411BDDF2C6" + TITLE "Escapists Rereintroduced - Chat" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + "5192138CB9D5B911" + "D31039C7C53E348A" + "9AAEE9041D79809E" + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/chat/data.pak b/docs/evidence/package-2026-09-19-1317-all/packages/chat/data.pak new file mode 100644 index 0000000..eca7712 Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/packages/chat/data.pak differ diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/chat/resourceDatabase.rdb b/docs/evidence/package-2026-09-19-1317-all/packages/chat/resourceDatabase.rdb new file mode 100644 index 0000000..4f59ccb Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/packages/chat/resourceDatabase.rdb differ diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/core/addon.gproj b/docs/evidence/package-2026-09-19-1317-all/packages/core/addon.gproj new file mode 100644 index 0000000..54287e7 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/packages/core/addon.gproj @@ -0,0 +1,8 @@ +GameProject { + ID "ERR_Core" + GUID "2528466DE220D91C" + TITLE "Escapists Rereintroduced - Core" + Dependencies { + "58D0FB3206B6F859" + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/core/data.pak b/docs/evidence/package-2026-09-19-1317-all/packages/core/data.pak new file mode 100644 index 0000000..e511470 Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/packages/core/data.pak differ diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/core/resourceDatabase.rdb b/docs/evidence/package-2026-09-19-1317-all/packages/core/resourceDatabase.rdb new file mode 100644 index 0000000..2198e69 Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/packages/core/resourceDatabase.rdb differ diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/intel/addon.gproj b/docs/evidence/package-2026-09-19-1317-all/packages/intel/addon.gproj new file mode 100644 index 0000000..5b29a17 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/packages/intel/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Intel" + GUID "D31039C7C53E348A" + TITLE "Escapists Rereintroduced - Intel" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/intel/data.pak b/docs/evidence/package-2026-09-19-1317-all/packages/intel/data.pak new file mode 100644 index 0000000..73d3dab Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/packages/intel/data.pak differ diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/intel/resourceDatabase.rdb b/docs/evidence/package-2026-09-19-1317-all/packages/intel/resourceDatabase.rdb new file mode 100644 index 0000000..8747de6 Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/packages/intel/resourceDatabase.rdb differ diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/map/addon.gproj b/docs/evidence/package-2026-09-19-1317-all/packages/map/addon.gproj new file mode 100644 index 0000000..5d0a4d2 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/packages/map/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Map" + GUID "9AAEE9041D79809E" + TITLE "Escapists Rereintroduced - Map" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/map/data.pak b/docs/evidence/package-2026-09-19-1317-all/packages/map/data.pak new file mode 100644 index 0000000..0e7fd67 Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/packages/map/data.pak differ diff --git a/docs/evidence/package-2026-09-19-1317-all/packages/map/resourceDatabase.rdb b/docs/evidence/package-2026-09-19-1317-all/packages/map/resourceDatabase.rdb new file mode 100644 index 0000000..72364c1 Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/packages/map/resourceDatabase.rdb differ diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/ai/logs/logs_2026-09-19_13-17-17/console.log b/docs/evidence/package-2026-09-19-1317-all/profiles/ai/logs/logs_2026-09-19_13-17-17/console.log new file mode 100644 index 0000000..c1c0370 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/ai/logs/logs_2026-09-19_13-17-17/console.log @@ -0,0 +1,235 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\ai\logs\logs_2026-09-19_13-17-17\console.log started at 2026-09-19 13:17:17 (2026-09-19 11:17:17 UTC) + +13:17:17.436 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\profiles\ai\logs\logs_2026-09-19_13-17-17' to filesystem under name logs +13:17:17.436 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\profiles\ai\profile' to filesystem under name profile +13:17:17.436 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +13:17:17.437 PROFILING : Workbench Create Engine took: 8.840700 ms +13:17:18.474 INIT : INIT : Workbench Init Engine +13:17:18.474 ENGINE : Initializing engine, version 192142 +13:17:18.474 ENGINE : CLI Params: -gproj Z:/tmp/erri-native-package-current-20260919-1317/source/addons/ai/addon.gproj -addonsDir Z:/tmp/erri-native-package-current-20260919-1317/source/addons -profile Z:/tmp/erri-native-package-current-20260919-1317/profiles/ai -logconsole -noBackend -noSound -disableCrashReporter -wbModule ResourceManager -packAddon -packAddonDir Z:/tmp/erri-native-package-current-20260919-1317/packages/ai -packAddonCacheDir Z:/tmp/erri-native-package-current-20260919-1317/cache/ai -wbSilent +13:17:18.481 ENGINE : Addon dirs: +13:17:18.481 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/ai/' +13:17:18.481 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons' +13:17:18.481 ENGINE : dir: './addons' +13:17:18.481 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/ai/addons' +13:17:18.481 ENGINE : Available addons: +13:17:18.481 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:17:18.481 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:17:18.481 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:17:18.481 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:17:18.481 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:17:18.481 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +13:17:18.481 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/ai/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +13:17:18.481 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\source\addons\ai' to filesystem under name ERR_Ai +13:17:18.481 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core' to filesystem under name ERR_Core +13:17:18.591 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/ai/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +13:17:18.594 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +13:17:18.594 ENGINE : CPU vendor : AuthenticAMD +13:17:18.594 ENGINE : CPU type : 2 +13:17:18.594 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +13:17:18.594 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +13:17:18.594 ENGINE : CPU count logical : 16 +13:17:18.594 ENGINE : CPU count physical : 8 +13:17:18.594 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +13:17:18.594 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Ai path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\ai/resourceDatabase.rdb) +13:17:18.594 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:17:18.594 RESOURCES : ResourceDB: loading cache (id=2 name=ArmaReforger path=Z:/tmp/erri-native-package-current-20260919-1317/profiles/ai/addons/ArmaReforger/resourceDatabase.rdb) +13:17:18.732 RESOURCES : ResourceDB: loading cache (id=3 name=core path=./addons/core/resourceDatabase.rdb) +13:17:18.734 RESOURCES : ResourceDB: loading cache (id=4 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\ai\profile/resourceDatabase.rdb) +13:17:18.734 RESOURCES : ResourceDB: loading cache (id=5 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\ai\logs\logs_2026-09-19_13-17-17/resourceDatabase.rdb) +13:17:18.884 RESOURCES : RESOURCES : ResourceDB: full scan +13:17:18.889 RESOURCES : RESOURCES : scanning... +13:17:18.889 RESOURCES : RESOURCES : scanning @"ERR_Ai" +13:17:18.890 RESOURCES : RESOURCES : scanning @"ERR_Core" +13:17:18.892 RESOURCES : RESOURCES : scanning @"ArmaReforger" +13:17:19.028 RESOURCES : RESOURCES : scanning @"core" +13:17:19.033 RESOURCES : RESOURCES : scanning @"profile" +13:17:19.033 RESOURCES : RESOURCES : scanning @"logs" +13:17:19.033 RESOURCES : RESOURCES : processing meta-files... +13:17:19.098 RESOURCES : RESOURCES : processing files... +13:17:19.109 RESOURCES : RESOURCES : processing folders... +13:17:19.115 RESOURCES : RESOURCES : creating GUID-item mapping... +13:17:19.133 RESOURCES : RESOURCES : building tree... +13:17:19.192 PROFILING : ResourceDB: full scan took: 307.400300 ms +13:17:19.193 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Ai path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\ai/resourceDatabase.rdb) +13:17:19.194 RESOURCES : ResourceDB: written 1909/1909 bytes +13:17:19.194 RESOURCES : ResourceDB: cache successfully saved +13:17:19.195 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:17:19.196 RESOURCES : ResourceDB: written 6865/6865 bytes +13:17:19.196 RESOURCES : ResourceDB: cache successfully saved +13:17:19.196 RESOURCES : ResourceDB: saving cache (id=4 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\ai\profile/resourceDatabase.rdb) +13:17:19.197 RESOURCES : ResourceDB: written 51/51 bytes +13:17:19.197 RESOURCES : ResourceDB: cache successfully saved +13:17:19.198 RESOURCES : ResourceDB: saving cache (id=5 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\ai\logs\logs_2026-09-19_13-17-17/resourceDatabase.rdb) +13:17:19.199 RESOURCES : ResourceDB: written 81/81 bytes +13:17:19.199 RESOURCES : ResourceDB: cache successfully saved +13:17:19.199 ENGINE : GameProject load +13:17:19.199 ENGINE : Loaded addons: +13:17:19.199 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +13:17:19.199 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/ai/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +13:17:19.199 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:17:19.199 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:17:19.201 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +13:17:19.201 ENGINE : No Enfusion settings file loaded. Continuing with defaults +13:17:19.304 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +13:17:19.305 RENDER : Basic screen setup: +13:17:19.305 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +13:17:19.305 RENDER : MSAA : none +13:17:19.318 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +13:17:19.318 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +13:17:19.318 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +13:17:19.318 RENDER : * core clocks 2720 MHz, memory 1124 MHz +13:17:19.318 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +13:17:19.318 RENDER : AMD AGS correctly initialized +13:17:19.318 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +13:17:19.318 RENDER : Detected output devices: +13:17:19.318 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +13:17:19.318 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +13:17:19.318 RENDER : Concurrent frames limit 2 +13:17:19.392 RENDER : DX12 device successfully created by AMD AGS library +13:17:19.392 RENDER : * user markers not supported in this version AMD SW +13:17:19.392 RENDER : Graphics device features +13:17:19.392 RENDER : Needed: +13:17:19.392 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +13:17:19.392 RENDER : Optional: +13:17:19.392 RENDER : * Allow tearing (VSYNC) : 1 +13:17:19.392 RENDER : * 16 bits : 1 +13:17:19.392 RENDER : * Resource heap tier : 3 +13:17:19.392 RENDER : * Persistent heaps (DRED) : 1 +13:17:19.392 RENDER : * DRED 1.2 is supported by compiler +13:17:19.412 RENDER : Main RT format setup. +13:17:19.412 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +13:17:19.412 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +13:17:19.414 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +13:17:19.443 PROFILING : Settings changed took: 0.016400 ms +13:17:19.450 RENDER : RENDER : Reload shaders +13:17:19.451 RENDER : Enfusion shader version 13 +13:17:19.451 INIT : INIT : ShaderListReload +13:17:19.451 PROFILING : ShaderListReload took: 0.000400 ms +13:17:19.752 RENDER : Loaded 3752 newer shader binaries +13:17:19.752 PROFILING : Reload shaders took: 301.579300 ms +13:17:19.752 ENGINE : Initializing inputs. +13:17:19.767 NETWORK : Initializing networking. +13:17:19.767 NETWORK : Using new GameRplScheduler. +13:17:19.768 SCRIPT : SCRIPT : Initializing scripts +13:17:19.768 SCRIPT : SCRIPT : ScriptProjectManager init +13:17:20.889 PROFILING : ScriptProjectManager init took: 1121.523600 ms +13:17:20.934 PROFILING : Initializing scripts took: 1166.400600 ms +13:17:20.952 BACKEND : Backend Services are disabled. +13:17:20.952 ENGINE : Enfusion engine successfully created. +13:17:20.952 PROFILING : Workbench Init Engine took: 2477.718800 ms +13:17:20.952 INIT : INIT : Workbench Create Game +13:17:20.962 GUI : Using default language (en_us) +13:17:20.962 GUI : Loading 'en_us' localization file. +13:17:20.962 INIT : INIT : Loading StringTable +13:17:20.986 PROFILING : Loading StringTable took: 23.659500 ms +13:17:20.986 SCRIPT : SCRIPT : Compiling GameLib scripts +13:17:21.036 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:17:21.036 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:17:21.037 PROFILING : Compiling GameLib scripts took: 50.338400 ms +13:17:21.037 SCRIPT : SCRIPT : Compiling Game scripts +13:17:22.124 INIT : Workbench startup +13:17:22.124 INIT : Workbench Create Game +13:17:22.124 SCRIPT : Compiling Game scripts +13:17:22.124 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:17:22.124 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:17:22.330 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:22.472 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:17:22.508 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:17:22.667 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:17:22.667 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:17:22.667 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:17:22.667 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:17:22.717 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:17:22.782 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:17:22.782 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:17:22.784 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:17:22.823 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:22.823 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:22.824 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:17:22.824 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:17:22.850 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:22.886 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:17:23.161 SCRIPT : Module: WorkbenchGame; loaded 171x files; 616x classes; used 2478K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: db6febb9 +13:17:23.169 SCRIPT : Module: Game; loaded 5770x files; 11354x classes; used 33490K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 948361b1 +13:17:23.210 PROFILING : Compiling Game scripts took: 2172.971900 ms +13:17:23.215 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:17:23.255 ENGINE : Game successfully created. +13:17:23.257 PROFILING : Workbench Create Game took: 2304.849400 ms +13:17:23.265 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Ai/thumbnails +13:17:24.143 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Ai path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\ai/resourceDatabase.rdb) +13:17:24.145 RESOURCES : ResourceDB: written 1909/1909 bytes +13:17:24.145 RESOURCES : ResourceDB: cache successfully saved +13:17:24.145 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:17:24.147 RESOURCES : ResourceDB: written 6865/6865 bytes +13:17:24.147 RESOURCES : ResourceDB: cache successfully saved +13:17:24.147 RESOURCES : ResourceDB: saving cache (id=4 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\ai\profile/resourceDatabase.rdb) +13:17:24.149 RESOURCES : ResourceDB: written 51/51 bytes +13:17:24.149 RESOURCES : ResourceDB: cache successfully saved +13:17:24.149 RESOURCES : ResourceDB: saving cache (id=5 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\ai\logs\logs_2026-09-19_13-17-17/resourceDatabase.rdb) +13:17:24.151 RESOURCES : ResourceDB: written 81/81 bytes +13:17:24.151 RESOURCES : ResourceDB: cache successfully saved +13:17:24.151 RESOURCES : Packaging project started. +13:17:24.163 DEFAULT : DEFAULT : Scanning source directory +13:17:24.165 PROFILING : Scanning source directory took: 1.575400 ms +13:17:24.165 DEFAULT : DEFAULT : Scanning intermediate directory +13:17:24.165 PROFILING : Scanning intermediate directory took: 0.120900 ms +13:17:24.165 DEFAULT : DEFAULT : Refreshing intermediate directory +13:17:24.178 DEFAULT : Refreshed 24 files in intermediate directory. +13:17:24.178 PROFILING : Refreshing intermediate directory took: 13.220900 ms +13:17:24.178 DEFAULT : DEFAULT : Assigning files to selections +13:17:24.178 DEFAULT : Selection 'data': 29 files +13:17:24.178 DEFAULT : Default/unassigned selection: 0 files +13:17:24.178 PROFILING : Assigning files to selections took: 0.014700 ms +13:17:24.178 DEFAULT : DEFAULT : Calculating chunk pak layouts +13:17:24.178 PROFILING : Calculating chunk pak layouts took: 0.011100 ms +13:17:24.178 DEFAULT : DEFAULT : Writing pak files +13:17:24.180 PROFILING : Writing pak files took: 2.188300 ms +13:17:24.194 RESOURCES : Packaging done. Result: 1 +13:17:24.195 RESOURCES : Gproj file copy successful +13:17:24.196 RESOURCES : ResourceDB cache file copy successful +13:17:24.196 DEFAULT : Created PAK files: +13:17:24.197 RESOURCES : 1: Z:/tmp/erri-native-package-current-20260919-1317/packages/ai/data.pak +13:17:24.198 RESOURCES : Packaging project successful +13:17:24.199 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Ai/autosaves +13:17:24.201 PROFILING : Workbench startup took: 6839.960600 ms +13:17:24.237 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Ai path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\ai/resourceDatabase.rdb) +13:17:24.239 RESOURCES : ResourceDB: written 1909/1909 bytes +13:17:24.239 RESOURCES : ResourceDB: cache successfully saved +13:17:24.239 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:17:24.240 RESOURCES : ResourceDB: written 6865/6865 bytes +13:17:24.240 RESOURCES : ResourceDB: cache successfully saved +13:17:24.241 RESOURCES : ResourceDB: saving cache (id=4 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\ai\profile/resourceDatabase.rdb) +13:17:24.242 RESOURCES : ResourceDB: written 51/51 bytes +13:17:24.242 RESOURCES : ResourceDB: cache successfully saved +13:17:24.242 RESOURCES : ResourceDB: saving cache (id=5 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\ai\logs\logs_2026-09-19_13-17-17/resourceDatabase.rdb) +13:17:24.243 RESOURCES : ResourceDB: written 81/81 bytes +13:17:24.243 RESOURCES : ResourceDB: cache successfully saved +13:17:24.272 ENGINE : Game destroyed. +13:17:24.273 ENGINE : Game destroyed. +13:17:24.298 RESOURCES (E): ==== Resource leaks ==== +13:17:24.298 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1 +13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1 +13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1 +13:17:24.298 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1 +13:17:24.298 RESOURCES (E): UI/Imagesets/debugUI.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1 +13:17:24.298 RESOURCES (E): UI/Imagesets/default.edds 1 +13:17:24.298 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1 diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/ai/logs/logs_2026-09-19_13-17-17/error.log b/docs/evidence/package-2026-09-19-1317-all/profiles/ai/logs/logs_2026-09-19_13-17-17/error.log new file mode 100644 index 0000000..98b3e6f --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/ai/logs/logs_2026-09-19_13-17-17/error.log @@ -0,0 +1,50 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\ai\logs\logs_2026-09-19_13-17-17\error.log started at 2026-09-19 13:17:22 (2026-09-19 11:17:22 UTC) + +13:17:22.124 INIT : Workbench startup +13:17:22.124 INIT : Workbench Create Game +13:17:22.124 SCRIPT : Compiling Game scripts +13:17:22.124 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:17:22.124 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:17:22.330 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:22.472 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:17:22.508 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:17:22.667 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:17:22.667 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:17:22.667 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:17:22.667 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:17:22.717 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:17:22.782 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:17:22.782 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:17:22.784 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:17:22.823 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:22.823 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:22.824 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:17:22.824 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:17:22.850 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:22.886 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:17:24.298 RESOURCES (E): ==== Resource leaks ==== +13:17:24.298 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1 +13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1 +13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1 +13:17:24.298 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1 +13:17:24.298 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1 +13:17:24.298 RESOURCES (E): UI/Imagesets/debugUI.edds 1 +13:17:24.298 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1 +13:17:24.298 RESOURCES (E): UI/Imagesets/default.edds 1 +13:17:24.298 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1 diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/ai/logs/logs_2026-09-19_13-17-17/resourceDatabase.rdb b/docs/evidence/package-2026-09-19-1317-all/profiles/ai/logs/logs_2026-09-19_13-17-17/resourceDatabase.rdb new file mode 100644 index 0000000..2ed71d3 Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/profiles/ai/logs/logs_2026-09-19_13-17-17/resourceDatabase.rdb differ diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/ai/logs/logs_2026-09-19_13-17-17/script.log b/docs/evidence/package-2026-09-19-1317-all/profiles/ai/logs/logs_2026-09-19_13-17-17/script.log new file mode 100644 index 0000000..80e7a6a --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/ai/logs/logs_2026-09-19_13-17-17/script.log @@ -0,0 +1,31 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\ai\logs\logs_2026-09-19_13-17-17\script.log started at 2026-09-19 13:17:19 (2026-09-19 11:17:19 UTC) + +13:17:19.768 SCRIPT : SCRIPT : Initializing scripts +13:17:19.768 SCRIPT : SCRIPT : ScriptProjectManager init +13:17:20.986 SCRIPT : SCRIPT : Compiling GameLib scripts +13:17:21.036 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:17:21.036 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:17:21.037 SCRIPT : SCRIPT : Compiling Game scripts +13:17:22.124 SCRIPT : Compiling Game scripts +13:17:22.124 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:17:22.124 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:17:22.330 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:22.472 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:17:22.508 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:17:22.667 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:17:22.667 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:17:22.667 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:17:22.667 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:17:22.717 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:17:22.782 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:17:22.782 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:17:22.784 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:17:22.823 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:22.823 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:22.824 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:17:22.824 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:17:22.850 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:22.886 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:17:23.161 SCRIPT : Module: WorkbenchGame; loaded 171x files; 616x classes; used 2478K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: db6febb9 +13:17:23.169 SCRIPT : Module: Game; loaded 5770x files; 11354x classes; used 33490K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 948361b1 diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/chat/logs/logs_2026-09-19_13-18-06/console.log b/docs/evidence/package-2026-09-19-1317-all/profiles/chat/logs/logs_2026-09-19_13-18-06/console.log new file mode 100644 index 0000000..3bd04eb --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/chat/logs/logs_2026-09-19_13-18-06/console.log @@ -0,0 +1,274 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\chat\logs\logs_2026-09-19_13-18-06\console.log started at 2026-09-19 13:18:06 (2026-09-19 11:18:06 UTC) + +13:18:06.144 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\profiles\chat\logs\logs_2026-09-19_13-18-06' to filesystem under name logs +13:18:06.144 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\profiles\chat\profile' to filesystem under name profile +13:18:06.144 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +13:18:06.145 PROFILING : Workbench Create Engine took: 8.047800 ms +13:18:07.185 INIT : INIT : Workbench Init Engine +13:18:07.185 ENGINE : Initializing engine, version 192142 +13:18:07.185 ENGINE : CLI Params: -gproj Z:/tmp/erri-native-package-current-20260919-1317/source/addons/chat/addon.gproj -addonsDir Z:/tmp/erri-native-package-current-20260919-1317/source/addons -profile Z:/tmp/erri-native-package-current-20260919-1317/profiles/chat -logconsole -noBackend -noSound -disableCrashReporter -wbModule ResourceManager -packAddon -packAddonDir Z:/tmp/erri-native-package-current-20260919-1317/packages/chat -packAddonCacheDir Z:/tmp/erri-native-package-current-20260919-1317/cache/chat -wbSilent +13:18:07.193 ENGINE : Addon dirs: +13:18:07.193 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/chat/' +13:18:07.193 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons' +13:18:07.193 ENGINE : dir: './addons' +13:18:07.193 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/chat/addons' +13:18:07.193 ENGINE : Available addons: +13:18:07.193 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:18:07.193 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:18:07.193 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:18:07.193 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:18:07.193 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:18:07.193 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +13:18:07.193 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/chat/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +13:18:07.193 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\source\addons\chat' to filesystem under name ERR_Chat +13:18:07.194 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\source\addons\map' to filesystem under name ERR_Map +13:18:07.194 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\source\addons\intel' to filesystem under name ERR_Intel +13:18:07.194 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\source\addons\ai' to filesystem under name ERR_Ai +13:18:07.194 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core' to filesystem under name ERR_Core +13:18:07.314 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/chat/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +13:18:07.318 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +13:18:07.318 ENGINE : CPU vendor : AuthenticAMD +13:18:07.318 ENGINE : CPU type : 2 +13:18:07.318 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +13:18:07.318 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +13:18:07.318 ENGINE : CPU count logical : 16 +13:18:07.318 ENGINE : CPU count physical : 8 +13:18:07.318 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +13:18:07.318 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\chat/resourceDatabase.rdb) +13:18:07.318 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\map/resourceDatabase.rdb) +13:18:07.319 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\intel/resourceDatabase.rdb) +13:18:07.319 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\ai/resourceDatabase.rdb) +13:18:07.320 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:18:07.320 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=Z:/tmp/erri-native-package-current-20260919-1317/profiles/chat/addons/ArmaReforger/resourceDatabase.rdb) +13:18:07.462 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +13:18:07.463 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\chat\profile/resourceDatabase.rdb) +13:18:07.463 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\chat\logs\logs_2026-09-19_13-18-06/resourceDatabase.rdb) +13:18:07.609 RESOURCES : RESOURCES : ResourceDB: full scan +13:18:07.614 RESOURCES : RESOURCES : scanning... +13:18:07.614 RESOURCES : RESOURCES : scanning @"ERR_Chat" +13:18:07.615 RESOURCES : RESOURCES : scanning @"ERR_Map" +13:18:07.617 RESOURCES : RESOURCES : scanning @"ERR_Intel" +13:18:07.618 RESOURCES : RESOURCES : scanning @"ERR_Ai" +13:18:07.619 RESOURCES : RESOURCES : scanning @"ERR_Core" +13:18:07.622 RESOURCES : RESOURCES : scanning @"ArmaReforger" +13:18:07.770 RESOURCES : RESOURCES : scanning @"core" +13:18:07.775 RESOURCES : RESOURCES : scanning @"profile" +13:18:07.775 RESOURCES : RESOURCES : scanning @"logs" +13:18:07.775 RESOURCES : RESOURCES : processing meta-files... +13:18:07.845 RESOURCES : RESOURCES : processing files... +13:18:07.856 RESOURCES : RESOURCES : processing folders... +13:18:07.862 RESOURCES : RESOURCES : creating GUID-item mapping... +13:18:07.881 RESOURCES : RESOURCES : building tree... +13:18:07.946 PROFILING : ResourceDB: full scan took: 337.198400 ms +13:18:07.947 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Chat path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\chat/resourceDatabase.rdb) +13:18:07.949 RESOURCES : ResourceDB: written 804/804 bytes +13:18:07.949 RESOURCES : ResourceDB: cache successfully saved +13:18:07.949 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Map path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\map/resourceDatabase.rdb) +13:18:07.951 RESOURCES : ResourceDB: written 819/819 bytes +13:18:07.951 RESOURCES : ResourceDB: cache successfully saved +13:18:07.951 RESOURCES : ResourceDB: saving cache (id=2 name=ERR_Intel path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\intel/resourceDatabase.rdb) +13:18:07.952 RESOURCES : ResourceDB: written 227/227 bytes +13:18:07.952 RESOURCES : ResourceDB: cache successfully saved +13:18:07.952 RESOURCES : ResourceDB: saving cache (id=3 name=ERR_Ai path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\ai/resourceDatabase.rdb) +13:18:07.954 RESOURCES : ResourceDB: written 1909/1909 bytes +13:18:07.954 RESOURCES : ResourceDB: cache successfully saved +13:18:07.954 RESOURCES : ResourceDB: saving cache (id=4 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:18:07.956 RESOURCES : ResourceDB: written 6865/6865 bytes +13:18:07.956 RESOURCES : ResourceDB: cache successfully saved +13:18:07.956 RESOURCES : ResourceDB: saving cache (id=7 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\chat\profile/resourceDatabase.rdb) +13:18:07.958 RESOURCES : ResourceDB: written 51/51 bytes +13:18:07.958 RESOURCES : ResourceDB: cache successfully saved +13:18:07.958 RESOURCES : ResourceDB: saving cache (id=8 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\chat\logs\logs_2026-09-19_13-18-06/resourceDatabase.rdb) +13:18:07.959 RESOURCES : ResourceDB: written 81/81 bytes +13:18:07.959 RESOURCES : ResourceDB: cache successfully saved +13:18:07.959 ENGINE : GameProject load +13:18:07.959 ENGINE : Loaded addons: +13:18:07.959 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +13:18:07.959 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/chat/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +13:18:07.959 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:18:07.959 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:18:07.959 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:18:07.959 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:18:07.959 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:18:07.963 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +13:18:07.963 ENGINE : No Enfusion settings file loaded. Continuing with defaults +13:18:08.069 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +13:18:08.070 RENDER : Basic screen setup: +13:18:08.070 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +13:18:08.070 RENDER : MSAA : none +13:18:08.084 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +13:18:08.084 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +13:18:08.084 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +13:18:08.084 RENDER : * core clocks 2720 MHz, memory 1124 MHz +13:18:08.084 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +13:18:08.084 RENDER : AMD AGS correctly initialized +13:18:08.084 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +13:18:08.084 RENDER : Detected output devices: +13:18:08.084 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +13:18:08.084 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +13:18:08.084 RENDER : Concurrent frames limit 2 +13:18:08.168 RENDER : DX12 device successfully created by AMD AGS library +13:18:08.168 RENDER : * user markers not supported in this version AMD SW +13:18:08.168 RENDER : Graphics device features +13:18:08.168 RENDER : Needed: +13:18:08.168 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +13:18:08.168 RENDER : Optional: +13:18:08.168 RENDER : * Allow tearing (VSYNC) : 1 +13:18:08.168 RENDER : * 16 bits : 1 +13:18:08.168 RENDER : * Resource heap tier : 3 +13:18:08.168 RENDER : * Persistent heaps (DRED) : 1 +13:18:08.168 RENDER : * DRED 1.2 is supported by compiler +13:18:08.189 RENDER : Main RT format setup. +13:18:08.189 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +13:18:08.189 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +13:18:08.191 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +13:18:08.223 PROFILING : Settings changed took: 0.018300 ms +13:18:08.231 RENDER : RENDER : Reload shaders +13:18:08.231 RENDER : Enfusion shader version 13 +13:18:08.231 INIT : INIT : ShaderListReload +13:18:08.231 PROFILING : ShaderListReload took: 0.000400 ms +13:18:08.601 RENDER : Loaded 3752 newer shader binaries +13:18:08.601 PROFILING : Reload shaders took: 370.457300 ms +13:18:08.601 ENGINE : Initializing inputs. +13:18:08.617 NETWORK : Initializing networking. +13:18:08.617 NETWORK : Using new GameRplScheduler. +13:18:08.617 SCRIPT : SCRIPT : Initializing scripts +13:18:08.618 SCRIPT : SCRIPT : ScriptProjectManager init +13:18:10.663 PROFILING : ScriptProjectManager init took: 2044.736000 ms +13:18:10.741 PROFILING : Initializing scripts took: 2122.752300 ms +13:18:10.758 BACKEND : Backend Services are disabled. +13:18:10.758 ENGINE : Enfusion engine successfully created. +13:18:10.758 PROFILING : Workbench Init Engine took: 3573.513800 ms +13:18:10.758 INIT : INIT : Workbench Create Game +13:18:10.771 GUI : Using default language (en_us) +13:18:10.771 GUI : Loading 'en_us' localization file. +13:18:10.771 INIT : INIT : Loading StringTable +13:18:10.795 PROFILING : Loading StringTable took: 23.878100 ms +13:18:10.795 SCRIPT : SCRIPT : Compiling GameLib scripts +13:18:10.850 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:18:10.850 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:18:10.851 PROFILING : Compiling GameLib scripts took: 56.331900 ms +13:18:10.851 SCRIPT : SCRIPT : Compiling Game scripts +13:18:11.987 INIT : Workbench startup +13:18:11.987 INIT : Workbench Create Game +13:18:11.987 SCRIPT : Compiling Game scripts +13:18:11.987 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:18:11.987 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:18:12.149 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:18:12.265 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:18:12.295 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:18:12.402 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:18:12.402 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:18:12.402 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:18:12.402 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:18:12.436 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:18:12.498 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:18:12.498 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:18:12.500 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:18:12.544 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:18:12.544 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:18:12.546 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:18:12.546 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:18:12.573 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:18:12.607 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:18:12.893 SCRIPT : Module: WorkbenchGame; loaded 172x files; 617x classes; used 2482K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: e963af0e +13:18:12.901 SCRIPT : Module: Game; loaded 5780x files; 11382x classes; used 33615K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 6264db09 +13:18:12.943 PROFILING : Compiling Game scripts took: 2092.312100 ms +13:18:12.949 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:18:12.993 ENGINE : Game successfully created. +13:18:12.994 PROFILING : Workbench Create Game took: 2235.801800 ms +13:18:13.004 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/thumbnails +13:18:13.928 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Chat path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\chat/resourceDatabase.rdb) +13:18:13.930 RESOURCES : ResourceDB: written 804/804 bytes +13:18:13.930 RESOURCES : ResourceDB: cache successfully saved +13:18:13.930 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Map path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\map/resourceDatabase.rdb) +13:18:13.932 RESOURCES : ResourceDB: written 819/819 bytes +13:18:13.932 RESOURCES : ResourceDB: cache successfully saved +13:18:13.933 RESOURCES : ResourceDB: saving cache (id=2 name=ERR_Intel path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\intel/resourceDatabase.rdb) +13:18:13.934 RESOURCES : ResourceDB: written 227/227 bytes +13:18:13.935 RESOURCES : ResourceDB: cache successfully saved +13:18:13.935 RESOURCES : ResourceDB: saving cache (id=3 name=ERR_Ai path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\ai/resourceDatabase.rdb) +13:18:13.936 RESOURCES : ResourceDB: written 1909/1909 bytes +13:18:13.936 RESOURCES : ResourceDB: cache successfully saved +13:18:13.936 RESOURCES : ResourceDB: saving cache (id=4 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:18:13.938 RESOURCES : ResourceDB: written 6865/6865 bytes +13:18:13.938 RESOURCES : ResourceDB: cache successfully saved +13:18:13.938 RESOURCES : ResourceDB: saving cache (id=7 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\chat\profile/resourceDatabase.rdb) +13:18:13.940 RESOURCES : ResourceDB: written 51/51 bytes +13:18:13.940 RESOURCES : ResourceDB: cache successfully saved +13:18:13.940 RESOURCES : ResourceDB: saving cache (id=8 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\chat\logs\logs_2026-09-19_13-18-06/resourceDatabase.rdb) +13:18:13.942 RESOURCES : ResourceDB: written 81/81 bytes +13:18:13.942 RESOURCES : ResourceDB: cache successfully saved +13:18:13.942 RESOURCES : Packaging project started. +13:18:13.954 DEFAULT : DEFAULT : Scanning source directory +13:18:13.956 PROFILING : Scanning source directory took: 1.429600 ms +13:18:13.956 DEFAULT : DEFAULT : Scanning intermediate directory +13:18:13.956 PROFILING : Scanning intermediate directory took: 0.124100 ms +13:18:13.956 DEFAULT : DEFAULT : Refreshing intermediate directory +13:18:13.959 DEFAULT : Refreshed 5 files in intermediate directory. +13:18:13.959 PROFILING : Refreshing intermediate directory took: 2.884800 ms +13:18:13.959 DEFAULT : DEFAULT : Assigning files to selections +13:18:13.959 DEFAULT : Selection 'data': 8 files +13:18:13.959 DEFAULT : Default/unassigned selection: 0 files +13:18:13.959 PROFILING : Assigning files to selections took: 0.014000 ms +13:18:13.959 DEFAULT : DEFAULT : Calculating chunk pak layouts +13:18:13.959 PROFILING : Calculating chunk pak layouts took: 0.008800 ms +13:18:13.959 DEFAULT : DEFAULT : Writing pak files +13:18:13.959 PROFILING : Writing pak files took: 0.631400 ms +13:18:13.969 RESOURCES : Packaging done. Result: 1 +13:18:13.970 RESOURCES : Gproj file copy successful +13:18:13.971 RESOURCES : ResourceDB cache file copy successful +13:18:13.971 DEFAULT : Created PAK files: +13:18:13.971 RESOURCES : 1: Z:/tmp/erri-native-package-current-20260919-1317/packages/chat/data.pak +13:18:13.972 RESOURCES : Packaging project successful +13:18:13.974 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/autosaves +13:18:13.975 PROFILING : Workbench startup took: 7890.188600 ms +13:18:14.002 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Chat path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\chat/resourceDatabase.rdb) +13:18:14.003 RESOURCES : ResourceDB: written 804/804 bytes +13:18:14.003 RESOURCES : ResourceDB: cache successfully saved +13:18:14.003 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Map path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\map/resourceDatabase.rdb) +13:18:14.005 RESOURCES : ResourceDB: written 819/819 bytes +13:18:14.005 RESOURCES : ResourceDB: cache successfully saved +13:18:14.005 RESOURCES : ResourceDB: saving cache (id=2 name=ERR_Intel path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\intel/resourceDatabase.rdb) +13:18:14.006 RESOURCES : ResourceDB: written 227/227 bytes +13:18:14.006 RESOURCES : ResourceDB: cache successfully saved +13:18:14.006 RESOURCES : ResourceDB: saving cache (id=3 name=ERR_Ai path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\ai/resourceDatabase.rdb) +13:18:14.008 RESOURCES : ResourceDB: written 1909/1909 bytes +13:18:14.008 RESOURCES : ResourceDB: cache successfully saved +13:18:14.008 RESOURCES : ResourceDB: saving cache (id=4 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:18:14.009 RESOURCES : ResourceDB: written 6865/6865 bytes +13:18:14.009 RESOURCES : ResourceDB: cache successfully saved +13:18:14.009 RESOURCES : ResourceDB: saving cache (id=7 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\chat\profile/resourceDatabase.rdb) +13:18:14.011 RESOURCES : ResourceDB: written 51/51 bytes +13:18:14.011 RESOURCES : ResourceDB: cache successfully saved +13:18:14.011 RESOURCES : ResourceDB: saving cache (id=8 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\chat\logs\logs_2026-09-19_13-18-06/resourceDatabase.rdb) +13:18:14.012 RESOURCES : ResourceDB: written 81/81 bytes +13:18:14.012 RESOURCES : ResourceDB: cache successfully saved +13:18:14.040 ENGINE : Game destroyed. +13:18:14.040 ENGINE : Game destroyed. +13:18:14.065 RESOURCES (E): ==== Resource leaks ==== +13:18:14.065 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1 +13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1 +13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1 +13:18:14.065 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1 +13:18:14.065 RESOURCES (E): UI/Imagesets/debugUI.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1 +13:18:14.065 RESOURCES (E): UI/Imagesets/default.edds 1 +13:18:14.065 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1 diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/chat/logs/logs_2026-09-19_13-18-06/error.log b/docs/evidence/package-2026-09-19-1317-all/profiles/chat/logs/logs_2026-09-19_13-18-06/error.log new file mode 100644 index 0000000..237d4ff --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/chat/logs/logs_2026-09-19_13-18-06/error.log @@ -0,0 +1,50 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\chat\logs\logs_2026-09-19_13-18-06\error.log started at 2026-09-19 13:18:11 (2026-09-19 11:18:11 UTC) + +13:18:11.987 INIT : Workbench startup +13:18:11.987 INIT : Workbench Create Game +13:18:11.987 SCRIPT : Compiling Game scripts +13:18:11.987 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:18:11.987 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:18:12.149 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:18:12.265 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:18:12.295 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:18:12.402 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:18:12.402 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:18:12.402 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:18:12.402 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:18:12.436 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:18:12.498 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:18:12.498 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:18:12.500 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:18:12.544 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:18:12.544 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:18:12.546 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:18:12.546 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:18:12.573 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:18:12.607 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:18:14.065 RESOURCES (E): ==== Resource leaks ==== +13:18:14.065 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1 +13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1 +13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1 +13:18:14.065 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1 +13:18:14.065 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1 +13:18:14.065 RESOURCES (E): UI/Imagesets/debugUI.edds 1 +13:18:14.065 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1 +13:18:14.065 RESOURCES (E): UI/Imagesets/default.edds 1 +13:18:14.065 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1 diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/chat/logs/logs_2026-09-19_13-18-06/resourceDatabase.rdb b/docs/evidence/package-2026-09-19-1317-all/profiles/chat/logs/logs_2026-09-19_13-18-06/resourceDatabase.rdb new file mode 100644 index 0000000..2ed71d3 Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/profiles/chat/logs/logs_2026-09-19_13-18-06/resourceDatabase.rdb differ diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/chat/logs/logs_2026-09-19_13-18-06/script.log b/docs/evidence/package-2026-09-19-1317-all/profiles/chat/logs/logs_2026-09-19_13-18-06/script.log new file mode 100644 index 0000000..4d95490 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/chat/logs/logs_2026-09-19_13-18-06/script.log @@ -0,0 +1,31 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\chat\logs\logs_2026-09-19_13-18-06\script.log started at 2026-09-19 13:18:08 (2026-09-19 11:18:08 UTC) + +13:18:08.618 SCRIPT : SCRIPT : Initializing scripts +13:18:08.618 SCRIPT : SCRIPT : ScriptProjectManager init +13:18:10.795 SCRIPT : SCRIPT : Compiling GameLib scripts +13:18:10.850 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:18:10.850 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:18:10.851 SCRIPT : SCRIPT : Compiling Game scripts +13:18:11.987 SCRIPT : Compiling Game scripts +13:18:11.987 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:18:11.987 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:18:12.149 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:18:12.265 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:18:12.295 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:18:12.402 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:18:12.402 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:18:12.402 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:18:12.402 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:18:12.436 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:18:12.498 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:18:12.498 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:18:12.500 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:18:12.544 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:18:12.544 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:18:12.546 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:18:12.546 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:18:12.573 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:18:12.607 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:18:12.893 SCRIPT : Module: WorkbenchGame; loaded 172x files; 617x classes; used 2482K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: e963af0e +13:18:12.901 SCRIPT : Module: Game; loaded 5780x files; 11382x classes; used 33615K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 6264db09 diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/core/logs/logs_2026-09-19_13-16-58/console.log b/docs/evidence/package-2026-09-19-1317-all/profiles/core/logs/logs_2026-09-19_13-16-58/console.log new file mode 100644 index 0000000..2660be8 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/core/logs/logs_2026-09-19_13-16-58/console.log @@ -0,0 +1,222 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\core\logs\logs_2026-09-19_13-16-58\console.log started at 2026-09-19 13:16:58 (2026-09-19 11:16:58 UTC) + +13:16:58.121 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\profiles\core\logs\logs_2026-09-19_13-16-58' to filesystem under name logs +13:16:58.121 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\profiles\core\profile' to filesystem under name profile +13:16:58.121 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +13:16:58.123 PROFILING : Workbench Create Engine took: 9.969100 ms +13:16:59.165 INIT : INIT : Workbench Init Engine +13:16:59.165 ENGINE : Initializing engine, version 192142 +13:16:59.165 ENGINE : CLI Params: -gproj Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/addon.gproj -addonsDir Z:/tmp/erri-native-package-current-20260919-1317/source/addons -profile Z:/tmp/erri-native-package-current-20260919-1317/profiles/core -logconsole -noBackend -noSound -disableCrashReporter -wbModule ResourceManager -packAddon -packAddonDir Z:/tmp/erri-native-package-current-20260919-1317/packages/core -packAddonCacheDir Z:/tmp/erri-native-package-current-20260919-1317/cache/core -wbSilent +13:16:59.176 ENGINE : Addon dirs: +13:16:59.176 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/' +13:16:59.176 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons' +13:16:59.176 ENGINE : dir: './addons' +13:16:59.176 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/core/addons' +13:16:59.176 ENGINE : Available addons: +13:16:59.176 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:16:59.176 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:16:59.176 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:16:59.176 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:16:59.176 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:16:59.176 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +13:16:59.176 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/core/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +13:16:59.176 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core' to filesystem under name ERR_Core +13:16:59.286 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/core/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +13:16:59.289 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +13:16:59.289 ENGINE : CPU vendor : AuthenticAMD +13:16:59.289 ENGINE : CPU type : 2 +13:16:59.289 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +13:16:59.289 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +13:16:59.289 ENGINE : CPU count logical : 16 +13:16:59.289 ENGINE : CPU count physical : 8 +13:16:59.289 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +13:16:59.289 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:16:59.289 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=Z:/tmp/erri-native-package-current-20260919-1317/profiles/core/addons/ArmaReforger/resourceDatabase.rdb) +13:16:59.425 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +13:16:59.426 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\core\profile/resourceDatabase.rdb) +13:16:59.426 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\core\logs\logs_2026-09-19_13-16-58/resourceDatabase.rdb) +13:16:59.548 RESOURCES : RESOURCES : ResourceDB: full scan +13:16:59.553 RESOURCES : RESOURCES : scanning... +13:16:59.553 RESOURCES : RESOURCES : scanning @"ERR_Core" +13:16:59.555 RESOURCES : RESOURCES : scanning @"ArmaReforger" +13:16:59.694 RESOURCES : RESOURCES : scanning @"core" +13:16:59.699 RESOURCES : RESOURCES : scanning @"profile" +13:16:59.699 RESOURCES : RESOURCES : scanning @"logs" +13:16:59.699 RESOURCES : RESOURCES : processing meta-files... +13:16:59.770 RESOURCES : RESOURCES : processing files... +13:16:59.780 RESOURCES : RESOURCES : processing folders... +13:16:59.787 RESOURCES : RESOURCES : creating GUID-item mapping... +13:16:59.804 RESOURCES : RESOURCES : building tree... +13:16:59.860 PROFILING : ResourceDB: full scan took: 311.539700 ms +13:16:59.861 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:16:59.863 RESOURCES : ResourceDB: written 6865/6865 bytes +13:16:59.863 RESOURCES : ResourceDB: cache successfully saved +13:16:59.863 RESOURCES : ResourceDB: saving cache (id=3 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\core\profile/resourceDatabase.rdb) +13:16:59.864 RESOURCES : ResourceDB: written 51/51 bytes +13:16:59.864 RESOURCES : ResourceDB: cache successfully saved +13:16:59.864 RESOURCES : ResourceDB: saving cache (id=4 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\core\logs\logs_2026-09-19_13-16-58/resourceDatabase.rdb) +13:16:59.866 RESOURCES : ResourceDB: written 81/81 bytes +13:16:59.866 RESOURCES : ResourceDB: cache successfully saved +13:16:59.866 ENGINE : GameProject load +13:16:59.866 ENGINE : Loaded addons: +13:16:59.866 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +13:16:59.866 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/core/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +13:16:59.866 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:16:59.868 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +13:16:59.868 ENGINE : No Enfusion settings file loaded. Continuing with defaults +13:16:59.970 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +13:16:59.971 RENDER : Basic screen setup: +13:16:59.971 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +13:16:59.971 RENDER : MSAA : none +13:16:59.982 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +13:16:59.982 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +13:16:59.982 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +13:16:59.982 RENDER : * core clocks 2720 MHz, memory 1124 MHz +13:16:59.982 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +13:16:59.982 RENDER : AMD AGS correctly initialized +13:16:59.983 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +13:16:59.983 RENDER : Detected output devices: +13:16:59.983 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +13:16:59.983 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +13:16:59.983 RENDER : Concurrent frames limit 2 +13:17:00.057 RENDER : DX12 device successfully created by AMD AGS library +13:17:00.057 RENDER : * user markers not supported in this version AMD SW +13:17:00.057 RENDER : Graphics device features +13:17:00.057 RENDER : Needed: +13:17:00.057 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +13:17:00.057 RENDER : Optional: +13:17:00.057 RENDER : * Allow tearing (VSYNC) : 1 +13:17:00.057 RENDER : * 16 bits : 1 +13:17:00.057 RENDER : * Resource heap tier : 3 +13:17:00.057 RENDER : * Persistent heaps (DRED) : 1 +13:17:00.057 RENDER : * DRED 1.2 is supported by compiler +13:17:00.077 RENDER : Main RT format setup. +13:17:00.077 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +13:17:00.077 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +13:17:00.080 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +13:17:00.110 PROFILING : Settings changed took: 0.019700 ms +13:17:00.120 RENDER : RENDER : Reload shaders +13:17:00.120 RENDER : Enfusion shader version 13 +13:17:00.120 INIT : INIT : ShaderListReload +13:17:00.120 PROFILING : ShaderListReload took: 0.000500 ms +13:17:00.377 RENDER : Loaded 3752 newer shader binaries +13:17:00.378 PROFILING : Reload shaders took: 257.920500 ms +13:17:00.378 ENGINE : Initializing inputs. +13:17:00.393 NETWORK : Initializing networking. +13:17:00.393 NETWORK : Using new GameRplScheduler. +13:17:00.393 SCRIPT : SCRIPT : Initializing scripts +13:17:00.393 SCRIPT : SCRIPT : ScriptProjectManager init +13:17:01.239 PROFILING : ScriptProjectManager init took: 845.251600 ms +13:17:01.272 PROFILING : Initializing scripts took: 878.284900 ms +13:17:01.289 BACKEND : Backend Services are disabled. +13:17:01.289 ENGINE : Enfusion engine successfully created. +13:17:01.289 PROFILING : Workbench Init Engine took: 2124.501200 ms +13:17:01.289 INIT : INIT : Workbench Create Game +13:17:01.303 GUI : Using default language (en_us) +13:17:01.303 GUI : Loading 'en_us' localization file. +13:17:01.303 INIT : INIT : Loading StringTable +13:17:01.327 PROFILING : Loading StringTable took: 24.634200 ms +13:17:01.327 SCRIPT : SCRIPT : Compiling GameLib scripts +13:17:01.378 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:17:01.378 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:17:01.379 PROFILING : Compiling GameLib scripts took: 51.537300 ms +13:17:01.379 SCRIPT : SCRIPT : Compiling Game scripts +13:17:02.402 INIT : Workbench startup +13:17:02.402 INIT : Workbench Create Game +13:17:02.402 SCRIPT : Compiling Game scripts +13:17:02.402 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:17:02.402 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:17:02.563 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:02.680 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:17:02.717 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:17:02.824 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:17:02.824 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:17:02.824 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:17:02.824 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:17:02.856 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:17:02.916 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:17:02.916 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:17:02.918 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:17:02.961 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:02.961 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:02.962 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:17:02.962 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:17:02.990 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:03.023 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:17:03.293 SCRIPT : Module: WorkbenchGame; loaded 171x files; 616x classes; used 2478K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: db6febb9 +13:17:03.301 SCRIPT : Module: Game; loaded 5742x files; 11258x classes; used 33029K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 0945dd83 +13:17:03.340 PROFILING : Compiling Game scripts took: 1961.139800 ms +13:17:03.346 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:17:03.384 ENGINE : Game successfully created. +13:17:03.385 PROFILING : Workbench Create Game took: 2095.911400 ms +13:17:03.392 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/thumbnails +13:17:04.281 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:17:04.283 RESOURCES : ResourceDB: written 6865/6865 bytes +13:17:04.283 RESOURCES : ResourceDB: cache successfully saved +13:17:04.283 RESOURCES : ResourceDB: saving cache (id=3 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\core\profile/resourceDatabase.rdb) +13:17:04.285 RESOURCES : ResourceDB: written 51/51 bytes +13:17:04.285 RESOURCES : ResourceDB: cache successfully saved +13:17:04.285 RESOURCES : ResourceDB: saving cache (id=4 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\core\logs\logs_2026-09-19_13-16-58/resourceDatabase.rdb) +13:17:04.287 RESOURCES : ResourceDB: written 81/81 bytes +13:17:04.287 RESOURCES : ResourceDB: cache successfully saved +13:17:04.287 RESOURCES : Packaging project started. +13:17:04.301 DEFAULT : DEFAULT : Scanning source directory +13:17:04.305 PROFILING : Scanning source directory took: 3.318600 ms +13:17:04.305 DEFAULT : DEFAULT : Scanning intermediate directory +13:17:04.305 PROFILING : Scanning intermediate directory took: 0.113900 ms +13:17:04.305 DEFAULT : DEFAULT : Refreshing intermediate directory +13:17:04.344 DEFAULT : Refreshed 78 files in intermediate directory. +13:17:04.344 PROFILING : Refreshing intermediate directory took: 38.819700 ms +13:17:04.344 DEFAULT : DEFAULT : Assigning files to selections +13:17:04.344 DEFAULT : Selection 'data': 107 files +13:17:04.344 DEFAULT : Default/unassigned selection: 0 files +13:17:04.344 PROFILING : Assigning files to selections took: 0.041900 ms +13:17:04.344 DEFAULT : DEFAULT : Calculating chunk pak layouts +13:17:04.344 PROFILING : Calculating chunk pak layouts took: 0.034300 ms +13:17:04.344 DEFAULT : DEFAULT : Writing pak files +13:17:04.352 PROFILING : Writing pak files took: 8.101000 ms +13:17:04.352 RESOURCES : Packaging done. Result: 1 +13:17:04.354 RESOURCES : Gproj file copy successful +13:17:04.354 RESOURCES : ResourceDB cache file copy successful +13:17:04.354 DEFAULT : Created PAK files: +13:17:04.355 RESOURCES : 1: Z:/tmp/erri-native-package-current-20260919-1317/packages/core/data.pak +13:17:04.356 RESOURCES : Packaging project successful +13:17:04.358 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/autosaves +13:17:04.359 PROFILING : Workbench startup took: 6295.322900 ms +13:17:04.383 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:17:04.385 RESOURCES : ResourceDB: written 6865/6865 bytes +13:17:04.385 RESOURCES : ResourceDB: cache successfully saved +13:17:04.385 RESOURCES : ResourceDB: saving cache (id=3 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\core\profile/resourceDatabase.rdb) +13:17:04.386 RESOURCES : ResourceDB: written 51/51 bytes +13:17:04.387 RESOURCES : ResourceDB: cache successfully saved +13:17:04.387 RESOURCES : ResourceDB: saving cache (id=4 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\core\logs\logs_2026-09-19_13-16-58/resourceDatabase.rdb) +13:17:04.388 RESOURCES : ResourceDB: written 81/81 bytes +13:17:04.388 RESOURCES : ResourceDB: cache successfully saved +13:17:04.419 ENGINE : Game destroyed. +13:17:04.420 ENGINE : Game destroyed. +13:17:04.450 RESOURCES (E): ==== Resource leaks ==== +13:17:04.450 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1 +13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1 +13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1 +13:17:04.450 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1 +13:17:04.450 RESOURCES (E): UI/Imagesets/debugUI.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1 +13:17:04.450 RESOURCES (E): UI/Imagesets/default.edds 1 +13:17:04.450 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1 diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/core/logs/logs_2026-09-19_13-16-58/error.log b/docs/evidence/package-2026-09-19-1317-all/profiles/core/logs/logs_2026-09-19_13-16-58/error.log new file mode 100644 index 0000000..dbfdac0 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/core/logs/logs_2026-09-19_13-16-58/error.log @@ -0,0 +1,50 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\core\logs\logs_2026-09-19_13-16-58\error.log started at 2026-09-19 13:17:02 (2026-09-19 11:17:02 UTC) + +13:17:02.402 INIT : Workbench startup +13:17:02.402 INIT : Workbench Create Game +13:17:02.402 SCRIPT : Compiling Game scripts +13:17:02.402 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:17:02.402 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:17:02.563 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:02.680 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:17:02.717 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:17:02.824 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:17:02.824 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:17:02.824 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:17:02.824 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:17:02.856 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:17:02.916 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:17:02.916 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:17:02.918 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:17:02.961 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:02.961 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:02.962 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:17:02.962 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:17:02.990 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:03.023 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:17:04.450 RESOURCES (E): ==== Resource leaks ==== +13:17:04.450 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1 +13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1 +13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1 +13:17:04.450 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1 +13:17:04.450 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1 +13:17:04.450 RESOURCES (E): UI/Imagesets/debugUI.edds 1 +13:17:04.450 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1 +13:17:04.450 RESOURCES (E): UI/Imagesets/default.edds 1 +13:17:04.450 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1 diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/core/logs/logs_2026-09-19_13-16-58/resourceDatabase.rdb b/docs/evidence/package-2026-09-19-1317-all/profiles/core/logs/logs_2026-09-19_13-16-58/resourceDatabase.rdb new file mode 100644 index 0000000..2ed71d3 Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/profiles/core/logs/logs_2026-09-19_13-16-58/resourceDatabase.rdb differ diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/core/logs/logs_2026-09-19_13-16-58/script.log b/docs/evidence/package-2026-09-19-1317-all/profiles/core/logs/logs_2026-09-19_13-16-58/script.log new file mode 100644 index 0000000..8914acc --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/core/logs/logs_2026-09-19_13-16-58/script.log @@ -0,0 +1,31 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\core\logs\logs_2026-09-19_13-16-58\script.log started at 2026-09-19 13:17:00 (2026-09-19 11:17:00 UTC) + +13:17:00.393 SCRIPT : SCRIPT : Initializing scripts +13:17:00.393 SCRIPT : SCRIPT : ScriptProjectManager init +13:17:01.327 SCRIPT : SCRIPT : Compiling GameLib scripts +13:17:01.378 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:17:01.378 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:17:01.379 SCRIPT : SCRIPT : Compiling Game scripts +13:17:02.402 SCRIPT : Compiling Game scripts +13:17:02.402 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:17:02.402 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:17:02.563 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:02.680 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:17:02.717 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:17:02.824 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:17:02.824 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:17:02.824 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:17:02.824 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:17:02.856 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:17:02.916 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:17:02.916 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:17:02.918 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:17:02.961 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:02.961 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:02.962 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:17:02.962 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:17:02.990 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:03.023 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:17:03.293 SCRIPT : Module: WorkbenchGame; loaded 171x files; 616x classes; used 2478K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: db6febb9 +13:17:03.301 SCRIPT : Module: Game; loaded 5742x files; 11258x classes; used 33029K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 0945dd83 diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/intel/logs/logs_2026-09-19_13-17-27/console.log b/docs/evidence/package-2026-09-19-1317-all/profiles/intel/logs/logs_2026-09-19_13-17-27/console.log new file mode 100644 index 0000000..c11619b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/intel/logs/logs_2026-09-19_13-17-27/console.log @@ -0,0 +1,235 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\intel\logs\logs_2026-09-19_13-17-27\console.log started at 2026-09-19 13:17:27 (2026-09-19 11:17:27 UTC) + +13:17:27.307 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\profiles\intel\logs\logs_2026-09-19_13-17-27' to filesystem under name logs +13:17:27.307 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\profiles\intel\profile' to filesystem under name profile +13:17:27.307 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +13:17:27.308 PROFILING : Workbench Create Engine took: 8.444900 ms +13:17:28.345 INIT : INIT : Workbench Init Engine +13:17:28.345 ENGINE : Initializing engine, version 192142 +13:17:28.345 ENGINE : CLI Params: -gproj Z:/tmp/erri-native-package-current-20260919-1317/source/addons/intel/addon.gproj -addonsDir Z:/tmp/erri-native-package-current-20260919-1317/source/addons -profile Z:/tmp/erri-native-package-current-20260919-1317/profiles/intel -logconsole -noBackend -noSound -disableCrashReporter -wbModule ResourceManager -packAddon -packAddonDir Z:/tmp/erri-native-package-current-20260919-1317/packages/intel -packAddonCacheDir Z:/tmp/erri-native-package-current-20260919-1317/cache/intel -wbSilent +13:17:28.352 ENGINE : Addon dirs: +13:17:28.352 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/intel/' +13:17:28.352 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons' +13:17:28.352 ENGINE : dir: './addons' +13:17:28.352 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/intel/addons' +13:17:28.352 ENGINE : Available addons: +13:17:28.352 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:17:28.352 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:17:28.352 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:17:28.352 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:17:28.352 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:17:28.352 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +13:17:28.352 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/intel/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +13:17:28.352 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\source\addons\intel' to filesystem under name ERR_Intel +13:17:28.352 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core' to filesystem under name ERR_Core +13:17:28.473 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/intel/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +13:17:28.476 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +13:17:28.476 ENGINE : CPU vendor : AuthenticAMD +13:17:28.476 ENGINE : CPU type : 2 +13:17:28.476 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +13:17:28.476 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +13:17:28.476 ENGINE : CPU count logical : 16 +13:17:28.476 ENGINE : CPU count physical : 8 +13:17:28.476 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +13:17:28.476 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Intel path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\intel/resourceDatabase.rdb) +13:17:28.476 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:17:28.477 RESOURCES : ResourceDB: loading cache (id=2 name=ArmaReforger path=Z:/tmp/erri-native-package-current-20260919-1317/profiles/intel/addons/ArmaReforger/resourceDatabase.rdb) +13:17:28.619 RESOURCES : ResourceDB: loading cache (id=3 name=core path=./addons/core/resourceDatabase.rdb) +13:17:28.620 RESOURCES : ResourceDB: loading cache (id=4 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\intel\profile/resourceDatabase.rdb) +13:17:28.620 RESOURCES : ResourceDB: loading cache (id=5 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\intel\logs\logs_2026-09-19_13-17-27/resourceDatabase.rdb) +13:17:28.777 RESOURCES : RESOURCES : ResourceDB: full scan +13:17:28.782 RESOURCES : RESOURCES : scanning... +13:17:28.782 RESOURCES : RESOURCES : scanning @"ERR_Intel" +13:17:28.783 RESOURCES : RESOURCES : scanning @"ERR_Core" +13:17:28.786 RESOURCES : RESOURCES : scanning @"ArmaReforger" +13:17:28.923 RESOURCES : RESOURCES : scanning @"core" +13:17:28.927 RESOURCES : RESOURCES : scanning @"profile" +13:17:28.927 RESOURCES : RESOURCES : scanning @"logs" +13:17:28.928 RESOURCES : RESOURCES : processing meta-files... +13:17:28.995 RESOURCES : RESOURCES : processing files... +13:17:29.005 RESOURCES : RESOURCES : processing folders... +13:17:29.012 RESOURCES : RESOURCES : creating GUID-item mapping... +13:17:29.029 RESOURCES : RESOURCES : building tree... +13:17:29.086 PROFILING : ResourceDB: full scan took: 308.957900 ms +13:17:29.087 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Intel path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\intel/resourceDatabase.rdb) +13:17:29.089 RESOURCES : ResourceDB: written 227/227 bytes +13:17:29.089 RESOURCES : ResourceDB: cache successfully saved +13:17:29.089 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:17:29.091 RESOURCES : ResourceDB: written 6865/6865 bytes +13:17:29.091 RESOURCES : ResourceDB: cache successfully saved +13:17:29.091 RESOURCES : ResourceDB: saving cache (id=4 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\intel\profile/resourceDatabase.rdb) +13:17:29.092 RESOURCES : ResourceDB: written 51/51 bytes +13:17:29.092 RESOURCES : ResourceDB: cache successfully saved +13:17:29.092 RESOURCES : ResourceDB: saving cache (id=5 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\intel\logs\logs_2026-09-19_13-17-27/resourceDatabase.rdb) +13:17:29.094 RESOURCES : ResourceDB: written 81/81 bytes +13:17:29.094 RESOURCES : ResourceDB: cache successfully saved +13:17:29.094 ENGINE : GameProject load +13:17:29.094 ENGINE : Loaded addons: +13:17:29.094 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +13:17:29.094 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/intel/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +13:17:29.094 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:17:29.094 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:17:29.095 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +13:17:29.095 ENGINE : No Enfusion settings file loaded. Continuing with defaults +13:17:29.202 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +13:17:29.203 RENDER : Basic screen setup: +13:17:29.203 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +13:17:29.203 RENDER : MSAA : none +13:17:29.217 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +13:17:29.217 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +13:17:29.217 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +13:17:29.217 RENDER : * core clocks 2720 MHz, memory 1124 MHz +13:17:29.217 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +13:17:29.217 RENDER : AMD AGS correctly initialized +13:17:29.218 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +13:17:29.218 RENDER : Detected output devices: +13:17:29.218 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +13:17:29.218 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +13:17:29.218 RENDER : Concurrent frames limit 2 +13:17:29.296 RENDER : DX12 device successfully created by AMD AGS library +13:17:29.296 RENDER : * user markers not supported in this version AMD SW +13:17:29.296 RENDER : Graphics device features +13:17:29.296 RENDER : Needed: +13:17:29.296 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +13:17:29.296 RENDER : Optional: +13:17:29.296 RENDER : * Allow tearing (VSYNC) : 1 +13:17:29.296 RENDER : * 16 bits : 1 +13:17:29.296 RENDER : * Resource heap tier : 3 +13:17:29.296 RENDER : * Persistent heaps (DRED) : 1 +13:17:29.296 RENDER : * DRED 1.2 is supported by compiler +13:17:29.316 RENDER : Main RT format setup. +13:17:29.316 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +13:17:29.316 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +13:17:29.318 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +13:17:29.344 PROFILING : Settings changed took: 0.028000 ms +13:17:29.351 RENDER : RENDER : Reload shaders +13:17:29.351 RENDER : Enfusion shader version 13 +13:17:29.351 INIT : INIT : ShaderListReload +13:17:29.351 PROFILING : ShaderListReload took: 0.000500 ms +13:17:29.646 RENDER : Loaded 3752 newer shader binaries +13:17:29.646 PROFILING : Reload shaders took: 295.328700 ms +13:17:29.646 ENGINE : Initializing inputs. +13:17:29.664 NETWORK : Initializing networking. +13:17:29.664 NETWORK : Using new GameRplScheduler. +13:17:29.664 SCRIPT : SCRIPT : Initializing scripts +13:17:29.665 SCRIPT : SCRIPT : ScriptProjectManager init +13:17:30.801 PROFILING : ScriptProjectManager init took: 1135.802100 ms +13:17:30.845 PROFILING : Initializing scripts took: 1180.471800 ms +13:17:30.863 BACKEND : Backend Services are disabled. +13:17:30.863 ENGINE : Enfusion engine successfully created. +13:17:30.863 PROFILING : Workbench Init Engine took: 2518.168600 ms +13:17:30.863 INIT : INIT : Workbench Create Game +13:17:30.873 GUI : Using default language (en_us) +13:17:30.873 GUI : Loading 'en_us' localization file. +13:17:30.873 INIT : INIT : Loading StringTable +13:17:30.897 PROFILING : Loading StringTable took: 23.608700 ms +13:17:30.897 SCRIPT : SCRIPT : Compiling GameLib scripts +13:17:30.945 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:17:30.946 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:17:30.946 PROFILING : Compiling GameLib scripts took: 49.086000 ms +13:17:30.946 SCRIPT : SCRIPT : Compiling Game scripts +13:17:31.976 INIT : Workbench startup +13:17:31.976 INIT : Workbench Create Game +13:17:31.976 SCRIPT : Compiling Game scripts +13:17:31.976 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:17:31.976 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:17:32.132 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:32.248 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:17:32.281 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:17:32.398 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:17:32.398 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:17:32.398 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:17:32.398 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:17:32.431 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:17:32.492 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:17:32.492 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:17:32.493 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:17:32.534 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:32.534 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:32.536 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:17:32.536 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:17:32.560 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:32.594 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:17:32.861 SCRIPT : Module: WorkbenchGame; loaded 171x files; 616x classes; used 2478K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: db6febb9 +13:17:32.869 SCRIPT : Module: Game; loaded 5743x files; 11263x classes; used 33037K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 68c0fc2e +13:17:32.908 PROFILING : Compiling Game scripts took: 1961.555500 ms +13:17:32.915 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:17:32.955 ENGINE : Game successfully created. +13:17:32.956 PROFILING : Workbench Create Game took: 2093.110500 ms +13:17:32.965 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Intel/thumbnails +13:17:33.827 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Intel path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\intel/resourceDatabase.rdb) +13:17:33.829 RESOURCES : ResourceDB: written 227/227 bytes +13:17:33.829 RESOURCES : ResourceDB: cache successfully saved +13:17:33.829 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:17:33.831 RESOURCES : ResourceDB: written 6865/6865 bytes +13:17:33.831 RESOURCES : ResourceDB: cache successfully saved +13:17:33.832 RESOURCES : ResourceDB: saving cache (id=4 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\intel\profile/resourceDatabase.rdb) +13:17:33.834 RESOURCES : ResourceDB: written 51/51 bytes +13:17:33.834 RESOURCES : ResourceDB: cache successfully saved +13:17:33.834 RESOURCES : ResourceDB: saving cache (id=5 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\intel\logs\logs_2026-09-19_13-17-27/resourceDatabase.rdb) +13:17:33.835 RESOURCES : ResourceDB: written 81/81 bytes +13:17:33.836 RESOURCES : ResourceDB: cache successfully saved +13:17:33.836 RESOURCES : Packaging project started. +13:17:33.847 DEFAULT : DEFAULT : Scanning source directory +13:17:33.848 PROFILING : Scanning source directory took: 0.802600 ms +13:17:33.848 DEFAULT : DEFAULT : Scanning intermediate directory +13:17:33.848 PROFILING : Scanning intermediate directory took: 0.130200 ms +13:17:33.848 DEFAULT : DEFAULT : Refreshing intermediate directory +13:17:33.849 DEFAULT : Refreshed 1 files in intermediate directory. +13:17:33.849 PROFILING : Refreshing intermediate directory took: 0.718300 ms +13:17:33.849 DEFAULT : DEFAULT : Assigning files to selections +13:17:33.849 DEFAULT : Selection 'data': 1 files +13:17:33.849 DEFAULT : Default/unassigned selection: 0 files +13:17:33.849 PROFILING : Assigning files to selections took: 0.012500 ms +13:17:33.849 DEFAULT : DEFAULT : Calculating chunk pak layouts +13:17:33.849 PROFILING : Calculating chunk pak layouts took: 0.005100 ms +13:17:33.849 DEFAULT : DEFAULT : Writing pak files +13:17:33.849 PROFILING : Writing pak files took: 0.232700 ms +13:17:33.863 RESOURCES : Packaging done. Result: 1 +13:17:33.865 RESOURCES : Gproj file copy successful +13:17:33.865 RESOURCES : ResourceDB cache file copy successful +13:17:33.866 DEFAULT : Created PAK files: +13:17:33.866 RESOURCES : 1: Z:/tmp/erri-native-package-current-20260919-1317/packages/intel/data.pak +13:17:33.867 RESOURCES : Packaging project successful +13:17:33.869 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Intel/autosaves +13:17:33.870 PROFILING : Workbench startup took: 6626.317200 ms +13:17:33.896 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Intel path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\intel/resourceDatabase.rdb) +13:17:33.898 RESOURCES : ResourceDB: written 227/227 bytes +13:17:33.898 RESOURCES : ResourceDB: cache successfully saved +13:17:33.898 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:17:33.900 RESOURCES : ResourceDB: written 6865/6865 bytes +13:17:33.900 RESOURCES : ResourceDB: cache successfully saved +13:17:33.900 RESOURCES : ResourceDB: saving cache (id=4 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\intel\profile/resourceDatabase.rdb) +13:17:33.901 RESOURCES : ResourceDB: written 51/51 bytes +13:17:33.901 RESOURCES : ResourceDB: cache successfully saved +13:17:33.901 RESOURCES : ResourceDB: saving cache (id=5 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\intel\logs\logs_2026-09-19_13-17-27/resourceDatabase.rdb) +13:17:33.903 RESOURCES : ResourceDB: written 81/81 bytes +13:17:33.903 RESOURCES : ResourceDB: cache successfully saved +13:17:33.934 ENGINE : Game destroyed. +13:17:33.934 ENGINE : Game destroyed. +13:17:33.958 RESOURCES (E): ==== Resource leaks ==== +13:17:33.958 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1 +13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1 +13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1 +13:17:33.958 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1 +13:17:33.958 RESOURCES (E): UI/Imagesets/debugUI.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1 +13:17:33.958 RESOURCES (E): UI/Imagesets/default.edds 1 +13:17:33.958 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1 diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/intel/logs/logs_2026-09-19_13-17-27/error.log b/docs/evidence/package-2026-09-19-1317-all/profiles/intel/logs/logs_2026-09-19_13-17-27/error.log new file mode 100644 index 0000000..5f83b75 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/intel/logs/logs_2026-09-19_13-17-27/error.log @@ -0,0 +1,50 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\intel\logs\logs_2026-09-19_13-17-27\error.log started at 2026-09-19 13:17:31 (2026-09-19 11:17:31 UTC) + +13:17:31.976 INIT : Workbench startup +13:17:31.976 INIT : Workbench Create Game +13:17:31.976 SCRIPT : Compiling Game scripts +13:17:31.976 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:17:31.976 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:17:32.132 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:32.248 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:17:32.281 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:17:32.398 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:17:32.398 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:17:32.398 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:17:32.398 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:17:32.431 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:17:32.492 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:17:32.492 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:17:32.493 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:17:32.534 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:32.534 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:32.536 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:17:32.536 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:17:32.560 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:32.594 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:17:33.958 RESOURCES (E): ==== Resource leaks ==== +13:17:33.958 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1 +13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1 +13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1 +13:17:33.958 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1 +13:17:33.958 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1 +13:17:33.958 RESOURCES (E): UI/Imagesets/debugUI.edds 1 +13:17:33.958 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1 +13:17:33.958 RESOURCES (E): UI/Imagesets/default.edds 1 +13:17:33.958 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1 diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/intel/logs/logs_2026-09-19_13-17-27/resourceDatabase.rdb b/docs/evidence/package-2026-09-19-1317-all/profiles/intel/logs/logs_2026-09-19_13-17-27/resourceDatabase.rdb new file mode 100644 index 0000000..2ed71d3 Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/profiles/intel/logs/logs_2026-09-19_13-17-27/resourceDatabase.rdb differ diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/intel/logs/logs_2026-09-19_13-17-27/script.log b/docs/evidence/package-2026-09-19-1317-all/profiles/intel/logs/logs_2026-09-19_13-17-27/script.log new file mode 100644 index 0000000..f52cf1b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/intel/logs/logs_2026-09-19_13-17-27/script.log @@ -0,0 +1,31 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\intel\logs\logs_2026-09-19_13-17-27\script.log started at 2026-09-19 13:17:29 (2026-09-19 11:17:29 UTC) + +13:17:29.665 SCRIPT : SCRIPT : Initializing scripts +13:17:29.665 SCRIPT : SCRIPT : ScriptProjectManager init +13:17:30.897 SCRIPT : SCRIPT : Compiling GameLib scripts +13:17:30.945 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:17:30.946 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:17:30.946 SCRIPT : SCRIPT : Compiling Game scripts +13:17:31.976 SCRIPT : Compiling Game scripts +13:17:31.976 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:17:31.976 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:17:32.132 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:32.248 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:17:32.281 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:17:32.398 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:17:32.398 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:17:32.398 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:17:32.398 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:17:32.431 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:17:32.492 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:17:32.492 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:17:32.493 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:17:32.534 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:32.534 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:32.536 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:17:32.536 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:17:32.560 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:32.594 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:17:32.861 SCRIPT : Module: WorkbenchGame; loaded 171x files; 616x classes; used 2478K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: db6febb9 +13:17:32.869 SCRIPT : Module: Game; loaded 5743x files; 11263x classes; used 33037K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: 68c0fc2e diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/map/logs/logs_2026-09-19_13-17-46/console.log b/docs/evidence/package-2026-09-19-1317-all/profiles/map/logs/logs_2026-09-19_13-17-46/console.log new file mode 100644 index 0000000..1ba634e --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/map/logs/logs_2026-09-19_13-17-46/console.log @@ -0,0 +1,235 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\map\logs\logs_2026-09-19_13-17-46\console.log started at 2026-09-19 13:17:46 (2026-09-19 11:17:46 UTC) + +13:17:46.536 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\profiles\map\logs\logs_2026-09-19_13-17-46' to filesystem under name logs +13:17:46.536 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\profiles\map\profile' to filesystem under name profile +13:17:46.536 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +13:17:46.538 PROFILING : Workbench Create Engine took: 8.696300 ms +13:17:47.571 INIT : INIT : Workbench Init Engine +13:17:47.571 ENGINE : Initializing engine, version 192142 +13:17:47.571 ENGINE : CLI Params: -gproj Z:/tmp/erri-native-package-current-20260919-1317/source/addons/map/addon.gproj -addonsDir Z:/tmp/erri-native-package-current-20260919-1317/source/addons -profile Z:/tmp/erri-native-package-current-20260919-1317/profiles/map -logconsole -noBackend -noSound -disableCrashReporter -wbModule ResourceManager -packAddon -packAddonDir Z:/tmp/erri-native-package-current-20260919-1317/packages/map -packAddonCacheDir Z:/tmp/erri-native-package-current-20260919-1317/cache/map -wbSilent +13:17:47.578 ENGINE : Addon dirs: +13:17:47.578 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/map/' +13:17:47.578 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons' +13:17:47.578 ENGINE : dir: './addons' +13:17:47.578 ENGINE : dir: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/map/addons' +13:17:47.578 ENGINE : Available addons: +13:17:47.578 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:17:47.578 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:17:47.578 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:17:47.578 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:17:47.578 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:17:47.578 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +13:17:47.578 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/map/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +13:17:47.579 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\source\addons\map' to filesystem under name ERR_Map +13:17:47.579 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core' to filesystem under name ERR_Core +13:17:47.694 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/map/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +13:17:47.698 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +13:17:47.698 ENGINE : CPU vendor : AuthenticAMD +13:17:47.698 ENGINE : CPU type : 2 +13:17:47.698 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +13:17:47.698 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +13:17:47.698 ENGINE : CPU count logical : 16 +13:17:47.698 ENGINE : CPU count physical : 8 +13:17:47.698 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +13:17:47.698 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Map path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\map/resourceDatabase.rdb) +13:17:47.698 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:17:47.699 RESOURCES : ResourceDB: loading cache (id=2 name=ArmaReforger path=Z:/tmp/erri-native-package-current-20260919-1317/profiles/map/addons/ArmaReforger/resourceDatabase.rdb) +13:17:47.832 RESOURCES : ResourceDB: loading cache (id=3 name=core path=./addons/core/resourceDatabase.rdb) +13:17:47.834 RESOURCES : ResourceDB: loading cache (id=4 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\map\profile/resourceDatabase.rdb) +13:17:47.834 RESOURCES : ResourceDB: loading cache (id=5 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\map\logs\logs_2026-09-19_13-17-46/resourceDatabase.rdb) +13:17:47.980 RESOURCES : RESOURCES : ResourceDB: full scan +13:17:47.985 RESOURCES : RESOURCES : scanning... +13:17:47.985 RESOURCES : RESOURCES : scanning @"ERR_Map" +13:17:47.986 RESOURCES : RESOURCES : scanning @"ERR_Core" +13:17:47.989 RESOURCES : RESOURCES : scanning @"ArmaReforger" +13:17:48.124 RESOURCES : RESOURCES : scanning @"core" +13:17:48.127 RESOURCES : RESOURCES : scanning @"profile" +13:17:48.128 RESOURCES : RESOURCES : scanning @"logs" +13:17:48.128 RESOURCES : RESOURCES : processing meta-files... +13:17:48.192 RESOURCES : RESOURCES : processing files... +13:17:48.204 RESOURCES : RESOURCES : processing folders... +13:17:48.211 RESOURCES : RESOURCES : creating GUID-item mapping... +13:17:48.227 RESOURCES : RESOURCES : building tree... +13:17:48.283 PROFILING : ResourceDB: full scan took: 302.501800 ms +13:17:48.284 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Map path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\map/resourceDatabase.rdb) +13:17:48.285 RESOURCES : ResourceDB: written 819/819 bytes +13:17:48.285 RESOURCES : ResourceDB: cache successfully saved +13:17:48.285 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:17:48.287 RESOURCES : ResourceDB: written 6865/6865 bytes +13:17:48.287 RESOURCES : ResourceDB: cache successfully saved +13:17:48.287 RESOURCES : ResourceDB: saving cache (id=4 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\map\profile/resourceDatabase.rdb) +13:17:48.288 RESOURCES : ResourceDB: written 51/51 bytes +13:17:48.288 RESOURCES : ResourceDB: cache successfully saved +13:17:48.288 RESOURCES : ResourceDB: saving cache (id=5 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\map\logs\logs_2026-09-19_13-17-46/resourceDatabase.rdb) +13:17:48.290 RESOURCES : ResourceDB: written 81/81 bytes +13:17:48.290 RESOURCES : ResourceDB: cache successfully saved +13:17:48.290 ENGINE : GameProject load +13:17:48.290 ENGINE : Loaded addons: +13:17:48.290 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +13:17:48.290 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/profiles/map/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +13:17:48.290 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:17:48.290 ENGINE : gproj: 'Z:/tmp/erri-native-package-current-20260919-1317/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:17:48.292 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +13:17:48.292 ENGINE : No Enfusion settings file loaded. Continuing with defaults +13:17:48.401 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +13:17:48.403 RENDER : Basic screen setup: +13:17:48.403 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +13:17:48.403 RENDER : MSAA : none +13:17:48.416 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +13:17:48.416 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +13:17:48.416 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +13:17:48.416 RENDER : * core clocks 2720 MHz, memory 1124 MHz +13:17:48.416 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +13:17:48.416 RENDER : AMD AGS correctly initialized +13:17:48.417 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +13:17:48.417 RENDER : Detected output devices: +13:17:48.417 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +13:17:48.417 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +13:17:48.417 RENDER : Concurrent frames limit 2 +13:17:48.493 RENDER : DX12 device successfully created by AMD AGS library +13:17:48.493 RENDER : * user markers not supported in this version AMD SW +13:17:48.493 RENDER : Graphics device features +13:17:48.493 RENDER : Needed: +13:17:48.493 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +13:17:48.493 RENDER : Optional: +13:17:48.493 RENDER : * Allow tearing (VSYNC) : 1 +13:17:48.493 RENDER : * 16 bits : 1 +13:17:48.493 RENDER : * Resource heap tier : 3 +13:17:48.493 RENDER : * Persistent heaps (DRED) : 1 +13:17:48.493 RENDER : * DRED 1.2 is supported by compiler +13:17:48.513 RENDER : Main RT format setup. +13:17:48.513 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +13:17:48.513 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +13:17:48.515 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +13:17:48.545 PROFILING : Settings changed took: 0.021700 ms +13:17:48.550 RENDER : RENDER : Reload shaders +13:17:48.551 RENDER : Enfusion shader version 13 +13:17:48.551 INIT : INIT : ShaderListReload +13:17:48.551 PROFILING : ShaderListReload took: 0.000400 ms +13:17:48.833 RENDER : Loaded 3752 newer shader binaries +13:17:48.833 PROFILING : Reload shaders took: 282.621200 ms +13:17:48.833 ENGINE : Initializing inputs. +13:17:48.847 NETWORK : Initializing networking. +13:17:48.847 NETWORK : Using new GameRplScheduler. +13:17:48.847 SCRIPT : SCRIPT : Initializing scripts +13:17:48.847 SCRIPT : SCRIPT : ScriptProjectManager init +13:17:49.979 PROFILING : ScriptProjectManager init took: 1131.356100 ms +13:17:50.024 PROFILING : Initializing scripts took: 1176.269100 ms +13:17:50.041 BACKEND : Backend Services are disabled. +13:17:50.041 ENGINE : Enfusion engine successfully created. +13:17:50.042 PROFILING : Workbench Init Engine took: 2470.157500 ms +13:17:50.042 INIT : INIT : Workbench Create Game +13:17:50.053 GUI : Using default language (en_us) +13:17:50.053 GUI : Loading 'en_us' localization file. +13:17:50.053 INIT : INIT : Loading StringTable +13:17:50.077 PROFILING : Loading StringTable took: 23.873200 ms +13:17:50.077 SCRIPT : SCRIPT : Compiling GameLib scripts +13:17:50.129 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:17:50.129 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:17:50.130 PROFILING : Compiling GameLib scripts took: 53.167100 ms +13:17:50.130 SCRIPT : SCRIPT : Compiling Game scripts +13:17:51.182 INIT : Workbench startup +13:17:51.182 INIT : Workbench Create Game +13:17:51.182 SCRIPT : Compiling Game scripts +13:17:51.182 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:17:51.182 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:17:51.343 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:51.469 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:17:51.501 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:17:51.601 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:17:51.601 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:17:51.601 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:17:51.601 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:17:51.634 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:17:51.693 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:17:51.693 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:17:51.694 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:17:51.738 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:51.738 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:51.739 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:17:51.739 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:17:51.763 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:51.798 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:17:52.069 SCRIPT : Module: WorkbenchGame; loaded 171x files; 616x classes; used 2478K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: db6febb9 +13:17:52.075 SCRIPT : Module: Game; loaded 5745x files; 11263x classes; used 33056K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: f04f0a2c +13:17:52.112 PROFILING : Compiling Game scripts took: 1982.286800 ms +13:17:52.119 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:17:52.161 ENGINE : Game successfully created. +13:17:52.162 PROFILING : Workbench Create Game took: 2120.677900 ms +13:17:52.171 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Map/thumbnails +13:17:53.063 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Map path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\map/resourceDatabase.rdb) +13:17:53.065 RESOURCES : ResourceDB: written 819/819 bytes +13:17:53.065 RESOURCES : ResourceDB: cache successfully saved +13:17:53.065 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:17:53.067 RESOURCES : ResourceDB: written 6865/6865 bytes +13:17:53.067 RESOURCES : ResourceDB: cache successfully saved +13:17:53.068 RESOURCES : ResourceDB: saving cache (id=4 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\map\profile/resourceDatabase.rdb) +13:17:53.069 RESOURCES : ResourceDB: written 51/51 bytes +13:17:53.069 RESOURCES : ResourceDB: cache successfully saved +13:17:53.070 RESOURCES : ResourceDB: saving cache (id=5 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\map\logs\logs_2026-09-19_13-17-46/resourceDatabase.rdb) +13:17:53.071 RESOURCES : ResourceDB: written 81/81 bytes +13:17:53.071 RESOURCES : ResourceDB: cache successfully saved +13:17:53.071 RESOURCES : Packaging project started. +13:17:53.085 DEFAULT : DEFAULT : Scanning source directory +13:17:53.087 PROFILING : Scanning source directory took: 2.717500 ms +13:17:53.087 DEFAULT : DEFAULT : Scanning intermediate directory +13:17:53.088 PROFILING : Scanning intermediate directory took: 0.236700 ms +13:17:53.088 DEFAULT : DEFAULT : Refreshing intermediate directory +13:17:53.089 DEFAULT : Refreshed 2 files in intermediate directory. +13:17:53.089 PROFILING : Refreshing intermediate directory took: 1.435500 ms +13:17:53.089 DEFAULT : DEFAULT : Assigning files to selections +13:17:53.089 DEFAULT : Selection 'data': 6 files +13:17:53.089 DEFAULT : Default/unassigned selection: 0 files +13:17:53.089 PROFILING : Assigning files to selections took: 0.018200 ms +13:17:53.089 DEFAULT : DEFAULT : Calculating chunk pak layouts +13:17:53.089 PROFILING : Calculating chunk pak layouts took: 0.017200 ms +13:17:53.089 DEFAULT : DEFAULT : Writing pak files +13:17:53.090 PROFILING : Writing pak files took: 0.931400 ms +13:17:53.090 RESOURCES : Packaging done. Result: 1 +13:17:53.091 RESOURCES : Gproj file copy successful +13:17:53.092 RESOURCES : ResourceDB cache file copy successful +13:17:53.092 DEFAULT : Created PAK files: +13:17:53.092 RESOURCES : 1: Z:/tmp/erri-native-package-current-20260919-1317/packages/map/data.pak +13:17:53.093 RESOURCES : Packaging project successful +13:17:53.094 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Map/autosaves +13:17:53.095 PROFILING : Workbench startup took: 6624.247900 ms +13:17:53.148 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Map path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\map/resourceDatabase.rdb) +13:17:53.150 RESOURCES : ResourceDB: written 819/819 bytes +13:17:53.150 RESOURCES : ResourceDB: cache successfully saved +13:17:53.150 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Core path=Z:\tmp\erri-native-package-current-20260919-1317\source\addons\core/resourceDatabase.rdb) +13:17:53.152 RESOURCES : ResourceDB: written 6865/6865 bytes +13:17:53.152 RESOURCES : ResourceDB: cache successfully saved +13:17:53.152 RESOURCES : ResourceDB: saving cache (id=4 name=profile path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\map\profile/resourceDatabase.rdb) +13:17:53.154 RESOURCES : ResourceDB: written 51/51 bytes +13:17:53.154 RESOURCES : ResourceDB: cache successfully saved +13:17:53.154 RESOURCES : ResourceDB: saving cache (id=5 name=logs path=Z:\tmp\erri-native-package-current-20260919-1317\profiles\map\logs\logs_2026-09-19_13-17-46/resourceDatabase.rdb) +13:17:53.155 RESOURCES : ResourceDB: written 81/81 bytes +13:17:53.155 RESOURCES : ResourceDB: cache successfully saved +13:17:53.184 ENGINE : Game destroyed. +13:17:53.184 ENGINE : Game destroyed. +13:17:53.209 RESOURCES (E): ==== Resource leaks ==== +13:17:53.209 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1 +13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1 +13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1 +13:17:53.209 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1 +13:17:53.209 RESOURCES (E): UI/Imagesets/debugUI.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1 +13:17:53.209 RESOURCES (E): UI/Imagesets/default.edds 1 +13:17:53.209 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1 diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/map/logs/logs_2026-09-19_13-17-46/error.log b/docs/evidence/package-2026-09-19-1317-all/profiles/map/logs/logs_2026-09-19_13-17-46/error.log new file mode 100644 index 0000000..84fbd94 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/map/logs/logs_2026-09-19_13-17-46/error.log @@ -0,0 +1,50 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\map\logs\logs_2026-09-19_13-17-46\error.log started at 2026-09-19 13:17:51 (2026-09-19 11:17:51 UTC) + +13:17:51.182 INIT : Workbench startup +13:17:51.182 INIT : Workbench Create Game +13:17:51.182 SCRIPT : Compiling Game scripts +13:17:51.182 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:17:51.182 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:17:51.343 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:51.469 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:17:51.501 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:17:51.601 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:17:51.601 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:17:51.601 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:17:51.601 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:17:51.634 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:17:51.693 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:17:51.693 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:17:51.694 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:17:51.738 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:51.738 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:51.739 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:17:51.739 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:17:51.763 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:51.798 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:17:53.209 RESOURCES (E): ==== Resource leaks ==== +13:17:53.209 RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1 +13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1 +13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1 +13:17:53.209 RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1 +13:17:53.209 RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1 +13:17:53.209 RESOURCES (E): UI/Imagesets/debugUI.edds 1 +13:17:53.209 RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1 +13:17:53.209 RESOURCES (E): UI/Imagesets/default.edds 1 +13:17:53.209 RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1 diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/map/logs/logs_2026-09-19_13-17-46/resourceDatabase.rdb b/docs/evidence/package-2026-09-19-1317-all/profiles/map/logs/logs_2026-09-19_13-17-46/resourceDatabase.rdb new file mode 100644 index 0000000..2ed71d3 Binary files /dev/null and b/docs/evidence/package-2026-09-19-1317-all/profiles/map/logs/logs_2026-09-19_13-17-46/resourceDatabase.rdb differ diff --git a/docs/evidence/package-2026-09-19-1317-all/profiles/map/logs/logs_2026-09-19_13-17-46/script.log b/docs/evidence/package-2026-09-19-1317-all/profiles/map/logs/logs_2026-09-19_13-17-46/script.log new file mode 100644 index 0000000..a78ae8c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/profiles/map/logs/logs_2026-09-19_13-17-46/script.log @@ -0,0 +1,31 @@ +--------------------------------------------- +Log Z:\tmp\erri-native-package-current-20260919-1317\profiles\map\logs\logs_2026-09-19_13-17-46\script.log started at 2026-09-19 13:17:48 (2026-09-19 11:17:48 UTC) + +13:17:48.847 SCRIPT : SCRIPT : Initializing scripts +13:17:48.847 SCRIPT : SCRIPT : ScriptProjectManager init +13:17:50.077 SCRIPT : SCRIPT : Compiling GameLib scripts +13:17:50.129 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460 +13:17:50.129 SCRIPT : Module: GameLib; loaded 466x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:17:50.130 SCRIPT : SCRIPT : Compiling Game scripts +13:17:51.182 SCRIPT : Compiling Game scripts +13:17:51.182 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:17:51.182 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:17:51.343 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:51.469 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:17:51.501 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:17:51.601 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:17:51.601 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:17:51.601 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:17:51.601 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:17:51.634 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:17:51.693 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:17:51.693 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:17:51.694 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:17:51.738 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:51.738 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:51.739 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:17:51.739 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:17:51.763 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:17:51.798 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:17:52.069 SCRIPT : Module: WorkbenchGame; loaded 171x files; 616x classes; used 2478K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: db6febb9 +13:17:52.075 SCRIPT : Module: Game; loaded 5745x files; 11263x classes; used 33056K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: f04f0a2c diff --git a/docs/evidence/package-2026-09-19-1317-all/repository-after.json b/docs/evidence/package-2026-09-19-1317-all/repository-after.json new file mode 100644 index 0000000..1e89a2b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/repository-after.json @@ -0,0 +1,185 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "addons/ai/Scripts/Game/ERR/ERR_HQReport.c": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "addons/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "addons/chat/Missions/ERR_Everon.conf": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "addons/chat/Missions/ERR_Everon.conf.meta": "0a23c98bf83873536c65fa17d38dea33a1d7b9e4ab210f90633ff688abcc551f", + "addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Configs/ERR/EveronSites.conf": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "addons/core/Configs/ERR/EveronSites.conf.meta": "d5fe68025ef4e7c1e16082cf5873b7c7172eacbfaef4ab29b7e0e3c98f8dca56", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta": "00c368b6271d3440cc8bf627b03a384d247635723923fc5ad2104b8b4007b035", + "addons/core/Configs/ERR/Factions/US.conf": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "addons/core/Configs/ERR/Factions/US.conf.meta": "a05469aef028e9e17eba545e81e2af2887b59f0fef17dac51a23c7b8155e381b", + "addons/core/Configs/ERR/Factions/USSR.conf": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "addons/core/Configs/ERR/Factions/USSR.conf.meta": "057397d97096346791b51b7b13fbe18af218bcf78e9984d9c01b49a2403de611", + "addons/core/Configs/ERR/GameOverScreens.conf": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "addons/core/Configs/ERR/GameOverScreens.conf.meta": "eb654b745c0b97b41c991694569ef4877a3c2315e0826f9556337cd68690843e", + "addons/core/Configs/ERR/VanillaFactions.conf": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "addons/core/Configs/ERR/VanillaFactions.conf.meta": "ac77725c0c21974991ef47a466b88122e939de8b46fd23e68889e7674cbb2bfd", + "addons/core/Missions/ERR_Everon_Base.conf": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "addons/core/Missions/ERR_Everon_Base.conf.meta": "9b16267c644d815bcf98a3a3aaff30b93d7224fb24d3a2bac66730a28011f317", + "addons/core/Prefabs/ERR/Extraction.et": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/FactionManager.et": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "addons/core/Prefabs/ERR/FactionManager.et.meta": "9bf53d5e4bcbe60dd1a4ece1409fc23c349055c860708620f5f6e9716290a97d", + "addons/core/Prefabs/ERR/FieldCover.et": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "addons/core/Prefabs/ERR/FieldCover.et.meta": "83461ffa76244e1d69f20b053a9741ccdf7d127009182bd540a7e5ba6150c3d9", + "addons/core/Prefabs/ERR/GameMode.et": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/ObjectiveDocument.et": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "addons/core/Prefabs/ERR/ObjectiveDocument.et.meta": "eaba9903be147b98a1106e2273e2270773df73b9b22f2cd4e20136a8e281382e", + "addons/core/Prefabs/ERR/Patrol.et": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "addons/core/Prefabs/ERR/Patrol.et.meta": "7c5da568fa2fcf0709ee2959253cb068d7c7ed7c2467af3b247a7e70efd96b69", + "addons/core/Prefabs/ERR/Prison.et": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/PrisonWall.et": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "addons/core/Prefabs/ERR/PrisonWall.et.meta": "0294bc5dbb56f90f8153d62459bb0a6ad91d76a479812bbec9c7db182fdb58d6", + "addons/core/Prefabs/ERR/Prisoner.et": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "addons/core/Prefabs/ERR/Prisoner.et.meta": "974278ba49fafeed70b619a0067bbc70ae4d534be441c812ce2bef4a5fb3c022", + "addons/core/Prefabs/ERR/Radio.et": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Prefabs/ERR/SpectatorCamera.et": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "addons/core/Prefabs/ERR/SpectatorCamera.et.meta": "2a16558f93915e31908a674509e9c89976470f78a84a1174a64b94b68b8f77ad", + "addons/core/Prefabs/ERR/SupplyCache.et": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "addons/core/Prefabs/ERR/SupplyCache.et.meta": "2f5de3a4aab1e9d0e35521f48dc57b95bd6e449c383dec4f1c258e10295904cb", + "addons/core/Prefabs/ERR/SupplySite.et": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "addons/core/Prefabs/ERR/SupplySite.et.meta": "b41944b12eb3528ff7a3ac94258b18c66ef161aa6a38894aee300a1ac4798630", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "addons/core/Scripts/Game/ERR/ERR_AdminService.c": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "addons/core/Scripts/Game/ERR/ERR_RecoveryService.c": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "addons/core/Scripts/Game/ERR/ERR_Resources.c": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "addons/core/Scripts/Game/ERR/ERR_TimeService.c": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/map/Materials/ERRM_MapRenderTarget.emat": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "addons/map/Materials/ERRM_MapRenderTarget.emat.meta": "5ee1a705f8011a44020ca2691f5ccc17d44bf596fef9a36e98d1f267eb58fab0", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta": "59093e9072c50d99c86da7609c87541016da5bcf92b98d99db4c524e1c8e0e8d", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/review.json b/docs/evidence/package-2026-09-19-1317-all/review.json new file mode 100644 index 0000000..6569b0d --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/review.json @@ -0,0 +1,1893 @@ +{ + "all_structural_payload_checks_pass": true, + "artifact_count": 15, + "artifacts": { + "ai/addon.gproj": { + "bytes": 154, + "sha256": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1" + }, + "ai/data.pak": { + "bytes": 85107, + "sha256": "627b7389f0656a78f90acc5ead405e494b27b8bcb0cfb85dc812e177bc0f04f6" + }, + "ai/resourceDatabase.rdb": { + "bytes": 1909, + "sha256": "7dc88e5e7a9dfc6d3ddf9f046d211b083c1f379b61cdc32f6d93084add37e53f" + }, + "chat/addon.gproj": { + "bytes": 221, + "sha256": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e" + }, + "chat/data.pak": { + "bytes": 15163, + "sha256": "26fa2ce81dada224fcb0c24ea3e2ebca01eb67c149bd06bf77f04c6b5faeca53" + }, + "chat/resourceDatabase.rdb": { + "bytes": 804, + "sha256": "42820c285d135a00f44be372b5611f568d0030aaa45b05091f59e723eec46dc4" + }, + "core/addon.gproj": { + "bytes": 137, + "sha256": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46" + }, + "core/data.pak": { + "bytes": 199646, + "sha256": "3f84b9622afe2ff1683f05917a1e8e190f4f7dcf62f48a8c29adde95ce8a1b50" + }, + "core/resourceDatabase.rdb": { + "bytes": 6865, + "sha256": "e85f078208a86591a4b0f791d2b56661018bf46e4b14b5405b183df0baf485f3" + }, + "intel/addon.gproj": { + "bytes": 160, + "sha256": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe" + }, + "intel/data.pak": { + "bytes": 1250, + "sha256": "5396732e193eb36d4ce86f9999f3cb112b5e1766f0e1b1911b6baa5e761fa37a" + }, + "intel/resourceDatabase.rdb": { + "bytes": 227, + "sha256": "062996b9102e99d19eb680bed04880b0e087d9f8789681c0f3ff8ab6772339ba" + }, + "map/addon.gproj": { + "bytes": 156, + "sha256": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" + }, + "map/data.pak": { + "bytes": 10463, + "sha256": "211835e6afd1b9b18f0a0e4ebd235afa03b1436810c355d6cfeec636c8935dd0" + }, + "map/resourceDatabase.rdb": { + "bytes": 819, + "sha256": "9b7f50a84d4fb2d390e42c25ecb68d264038bb81926065653e3e9f87556b2462" + } + }, + "authored_before_sha256": "86b8c474e8240667a5f5b7a0d19cdf5e26aa12be78e27e96b50d331b639648d5", + "authored_count": 183, + "kind": "READ-ONLY CURRENT FIVE-ADDON PACKAGE AUDIT", + "native_linux_runtime_verified": false, + "native_packaging_qualified": false, + "native_windows_runtime_verified": false, + "pak_inspector_sha256": "95b0b64ab1f89a2142385ca596016fa131b49d933e31aef42d9bf18e2ec01383", + "projects": { + "ai": { + "artifact_hashes_match_native_report": true, + "authored_after_matches_before": true, + "completion_observed": "native-child-exited", + "console_error_count": 25, + "console_path": "/tmp/erri-native-package-current-20260919-1317/profiles/ai/logs/logs_2026-09-19_13-17-17/console.log", + "content_mismatches": [], + "excluded_authored": [ + "Prefabs/ERR/MortarCrew.et.meta", + "addon.gproj" + ], + "expected_payload_count": 29, + "extra_payload": [], + "identity_and_dependency_schema_verified": true, + "launch_authored_matches_before": true, + "matches_empty_control_exact_25_errors": true, + "missing_payload": [], + "native_command_matches_launch": true, + "native_exit_agrees_report": true, + "native_exit_code": 0, + "native_exit_status_hash_matches_report": true, + "normalized_error_set_sha256": "0cb40e173c7a02f72123cfc568016556f05fe80457f06cabf6423cc6ce309c60", + "normalized_errors": [ + "RESOURCES (E): ==== Resource leaks ====", + "RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "RESOURCES (E): UI/Imagesets/default.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "normalized_unique_error_count": 25, + "packaging_done_result_one": true, + "packaging_project_successful": true, + "pak_entry_count": 29, + "pak_inventory": { + "archive": "/tmp/erri-native-package-current-20260919-1317/packages/ai/data.pak", + "archive_bytes": 85107, + "archive_sha256": "627b7389f0656a78f90acc5ead405e494b27b8bcb0cfb85dc812e177bc0f04f6", + "entries": [ + { + "compression": "raw", + "content_bytes": 536, + "offset": 56, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/MortarCrew.et", + "sha256": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "stored_bytes": 536 + }, + { + "compression": "zlib", + "content_bytes": 25357, + "offset": 592, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_AircraftFlight.c", + "sha256": "96b20b7e78612fb26befa6e26635be80dbf9ca089384db4a7839f5064ab06ccc", + "stored_bytes": 6263 + }, + { + "compression": "zlib", + "content_bytes": 12406, + "offset": 6855, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c", + "sha256": "8125cef61fb283d0d7c4dd2df3c04b062b448f1101fd48dd53f4f4097df5fef3", + "stored_bytes": 4023 + }, + { + "compression": "zlib", + "content_bytes": 13996, + "offset": 11807, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_HQ.c", + "sha256": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9", + "stored_bytes": 3699 + }, + { + "compression": "zlib", + "content_bytes": 2841, + "offset": 15506, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_HQJournal.c", + "sha256": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1", + "stored_bytes": 1256 + }, + { + "compression": "zlib", + "content_bytes": 6352, + "offset": 16762, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_HQNetwork.c", + "sha256": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c", + "stored_bytes": 2196 + }, + { + "compression": "zlib", + "content_bytes": 6464, + "offset": 18958, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_HQObservation.c", + "sha256": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68", + "stored_bytes": 2092 + }, + { + "compression": "zlib", + "content_bytes": 4172, + "offset": 21050, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_HQReport.c", + "sha256": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08", + "stored_bytes": 1569 + }, + { + "compression": "raw", + "content_bytes": 929, + "offset": 10878, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_HelicopterAvailability.c", + "sha256": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "stored_bytes": 929 + }, + { + "compression": "zlib", + "content_bytes": 1486, + "offset": 22619, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_MortarAimSolution.c", + "sha256": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649", + "stored_bytes": 648 + }, + { + "compression": "zlib", + "content_bytes": 21261, + "offset": 23267, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_MortarBattery.c", + "sha256": "a4eed96d17f239cbf353863ebe40d2282aeacd7a4d63a7b2f0ecfb3d93a2e2b2", + "stored_bytes": 6323 + }, + { + "compression": "zlib", + "content_bytes": 3310, + "offset": 29590, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_MortarCourierTransfer.c", + "sha256": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7", + "stored_bytes": 1067 + }, + { + "compression": "zlib", + "content_bytes": 15299, + "offset": 30657, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_MortarFiring.c", + "sha256": "7aec51c83972610d1bcbca58b84b14f16f59952d402b12c3d88e7192a3e2ee90", + "stored_bytes": 4472 + }, + { + "compression": "zlib", + "content_bytes": 19265, + "offset": 35129, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_MortarLogistics.c", + "sha256": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730", + "stored_bytes": 5228 + }, + { + "compression": "zlib", + "content_bytes": 4862, + "offset": 40357, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_MortarPrediction.c", + "sha256": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "stored_bytes": 1799 + }, + { + "compression": "zlib", + "content_bytes": 8869, + "offset": 42156, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_MortarReadiness.c", + "sha256": "2fabe8f812fd333cea7199d1eb722c807fcc5adb285c618956bd54d31fa27ce3", + "stored_bytes": 2805 + }, + { + "compression": "zlib", + "content_bytes": 1182, + "offset": 44961, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_MortarRefresh.c", + "sha256": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4", + "stored_bytes": 479 + }, + { + "compression": "raw", + "content_bytes": 880, + "offset": 45440, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_MortarReportLedger.c", + "sha256": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae", + "stored_bytes": 880 + }, + { + "compression": "raw", + "content_bytes": 634, + "offset": 46320, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_MortarSalvo.c", + "sha256": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "stored_bytes": 634 + }, + { + "compression": "zlib", + "content_bytes": 5161, + "offset": 46954, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_MortarSupplyTransfer.c", + "sha256": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77", + "stored_bytes": 1606 + }, + { + "compression": "zlib", + "content_bytes": 13763, + "offset": 48560, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_MortarSystem.c", + "sha256": "4edefc8530cc6eec7a5e1df1d0b7d56e6801186f23c61331ce0e8075b8281efb", + "stored_bytes": 4019 + }, + { + "compression": "zlib", + "content_bytes": 22416, + "offset": 52579, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c", + "sha256": "e501301e683a7e36ad5a0cb56bc87a590c0c9071c9fc5c579502fb1c7a0ff143", + "stored_bytes": 6186 + }, + { + "compression": "zlib", + "content_bytes": 12603, + "offset": 58765, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c", + "sha256": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f", + "stored_bytes": 4071 + }, + { + "compression": "zlib", + "content_bytes": 19308, + "offset": 62836, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c", + "sha256": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2", + "stored_bytes": 5812 + }, + { + "compression": "zlib", + "content_bytes": 28066, + "offset": 68648, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c", + "sha256": "5fd7bb8953f6850ad79e646c0c286153108a10ee2d5ef397ccb65a07f8d2ed7c", + "stored_bytes": 7570 + }, + { + "compression": "zlib", + "content_bytes": 18504, + "offset": 76218, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c", + "sha256": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c", + "stored_bytes": 5056 + }, + { + "compression": "zlib", + "content_bytes": 3221, + "offset": 81274, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativePatrolHQProbe.c", + "sha256": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758", + "stored_bytes": 1174 + }, + { + "compression": "zlib", + "content_bytes": 2621, + "offset": 82448, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_SettlementSafety.c", + "sha256": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b", + "stored_bytes": 990 + }, + { + "compression": "raw", + "content_bytes": 214, + "offset": 83438, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_SupportScenario.c", + "sha256": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03", + "stored_bytes": 214 + } + ], + "entry_count": 29, + "expanded_bytes": 275978, + "format": "FORM/PAC1 observed HEAD 03000100", + "head_hex": "03000100b8a86f5877716512145c0b570401065f5308530a00000000", + "limits": { + "archive_bytes": 4294967296, + "depth": 64, + "entries": 250000, + "entry_bytes": 1073741824, + "expansion_ratio": 1024, + "total_bytes": 8589934592, + "tree_bytes": 33554432 + }, + "platform_or_resource_semantics_verified": false, + "release_qualified": false, + "scope": "Bounded structural/content-hash inspection only; no extraction, native load or gameplay proof", + "structural_inventory_verified": true, + "tree_node_count": 34 + }, + "payload_exactly_matches_captured_authored": true, + "project_descriptor_matches_authored": true, + "raw_log_hash_mismatches": [], + "reported_cleanup_confirmed": true, + "reported_display_cleanup_after_native_exit": true, + "retained_candidate_created": false, + "retained_runner_result": "validation-failed" + }, + "chat": { + "artifact_hashes_match_native_report": true, + "authored_after_matches_before": true, + "completion_observed": "native-child-exited", + "console_error_count": 25, + "console_path": "/tmp/erri-native-package-current-20260919-1317/profiles/chat/logs/logs_2026-09-19_13-18-06/console.log", + "content_mismatches": [], + "excluded_authored": [ + "Missions/ERR_Everon.conf.meta", + "addon.gproj" + ], + "expected_payload_count": 8, + "extra_payload": [], + "identity_and_dependency_schema_verified": true, + "launch_authored_matches_before": true, + "matches_empty_control_exact_25_errors": true, + "missing_payload": [], + "native_command_matches_launch": true, + "native_exit_agrees_report": true, + "native_exit_code": 0, + "native_exit_status_hash_matches_report": true, + "normalized_error_set_sha256": "0cb40e173c7a02f72123cfc568016556f05fe80457f06cabf6423cc6ce309c60", + "normalized_errors": [ + "RESOURCES (E): ==== Resource leaks ====", + "RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "RESOURCES (E): UI/Imagesets/default.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "normalized_unique_error_count": 25, + "packaging_done_result_one": true, + "packaging_project_successful": true, + "pak_entry_count": 8, + "pak_inventory": { + "archive": "/tmp/erri-native-package-current-20260919-1317/packages/chat/data.pak", + "archive_bytes": 15163, + "archive_sha256": "26fa2ce81dada224fcb0c24ea3e2ebca01eb67c149bd06bf77f04c6b5faeca53", + "entries": [ + { + "compression": "raw", + "content_bytes": 415, + "offset": 56, + "opaque_tail_hex": "38b4666a", + "path": "Missions/ERR_Everon.conf", + "sha256": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b", + "stored_bytes": 415 + }, + { + "compression": "zlib", + "content_bytes": 1277, + "offset": 471, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_AdminCommands.c", + "sha256": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c", + "stored_bytes": 572 + }, + { + "compression": "zlib", + "content_bytes": 15477, + "offset": 1043, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeHQResponseProof.c", + "sha256": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3", + "stored_bytes": 4350 + }, + { + "compression": "raw", + "content_bytes": 172, + "offset": 5393, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeMortarProbe.c", + "sha256": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "stored_bytes": 172 + }, + { + "compression": "zlib", + "content_bytes": 3764, + "offset": 5565, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeRadioProbe.c", + "sha256": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "stored_bytes": 1359 + }, + { + "compression": "zlib", + "content_bytes": 28331, + "offset": 6924, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeSmoke.c", + "sha256": "32501d011d459e3c2d01077ef3eeb0ce8c364985e1aadfe8e8c022ba4b2054ef", + "stored_bytes": 6428 + }, + { + "compression": "raw", + "content_bytes": 430, + "offset": 13352, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c", + "sha256": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "stored_bytes": 430 + }, + { + "compression": "zlib", + "content_bytes": 2050, + "offset": 13782, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c", + "sha256": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "stored_bytes": 892 + } + ], + "entry_count": 8, + "expanded_bytes": 51916, + "format": "FORM/PAC1 observed HEAD 03000100", + "head_hex": "03000100108f4572757b67414d02585f060b040c0a56000200000000", + "limits": { + "archive_bytes": 4294967296, + "depth": 64, + "entries": 250000, + "entry_bytes": 1073741824, + "expansion_ratio": 1024, + "total_bytes": 8589934592, + "tree_bytes": 33554432 + }, + "platform_or_resource_semantics_verified": false, + "release_qualified": false, + "scope": "Bounded structural/content-hash inspection only; no extraction, native load or gameplay proof", + "structural_inventory_verified": true, + "tree_node_count": 15 + }, + "payload_exactly_matches_captured_authored": true, + "project_descriptor_matches_authored": true, + "raw_log_hash_mismatches": [], + "reported_cleanup_confirmed": true, + "reported_display_cleanup_after_native_exit": true, + "retained_candidate_created": false, + "retained_runner_result": "validation-failed" + }, + "core": { + "artifact_hashes_match_native_report": true, + "authored_after_matches_before": true, + "completion_observed": "native-child-exited", + "console_error_count": 25, + "console_path": "/tmp/erri-native-package-current-20260919-1317/profiles/core/logs/logs_2026-09-19_13-16-58/console.log", + "content_mismatches": [], + "excluded_authored": [ + "Configs/ERR/EveronSites.conf.meta", + "Configs/ERR/Factions/MissionVehicles.conf.meta", + "Configs/ERR/Factions/US.conf.meta", + "Configs/ERR/Factions/USSR.conf.meta", + "Configs/ERR/GameOverScreens.conf.meta", + "Configs/ERR/VanillaFactions.conf.meta", + "Missions/ERR_Everon_Base.conf.meta", + "Prefabs/ERR/Extraction.et.meta", + "Prefabs/ERR/FactionManager.et.meta", + "Prefabs/ERR/FieldCover.et.meta", + "Prefabs/ERR/GameMode.et.meta", + "Prefabs/ERR/ObjectiveDocument.et.meta", + "Prefabs/ERR/Patrol.et.meta", + "Prefabs/ERR/Prison.et.meta", + "Prefabs/ERR/PrisonDoor.et.meta", + "Prefabs/ERR/PrisonWall.et.meta", + "Prefabs/ERR/Prisoner.et.meta", + "Prefabs/ERR/Radio.et.meta", + "Prefabs/ERR/SpectatorCamera.et.meta", + "Prefabs/ERR/SupplyCache.et.meta", + "Prefabs/ERR/SupplySite.et.meta", + "Worlds/ERR_Everon.ent.meta", + "addon.gproj" + ], + "expected_payload_count": 107, + "extra_payload": [], + "identity_and_dependency_schema_verified": true, + "launch_authored_matches_before": true, + "matches_empty_control_exact_25_errors": true, + "missing_payload": [], + "native_command_matches_launch": true, + "native_exit_agrees_report": true, + "native_exit_code": 0, + "native_exit_status_hash_matches_report": true, + "normalized_error_set_sha256": "0cb40e173c7a02f72123cfc568016556f05fe80457f06cabf6423cc6ce309c60", + "normalized_errors": [ + "RESOURCES (E): ==== Resource leaks ====", + "RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "RESOURCES (E): UI/Imagesets/default.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "normalized_unique_error_count": 25, + "packaging_done_result_one": true, + "packaging_project_successful": true, + "pak_entry_count": 107, + "pak_inventory": { + "archive": "/tmp/erri-native-package-current-20260919-1317/packages/core/data.pak", + "archive_bytes": 199646, + "archive_sha256": "3f84b9622afe2ff1683f05917a1e8e190f4f7dcf62f48a8c29adde95ce8a1b50", + "entries": [ + { + "compression": "zlib", + "content_bytes": 5144, + "offset": 56, + "opaque_tail_hex": "38b4666a", + "path": "Configs/ERR/EveronSites.conf", + "sha256": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f", + "stored_bytes": 1167 + }, + { + "compression": "raw", + "content_bytes": 743, + "offset": 1223, + "opaque_tail_hex": "38b4666a", + "path": "Configs/ERR/Factions/MissionVehicles.conf", + "sha256": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb", + "stored_bytes": 743 + }, + { + "compression": "zlib", + "content_bytes": 11387, + "offset": 1966, + "opaque_tail_hex": "38b4666a", + "path": "Configs/ERR/Factions/US.conf", + "sha256": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b", + "stored_bytes": 1869 + }, + { + "compression": "zlib", + "content_bytes": 11186, + "offset": 3835, + "opaque_tail_hex": "38b4666a", + "path": "Configs/ERR/Factions/USSR.conf", + "sha256": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30", + "stored_bytes": 1820 + }, + { + "compression": "raw", + "content_bytes": 944, + "offset": 5655, + "opaque_tail_hex": "38b4666a", + "path": "Configs/ERR/GameOverScreens.conf", + "sha256": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236", + "stored_bytes": 944 + }, + { + "compression": "raw", + "content_bytes": 290, + "offset": 6599, + "opaque_tail_hex": "38b4666a", + "path": "Configs/ERR/VanillaFactions.conf", + "sha256": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1", + "stored_bytes": 290 + }, + { + "compression": "raw", + "content_bytes": 441, + "offset": 6889, + "opaque_tail_hex": "38b4666a", + "path": "Missions/ERR_Everon_Base.conf", + "sha256": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd", + "stored_bytes": 441 + }, + { + "compression": "raw", + "content_bytes": 153, + "offset": 7330, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/Extraction.et", + "sha256": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e", + "stored_bytes": 153 + }, + { + "compression": "raw", + "content_bytes": 460, + "offset": 7483, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/FactionManager.et", + "sha256": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5", + "stored_bytes": 460 + }, + { + "compression": "raw", + "content_bytes": 650, + "offset": 7943, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/FieldCover.et", + "sha256": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3", + "stored_bytes": 650 + }, + { + "compression": "raw", + "content_bytes": 533, + "offset": 8593, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/GameMode.et", + "sha256": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029", + "stored_bytes": 533 + }, + { + "compression": "raw", + "content_bytes": 175, + "offset": 9126, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/ObjectiveDocument.et", + "sha256": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0", + "stored_bytes": 175 + }, + { + "compression": "raw", + "content_bytes": 633, + "offset": 9301, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/Patrol.et", + "sha256": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce", + "stored_bytes": 633 + }, + { + "compression": "raw", + "content_bytes": 2485, + "offset": 9934, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/Prison.et", + "sha256": "dcd3f4dfd453303d026e68b64f7de6125bd3390822d8432dd95a3710a5b3df89", + "stored_bytes": 2485 + }, + { + "compression": "raw", + "content_bytes": 676, + "offset": 12419, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/PrisonDoor.et", + "sha256": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40", + "stored_bytes": 676 + }, + { + "compression": "raw", + "content_bytes": 293, + "offset": 15351, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/PrisonWall.et", + "sha256": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed", + "stored_bytes": 293 + }, + { + "compression": "raw", + "content_bytes": 2256, + "offset": 13095, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/Prisoner.et", + "sha256": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d", + "stored_bytes": 2256 + }, + { + "compression": "raw", + "content_bytes": 705, + "offset": 15644, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/Radio.et", + "sha256": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165", + "stored_bytes": 705 + }, + { + "compression": "raw", + "content_bytes": 140, + "offset": 16349, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/SpectatorCamera.et", + "sha256": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812", + "stored_bytes": 140 + }, + { + "compression": "raw", + "content_bytes": 1062, + "offset": 16489, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/SupplyCache.et", + "sha256": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7", + "stored_bytes": 1062 + }, + { + "compression": "raw", + "content_bytes": 153, + "offset": 17551, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/ERR/SupplySite.et", + "sha256": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4", + "stored_bytes": 153 + }, + { + "compression": "zlib", + "content_bytes": 3262, + "offset": 17704, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_Actions.c", + "sha256": "cabb21413c90b252d29708b62228d0679c51c76e39ee0e483953ad7061b2b9d6", + "stored_bytes": 938 + }, + { + "compression": "zlib", + "content_bytes": 2564, + "offset": 18642, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_Actors.c", + "sha256": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d", + "stored_bytes": 957 + }, + { + "compression": "zlib", + "content_bytes": 5197, + "offset": 19599, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_AdminService.c", + "sha256": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb", + "stored_bytes": 1737 + }, + { + "compression": "zlib", + "content_bytes": 4152, + "offset": 21336, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_CasualtyGroundSupport.c", + "sha256": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d", + "stored_bytes": 1593 + }, + { + "compression": "zlib", + "content_bytes": 1783, + "offset": 22929, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c", + "sha256": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf", + "stored_bytes": 583 + }, + { + "compression": "zlib", + "content_bytes": 4564, + "offset": 23512, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c", + "sha256": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7", + "stored_bytes": 1211 + }, + { + "compression": "zlib", + "content_bytes": 17277, + "offset": 24723, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_CasualtyLoadingService.c", + "sha256": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201", + "stored_bytes": 4457 + }, + { + "compression": "zlib", + "content_bytes": 4594, + "offset": 29180, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_DiscoveryMap.c", + "sha256": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b", + "stored_bytes": 1758 + }, + { + "compression": "zlib", + "content_bytes": 2981, + "offset": 30938, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_DiscoveryService.c", + "sha256": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0", + "stored_bytes": 1082 + }, + { + "compression": "raw", + "content_bytes": 377, + "offset": 32020, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_DocumentComponent.c", + "sha256": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2", + "stored_bytes": 377 + }, + { + "compression": "zlib", + "content_bytes": 7174, + "offset": 32397, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_EnvironmentService.c", + "sha256": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5", + "stored_bytes": 2142 + }, + { + "compression": "zlib", + "content_bytes": 3058, + "offset": 34539, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c", + "sha256": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3", + "stored_bytes": 991 + }, + { + "compression": "zlib", + "content_bytes": 6227, + "offset": 35530, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_ExtractionPlacement.c", + "sha256": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe", + "stored_bytes": 2065 + }, + { + "compression": "zlib", + "content_bytes": 3964, + "offset": 37595, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_ExtractionService.c", + "sha256": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9", + "stored_bytes": 1304 + }, + { + "compression": "zlib", + "content_bytes": 1560, + "offset": 38899, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_FactionCatalog.c", + "sha256": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e", + "stored_bytes": 544 + }, + { + "compression": "zlib", + "content_bytes": 17150, + "offset": 39443, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_GameMode.c", + "sha256": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e", + "stored_bytes": 4348 + }, + { + "compression": "raw", + "content_bytes": 608, + "offset": 43791, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_InitialGuardRules.c", + "sha256": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "stored_bytes": 608 + }, + { + "compression": "raw", + "content_bytes": 650, + "offset": 44399, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_Inventory.c", + "sha256": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "stored_bytes": 650 + }, + { + "compression": "zlib", + "content_bytes": 2716, + "offset": 45049, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_ItemStationTeardown.c", + "sha256": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e", + "stored_bytes": 1050 + }, + { + "compression": "raw", + "content_bytes": 997, + "offset": 46099, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_LoadCasualtyAction.c", + "sha256": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "stored_bytes": 997 + }, + { + "compression": "zlib", + "content_bytes": 4453, + "offset": 47096, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_LocalAdmission.c", + "sha256": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be", + "stored_bytes": 1530 + }, + { + "compression": "zlib", + "content_bytes": 2236, + "offset": 48626, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_Location.c", + "sha256": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24", + "stored_bytes": 829 + }, + { + "compression": "zlib", + "content_bytes": 1323, + "offset": 49455, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_MissionRules.c", + "sha256": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "stored_bytes": 523 + }, + { + "compression": "zlib", + "content_bytes": 5026, + "offset": 49978, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c", + "sha256": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae", + "stored_bytes": 1575 + }, + { + "compression": "zlib", + "content_bytes": 44172, + "offset": 51553, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeBaseSmoke.c", + "sha256": "4c58290868fe4b669ff0f05835e9e7626766c13eab9633a721e0ebe5c551428e", + "stored_bytes": 8638 + }, + { + "compression": "zlib", + "content_bytes": 4635, + "offset": 60191, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c", + "sha256": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3", + "stored_bytes": 1653 + }, + { + "compression": "zlib", + "content_bytes": 13657, + "offset": 61844, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c", + "sha256": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b", + "stored_bytes": 4094 + }, + { + "compression": "zlib", + "content_bytes": 8987, + "offset": 65938, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c", + "sha256": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36", + "stored_bytes": 2969 + }, + { + "compression": "zlib", + "content_bytes": 18190, + "offset": 68907, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c", + "sha256": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea", + "stored_bytes": 5043 + }, + { + "compression": "zlib", + "content_bytes": 3898, + "offset": 73950, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeContractsProbe.c", + "sha256": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0", + "stored_bytes": 1272 + }, + { + "compression": "zlib", + "content_bytes": 2897, + "offset": 75222, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeDefinitionProbe.c", + "sha256": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360", + "stored_bytes": 929 + }, + { + "compression": "zlib", + "content_bytes": 8229, + "offset": 76151, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c", + "sha256": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f", + "stored_bytes": 2068 + }, + { + "compression": "zlib", + "content_bytes": 9497, + "offset": 78219, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c", + "sha256": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418", + "stored_bytes": 2679 + }, + { + "compression": "zlib", + "content_bytes": 6798, + "offset": 80898, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c", + "sha256": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507", + "stored_bytes": 2149 + }, + { + "compression": "zlib", + "content_bytes": 9054, + "offset": 83047, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeExtractionProbe.c", + "sha256": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972", + "stored_bytes": 2625 + }, + { + "compression": "zlib", + "content_bytes": 6188, + "offset": 85672, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c", + "sha256": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78", + "stored_bytes": 2136 + }, + { + "compression": "zlib", + "content_bytes": 7665, + "offset": 87808, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeFlightFootprint.c", + "sha256": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d", + "stored_bytes": 2709 + }, + { + "compression": "zlib", + "content_bytes": 5608, + "offset": 90517, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c", + "sha256": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4", + "stored_bytes": 1597 + }, + { + "compression": "zlib", + "content_bytes": 12434, + "offset": 92114, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c", + "sha256": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "stored_bytes": 3498 + }, + { + "compression": "zlib", + "content_bytes": 7407, + "offset": 95612, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c", + "sha256": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9", + "stored_bytes": 2254 + }, + { + "compression": "zlib", + "content_bytes": 10808, + "offset": 97866, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeLifecycleProbe.c", + "sha256": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "stored_bytes": 3107 + }, + { + "compression": "zlib", + "content_bytes": 7963, + "offset": 100973, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c", + "sha256": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09", + "stored_bytes": 2588 + }, + { + "compression": "zlib", + "content_bytes": 12044, + "offset": 103561, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeMedicalProbe.c", + "sha256": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6", + "stored_bytes": 3462 + }, + { + "compression": "zlib", + "content_bytes": 8826, + "offset": 107023, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c", + "sha256": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48", + "stored_bytes": 2735 + }, + { + "compression": "zlib", + "content_bytes": 12327, + "offset": 109758, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeObjectiveProbe.c", + "sha256": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b", + "stored_bytes": 3270 + }, + { + "compression": "zlib", + "content_bytes": 10195, + "offset": 113028, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativePatrolProbe.c", + "sha256": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d", + "stored_bytes": 3203 + }, + { + "compression": "zlib", + "content_bytes": 50364, + "offset": 116231, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c", + "sha256": "7ae5d6f85bbbebec214c66bfdf6f53b93c802f109fcd5bcfbad82c5d61d6cb9f", + "stored_bytes": 13133 + }, + { + "compression": "zlib", + "content_bytes": 8024, + "offset": 129364, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c", + "sha256": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c", + "stored_bytes": 2601 + }, + { + "compression": "zlib", + "content_bytes": 10407, + "offset": 131965, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativePrisonerProbe.c", + "sha256": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "stored_bytes": 3162 + }, + { + "compression": "zlib", + "content_bytes": 6855, + "offset": 135127, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c", + "sha256": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560", + "stored_bytes": 2103 + }, + { + "compression": "zlib", + "content_bytes": 17296, + "offset": 137230, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c", + "sha256": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c", + "stored_bytes": 4307 + }, + { + "compression": "zlib", + "content_bytes": 4427, + "offset": 141537, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeRecoveryProbe.c", + "sha256": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2", + "stored_bytes": 1367 + }, + { + "compression": "zlib", + "content_bytes": 5329, + "offset": 142904, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeResultProbe.c", + "sha256": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415", + "stored_bytes": 1623 + }, + { + "compression": "zlib", + "content_bytes": 1967, + "offset": 144527, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeSiteSurvey.c", + "sha256": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f", + "stored_bytes": 892 + }, + { + "compression": "zlib", + "content_bytes": 5170, + "offset": 145419, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c", + "sha256": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c", + "stored_bytes": 1514 + }, + { + "compression": "zlib", + "content_bytes": 8450, + "offset": 146933, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeTimeProbe.c", + "sha256": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae", + "stored_bytes": 2396 + }, + { + "compression": "zlib", + "content_bytes": 7877, + "offset": 149329, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeTransportProbe.c", + "sha256": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193", + "stored_bytes": 2319 + }, + { + "compression": "zlib", + "content_bytes": 1546, + "offset": 151648, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_NativeTransportSurvey.c", + "sha256": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5", + "stored_bytes": 796 + }, + { + "compression": "zlib", + "content_bytes": 2611, + "offset": 152444, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_ObjectiveDetails.c", + "sha256": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf", + "stored_bytes": 946 + }, + { + "compression": "zlib", + "content_bytes": 4084, + "offset": 154356, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_ObjectiveText.c", + "sha256": "d1740ddbe8a4bac04aeb0ffc68c2957bc807cbb0a197afd515f0fcb742aac04f", + "stored_bytes": 1569 + }, + { + "compression": "zlib", + "content_bytes": 2338, + "offset": 153390, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_Objectives.c", + "sha256": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "stored_bytes": 966 + }, + { + "compression": "zlib", + "content_bytes": 9794, + "offset": 155925, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_Observer.c", + "sha256": "f417f503dcb66b4d5224d49046ab47c08fa14255d5c4af02a85047096069da33", + "stored_bytes": 2912 + }, + { + "compression": "zlib", + "content_bytes": 11331, + "offset": 158837, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c", + "sha256": "11541755401af8da68dc004d9a8e2a49578d617d4dec63b1d6e5a75b00b9c3ff", + "stored_bytes": 3515 + }, + { + "compression": "zlib", + "content_bytes": 2160, + "offset": 162352, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_PlayerAdminCommands.c", + "sha256": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721", + "stored_bytes": 825 + }, + { + "compression": "zlib", + "content_bytes": 2276, + "offset": 163177, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_PlayerEscapeResult.c", + "sha256": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14", + "stored_bytes": 729 + }, + { + "compression": "zlib", + "content_bytes": 1400, + "offset": 163906, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_PlayerGuide.c", + "sha256": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36", + "stored_bytes": 569 + }, + { + "compression": "zlib", + "content_bytes": 4093, + "offset": 164475, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_PlayerRoster.c", + "sha256": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b", + "stored_bytes": 1387 + }, + { + "compression": "zlib", + "content_bytes": 9369, + "offset": 165862, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_PrisonEscapeService.c", + "sha256": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d", + "stored_bytes": 3106 + }, + { + "compression": "zlib", + "content_bytes": 5842, + "offset": 168968, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_RadioDefenceService.c", + "sha256": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8", + "stored_bytes": 1655 + }, + { + "compression": "raw", + "content_bytes": 561, + "offset": 170623, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_RadioFeedback.c", + "sha256": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db", + "stored_bytes": 561 + }, + { + "compression": "zlib", + "content_bytes": 2512, + "offset": 171184, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_RecoveryService.c", + "sha256": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f", + "stored_bytes": 978 + }, + { + "compression": "raw", + "content_bytes": 789, + "offset": 172162, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_Resources.c", + "sha256": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee", + "stored_bytes": 789 + }, + { + "compression": "zlib", + "content_bytes": 2150, + "offset": 172951, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_ScenarioComponent.c", + "sha256": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89", + "stored_bytes": 812 + }, + { + "compression": "zlib", + "content_bytes": 4910, + "offset": 173763, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_Settings.c", + "sha256": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31", + "stored_bytes": 1515 + }, + { + "compression": "zlib", + "content_bytes": 6886, + "offset": 175278, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_SiteDefinition.c", + "sha256": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac", + "stored_bytes": 2020 + }, + { + "compression": "raw", + "content_bytes": 819, + "offset": 177298, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_SiteDiscoveryRules.c", + "sha256": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2", + "stored_bytes": 819 + }, + { + "compression": "zlib", + "content_bytes": 21531, + "offset": 178117, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_SiteService.c", + "sha256": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb", + "stored_bytes": 5824 + }, + { + "compression": "zlib", + "content_bytes": 3491, + "offset": 183941, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_SpawnFinalization.c", + "sha256": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9", + "stored_bytes": 1109 + }, + { + "compression": "zlib", + "content_bytes": 18343, + "offset": 185050, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_SpawnLogic.c", + "sha256": "ed88279cbeb3e5e6daf8471763df87a251881f550632eddadd08153594bbd1a1", + "stored_bytes": 4219 + }, + { + "compression": "zlib", + "content_bytes": 3379, + "offset": 189269, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_SpawnPlacement.c", + "sha256": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d", + "stored_bytes": 1305 + }, + { + "compression": "raw", + "content_bytes": 472, + "offset": 190574, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_Supplies.c", + "sha256": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713", + "stored_bytes": 472 + }, + { + "compression": "zlib", + "content_bytes": 3033, + "offset": 191046, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_TimeService.c", + "sha256": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453", + "stored_bytes": 1021 + }, + { + "compression": "raw", + "content_bytes": 806, + "offset": 192067, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c", + "sha256": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5", + "stored_bytes": 806 + }, + { + "compression": "raw", + "content_bytes": 824, + "offset": 192873, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c", + "sha256": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6", + "stored_bytes": 824 + }, + { + "compression": "raw", + "content_bytes": 62, + "offset": 193697, + "opaque_tail_hex": "38b4666a", + "path": "Worlds/ERR_Everon.ent", + "sha256": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "stored_bytes": 62 + }, + { + "compression": "zlib", + "content_bytes": 1397, + "offset": 193759, + "opaque_tail_hex": "38b4666a", + "path": "Worlds/ERR_Everon_Layers/default.layer", + "sha256": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e", + "stored_bytes": 569 + } + ], + "entry_count": 107, + "expanded_bytes": 630856, + "format": "FORM/PAC1 observed HEAD 03000100", + "head_hex": "0300010098c536ad232d604216515057505d030f5105080a00000000", + "limits": { + "archive_bytes": 4294967296, + "depth": 64, + "entries": 250000, + "entry_bytes": 1073741824, + "expansion_ratio": 1024, + "total_bytes": 8589934592, + "tree_bytes": 33554432 + }, + "platform_or_resource_semantics_verified": false, + "release_qualified": false, + "scope": "Bounded structural/content-hash inspection only; no extraction, native load or gameplay proof", + "structural_inventory_verified": true, + "tree_node_count": 122 + }, + "payload_exactly_matches_captured_authored": true, + "project_descriptor_matches_authored": true, + "raw_log_hash_mismatches": [], + "reported_cleanup_confirmed": true, + "reported_display_cleanup_after_native_exit": true, + "retained_candidate_created": false, + "retained_runner_result": "validation-failed" + }, + "intel": { + "artifact_hashes_match_native_report": true, + "authored_after_matches_before": true, + "completion_observed": "native-child-exited", + "console_error_count": 25, + "console_path": "/tmp/erri-native-package-current-20260919-1317/profiles/intel/logs/logs_2026-09-19_13-17-27/console.log", + "content_mismatches": [], + "excluded_authored": [ + "addon.gproj" + ], + "expected_payload_count": 1, + "extra_payload": [], + "identity_and_dependency_schema_verified": true, + "launch_authored_matches_before": true, + "matches_empty_control_exact_25_errors": true, + "missing_payload": [], + "native_command_matches_launch": true, + "native_exit_agrees_report": true, + "native_exit_code": 0, + "native_exit_status_hash_matches_report": true, + "normalized_error_set_sha256": "0cb40e173c7a02f72123cfc568016556f05fe80457f06cabf6423cc6ce309c60", + "normalized_errors": [ + "RESOURCES (E): ==== Resource leaks ====", + "RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "RESOURCES (E): UI/Imagesets/default.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "normalized_unique_error_count": 25, + "packaging_done_result_one": true, + "packaging_project_successful": true, + "pak_entry_count": 1, + "pak_inventory": { + "archive": "/tmp/erri-native-package-current-20260919-1317/packages/intel/data.pak", + "archive_bytes": 1250, + "archive_sha256": "5396732e193eb36d4ce86f9999f3cb112b5e1766f0e1b1911b6baa5e761fa37a", + "entries": [ + { + "compression": "zlib", + "content_bytes": 2681, + "offset": 56, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_IntelService.c", + "sha256": "5e167630a76437fd731fbb7a62a41381ea71509f3adb8a6b9c77f6816384861a", + "stored_bytes": 1104 + } + ], + "entry_count": 1, + "expanded_bytes": 2681, + "format": "FORM/PAC1 observed HEAD 03000100", + "head_hex": "03000100ef9cabc0217932164c070c095209515b0b53545400000000", + "limits": { + "archive_bytes": 4294967296, + "depth": 64, + "entries": 250000, + "entry_bytes": 1073741824, + "expansion_ratio": 1024, + "total_bytes": 8589934592, + "tree_bytes": 33554432 + }, + "platform_or_resource_semantics_verified": false, + "release_qualified": false, + "scope": "Bounded structural/content-hash inspection only; no extraction, native load or gameplay proof", + "structural_inventory_verified": true, + "tree_node_count": 4 + }, + "payload_exactly_matches_captured_authored": true, + "project_descriptor_matches_authored": true, + "raw_log_hash_mismatches": [], + "reported_cleanup_confirmed": true, + "reported_display_cleanup_after_native_exit": true, + "retained_candidate_created": false, + "retained_runner_result": "validation-failed" + }, + "map": { + "artifact_hashes_match_native_report": true, + "authored_after_matches_before": true, + "completion_observed": "native-child-exited", + "console_error_count": 25, + "console_path": "/tmp/erri-native-package-current-20260919-1317/profiles/map/logs/logs_2026-09-19_13-17-46/console.log", + "content_mismatches": [], + "excluded_authored": [ + "Materials/ERRM_MapRenderTarget.emat.meta", + "Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta", + "UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta", + "addon.gproj" + ], + "expected_payload_count": 6, + "extra_payload": [], + "identity_and_dependency_schema_verified": true, + "launch_authored_matches_before": true, + "matches_empty_control_exact_25_errors": true, + "missing_payload": [], + "native_command_matches_launch": true, + "native_exit_agrees_report": true, + "native_exit_code": 0, + "native_exit_status_hash_matches_report": true, + "normalized_error_set_sha256": "0cb40e173c7a02f72123cfc568016556f05fe80457f06cabf6423cc6ce309c60", + "normalized_errors": [ + "RESOURCES (E): ==== Resource leaks ====", + "RESOURCES (E): UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/Outline/panels_roundedOutline_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/Shadow/panels_fadedBackground-16-100_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/Panels/panels_roundedCorners_atlas.edds 1", + "RESOURCES (E): UI/Imagesets/WeaponInfo/panel_style_magazines.edds 1", + "RESOURCES (E): UI/Imagesets/debugUI.edds 1", + "RESOURCES (E): UI/Imagesets/default.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_move_camera_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_objective_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_place_geometry_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_place_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_raw_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_rotate_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_select_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_disabled_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_geometry_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_disabled_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_snap_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_transform_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_wait_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/arrow_waypoint_uiuc.edds 1", + "RESOURCES (E): UI/Textures/Cursor/cursors_atlas.edds 1", + "RESOURCES (E): UI/Textures/WidgetLibrary/ScrollBarRectangles.edds 1", + "RESOURCES (E): ui/fonts/robotomono_msdf_28.edds 1" + ], + "normalized_unique_error_count": 25, + "packaging_done_result_one": true, + "packaging_project_successful": true, + "pak_entry_count": 6, + "pak_inventory": { + "archive": "/tmp/erri-native-package-current-20260919-1317/packages/map/data.pak", + "archive_bytes": 10463, + "archive_sha256": "211835e6afd1b9b18f0a0e4ebd235afa03b1436810c355d6cfeec636c8935dd0", + "entries": [ + { + "compression": "raw", + "content_bytes": 226, + "offset": 56, + "opaque_tail_hex": "38b4666a", + "path": "Materials/ERRM_MapRenderTarget.emat", + "sha256": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "stored_bytes": 226 + }, + { + "compression": "raw", + "content_bytes": 2410, + "offset": 282, + "opaque_tail_hex": "38b4666a", + "path": "Prefabs/Items/Equipment/ERRM_SharedFieldMap.et", + "sha256": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581", + "stored_bytes": 2410 + }, + { + "compression": "raw", + "content_bytes": 166, + "offset": 2692, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERR/ERR_ScenarioMap.c", + "sha256": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "stored_bytes": 166 + }, + { + "compression": "zlib", + "content_bytes": 15889, + "offset": 2858, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c", + "sha256": "32418602f085e3edba7343f42a6a691630b533be262002f29248e8ae87a38254", + "stored_bytes": 4396 + }, + { + "compression": "zlib", + "content_bytes": 6831, + "offset": 7254, + "opaque_tail_hex": "38b4666a", + "path": "Scripts/Game/ERRMap/ERRM_SharedMapComponent.c", + "sha256": "3a10f6ea25bf88a400bc3e6c339823433845c5db4f2f423835ccf99a1b1a843f", + "stored_bytes": 2127 + }, + { + "compression": "raw", + "content_bytes": 634, + "offset": 9381, + "opaque_tail_hex": "38b4666a", + "path": "UI/layouts/ERRMap/SharedMapRenderTarget.layout", + "sha256": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "stored_bytes": 634 + } + ], + "entry_count": 6, + "expanded_bytes": 26156, + "format": "FORM/PAC1 observed HEAD 03000100", + "head_hex": "03000100969af602727b35424c055059010b560f0b51080400000000", + "limits": { + "archive_bytes": 4294967296, + "depth": 64, + "entries": 250000, + "entry_bytes": 1073741824, + "expansion_ratio": 1024, + "total_bytes": 8589934592, + "tree_bytes": 33554432 + }, + "platform_or_resource_semantics_verified": false, + "release_qualified": false, + "scope": "Bounded structural/content-hash inspection only; no extraction, native load or gameplay proof", + "structural_inventory_verified": true, + "tree_node_count": 17 + }, + "payload_exactly_matches_captured_authored": true, + "project_descriptor_matches_authored": true, + "raw_log_hash_mismatches": [], + "reported_cleanup_confirmed": true, + "reported_display_cleanup_after_native_exit": true, + "retained_candidate_created": false, + "retained_runner_result": "validation-failed" + } + }, + "qualification_limit": "All native runner results remain validation-failed. The same 25 resource/UI errors as empty control do not become acceptable or a clean packaging/release result. Native artifact platform semantics, RDB semantics, ordinary packed Windows startup and Linux dedicated startup remain separate evidence.", + "release_qualified": false, + "repository_after_matches_before": true, + "scope": "Structural/decompressed payload identity, captured source boundaries, exact output project/dependency identities, recorded native exits/cleanup and raw shutdown-error comparison only; separate runtime tests are not inferred.", + "session": "/tmp/erri-native-package-current-20260919-1317", + "source_mismatches": [], + "total_pak_entries": 151 +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Prefabs/ERR/MortarCrew.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Prefabs/ERR/MortarCrew.et new file mode 100644 index 0000000..1159fe9 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Prefabs/ERR/MortarCrew.et @@ -0,0 +1,8 @@ +SCR_AIGroup : "{8DE0C0830FE0C33D}Prefabs/Groups/OPFOR/Group_USSR_Base.et" { + m_aUnitPrefabSlots { + "{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et" + "{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et" + "{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et" + "{612F43A4D5AE765F}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_RTO.et" + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Prefabs/ERR/MortarCrew.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Prefabs/ERR/MortarCrew.et.meta new file mode 100644 index 0000000..adaeb61 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Prefabs/ERR/MortarCrew.et.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{B84C05941C4C81B8}Prefabs/ERR/MortarCrew.et" + Configurations { + EntityTemplateResourceClass PC {} + EntityTemplateResourceClass HEADLESS {} + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c new file mode 100644 index 0000000..3c4953a --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c @@ -0,0 +1,436 @@ +// Prepared control mechanism only. No global hooks, force allocation or HQ selection. +enum ERR_AircraftFlightState +{ + IDLE, HOOKS, STARTING, POSITIVE, NEGATIVE, CLIMB, LANDING, SHUTDOWN, + COMPLETE, CANCELLED, FAILED, RELINQUISHED, TRANSLATING +} +class ERR_AircraftFlightRules +{ + static bool Terminal(int state) { return state >= ERR_AircraftFlightState.COMPLETE && state <= ERR_AircraftFlightState.RELINQUISHED; } + static bool Deadline(float now, float deadline) { return now >= 0 && deadline > now && deadline - now <= 240000; } + static bool Envelope(float height, float drift, float upright) + { + return height >= -3 && height <= 18 && drift >= 0 && drift < 8 && upright >= 0.85; + } + static bool Hover(float height, float speed, float vertical, float upright) + { + return height >= 7 && height <= 9 && speed >= 0 && speed < 1.5 && Math.AbsFloat(vertical) < 0.5 && upright > 0.98; + } + static bool Landed(bool contact, float height, float speed, float angular, float upright) + { + return contact && height > -1 && height < 1 && speed >= 0 && speed < 0.5 && angular >= 0 && angular < 0.1 && upright > 0.98; + } + static float Vertical(float height, bool landing) + { + float target = 8; if (landing) target = 0; + return Math.Clamp((target - height) * 0.6, -0.8, 1.5); + } + // Ground aborts may stop the engine; airborne cancellation retains the flight lease. + static int CancelAction(bool ownershipValid, bool landed, bool engineOn) + { + if (!ownershipValid) return 0; + if (!landed) return 1; + if (engineOn) return 2; + return 3; + } +} + +// Bounded migration of the separately proven native-autohover translation. +class ERR_AircraftTranslationRules +{ + static bool Target(vector home, vector target) + { + float distance = vector.DistanceXZ(home, target); + return distance >= 0 && distance <= 5; + } + static bool Reachable(float distance) { return distance >= 0 && distance <= 4.05; } + static vector Demand(vector target, vector position, vector velocity) + { + vector error = target - position; error[1] = 0; + vector desired = error * 0.25; + float speed = desired.Length(); + if (speed > 0.5) desired = desired * (0.5 / speed); + velocity[1] = 0; + vector demand = (desired - velocity) * 0.05; + float magnitude = demand.Length(); + if (magnitude > 0.03) demand = demand * (0.03 / magnitude); + return demand; + } + static bool Held(bool contact, float height, float speed, float vertical, float upright, float horizontalSpeed, float targetError, float displacement, float distance) + { + if (contact || !ERR_AircraftFlightRules.Hover(height, speed, vertical, upright)) return false; + if (!(horizontalSpeed >= 0 && horizontalSpeed < 0.25 && targetError >= 0 && targetError <= 0.75)) return false; + return Reachable(distance) && displacement >= Math.Max(0, distance - 0.75); + } +} + +class ERR_AircraftFlight +{ + protected static ref map s_Owners = new map(); + protected ERR_GameMode m_Mode; + protected Vehicle m_Aircraft; + protected SCR_AIGroup m_Group; + protected IEntity m_Pilot; + protected PilotCompartmentSlot m_Seat; + protected HelicopterControllerComponent m_Controller; + protected VehicleHelicopterSimulation m_Simulation; + protected CharacterControllerComponent m_Character; + protected CharacterInputContext m_Input; + protected AIAgent m_Agent; + protected ActionManager m_Actions; + protected FuelManagerComponent m_Fuel; + protected ref ERR_AircraftFlightEnvelope m_Qualification; + protected ERR_AircraftFlightState m_State; + protected int m_Token; + protected vector m_Home; + protected float m_Heading; + protected float m_Deadline; + protected float m_StageDeadline; + protected float m_Stable = -1; + protected float m_LastTick = -1; + protected float m_LastControl = -1; + protected float m_InitialFuel; + protected float m_Collective = -0.8; + protected int m_ActionUpdates; + protected int m_HelicopterUpdates; + protected int m_GateUpdates; + protected int m_OriginalLOD; + protected CollectiveMode m_OriginalMode; + protected bool m_OriginalAutohover; + protected bool m_SettingsOwned; + protected bool m_Readback = true; + protected bool m_Cancelled; + protected bool m_StartAttempted; + protected string m_Reason; + protected bool m_TranslationRequested; + protected bool m_TranslationStarted; + protected bool m_TranslationProven; + protected vector m_TranslationTarget; + protected vector m_TranslationOrigin; + protected float m_TranslationDistance; + protected int m_TranslationUpdates; + + ERR_AircraftFlightState State() { return m_State; } + string Reason() { return m_Reason; } + int OrderToken() { return m_Token; } + bool Finished() { return ERR_AircraftFlightRules.Terminal(m_State); } + Vehicle Aircraft() { return m_Aircraft; } + bool TranslationStarted() { return m_TranslationStarted; } + bool TranslationProven() { return m_TranslationProven; } + vector TranslationTarget() { return m_TranslationTarget; } + vector TranslationOrigin() { return m_TranslationOrigin; } + int TranslationUpdates() { return m_TranslationUpdates; } + // Absolute horizontal target fixed before takeoff. Its altitude is the existing + // eight-metre hover, not a caller-supplied route or a new qualification home. + bool StartTranslation(ERR_GameMode mode, Vehicle aircraft, SCR_AIGroup group, IEntity pilot, PilotCompartmentSlot seat, ERR_AircraftFlightEnvelope qualification, int token, float deadline, vector target) + { + if (m_StartAttempted || m_TranslationRequested || !qualification || !ERR_AircraftTranslationRules.Target(qualification.Home(), target)) return false; + m_TranslationRequested = true; m_TranslationTarget = target; + vector home = qualification.Home(); m_TranslationTarget[1] = home[1] + 8; + return Start(mode, aircraft, group, pilot, seat, qualification, token, deadline); + } + protected float Now() + { + if (!GetGame() || !GetGame().GetWorld()) return -1; + return GetGame().GetWorld().GetWorldTime(); + } + protected bool NoPlayers() + { + if (!GetGame() || !GetGame().GetPlayerManager()) return false; + if (!m_Group || m_Group.GetPlayerCount(true) > 0 || ERR_Actors.Player(m_Pilot)) return false; + array players = {}; GetGame().GetPlayerManager().GetPlayers(players); + foreach (int id : players) + { + IEntity actor = GetGame().GetPlayerManager().GetPlayerControlledEntity(id); + if (actor && (actor == m_Pilot || CompartmentAccessComponent.GetVehicleIn(actor) == m_Aircraft)) return false; + } + return true; + } + protected bool Owns() + { + if (!GetGame() || !GetGame().GetWorld() || !GetGame().GetPlayerManager()) return false; + if (!Replication.IsServer() || !m_Mode || m_Mode != ERR_GameMode.Get() || !m_Mode.Active() || !m_Aircraft || !m_Group || !m_Pilot) return false; + if (!m_Controller || m_Controller.GetOwner() != m_Aircraft || !m_Seat || m_Controller.GetPilotCompartmentSlot() != m_Seat || m_Seat.GetOccupant() != m_Pilot) return false; + if (CompartmentAccessComponent.GetVehicleIn(m_Pilot) != m_Aircraft || ERR_Actors.Group(m_Pilot) != m_Group || m_Group.GetFaction() != m_Mode.EnemyFaction()) return false; + if (SCR_FactionManager.SGetFaction(m_Aircraft) != m_Mode.EnemyFaction() || !NoPlayers()) return false; + return m_Agent && m_Agent.GetControlledEntity() == m_Pilot && m_Agent.GetActionManager() == m_Actions && m_Actions && m_Actions != GetGame().GetInputManager(); + } + protected bool Healthy() + { + if (!ERR_Actors.Alive(m_Aircraft) || !ERR_Actors.CanFight(m_Pilot) || !m_Simulation || !m_Simulation.IsValid() || !m_Fuel || !m_Fuel.HasFuel()) return false; + SCR_VehicleDamageManagerComponent damage = SCR_VehicleDamageManagerComponent.Cast(m_Aircraft.FindComponent(SCR_VehicleDamageManagerComponent)); + if (!damage || !damage.GetEngineFunctional() || damage.GetMovementDamage() >= 1 || damage.IsOnFire() || m_Simulation.RotorCount() != 2) return false; + for (int rotor = 0; rotor < 2; rotor++) if (m_Simulation.RotorGetState(rotor) == RotorState.DESTROYED) return false; + return true; + } + protected bool Grounded() + { + if (!GetGame() || !GetGame().GetWorld() || !m_Aircraft || !m_Simulation) return false; + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + return ERR_AircraftFlightRules.Landed(m_Simulation.HasAnyGroundContact(), transform[3][1] - m_Home[1], m_Simulation.GetVelocity().Length(), m_Simulation.GetAngularVelocity().Length(), transform[1][1]); + } + // Single use. A future HQ owner supplies its immutable unique order token and + // retains this instance, calling Tick and the two scoped callbacks until terminal. + bool Start(ERR_GameMode mode, Vehicle aircraft, SCR_AIGroup group, IEntity pilot, PilotCompartmentSlot seat, ERR_AircraftFlightEnvelope qualification, int token, float deadline) + { + if (m_StartAttempted || m_State != ERR_AircraftFlightState.IDLE || m_Token != 0 || !Replication.IsServer() || !GetGame() || !qualification || !aircraft || !pilot || !group || !seat) return false; + m_StartAttempted = true; + float now = Now(); + if (!ERR_AircraftFlightRules.Deadline(now, deadline) || token <= 0 || s_Owners.Get(aircraft)) return false; + m_Mode = mode; m_Aircraft = aircraft; m_Group = group; m_Pilot = pilot; m_Seat = seat; + m_Controller = HelicopterControllerComponent.Cast(aircraft.FindComponent(HelicopterControllerComponent)); + if (m_Controller) m_Simulation = m_Controller.GetSimulation(); + m_Character = CharacterControllerComponent.Cast(pilot.FindComponent(CharacterControllerComponent)); + if (m_Character) m_Input = m_Character.GetInputContext(); + AIControlComponent control = AIControlComponent.Cast(pilot.FindComponent(AIControlComponent)); + if (control) m_Agent = control.GetControlAIAgent(); + if (m_Agent) m_Actions = m_Agent.GetActionManager(); + m_Fuel = FuelManagerComponent.Cast(aircraft.FindComponent(FuelManagerComponent)); + if (!Owns() || !Healthy() || !m_Input || m_Controller.IsEngineOn() || !ERR_CasualtyLoadingRules.AircraftReady(aircraft)) return false; + Physics physics = aircraft.GetPhysics(); + if (!physics || !physics.IsDynamic() || !physics.IsActive() || !m_Simulation.HasAnyGroundContact()) return false; + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + if (!signals || signals.FindSignal("MainRotorCollective") < 0) return false; + if (!qualification.Claim(mode, aircraft, pilot, token)) return false; + m_Qualification = qualification; m_Home = qualification.Home(); m_Token = token; m_Deadline = deadline; + m_Heading = aircraft.GetYawPitchRoll()[0]; m_InitialFuel = m_Fuel.GetTotalFuel(); + m_OriginalMode = m_Controller.GetCollectiveMode(); m_OriginalAutohover = m_Controller.GetAutohoverEnabled(); m_OriginalLOD = m_Agent.GetPermanentLOD(); + m_SettingsOwned = true; s_Owners.Set(aircraft, this); + m_Agent.SetPermanentLOD(0); m_Agent.ActivateAI(); + m_Controller.SetAutohoverEnabled(false); + if (m_Controller.GetAutohoverEnabled()) { Fail("native autohover disable refused"); return false; } + m_State = ERR_AircraftFlightState.HOOKS; m_StageDeadline = Math.Min(deadline, now + 5000); + PrintFormat("ERR AIRCRAFT CONTROL: token=%1 bound qualified finite aircraft; no HQ dispatch installed", token); + return true; + } + protected bool Lease() + { + return m_Token > 0 && !Finished() && m_State != ERR_AircraftFlightState.IDLE && s_Owners.Get(m_Aircraft) == this && m_Qualification && m_Qualification.ClaimedBy(m_Aircraft, m_Pilot, m_Token); + } + // Every input entry checks the immutable deadlines even if owner Tick stalls. + protected bool ControlLease() + { + if (!Lease()) return false; + if (!Owns()) { Relinquish("ownership or world unavailable at control callback"); return false; } + float now = Now(); + if (now < 0 || now >= m_Deadline || now >= m_StageDeadline) { Fail("control callback reached bounded flight deadline"); return false; } + if (!Healthy() || !m_Readback) { Fail("flight capability or input readback lost"); return false; } + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + if (!ERR_AircraftFlightRules.Envelope(transform[3][1] - m_Home[1], vector.DistanceXZ(transform[3], m_Home), transform[1][1])) { Fail("control callback exceeded qualified flight envelope"); return false; } + return true; + } + // Must be called after the native helicopter's OnPrepareControls. + void PrepareHelicopter(HelicopterControllerComponent controller) + { + if (!Lease() || controller != m_Controller) return; + if (!ControlLease()) return; + controller.SetCollectiveMode(CollectiveMode.Direct); m_HelicopterUpdates++; + } + protected bool Pair(string positive, string negative, float demand) + { + float a = Math.Clamp(demand, 0, 1), b = Math.Clamp(-demand, 0, 1); + m_Actions.SetActionValue(positive, a); m_Actions.SetActionValue(negative, b); + return Math.AbsFloat(m_Actions.GetActionValue(positive) - a) < 0.001 && Math.AbsFloat(m_Actions.GetActionValue(negative) - b) < 0.001; + } + // Must be called on the exact AI actor manager before native OnPrepareControls. + void PrepareActions(CharacterControllerComponent controller, IEntity owner, ActionManager actions, float dt) + { + if (!Lease() || controller != m_Character || owner != m_Pilot || actions != m_Actions) return; + if (!ControlLease()) return; + if (!m_Readback || dt <= 0 || dt > 0.2) return; + if (!actions.IsContextActive("HelicopterContext")) actions.ActivateContext("HelicopterContext", 1); + if (!actions.IsContextActive("HelicopterContext")) { m_Readback = false; return; } + float collective, torque, forward, aside; + if (m_State == ERR_AircraftFlightState.POSITIVE) collective = 0.05; + else if (m_State == ERR_AircraftFlightState.NEGATIVE) collective = -0.05; + else if (m_State == ERR_AircraftFlightState.SHUTDOWN) collective = -1; + else if (m_State == ERR_AircraftFlightState.CLIMB || m_State == ERR_AircraftFlightState.LANDING || m_State == ERR_AircraftFlightState.TRANSLATING) + { + if (!m_Controller.GetAutohoverEnabled()) { Fail("native autohover lost while flying"); return; } + float height = m_Aircraft.GetOrigin()[1] - m_Home[1]; + float error = ERR_AircraftFlightRules.Vertical(height, m_State == ERR_AircraftFlightState.LANDING) - m_Simulation.GetVelocity()[1]; + m_Collective = Math.Clamp(m_Collective + error * dt * 0.12, -0.95, 0.8); + collective = Math.Clamp(m_Collective + error * 0.12, -1, 0.9); + float headingError = m_Heading - m_Aircraft.GetYawPitchRoll()[0]; + while (headingError > 180) headingError -= 360; + while (headingError < -180) headingError += 360; + torque = Math.Clamp(headingError * 0.01 - m_Simulation.GetAngularVelocityLocal()[1] * 0.3, -0.3, 0.3); + if (m_State == ERR_AircraftFlightState.TRANSLATING) + { + if (!m_TranslationStarted || !ERR_AircraftTranslationRules.Target(m_Home, m_TranslationTarget)) { Fail("immutable translation target unavailable"); return; } + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + vector demand = ERR_AircraftTranslationRules.Demand(m_TranslationTarget, transform[3], m_Simulation.GetVelocity()); + forward = Math.Clamp(vector.Dot(demand, transform[2]), -0.03, 0.03); + aside = Math.Clamp(vector.Dot(demand, transform[0]), -0.03, 0.03); + m_TranslationUpdates++; + } + if (m_State == ERR_AircraftFlightState.LANDING && Grounded()) collective = -1; + } + bool a = Pair("HelicopterCollectiveIncrease", "HelicopterCollectiveDecrease", collective); + bool b = Pair("HelicopterCyclicForward", "HelicopterCyclicBack", forward); + bool c = Pair("HelicopterCyclicRight", "HelicopterCyclicLeft", aside); + bool d = Pair("HelicopterAntiTorqueRight", "HelicopterAntiTorqueLeft", torque); + m_Readback = a && b && c && d; m_ActionUpdates++; m_LastControl = Now(); + } + protected void Release(bool restore) + { + // No writes after capture/group/seat change, including apparently harmless zeros. + if (m_SettingsOwned && Owns()) + { + Pair("HelicopterCollectiveIncrease", "HelicopterCollectiveDecrease", 0); + Pair("HelicopterCyclicForward", "HelicopterCyclicBack", 0); + Pair("HelicopterCyclicRight", "HelicopterCyclicLeft", 0); + Pair("HelicopterAntiTorqueRight", "HelicopterAntiTorqueLeft", 0); + // Restore native modes only after verified ground completion. Airborne + // failure leaves native autohover enabled rather than disabling it midair. + if (restore && Grounded()) + { + m_Controller.SetAutohoverEnabled(m_OriginalAutohover); + m_Controller.SetCollectiveMode(m_OriginalMode); + m_Agent.SetPermanentLOD(m_OriginalLOD); + } + } + if (m_Aircraft && s_Owners && s_Owners.Get(m_Aircraft) == this) s_Owners.Remove(m_Aircraft); + m_SettingsOwned = false; + } + protected void RecordState() + { + string detail = string.Format("token=%1 state=%2 reason=%3; physical availability remains with the allocating owner", m_Token, m_State, m_Reason); + Print("ERR AIRCRAFT CONTROL: " + detail); + if (m_Mode && m_Mode == ERR_GameMode.Get()) ERR_HQ.Event("AIRCRAFT CONTROL", detail); + } + protected void Relinquish(string reason) + { + if (Finished()) return; + m_Reason = reason; m_State = ERR_AircraftFlightState.RELINQUISHED; Release(false); RecordState(); + } + protected void Fail(string reason) + { + if (Finished()) return; + m_Reason = reason; m_State = ERR_AircraftFlightState.FAILED; Release(true); RecordState(); + } + protected bool Landing(float now) + { + m_Controller.SetAutohoverEnabled(true); + if (!m_Controller.GetAutohoverEnabled()) { Fail("native autohover enable refused"); return false; } + m_State = ERR_AircraftFlightState.LANDING; m_Stable = -1; + m_StageDeadline = Math.Min(m_Deadline, now + 65000); + return true; + } + protected void Shutdown(float now) + { + m_Controller.StopEngine(false); + m_State = ERR_AircraftFlightState.SHUTDOWN; m_StageDeadline = Math.Min(m_Deadline, now + 15000); m_Stable = -1; + } + void Cancel(string reason) + { + if (!Lease()) return; + if (m_Cancelled) return; // repeated invalid reports cannot extend a landing deadline + m_Cancelled = true; m_Reason = reason; RecordState(); + // After flight begins, even a current contact sample must pass the normal + // two-second landing observation; cancellation cannot shortcut touchdown. + bool preflightGround = m_State < ERR_AircraftFlightState.CLIMB && Grounded(); + int action = ERR_AircraftFlightRules.CancelAction(Owns(), preflightGround, m_Controller && m_Controller.IsEngineOn()); + if (action == 0) { Relinquish(reason); return; } + if (!Healthy()) { Fail(reason + "; flight capability lost"); return; } + if (action == 3) { m_State = ERR_AircraftFlightState.CANCELLED; Release(true); RecordState(); return; } + float now = Now(); + if (action == 2) { Shutdown(now); return; } + if (m_State != ERR_AircraftFlightState.LANDING && m_State != ERR_AircraftFlightState.SHUTDOWN) Landing(now); + } + protected bool BeginTranslation(float now, vector position) + { + if (!m_TranslationRequested || m_TranslationStarted || m_State != ERR_AircraftFlightState.CLIMB) { Cancel("translation stage ownership refused"); return false; } + float distance = vector.DistanceXZ(position, m_TranslationTarget); + if (!ERR_AircraftTranslationRules.Target(m_Home, m_TranslationTarget) || !ERR_AircraftTranslationRules.Reachable(distance)) { Cancel("fixed target beyond qualified four-metre translation after hover drift"); return false; } + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + if (!signals || signals.FindSignal("MainRotorCyclicForward") < 0 || signals.FindSignal("MainRotorCyclicAside") < 0 || !m_Controller.GetAutohoverEnabled()) { Cancel("native autohover cyclic signals unavailable"); return false; } + m_TranslationOrigin = position; m_TranslationDistance = distance; + m_TranslationStarted = true; m_State = ERR_AircraftFlightState.TRANSLATING; + m_Stable = -1; m_StageDeadline = Math.Min(m_Deadline, now + 45000); + PrintFormat("ERR AIRCRAFT TRANSLATION: token=%1 origin=%2 immutableTarget=%3 home=%4 distance=%5 deadline=%6", m_Token, position, m_TranslationTarget, m_Home, distance, m_StageDeadline); + return true; + } + protected void CheckTranslation(float now, vector position, float height, float speed, float upright) + { + if (!m_TranslationStarted || !m_Controller.GetAutohoverEnabled() || !ERR_AircraftTranslationRules.Target(m_Home, m_TranslationTarget)) { Cancel("translation ownership or autohover lost"); return; } + vector velocity = m_Simulation.GetVelocity(); vector horizontal = velocity; horizontal[1] = 0; + bool held = m_TranslationUpdates >= 3 && ERR_AircraftTranslationRules.Held(m_Simulation.HasAnyGroundContact(), height, speed, velocity[1], upright, horizontal.Length(), vector.DistanceXZ(position, m_TranslationTarget), vector.DistanceXZ(position, m_TranslationOrigin), m_TranslationDistance); + if (!held) { m_Stable = -1; return; } + if (m_Stable < 0) m_Stable = now; + if (now - m_Stable < 5000) return; + m_TranslationProven = true; + PrintFormat("ERR AIRCRAFT TRANSLATION HELD: token=%1 targetError=%2 displacement=%3 updates=%4", m_Token, vector.DistanceXZ(position, m_TranslationTarget), vector.DistanceXZ(position, m_TranslationOrigin), m_TranslationUpdates); + Landing(now); + } + // The owner continues ticking after Cancel until Finished, including landing. + void Tick() + { + if (!Lease()) return; + float now = Now(); + if (!Owns()) { Relinquish("ownership or mission changed"); return; } + if (!Healthy()) { Fail("flight capability lost"); return; } + if (!m_Readback) { Fail("native action readback failed"); return; } + if (now >= m_Deadline || now >= m_StageDeadline || now < 0) { Fail("bounded flight stage expired"); return; } + if (m_LastTick >= 0 && (now < m_LastTick || now - m_LastTick > 1500)) m_Stable = -1; + m_LastTick = now; + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + float height = transform[3][1] - m_Home[1], speed = m_Simulation.GetVelocity().Length(); + if (!ERR_AircraftFlightRules.Envelope(height, vector.DistanceXZ(transform[3], m_Home), transform[1][1])) { Fail("qualified flight envelope exceeded"); return; } + if (m_State == ERR_AircraftFlightState.HOOKS) + { + if (m_ActionUpdates < 3 || m_HelicopterUpdates < 3) return; + if (m_Controller.GetCollectiveMode() != CollectiveMode.Direct || m_Input.GetVehicleCollective() != 0 || m_Controller.IsEngineOn()) { Fail("native initial control state refused"); return; } + m_Controller.StartEngine(); m_State = ERR_AircraftFlightState.STARTING; m_StageDeadline = Math.Min(m_Deadline, now + 65000); return; + } + if (m_LastControl < 0 || now - m_LastControl > 1000) { Fail("pilot callback stopped"); return; } + if (m_State == ERR_AircraftFlightState.STARTING) + { + float rpm = m_Simulation.RotorGetRPMTarget(0); + if (!m_Controller.IsEngineOn() || rpm <= 0 || m_Simulation.RotorGetRPM(0) < rpm * 0.9 || m_Fuel.GetTotalFuel() >= m_InitialFuel) return; + m_State = ERR_AircraftFlightState.POSITIVE; m_StageDeadline = Math.Min(m_Deadline, now + 3000); m_GateUpdates = m_ActionUpdates; m_Stable = -1; return; + } + if (m_State != ERR_AircraftFlightState.SHUTDOWN && !m_Controller.IsEngineOn()) { Fail("running engine lost"); return; } + if (m_State == ERR_AircraftFlightState.POSITIVE || m_State == ERR_AircraftFlightState.NEGATIVE) + { + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + int index = -1; if (signals) index = signals.FindSignal("MainRotorCollective"); + if (index < 0 || m_Controller.GetCollectiveMode() != CollectiveMode.Direct || m_Controller.GetAutohoverEnabled()) { Fail("native collective proof unavailable"); return; } + float expected = 0.05; if (m_State == ERR_AircraftFlightState.NEGATIVE) expected = -0.05; + bool matched = m_ActionUpdates >= m_GateUpdates + 3 && Math.AbsFloat(signals.GetSignalValue(index) - expected) <= 0.01 && Math.AbsFloat(m_Input.GetVehicleCollective() - expected) <= 0.01; + if (!matched) { m_Stable = -1; return; } + if (m_Stable < 0) m_Stable = now; + if (now - m_Stable < 500) return; + m_Stable = -1; + if (m_State == ERR_AircraftFlightState.POSITIVE) { m_State = ERR_AircraftFlightState.NEGATIVE; m_StageDeadline = Math.Min(m_Deadline, now + 3000); m_GateUpdates = m_ActionUpdates; return; } + m_Controller.SetAutohoverEnabled(true); + if (!m_Controller.GetAutohoverEnabled()) { Fail("native autohover enable refused"); return; } + m_State = ERR_AircraftFlightState.CLIMB; m_StageDeadline = Math.Min(m_Deadline, now + 65000); return; + } + if (m_State == ERR_AircraftFlightState.TRANSLATING) { CheckTranslation(now, transform[3], height, speed, transform[1][1]); return; } + if (m_State == ERR_AircraftFlightState.CLIMB || m_State == ERR_AircraftFlightState.LANDING) + { + if (!m_Controller.GetAutohoverEnabled()) { Fail("native autohover lost"); return; } + bool stable = Grounded(); float duration = 2000; + if (m_State == ERR_AircraftFlightState.CLIMB) { stable = !m_Simulation.HasAnyGroundContact() && ERR_AircraftFlightRules.Hover(height, speed, m_Simulation.GetVelocity()[1], transform[1][1]); duration = 5000; } + if (!stable) m_Stable = -1; + if (stable && m_Stable < 0) m_Stable = now; + if (m_Stable < 0 || now - m_Stable < duration) return; + if (m_State == ERR_AircraftFlightState.CLIMB) + { + if (m_TranslationRequested) BeginTranslation(now, transform[3]); + else Landing(now); + return; + } + Shutdown(now); return; + } + if (m_State == ERR_AircraftFlightState.SHUTDOWN && !m_Controller.IsEngineOn()) + { + if (!Grounded()) { Fail("engine-off physical ground check failed"); return; } + if (m_Cancelled) m_State = ERR_AircraftFlightState.CANCELLED; + else m_State = ERR_AircraftFlightState.COMPLETE; + Release(true); RecordState(); + } + } + void ~ERR_AircraftFlight() { Release(true); } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c new file mode 100644 index 0000000..6345f61 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_AircraftFlightEnvelope.c @@ -0,0 +1,236 @@ +// Successor-owned measured envelope, independent of aircraft yaw/pitch/roll. +// Adapted from the separately qualified native vertical fixture; no native hook. +// All distances are around the native physics origin, not the rotor centre. +class ERR_AircraftFlightFootprintRules +{ + static float CylinderSphere(float originDistance, float radius, float thickness) + { + // Triangle inequality deliberately overbounds the one-sided rotor cylinder. + return originDistance + radius + thickness; + } + static bool Fits(float radius, float initialDrift, float initialHeight) + { + if (!(radius > 0 && radius < 32 && initialDrift >= 0 && initialDrift < 32)) return false; + if (!(initialHeight >= -3 && initialHeight <= 5)) return false; + return radius + initialDrift + 8 + 1 <= 40 && radius + initialHeight + 18 + 1 <= 60; + } +} + +class ERR_AircraftFlightFootprint +{ + static const int MAX_ENTITIES = 256; + static const int MAX_DEPTH = 16; + static const int MAX_HITZONES = 512; + protected static bool Refuse(string reason) + { + Print("ERR AIRCRAFT FOOTPRINT: refused " + reason); + return false; + } + protected static bool PointRadius(vector point, vector origin, inout float radius) + { + float distance = vector.Distance(point, origin); + if (!(distance >= 0 && distance < 1000)) return false; + radius = Math.Max(radius, distance); + return true; + } + static bool Measure(Vehicle aircraft, VehicleHelicopterSimulation simulation, vector pad, out vector origin, out float radius) + { + radius = 0; + if (!aircraft || !simulation || !simulation.IsValid() || !aircraft.GetPrefabData()) return Refuse("missing initialized native airframe"); + if (aircraft.GetPrefabData().GetPrefabName() != "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et") return Refuse("different airframe resource"); + // Model bounds and damage pivots are world-space. The simulation getter + // exposes internal physics space (identity at the airport in 100422), so + // use this same physical aircraft's actual entity world transform. + vector worldTransform[4]; aircraft.GetWorldTransform(worldTransform); + origin = worldTransform[3]; + for (int axis = 0; axis < 3; axis++) + if (!(Math.AbsFloat(worldTransform[axis].Length() - 1) < 0.001)) return Refuse("non-unit native entity world basis"); + + array entities = {aircraft}; + array depths = {0}; + array seenZones = {}; + int meshes, mainSweeps, tailSweeps; + float modelRadius, damageRadius, simulationRadius; + for (int index = 0; index < entities.Count(); index++) + { + IEntity entity = entities[index]; + if (!entity) return Refuse("hierarchy changed during measurement"); + if (entity.GetVObject()) + { + vector mins, maxs; entity.GetWorldBounds(mins, maxs); + for (int dimension = 0; dimension < 3; dimension++) + if (!(mins[dimension] <= maxs[dimension])) return Refuse("invalid model bounds"); + // A sphere around every corner encloses the complete world AABB. Its radius + // remains conservative under any rigid orientation of the whole aircraft. + for (int x = 0; x < 2; x++) + for (int y = 0; y < 2; y++) + for (int z = 0; z < 2; z++) + { + vector corner = mins; + if (x == 1) corner[0] = maxs[0]; + if (y == 1) corner[1] = maxs[1]; + if (z == 1) corner[2] = maxs[2]; + if (!PointRadius(corner, origin, modelRadius)) return Refuse("non-finite or excessive model bounds"); + } + meshes++; + } + HitZoneContainerComponent container = HitZoneContainerComponent.Cast(entity.FindComponent(HitZoneContainerComponent)); + if (container) + { + int count = container.CountAllHitZones(); + if (count < 0 || count + seenZones.Count() > MAX_HITZONES) return Refuse("hitzone traversal bound"); + array zones = {}; + if (container.GetAllHitZones(zones) != count || zones.Count() != count) return Refuse("hitzones changed during measurement"); + foreach (HitZone zone : zones) + { + if (!zone || seenZones.Contains(zone)) continue; + seenZones.Insert(zone); + SCR_RotorHitZone rotorZone = SCR_RotorHitZone.Cast(zone); + if (!rotorZone || rotorZone.GetRotorRadius() <= 0) continue; // transmission zones have no sweep + int rotorIndex = rotorZone.GetRotorIndex(); + float expectedRadius, thickness; + if (rotorIndex == 0) { expectedRadius = 12; thickness = 1.5; mainSweeps++; } + else if (rotorIndex == 1) { expectedRadius = 2.3; thickness = 0.75; tailSweeps++; } + else return Refuse("unknown rotor sweep index"); + // Stock thickness is protected with no getter. Scope to the exact prefab + // and verify its public sweep radius against the audited stock constants. + if (!(Math.AbsFloat(rotorZone.GetRotorRadius() - expectedRadius) < 0.001)) return Refuse("stock damage sweep radius changed"); + PointInfo point = rotorZone.GetPointInfo(); + if (!point) return Refuse("missing actual rotor sweep pivot"); + vector rotorWorld[4]; point.GetWorldTransform(rotorWorld); + // Frobenius norm bounds the transform's maximum stretch even with scale + // or shear; do not assume the PointInfo basis is orthonormal. + float scaleSquared = 0; + for (int basis = 0; basis < 3; basis++) scaleSquared += vector.Dot(rotorWorld[basis], rotorWorld[basis]); + float scale = Math.Sqrt(scaleSquared); + if (!(scale > 0 && scale < 4)) return Refuse("invalid damage sweep basis"); + float distance = vector.Distance(origin, rotorWorld[3]); + float sweepBound = ERR_AircraftFlightFootprintRules.CylinderSphere(distance, expectedRadius * scale, thickness * scale); + if (!(sweepBound > 0 && sweepBound < 1000)) return Refuse("invalid damage sweep extent"); + damageRadius = Math.Max(damageRadius, sweepBound); + PrintFormat("ERR AIRCRAFT FOOTPRINT ROTOR: index=%1 pivot=%2 damageRadius=%3 thickness=%4 scale=%5 sphereBound=%6", rotorIndex, rotorWorld[3], expectedRadius, thickness, scale, sweepBound); + } + } + IEntity child = entity.GetChildren(); + while (child) + { + if (entities.Count() >= MAX_ENTITIES || depths[index] >= MAX_DEPTH || entities.Contains(child)) return Refuse("entity/depth/cycle traversal bound"); + entities.Insert(child); depths.Insert(depths[index] + 1); + child = child.GetSibling(); + } + } + if (meshes == 0 || mainSweeps != 1 || tailSweeps != 1) return Refuse("complete model and both actual damage sweeps required"); + if (simulation.RotorCount() != 2) return Refuse("stock simulation rotor count changed"); + for (int rotor = 0; rotor < 2; rotor++) + { + vector localRotor[4]; simulation.RotorGetTransform(rotor, localRotor); + float physicalRadius = simulation.RotorGetRadius(rotor); + float physicalBound = localRotor[3].Length() + physicalRadius; + if (!(physicalRadius > 0 && physicalBound > 0 && physicalBound < 1000)) return Refuse("invalid native simulation rotor extent"); + simulationRadius = Math.Max(simulationRadius, physicalBound); + PrintFormat("ERR AIRCRAFT FOOTPRINT PHYSICS ROTOR: index=%1 localPivot=%2 radius=%3 sphereBound=%4", rotor, localRotor[3], physicalRadius, physicalBound); + } + radius = Math.Max(modelRadius, Math.Max(damageRadius, simulationRadius)); + float initialDrift = vector.DistanceXZ(origin, pad); + float initialHeight = origin[1] - pad[1]; + PrintFormat("ERR AIRCRAFT FOOTPRINT: entities=%1 meshes=%2 zones=%3 modelSphere=%4 damageSphere=%5 simulationSphere=%6 completeSphere=%7 initialDrift=%8 initialHeight=%9", entities.Count(), meshes, seenZones.Count(), modelRadius, damageRadius, simulationRadius, radius, initialDrift, initialHeight); + if (!ERR_AircraftFlightFootprintRules.Fits(radius, initialDrift, initialHeight)) return Refuse("measured footprint plus initial placement,8m drift and1m margin exceeds40m corridor or60m ceiling"); + return true; + } +} + + +// Issued only by physical qualification; fields have no public mutators. +// One claim binds this short-lived record to one original aircraft/pilot/order. +class ERR_AircraftFlightEnvelope +{ + protected ERR_GameMode m_Mode; + protected Vehicle m_Aircraft; + protected IEntity m_Pilot; + protected vector m_Home; + protected float m_Radius; + protected float m_QualifiedAt; + protected int m_Claim; + vector Home() { return m_Home; } + float Radius() { return m_Radius; } + bool ClaimedBy(Vehicle aircraft, IEntity pilot, int token) + { + return m_Claim > 0 && m_Claim == token && m_Aircraft == aircraft && m_Pilot == pilot; + } + bool Claim(ERR_GameMode mode, Vehicle aircraft, IEntity pilot, int token) + { + if (!GetGame() || !GetGame().GetWorld()) return false; + float now = GetGame().GetWorld().GetWorldTime(); + if (!Replication.IsServer() || !mode || mode != m_Mode || mode != ERR_GameMode.Get() || !mode.Active() || m_Claim != 0 || token <= 0) return false; + if (aircraft != m_Aircraft || pilot != m_Pilot || !aircraft || !pilot || now < m_QualifiedAt || now - m_QualifiedAt > 2000) return false; + if (vector.Distance(aircraft.GetOrigin(), m_Home) > 0.1) return false; + m_Claim = token; + return true; + } + protected static bool Hierarchy(IEntity root, array excluded) + { + if (!root) return false; + array pending = {root}; + array depths = {0}; + for (int i = 0; i < pending.Count(); i++) + { + IEntity entity = pending[i]; + if (!entity || excluded.Count() >= 512) return false; + if (!excluded.Contains(entity)) excluded.Insert(entity); + IEntity child = entity.GetChildren(); + while (child) + { + if (pending.Count() >= 256 || depths[i] >= 16 || pending.Contains(child)) return false; + pending.Insert(child); depths.Insert(depths[i] + 1); child = child.GetSibling(); + } + } + return true; + } + protected static bool ClearColumn(Vehicle aircraft, IEntity pilot, vector pad) + { + array excluded = {}; + if (!Hierarchy(aircraft, excluded) || !Hierarchy(pilot, excluded)) return false; + for (int edge = 0; edge < 4; edge++) + { + float side = edge * Math.PI / 2; + vector point = pad + Vector(Math.Cos(side) * 14, 0, Math.Sin(side) * 14); + if (!(Math.AbsFloat(SCR_TerrainHelper.GetTerrainY(point) - pad[1]) <= 0.8)) return false; + } + // Same four finite diagonal cylinder traces as the native fixture, with + // exclusions restricted to this already-existing aircraft and seated pilot. + array diagonals = {"40 2 0", "-40 2 0", "0 2 40", "0 2 -40"}; + foreach (vector diagonal : diagonals) + { + TraceParam trace = new TraceParam(); + trace.Start = pad + "0 2.5 0" + diagonal; + trace.End = pad + "0 2.5 0" - diagonal; + trace.Flags = TraceFlags.ENTS; trace.ExcludeArray = excluded; + if (!(aircraft.GetWorld().TraceMove(trace, null) >= 1)) return false; + } + TraceBox clearance = new TraceBox(); + clearance.Start = pad + "0 3 0"; clearance.End = pad + "0 60 0"; + clearance.Mins = "-40 -1 -40"; clearance.Maxs = "40 1 40"; + clearance.Flags = TraceFlags.ENTS | TraceFlags.WORLD; clearance.ExcludeArray = excluded; + return aircraft.GetWorld().TraceMove(clearance, null) >= 1; + } + static ERR_AircraftFlightEnvelope Qualify(ERR_GameMode mode, Vehicle aircraft, IEntity pilot) + { + if (!GetGame() || !GetGame().GetWorld() || !GetGame().GetPlayerManager()) return null; + if (!Replication.IsServer() || !mode || mode != ERR_GameMode.Get() || !mode.Active() || !aircraft || !pilot || ERR_Actors.Player(pilot)) return null; + if (CompartmentAccessComponent.GetVehicleIn(pilot) != aircraft || !ERR_Actors.Alive(aircraft) || !ERR_Actors.CanFight(pilot)) return null; + HelicopterControllerComponent controller = HelicopterControllerComponent.Cast(aircraft.FindComponent(HelicopterControllerComponent)); + if (!controller || controller.IsEngineOn() || !controller.GetSimulation() || !controller.GetSimulation().IsValid()) return null; + PilotCompartmentSlot seat = controller.GetPilotCompartmentSlot(); + if (!seat || seat.GetOccupant() != pilot) return null; + if (!ERR_CasualtyLoadingRules.AircraftReady(aircraft)) return null; + vector pad = ERR_Actors.Ground(aircraft.GetOrigin()); + if (!(pad[1] >= 2) || !ClearColumn(aircraft, pilot, pad)) return null; + vector origin; float radius; + if (!ERR_AircraftFlightFootprint.Measure(aircraft, controller.GetSimulation(), pad, origin, radius)) return null; + ERR_AircraftFlightEnvelope record = new ERR_AircraftFlightEnvelope(); + record.m_Mode = mode; record.m_Aircraft = aircraft; record.m_Pilot = pilot; + record.m_Home = origin; record.m_Radius = radius; + record.m_QualifiedAt = GetGame().GetWorld().GetWorldTime(); + return record; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQ.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQ.c new file mode 100644 index 0000000..2a0acd3 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQ.c @@ -0,0 +1,391 @@ +class ERR_HQUnit +{ + int Id; + SCR_AIGroup Group; + SCR_AIGroupUtilityComponent Utility; + IEntity Radio; + float NextReport; + ref ERR_HQRoute Uplink; + ref ERR_HQReport PendingReport; + ref ERR_HQRoute Downlink; + ref ERR_HQReport PendingOrder; + ref ERR_HQReport Assignment; + AIWaypoint Waypoint; + bool ReservedForSupport; + int LogisticsReservation; + ref ERR_MortarSupplyStatus PendingSupplyStatus; + + bool Eligible(ERR_GameMode mode) + { + if (ReservedForSupport || LogisticsReservation > 0 || !Group || !Utility || Group.GetPlayerCount(true) > 0 || Group.IsSlave() || Group.GetFaction() != mode.EnemyFaction()) return false; + array agents = {}; + Group.GetAgents(agents); + bool survivor; + foreach (AIAgent agent : agents) + { + if (!agent || !ERR_Actors.CanFight(agent.GetControlledEntity())) continue; + survivor = true; + if (CompartmentAccessComponent.GetVehicleIn(agent.GetControlledEntity())) return false; + } + return survivor; + } + + void Release() + { + if (Waypoint) + { + if (Group) Group.RemoveWaypoint(Waypoint); + SCR_EntityHelper.DeleteEntityAndChildren(Waypoint); + } + Waypoint = null; + Assignment = null; + PendingOrder = null; + Downlink = null; + } +} + +class ERR_HQ : ERR_CommandService +{ + protected ERR_GameMode m_Mode; + protected ref ERR_MortarSystem m_Mortars; + protected ref ERR_MortarLogistics m_Logistics; + protected ref array m_Units = {}; + protected ref array m_Contacts = {}; + protected ref ERR_HQNetwork m_Network = new ERR_HQNetwork(); + protected ref ERR_HQJournal m_Journal = new ERR_HQJournal(); + protected int m_NextId; + protected float m_NextNetwork; + protected float m_NextAssignment; + + void ERR_HQ(ERR_GameMode mode) { m_Mode = mode; m_Mortars = new ERR_MortarSystem(this); m_Logistics = new ERR_MortarLogistics(this, mode); } + static ERR_HQ Get() + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode) return null; + return ERR_HQ.Cast(mode.Command()); + } + static bool MissionActive() + { + ERR_GameMode mode = ERR_GameMode.Get(); + return mode && mode.Active(); + } + static void Event(string kind, string message, int messageId = 0) + { + ERR_HQ hq = Get(); + if (hq) hq.Journal().Write(kind, message, messageId); + } + ERR_MortarSystem Mortars() { return m_Mortars; } + bool PrepareSupport() { return m_Mortars.Prepare() && m_Logistics.Prepare(); } + ERR_MortarLogistics Logistics() { return m_Logistics; } + void ReserveGroup(SCR_AIGroup group) + { + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != group) continue; + unit.Release(); + unit.ReservedForSupport = true; + } + } + // Temporary reservations never alter the permanent support reservation. + int LogisticsToken(SCR_AIGroup group) + { + foreach (ERR_HQUnit unit : m_Units) if (unit.Group == group) return unit.LogisticsReservation; + return 0; + } + bool ReserveLogistics(SCR_AIGroup group, int token) + { + if (!Replication.IsServer() || token <= 0 || !MissionActive()) return false; + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != group || !unit.Eligible(m_Mode) || !unit.Radio || unit.Assignment || unit.PendingOrder || unit.Downlink || unit.Waypoint) continue; + if (unit.Utility.m_Perception && !unit.Utility.m_Perception.m_aTargets.IsEmpty()) continue; + unit.LogisticsReservation = token; + return true; + } + return false; + } + void ReleaseLogistics(SCR_AIGroup group, int token) + { + foreach (ERR_HQUnit unit : m_Units) + if (unit.Group == group && unit.LogisticsReservation == token) unit.LogisticsReservation = 0; + } + bool QueueSupplyStatus(ERR_MortarBattery battery, float now) + { + if (!Replication.IsServer() || !MissionActive() || !battery || !battery.StartupActivated || !battery.Operational() || !m_Logistics.CanSample(battery) || !ERR_MortarLogisticsRules.Need(battery.CountShells())) return false; + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != battery.Group || unit.Uplink || !unit.Radio || unit.Radio != battery.RadioOperator) continue; + ERR_HQRoute route = m_Network.Route(unit.Radio); + if (!route) return false; + ERR_MortarSupplyStatus report = new ERR_MortarSupplyStatus(); + report.Group = battery.Group; report.Gun = battery.Gun; report.Position = battery.Gun.GetOrigin(); + report.Shells = battery.CountShells(); report.ObservedAt = now; report.MessageId = m_Journal.Message(); + route.MessageId = report.MessageId; + route.Payload = string.Format("mortar supply status; usable HE=%1; position=%2; sampled=%3", report.Shells, report.Position, report.ObservedAt); + unit.PendingSupplyStatus = report; unit.Uplink = route; + m_Journal.Write("SUPPLY REPORT", route.Payload, route.MessageId); + return true; + } + return false; + } + void PhysicalForces(out array entities) + { + entities.Clear(); + foreach (ERR_HQUnit unit : m_Units) + { + if (!unit.Group) continue; + array agents = {}; + unit.Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + if (!agent || !agent.GetControlledEntity()) continue; + IEntity actor = agent.GetControlledEntity(); + if (!entities.Contains(actor)) entities.Insert(actor); + IEntity vehicle = CompartmentAccessComponent.GetVehicleIn(actor); + if (vehicle && !entities.Contains(vehicle)) entities.Insert(vehicle); + } + } + m_Mortars.AppendGuns(entities); + } + bool MortarConnected(SCR_AIGroup group) + { + foreach (ERR_HQUnit unit : m_Units) + if (unit.Group == group && unit.Radio) return m_Network.Route(unit.Radio) != null; + return false; + } + ERR_HQRoute Downlink(SCR_AIGroup group, string kind, string detail, int sourceId) + { + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != group || !unit.Radio) continue; + ERR_HQRoute route = m_Network.Route(unit.Radio, true); + if (!route) return null; + route.MessageId = m_Journal.Message(); + route.Payload = string.Format("%1 from report M%2; %3", kind, sourceId, detail); + m_Journal.Write("ORDER QUEUED", route.Payload, route.MessageId); + return route; + } + return null; + } + void SupportContacts(out array contacts, float now) + { + contacts.Clear(); + foreach (ERR_HQReport contact : m_Contacts) + if (ERR_MortarPrediction.Fresh(contact, now)) contacts.Insert(contact.Snapshot()); + } + + ERR_HQJournal Journal() { return m_Journal; } + string Status() + { + return string.Format("HQ: %1 groups, %2 delivered contacts, %3 assignments", m_Units.Count(), m_Contacts.Count(), Assigned()) + "; " + m_Mortars.Status() + "; " + m_Logistics.Status(); + } + + override void RegisterGroup(SCR_AIGroup group) + { + if (!Replication.IsServer() || !group || m_Units.Count() >= 128) return; + foreach (ERR_HQUnit known : m_Units) if (known.Group == group) return; + SCR_AIGroupUtilityComponent utility = SCR_AIGroupUtilityComponent.Cast(group.FindComponent(SCR_AIGroupUtilityComponent)); + if (!utility || group.GetFaction() != m_Mode.EnemyFaction()) return; + ERR_HQUnit unit = new ERR_HQUnit(); + unit.Id = ++m_NextId; + unit.Group = group; + unit.Utility = utility; + int phase = unit.Id % 5; + unit.NextReport = GetGame().GetWorld().GetWorldTime() + phase * 1000; + m_Units.Insert(unit); + m_Journal.Write("REGISTER", string.Format("group %1", unit.Id)); + } + + override void UnregisterGroup(SCR_AIGroup group) + { + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != group) continue; + unit.Release(); + unit.Group = null; + unit.Utility = null; + } + } + + protected int Assigned() + { + int total; + foreach (ERR_HQUnit unit : m_Units) if (unit.Assignment || unit.PendingOrder) total++; + return total; + } + + protected void IndexRadios() + { + m_Network.Clear(); + foreach (ERR_HQUnit unit : m_Units) + { + unit.Radio = null; + if (!unit.Group || unit.Group.GetPlayerCount(true) > 0 || unit.Group.GetFaction() != m_Mode.EnemyFaction()) continue; + array agents = {}; + unit.Group.GetAgents(agents); + int best; + foreach (AIAgent agent : agents) + { + if (!agent) continue; + IEntity actor = agent.GetControlledEntity(); + int capability = ERR_HQRadio.Capability(actor); + if (capability <= 0) continue; + m_Network.Add(actor, unit.Group, unit.Id, capability); + if (capability > best) { unit.Radio = actor; best = capability; } + } + } + m_Network.Build(); + } + + protected void Observe(ERR_HQUnit unit, float now) + { + if (!unit.Utility || !unit.Radio || unit.Uplink || now < unit.NextReport) return; + unit.NextReport = now + m_Mode.Settings().Get("reportIntervalSeconds") * 1000; + array samples = {}; + ERR_HQObservation.Gather(unit.Utility, now, samples); + if (samples.IsEmpty()) return; + ERR_HQVisualContact seen = samples[0]; + ERR_HQRoute route = m_Network.Route(unit.Radio); + if (!route) return; + ERR_HQReport report = new ERR_HQReport(); + report.MessageId = m_Journal.Message(); + report.Target = seen.Entity; + report.Source = unit.Group; + report.Position = seen.Position; + report.ObservedAt = seen.ObservedAt; + ERR_HQObservation.Describe(report, samples, now); + route.MessageId = report.MessageId; + route.Payload = report.Description(now); + unit.PendingReport = report; + unit.Uplink = route; + m_Journal.Write("REPORT", route.Payload, report.MessageId); + } + + protected void Accept(ERR_HQReport report, float now) + { + if (!report || !ERR_MissionRules.ContactFresh(report.ObservedAt, now)) return; + for (int i = 0; i < m_Contacts.Count(); i++) + { + ERR_HQReport previous = m_Contacts[i]; + if (previous.Target != report.Target) continue; + if (previous.ObservedAt >= report.ObservedAt) return; + float seconds = (report.ObservedAt - previous.ObservedAt) / 1000; + if (seconds > 0 && seconds < 30 && vector.DistanceXZ(previous.Position, report.Position) < 500) + { + report.Velocity = (report.Position - previous.Position) / seconds; + report.HasVelocity = report.Velocity.Length() <= 100; + } + m_Contacts[i] = report.Snapshot(); + return; + } + if (m_Contacts.Count() >= 64) m_Contacts.Remove(0); + m_Contacts.Insert(report.Snapshot()); + } + + protected void DeliverOrder(ERR_HQUnit unit, float now) + { + ERR_HQReport order = unit.PendingOrder; + if (!order || !ERR_MissionRules.ContactFresh(order.ObservedAt, now) || !unit.Eligible(m_Mode)) { unit.Release(); return; } + SCR_AIGroupPerception perception = unit.Utility.m_Perception; + if (perception && !perception.m_aTargets.IsEmpty()) { unit.Release(); return; } + int deliveryId; + if (unit.Downlink) deliveryId = unit.Downlink.MessageId; + unit.Release(); + vector position = order.Position; + if (order.HasVelocity) position = ERR_HQReport.Predict(position, order.Velocity, (now - order.ObservedAt) / 1000); + AIWaypoint waypoint = AIWaypoint.Cast(ERR_Actors.Spawn(ERR_Resources.SearchWaypoint(), ERR_Actors.Ground(position))); + if (!waypoint) { m_Journal.Write("ORDER FAILED", "waypoint spawn failed", order.MessageId); return; } + unit.Waypoint = waypoint; + unit.Assignment = order; + unit.Group.AddWaypointAt(waypoint, 0); + m_Journal.Write("ORDER DELIVERED", string.Format("group %1 from report M%2: %3", unit.Id, order.MessageId, order.Description(now)), deliveryId); + } + + protected void Assign(float now) + { + int limit = m_Mode.Settings().Get("supportSquadLimit"); + int radius = m_Mode.Settings().Get("responseRadiusMetres"); + int assigned = Assigned(); + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Assignment && (!ERR_MissionRules.ContactFresh(unit.Assignment.ObservedAt, now) || !unit.Eligible(m_Mode) || assigned > limit)) + { + unit.Release(); assigned--; + } + if (unit.PendingOrder && (!ERR_MissionRules.ContactFresh(unit.PendingOrder.ObservedAt, now) || !unit.Eligible(m_Mode) || assigned > limit)) + { + unit.Release(); assigned--; + } + } + foreach (ERR_HQReport report : m_Contacts) + { + if (!ERR_MissionRules.ContactFresh(report.ObservedAt, now)) continue; + foreach (ERR_HQUnit unit : m_Units) + { + if (assigned >= limit) return; + if (unit.Assignment || unit.PendingOrder || !unit.Eligible(m_Mode) || !unit.Radio) continue; + if (vector.DistanceXZ(unit.Group.GetOrigin(), report.Position) > radius) continue; + SCR_AIGroupPerception perception = unit.Utility.m_Perception; + if (perception && !perception.m_aTargets.IsEmpty()) continue; + ERR_HQRoute route = m_Network.Route(unit.Radio, true); + if (!route) continue; + unit.PendingOrder = report.Snapshot(); + unit.Downlink = route; + route.MessageId = m_Journal.Message(); + route.Payload = "order from report M" + report.MessageId.ToString(); + assigned++; + } + } + } + + override void Tick(float now) + { + if (!Replication.IsServer()) return; + if (now >= m_NextNetwork) { IndexRadios(); m_NextNetwork = now + 5000; } + for (int i = m_Contacts.Count() - 1; i >= 0; i--) + if (!ERR_MissionRules.ContactFresh(m_Contacts[i].ObservedAt, now)) m_Contacts.Remove(i); + for (int i = m_Units.Count() - 1; i >= 0; i--) + { + ERR_HQUnit unit = m_Units[i]; + if (unit.Uplink) + { + int delivered = unit.Uplink.Advance(now, m_Journal); + if (delivered == 1) + { + if (unit.PendingSupplyStatus) m_Logistics.Receive(unit.PendingSupplyStatus, now); + else Accept(unit.PendingReport, now); + } + if (delivered != 0) { unit.Uplink = null; unit.PendingReport = null; unit.PendingSupplyStatus = null; } + } + if (unit.Downlink) + { + int delivered = unit.Downlink.Advance(now, m_Journal); + if (delivered == 1) DeliverOrder(unit, now); + else if (delivered < 0) unit.Release(); + } + if (!unit.Group && !unit.Uplink) { unit.Release(); m_Units.Remove(i); continue; } + Observe(unit, now); + } + if (now >= m_NextAssignment) { Assign(now); m_NextAssignment = now + 5000; } + m_Logistics.Tick(now); + m_Mortars.Tick(now); + m_Journal.Flush(); + } + + override void Stop() + { + m_Logistics.Stop(); + m_Mortars.Stop(); + foreach (ERR_HQUnit unit : m_Units) unit.Release(); + m_Units.Clear(); + m_Contacts.Clear(); + m_Network.Clear(); + m_Journal.Write("STOP", "HQ stopped; tactical orders released"); + m_Journal.Flush(); + } +} + +modded class ERR_GameMode +{ + protected override ERR_CommandService CreateCommandService() { return new ERR_HQ(this); } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQJournal.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQJournal.c new file mode 100644 index 0000000..84e46a8 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQJournal.c @@ -0,0 +1,101 @@ +// Server-owned audit stream. The file contains every event; chat reads a bounded +// recent-history window with explicit gap notices for clients that fall behind. +class ERR_HQJournal +{ + protected ref array m_Recent = {}; + protected ref array m_Pending = {}; + protected int m_Sequence; + protected int m_Message; + protected static int s_Part; + protected static int s_Session; + protected string m_Session; + + void ERR_HQJournal() + { + s_Session++; + m_Session = string.Format("%1-%2", System.GetUnixTime(), s_Session); + } + protected float m_RetryAt; + protected int m_Lost; + + string Path() + { + if (s_Part == 0) + return "$logs:rereintroduced-hq.log"; + return "$logs:rereintroduced-hq-" + s_Part.ToString() + ".log"; + } + + int Message() + { + return ++m_Message; + } + + int Sequence() + { + return m_Sequence; + } + + void Write(string kind, string message, int messageId = 0) + { + if (!Replication.IsServer()) + return; + float seconds = GetGame().GetWorld().GetWorldTime() / 1000; + string line = string.Format("#%1 t=%2s M%3 %4 %5", ++m_Sequence, Math.Round(seconds * 10) / 10.0, messageId, kind, message) + " [session=" + m_Session + "]"; + if (m_Recent.Count() >= 300) + m_Recent.Remove(0); + m_Recent.Insert(line); + if (m_Pending.Count() < 4096) + m_Pending.Insert(line); + else + m_Lost++; + } + + void Read(int after, out array lines, out int cursor, int limit = 8) + { + lines.Clear(); + cursor = Math.Clamp(after, 0, m_Sequence); + int first = m_Sequence - m_Recent.Count(); + if (cursor < first) + { + lines.Insert(string.Format("HQ log: %1 older entries are outside chat history; see %2", first - cursor, Path())); + cursor = first; + } + int characters; + for (int i = cursor - first; i < m_Recent.Count() && lines.Count() < Math.Clamp(limit, 1, 40); i++) + { + // Bound each menu RPC without skipping unread records. Chat still + // requests eight; the live menu can drain a busy journal faster. + if (characters + m_Recent[i].Length() > 16000 && !lines.IsEmpty()) + break; + lines.Insert(m_Recent[i]); + characters += m_Recent[i].Length(); + cursor++; + } + } + + void Flush() + { + if (m_Pending.IsEmpty() || !Replication.IsServer()) + return; + float now = GetGame().GetWorld().GetWorldTime(); + if (now < m_RetryAt) + return; + FileHandle file = FileIO.OpenFile(Path(), FileMode.APPEND); + if (!file) + { + m_RetryAt = now + 30000; + PrintFormat("Escapists AI [HQ log]: cannot open %1; retry in 30s, chat history remains available", Path(), level: LogLevel.ERROR); + return; + } + foreach (string line : m_Pending) + file.WriteLine(line); + if (m_Lost > 0) + file.WriteLine(string.Format("HQ log: %1 entries lost while file was unavailable and buffer full", m_Lost)); + bool rotate = file.GetLength() >= 5242880; + file.Close(); + m_Pending.Clear(); + m_Lost = 0; + if (rotate) + s_Part++; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c new file mode 100644 index 0000000..b783100 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c @@ -0,0 +1,241 @@ +// Radio propagation is simulated using actual living carriers and inventory. +// A manpack is the HQ uplink; short-range hops are limited to 500 m and three +// retransmissions. No virtual relay is fabricated when the network is broken. +class ERR_HQRadioNode +{ + IEntity Carrier; + SCR_AIGroup Group; + int UnitId; + int Capability; + protected float m_CheckedAt = -1; + protected int m_LiveCapability; + + bool Valid(bool manpack = false) + { + ERR_GameMode factions = ERR_GameMode.Get(); + if (!Carrier || !Group || Group.GetPlayerCount(true) > 0 || !factions || Group.GetFaction() != factions.EnemyFaction() || ERR_Actors.Group(Carrier) != Group) + return false; + int required = 1; + if (manpack) + required = 2; + float now = GetGame().GetWorld().GetWorldTime(); + if (m_CheckedAt < 0 || now < m_CheckedAt || now - m_CheckedAt >= 1000) + { + m_CheckedAt = now; + m_LiveCapability = ERR_HQRadio.Capability(Carrier); + } + return m_LiveCapability >= required; + } + + string Label() + { + return "unit " + UnitId.ToString(); + } +} + +class ERR_HQRoute +{ + ref array Nodes = {}; + bool Downlink; + int Cursor; + bool Sending; + float Due; + vector SentFrom; + float StartedAt = -1; + int MessageId; + string Payload; + bool Failed; + + // -1 failed, 0 travelling, 1 delivered. Each hop really gates delivery. + int Advance(float now, ERR_HQJournal journal) + { + if (Failed) + return -1; + if (StartedAt < 0) + { + StartedAt = now; + if (Downlink) + Cursor = -1; // first leg is HQ to the manpack + } + if (now - StartedAt > 30000) + return Fail(journal, "route timed out"); + int target = Cursor + 1; + if (Sending) + { + if (now < Due) + return 0; + if (target < Nodes.Count()) + { + if (!Nodes[target].Valid(Downlink && target == 0)) + return Fail(journal, "receiving carrier lost radio, died or changed ownership"); + if (Cursor >= 0 && vector.DistanceXZ(SentFrom, Nodes[target].Carrier.GetOrigin()) > 500) + return Fail(journal, "receiver moved beyond the 500m link"); + journal.Write("RECEIVE", Nodes[target].Label() + " received from " + SenderLabel(), MessageId); + } + else + journal.Write("RECEIVE", "HQ received from " + SenderLabel(), MessageId); + Cursor++; + Sending = false; + if ((!Downlink && Cursor >= Nodes.Count()) || (Downlink && Cursor == Nodes.Count() - 1)) + return 1; + target = Cursor + 1; + } + if (Nodes.IsEmpty()) + return Fail(journal, "no physical radio route"); + if (Cursor >= 0 && !Nodes[Cursor].Valid(!Downlink && Cursor == Nodes.Count() - 1)) + return Fail(journal, "transmitting carrier lost radio, died or changed ownership"); + string recipient = "HQ"; + string link = "long-range"; + if (target < Nodes.Count()) + { + if (!Nodes[target].Valid(Downlink && target == 0)) + return Fail(journal, "next relay unavailable"); + recipient = Nodes[target].Label(); + if (Cursor >= 0) + { + SentFrom = Nodes[Cursor].Carrier.GetOrigin(); + float distance = vector.DistanceXZ(SentFrom, Nodes[target].Carrier.GetOrigin()); + if (distance > 500) + return Fail(journal, "next relay beyond 500m"); + link = Math.Round(distance).ToString() + "m short-range"; + } + } + journal.Write("TRANSMIT", SenderLabel() + " -> " + recipient + " (" + link + ")", MessageId); + Sending = true; + Due = now + 2000; + return 0; + } + + protected string SenderLabel() + { + if (Cursor < 0) + return "HQ"; + return Nodes[Cursor].Label(); + } + + protected int Fail(ERR_HQJournal journal, string reason) + { + Failed = true; + journal.Write("LOST", reason + "; " + Payload, MessageId); + return -1; + } +} + +class ERR_HQNetwork +{ + protected ref array m_Nodes = {}; + protected ref array m_Parents = {}; + protected ref array m_Depths = {}; + protected ref map m_Indices = new map(); + protected ref map> m_Cells = new map>(); + bool Overflow; + + void Clear() + { + m_Nodes.Clear(); + m_Parents.Clear(); + m_Depths.Clear(); + m_Indices.Clear(); + m_Cells.Clear(); + Overflow = false; + } + + protected string Cell(int x, int z) + { + return string.Format("%1:%2", x, z); + } + + void Add(IEntity carrier, SCR_AIGroup group, int unitId, int capability) + { + if (m_Indices.Contains(carrier)) + return; + if (m_Nodes.Count() >= 2048) + { + Overflow = true; + return; + } + ERR_HQRadioNode node = new ERR_HQRadioNode(); + node.Carrier = carrier; + node.Group = group; + node.UnitId = unitId; + node.Capability = capability; + int index = m_Nodes.Count(); + m_Nodes.Insert(node); + m_Indices.Insert(carrier, index); + m_Parents.Insert(-2); + m_Depths.Insert(99); + vector position = carrier.GetOrigin(); + string key = Cell(Math.Floor(position[0] / 500), Math.Floor(position[2] / 500)); + array cell = m_Cells.Get(key); + if (!cell) + { + cell = {}; + m_Cells.Insert(key, cell); + } + cell.Insert(index); + } + + void Build() + { + array queue = {}; + int checks; + for (int root = 0; root < m_Nodes.Count(); root++) + { + if (m_Nodes[root].Capability == 2) + { + m_Parents[root] = -1; + m_Depths[root] = 0; + queue.Insert(root); + } + } + for (int head = 0; head < queue.Count(); head++) + { + int from = queue[head]; + if (m_Depths[from] >= 3) + continue; + vector position = m_Nodes[from].Carrier.GetOrigin(); + int x = Math.Floor(position[0] / 500); + int z = Math.Floor(position[2] / 500); + for (int dx = -1; dx <= 1; dx++) + { + for (int dz = -1; dz <= 1; dz++) + { + array neighbors = m_Cells.Get(Cell(x + dx, z + dz)); + if (!neighbors) + continue; + foreach (int candidate : neighbors) + { + if (++checks > 100000) + { + Overflow = true; + return; + } + if (m_Parents[candidate] != -2 || vector.DistanceXZ(position, m_Nodes[candidate].Carrier.GetOrigin()) > 500) + continue; + m_Parents[candidate] = from; + m_Depths[candidate] = m_Depths[from] + 1; + queue.Insert(candidate); + } + } + } + } + } + + ERR_HQRoute Route(IEntity caller, bool downlink = false) + { + int index; + if (!m_Indices.Find(caller, index) || m_Parents[index] == -2) + return null; + ERR_HQRoute route = new ERR_HQRoute(); + route.Downlink = downlink; + while (index >= 0) + { + if (downlink) + route.Nodes.InsertAt(m_Nodes[index], 0); + else + route.Nodes.Insert(m_Nodes[index]); + index = m_Parents[index]; + } + return route; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQObservation.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQObservation.c new file mode 100644 index 0000000..814c515 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQObservation.c @@ -0,0 +1,199 @@ +// These samples exist only at intake. HQ never revisits their entity loadouts. +class ERR_HQVisualContact +{ + IEntity Entity; + vector Position; + float ObservedAt; + bool Escapist; + string Travel = "unknown"; + string Weapon = "unknown"; +} + +class ERR_HQObservation +{ + // Require current native line of sight before reading visible equipment. + static bool IsClearSighting(float age, float traceFraction, float exposure) + { + return age >= 0 && age <= 0.5 && traceFraction >= 1 && exposure > 0; + } + + static bool CanIdentifyWeapon(float distance, float exposure) + { + return distance >= 0 && distance <= 150 && exposure >= 0.5; + } + + static string WeaponCategory(EWeaponType type) + { + switch (type) + { + case EWeaponType.WT_HANDGUN: return "pistol"; + case EWeaponType.WT_RIFLE: return "rifle"; + case EWeaponType.WT_SNIPERRIFLE: return "sniper rifle"; + case EWeaponType.WT_MACHINEGUN: return "machine gun"; + case EWeaponType.WT_ROCKETLAUNCHER: return "rocket launcher"; + case EWeaponType.WT_GRENADELAUNCHER: return "grenade launcher"; + case EWeaponType.WT_FRAGGRENADE: return "grenade"; + case EWeaponType.WT_SMOKEGRENADE: return "smoke grenade"; + } + return "unidentified weapon"; + } + + static ERR_HQVisualContact Capture(BaseTarget target, float now) + { + if (!target || target.GetTargetCategory() != ETargetCategory.ENEMY || !IsClearSighting(target.GetTimeSinceSeen(), target.GetTraceFraction(), target.GetExposure())) + return null; + DamageManagerComponent damage = target.GetDamageManagerComponent(); + if (damage && damage.IsDestroyed()) + return null; + IEntity entity = target.GetTargetEntity(); + if (!entity) + return null; + ERR_HQVisualContact seen = new ERR_HQVisualContact(); + seen.Entity = entity; + seen.Position = target.GetLastSeenPosition(); + seen.ObservedAt = now - target.GetTimeSinceSeen() * 1000; + SCR_ChimeraCharacter character = SCR_ChimeraCharacter.Cast(entity); + if (character) + { + if (GetGame().GetPlayerManager()) + seen.Escapist = GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(entity) > 0; + seen.Travel = "on foot"; + if (CompartmentAccessComponent.GetVehicleIn(entity)) + seen.Travel = "in vehicle"; + // Read only the drawn weapon; never enumerate weapons or inventory. + if (CanIdentifyWeapon(target.GetDistance(), target.GetExposure())) + { + CharacterControllerComponent controller = CharacterControllerComponent.Cast(entity.FindComponent(CharacterControllerComponent)); + if (controller) + { + IEntity heldItem = controller.GetCurrentItemInHands(); + BaseWeaponComponent weapon; + if (heldItem) + weapon = BaseWeaponComponent.Cast(heldItem.FindComponent(BaseWeaponComponent)); + seen.Weapon = "none drawn"; + if (weapon) + seen.Weapon = WeaponCategory(weapon.GetWeaponType()); + } + } + } + else if (Vehicle.Cast(entity)) + { + seen.Travel = "vehicle"; + if (target.GetUnitType() == EAIUnitType.UnitType_Aircraft) + seen.Travel = "aircraft"; + } + return seen; + } + + static void Gather(SCR_AIGroupUtilityComponent utility, float now, out array samples) + { + samples.Clear(); + if (!utility) + return; + array visible = {}; + utility.ERR_HQGetVisualTargets(visible); + foreach (BaseTarget target : visible) + { + ERR_HQVisualContact seen = Capture(target, now); + if (!seen) + continue; + ERR_HQVisualContact existing; + foreach (ERR_HQVisualContact sample : samples) + { + if (sample.Entity == seen.Entity) + { + existing = sample; + break; + } + } + if (!existing) + { + if (samples.Count() < 64) + samples.Insert(seen); + } + else if (seen.ObservedAt > existing.ObservedAt || (seen.ObservedAt == existing.ObservedAt && existing.Weapon == "unknown" && seen.Weapon != "unknown")) + { + existing.Position = seen.Position; + existing.ObservedAt = seen.ObservedAt; + existing.Travel = seen.Travel; + existing.Weapon = seen.Weapon; + } + } + } + + static void Describe(ERR_HQReport report, array samples, float now) + { + // New observations must not silently inherit old equipment/travel details. + report.SeenEscapists = -1; + report.TravelMode = "unknown"; + report.SeenWeapons = "unknown"; + report.DetailsObservedAt = -1; + if (report.Distress) + return; + ERR_HQVisualContact anchor; + foreach (ERR_HQVisualContact sample : samples) + { + if (sample.Entity == report.Target && now - sample.ObservedAt >= 0 && now - sample.ObservedAt <= 500) + { + anchor = sample; + break; + } + } + if (!anchor) + return; + report.DetailsObservedAt = anchor.ObservedAt; + report.TravelMode = anchor.Travel; + report.SeenWeapons = anchor.Weapon; + array counted = {}; + array weapons = {}; + string travel; + foreach (ERR_HQVisualContact sighting : samples) + { + if (!sighting.Escapist || !sighting.Entity || counted.Contains(sighting.Entity) || now - sighting.ObservedAt < 0 || now - sighting.ObservedAt > 500 || vector.DistanceXZ(anchor.Position, sighting.Position) > 100) + continue; + counted.Insert(sighting.Entity); + if (travel.IsEmpty()) + travel = sighting.Travel; + else if (travel != sighting.Travel) + travel = "mixed travel"; + if (sighting.Weapon != "unknown" && !weapons.Contains(sighting.Weapon) && weapons.Count() < 4) + weapons.Insert(sighting.Weapon); + } + if (counted.IsEmpty()) + return; // A visible vehicle does not reveal its hidden occupants. + report.SeenEscapists = counted.Count(); + // A vehicle anchor remains a vehicle report, even with people near it. + if (anchor.Escapist) + report.TravelMode = travel; + report.SeenWeapons = "unknown"; + if (!weapons.IsEmpty()) + { + report.SeenWeapons = weapons[0]; + for (int i = 1; i < weapons.Count(); i++) + report.SeenWeapons += ", " + weapons[i]; + } + } +} + +modded class SCR_AIGroupUtilityComponent +{ + void ERR_HQGetVisualTargets(out array targets) + { + targets.Clear(); + foreach (SCR_AIInfoComponent info : m_aInfoComponents) + { + if (!info || !info.m_Perception) + continue; + AIAgent observer = AIAgent.Cast(info.GetOwner()); + if (!observer || !ERR_Actors.CanFight(observer.GetControlledEntity())) + continue; + array own = {}; + info.m_Perception.GetTargetsList(own, ETargetCategory.ENEMY); + foreach (BaseTarget target : own) + { + if (target && ERR_HQObservation.IsClearSighting(target.GetTimeSinceSeen(), target.GetTraceFraction(), target.GetExposure())) + targets.Insert(target); + } + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQReport.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQReport.c new file mode 100644 index 0000000..314f4a3 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HQReport.c @@ -0,0 +1,144 @@ +// A radio's category is protected in the stock gadget component. +modded class SCR_RadioComponent +{ + bool ERR_IsHQManpack() + { + return m_iRadioCategory == ERadioCategory.MANPACK; + } +} + +class ERR_HQRadio +{ + // 0: no radio, 1: basic radio, 2: manpack. Inventory is checked live. + static int Capability(IEntity character) + { + if (!ERR_Actors.CanFight(character)) + return 0; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(character.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) + return 0; + array items = {}; + inventory.GetItems(items); + int result; + foreach (IEntity item : items) + { + if (!item || !item.FindComponent(BaseRadioComponent)) + continue; + result = 1; + SCR_RadioComponent gadget = SCR_RadioComponent.Cast(item.FindComponent(SCR_RadioComponent)); + if (gadget && gadget.ERR_IsHQManpack()) + return 2; + } + return result; + } +} + +// HQ uses entity identity only for matching observations, never for its origin. +// Visible details are captured at intake and copied as scalar snapshots. +// Reports and orders contain immutable observed coordinates and timestamps. +class ERR_HQReport +{ + int MessageId; + IEntity Target; + SCR_AIGroup Source; + vector Position; + vector Velocity; + float ObservedAt = -1; + float LastSent = -60000; + float PerceptionStamp = -1; + bool HasVelocity; + bool Engaged; + bool Distress; + int SeenEscapists = -1; + string TravelMode = "unknown"; + string SeenWeapons = "unknown"; + float DetailsObservedAt = -1; + + ERR_HQReport Snapshot() + { + ERR_HQReport copy = new ERR_HQReport(); + copy.MessageId = MessageId; + copy.Target = Target; + copy.Source = Source; + copy.Position = Position; + copy.Velocity = Velocity; + copy.ObservedAt = ObservedAt; + copy.Engaged = Engaged; + copy.Distress = Distress; + copy.HasVelocity = HasVelocity; + copy.SeenEscapists = SeenEscapists; + copy.TravelMode = TravelMode; + copy.SeenWeapons = SeenWeapons; + copy.DetailsObservedAt = DetailsObservedAt; + return copy; + } + + string TravelDirection() + { + if (!HasVelocity) + return "unknown"; + if (Velocity.Length() < 0.5) + return "stationary"; + float x = Math.AbsFloat(Velocity[0]); + float z = Math.AbsFloat(Velocity[2]); + string northSouth = "N"; + string eastWest = "E"; + if (Velocity[2] < 0) + northSouth = "S"; + if (Velocity[0] < 0) + eastWest = "W"; + if (x < z * 0.414214) + return northSouth; + if (z < x * 0.414214) + return eastWest; + return northSouth + eastWest; + } + + string Description(float now, bool brief = false) + { + if (Distress) + return string.Format("Distress at friendly X=%1 Z=%2; enemy details unknown (%3s ago)", Math.Round(Position[0]), Math.Round(Position[2]), Math.Round(Math.Max(0, now - ObservedAt) / 1000)); + string count = "count unknown"; + if (SeenEscapists >= 0) + count = "at least " + SeenEscapists.ToString() + " spotted nearby"; + string motion = "speed/direction unknown"; + if (HasVelocity) + { + float speed = Math.Round(Velocity.Length() * 10) / 10.0; + float azimuth = Math.Atan2(Velocity[0], Velocity[2]) * Math.RAD2DEG; + if (azimuth < 0) + azimuth += 360; + int heading = Math.Round(azimuth); + motion = string.Format("%1 km/h, azimuth %2 degrees (%3)", Math.Round(speed * 3.6), heading % 360, TravelDirection()); + } + string details = count + "; " + TravelMode + "; " + motion + "; seen weapons: " + SeenWeapons; + if (brief) + return details; + string velocity = "unknown"; + if (HasVelocity) + velocity = string.Format("[%1,%2] m/s", Math.Round(Velocity[0] * 10) / 10.0, Math.Round(Velocity[2] * 10) / 10.0); + return string.Format("X=%1 Z=%2: %3; vector X/Z=%4 (%5s ago)", Math.Round(Position[0]), Math.Round(Position[2]), details, velocity, Math.Round(Math.Max(0, now - ObservedAt) / 1000)); + } + + static vector Predict(vector position, vector velocity, float seconds) + { + vector offset = velocity * Math.Clamp(seconds, 0, 20); + offset[1] = 0; + if (offset.Length() > 300) + offset = offset.Normalized() * 300; + return position + offset; + } + + int Priority(float now) + { + if (Distress) + return 0; + if (now - ObservedAt <= 15000) + { + if (Engaged) + return 3; + return 2; + } + return 1; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c new file mode 100644 index 0000000..e808bd7 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c @@ -0,0 +1,31 @@ +// An idle rotor or zero speed alone is normal during takeoff, landing and reload. +// Confirm prolonged grounding, but recognize actual loss of flight capability. +class ERR_HelicopterAvailability +{ + protected float m_fGroundedSince = -1; + + string Check(float now, float spawnedAt, bool destroyed, bool disabled, bool livingPilot, bool playerControlled, bool servicing, float height, float speed) + { + if (destroyed) return "destroyed"; + if (now - spawnedAt < 20000) + { + m_fGroundedSince = -1; + return ""; + } + if (disabled) return "engine, rotor or airframe disabled"; + if (playerControlled) + { + m_fGroundedSince = -1; + return ""; + } + if (!livingPilot) return "no living pilot"; + if (servicing || height > 5 || speed > 2) + { + m_fGroundedSince = -1; + return ""; + } + if (m_fGroundedSince < 0) m_fGroundedSince = now; + if (now - m_fGroundedSince >= 60000) return "grounded for 60 seconds"; + return ""; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c new file mode 100644 index 0000000..ed47286 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c @@ -0,0 +1,32 @@ +// The stored geometry is the command actually emitted to the native aiming +// tree, never a chain of refreshed approximations. Entity/report/node links +// are weak; cancellation and physical projectile observation clear ownership. +class ERR_MortarAimSolution +{ + IEntity Gun; + // Last delivered observation proved equivalent to this original geometry. + ERR_HQReport Report; + int OrderId; + int Shot; + vector GunOrigin; + vector Impact; + vector AimTarget; + vector SalvoOffset; + int Charge; + float FlightTime; + + bool Matches(ERR_MortarBattery battery, ERR_HQReport report) + { + return battery && Gun && Gun == battery.Gun && Report && Report == report && OrderId == battery.OrderId && Shot == battery.OrderShots; + } +} + +class ERR_MortarAimRules +{ + // Three-dimensional tolerances include terrain/aim-height changes. These are + // equivalence limits, not permission to move the gun or redirect its barrel. + static bool Equivalent(int commandedCharge, int updatedCharge, vector commandedOrigin, vector updatedOrigin, vector commandedImpact, vector updatedImpact, vector commandedAim, vector updatedAim, float commandedFlight, float updatedFlight) + { + return commandedCharge >= 0 && commandedCharge == updatedCharge && commandedFlight > 0 && updatedFlight > 0 && vector.Distance(commandedOrigin, updatedOrigin) <= 0.05 && vector.Distance(commandedImpact, updatedImpact) <= 0.1 && vector.Distance(commandedAim, updatedAim) <= 0.1 && Math.AbsFloat(commandedFlight - updatedFlight) <= 0.05; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c new file mode 100644 index 0000000..f1a40f8 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c @@ -0,0 +1,557 @@ +// Migrated from the independently authored AI extension; successor-owned physical groups. +// Each site/phase has its own repeat limiter. Changed reasons and lifecycle +// events are immediate; only identical polling results are summarized. +class ERR_MortarTraceState +{ + string LastReason; + float NextLog; + int Suppressed; + + bool Due(string reason, float now) + { + if (reason != LastReason || now >= NextLog) + { + LastReason = reason; + NextLog = now + 30000; + return true; + } + Suppressed++; + return false; + } +} + +class ERR_MortarBattery +{ + static const ResourceName GUN = "{D1FFE458E8AC4BDB}Prefabs/Weapons/Mortars/2B14/Mortar_2B14.et"; + static const ResourceName SHELL = "{98EC9C526AFBA282}Prefabs/Weapons/Ammo/Ammo_Shell_82mm_HE_O832DU.et"; + static const ResourceName CREW = "{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et"; + static const ResourceName RADIO_OPERATOR = "{612F43A4D5AE765F}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_RTO.et"; + IEntity RadioOperator; + IEntity Gun; + SCR_AIGroup Group; + ref SCR_AIStaticArtilleryActivity Activity; + ref ERR_HQReport Report; + ref ERR_HQRoute RadioOrder; + ref ERR_HQReport PendingRadioReport; + ref ERR_HQReport PendingSupplyReport; + ref ERR_MortarRefresh Refresh; + bool RefreshRejected; // latched through an already committed projectile + protected ref ERR_MortarReadiness m_Readiness; + protected ref ERR_MortarSupplyTransfer m_Transfer; + protected ref array m_AttemptedShells = {}; + protected bool m_Stopped; + protected SCR_AIStaticArtilleryActivity m_ObservedActivity; + protected int m_ObservedActivityOrder; + protected EAIActionState m_ActivityTerminal = EAIActionState.EVALUATED; + protected ref ERR_MortarReportLedger m_ReportLedger = new ERR_MortarReportLedger(); + vector Position; + vector Impact; + vector AimOffset; + int AimedShot = -1; + float FlightTime; + float AimedAt = -1; + float AimValidatedAt = -1; + SCR_AIGetArtilleryAimDistanceCompensation AimSolver; + ref ERR_MortarAimSolution AimSolution; + float AirspaceUntil; + vector AirspaceImpact; + float AirspaceRadius = 600; + float OrderedAt; + float NextOrder; + float SpawnedAt; + bool StartupActivated; + bool Released; + bool Rejected; + bool Claimed; // keeps the world slot occupied after the battery is destroyed + int SiteId; + int OrderId; + int RadioId; + int SourceId; + int OrderShots; + int TotalShots; + bool CommandOpen; + string LastFailure; + string SpawnFailure; + vector LastCandidate; + ref map SearchCounts = new map(); + ref map Traces = new map(); + + void Audit(string kind, string detail) + { + ERR_HQ.Event("MORTAR " + kind, string.Format("site=%1 order=%2 radio=M%3 source=M%4 position=%5; %6", SiteId, OrderId, RadioId, SourceId, Position, detail), RadioId); + } + + void Trace(string phase, string reason, string detail) + { + ERR_MortarTraceState state; + if (!Traces.Find(phase, state)) + { + state = new ERR_MortarTraceState(); + Traces.Insert(phase, state); + } + string previous = state.LastReason; + if (!state.Due(reason, GetGame().GetWorld().GetWorldTime())) + return; + Audit(phase, string.Format("reason=%1; %2; previous=%3 repeated polls omitted=%4", reason, detail, previous, state.Suppressed)); + state.Suppressed = 0; + } + + void FlushTraces() + { + foreach (string phase, ERR_MortarTraceState state : Traces) + { + if (state.Suppressed > 0) + Audit("REPEATS", string.Format("phase=%1 reason=%2 repeated polls omitted=%3", phase, state.LastReason, state.Suppressed)); + } + Traces.Clear(); + } + + string OperationalReason() + { + if (m_Stopped) return "battery stopped"; + if (!Gun) return "gun missing"; + if (!SpawnFailure.IsEmpty()) return SpawnFailure; + if (!Group || !Group.GetGroupUtilityComponent()) return "crew group missing"; + if (Group.GetFaction() != ERR_GameMode.Get().EnemyFaction()) return "crew changed faction"; + if (Group.GetPlayerCount(true) > 0) return "player in crew group"; + if (Group.GetAgentsCount() == 0) return "crew group empty"; + DamageManagerComponent damage = DamageManagerComponent.Cast(Gun.FindComponent(DamageManagerComponent)); + if (damage && damage.IsDestroyed()) return "gun destroyed"; + return ""; + } + + bool CanRequest(ERR_HQReport report, float now) + { + return !m_Stopped && ERR_MortarPrediction.Fresh(report, now) && m_ReportLedger.Available(report.MessageId, report.ObservedAt, now); + } + bool BeginRequest(ERR_HQReport report, float now) + { + if (!CanRequest(report, now) || !m_ReportLedger.Claim(report.MessageId, report.ObservedAt, now)) return false; + Cancel("superseded by new HQ order"); + FlushTraces(); + OrderId++; + RadioId = 0; + SourceId = report.MessageId; + OrderShots = 0; + Released = false; + CommandOpen = true; + OrderedAt = now; + LastFailure = ""; + Audit("COMMAND", string.Format("requested rounds=%1 HE radius=%2m; %3", ERR_MortarSalvo.ROUNDS, ERR_MortarSalvo.RADIUS_METRES, report.Description(now))); + return true; + } + + bool CanRefresh(ERR_HQReport report, float now) + { + if (m_Stopped || !CommandOpen || !Activity || Refresh || RefreshRejected || Rejected || !Operational()) return false; + return ERR_MortarRefreshRules.Newer(Report, report, now) && m_ReportLedger.Available(report.MessageId, report.ObservedAt, now); + } + bool BeginRefresh(ERR_HQReport report, ERR_HQRoute route, float now) + { + if (!route || !CanRefresh(report, now) || !m_ReportLedger.Claim(report.MessageId, report.ObservedAt, now)) return false; + Refresh = new ERR_MortarRefresh(this, report, route); + Audit("UPDATE QUEUED", string.Format("same order; update radio=M%1 newer observation=M%2 observed=%3", route.MessageId, report.MessageId, report.ObservedAt)); + return true; + } + void RejectRefresh(string reason) + { + // Never clear the commit latch or steal the physical projectile callback. + // AllowShot refuses further loads now; HQ cancels after it is observed. + RefreshRejected = true; + Refresh = null; + LastFailure = reason; + Audit("UPDATE REJECTED", reason); + } + + void ObserveProjectile(IEntity projectileEntity, IEntity firingCharacter, bool playerGunner) + { + if (!projectileEntity) + { + Audit("FIRE CALLBACK", "native OnWeaponFired had no projectile; no confirmed shot counted"); + return; + } + TotalShots++; + if (CommandOpen && Released && !playerGunner) + { + OrderShots++; + // Only a physical projectile unlocks the next load. It must be aimed again. + Released = false; + AimedAt = -1; + AimValidatedAt = -1; + AimSolver = null; + AimSolution = null; + Audit("FIRED", string.Format("physical projectile=%1 origin=%2 order shots=%3 total shots=%4 predicted impact=%5 predicted flight=%6s gunner=%7 (impact not observed)", projectileEntity, projectileEntity.GetOrigin(), OrderShots, TotalShots, Impact, FlightTime, firingCharacter)); + } + else + Audit("FIRED UNASSIGNED", string.Format("physical projectile=%1 origin=%2 player gunner=%3 order open=%4 committed=%5 total shots=%6; no active HQ order attribution", projectileEntity, projectileEntity.GetOrigin(), playerGunner, CommandOpen, Released, TotalShots)); + } + + void ReserveShellAirspace(float now) + { + // Enclose every still-airborne shell, including an earlier, longer flight. + // A later round must not move/shrink the existing exclusion or deadline. + if (now >= AirspaceUntil) + { + AirspaceImpact = Impact; + AirspaceRadius = 600; + } + AirspaceRadius = Math.Max(AirspaceRadius, vector.DistanceXZ(AirspaceImpact, Impact) + 600); + AirspaceUntil = Math.Max(AirspaceUntil, now + (FlightTime + 10) * 1000); + } + + bool SpawnFailed(string reason) + { + SpawnFailure = reason; + Audit("DEPLOY FAILED", string.Format("reason=%1 claimed=%2 gun=%3 group=%4", reason, Claimed, Gun, Group)); + return false; + } + + void SearchResult(vector candidate, string reason) + { + LastCandidate = candidate; + int count; + SearchCounts.Find(reason, count); + SearchCounts.Set(reason, count + 1); + } + + void SiteStatus(float now) + { + if (!SearchCounts.IsEmpty()) + { + string counts; + foreach (string reason, int count : SearchCounts) counts += string.Format("%1=%2; ", reason, count); + Audit("SITE SEARCH", string.Format("candidate counts since last summary: %1 last candidate=%2", counts, LastCandidate)); + SearchCounts.Clear(); + } + int agents, living; + int actionState = -1; + if (Group) + { + array crew = {}; + Group.GetAgents(crew); + agents = crew.Count(); + foreach (AIAgent agent : crew) + { + if (agent && ERR_Actors.CanFight(agent.GetControlledEntity())) living++; + } + } + if (Activity) actionState = Activity.GetActionState(); + bool connected; + ERR_HQ hq = ERR_HQ.Get(); + if (hq && Group) connected = hq.MortarConnected(Group); + Audit("SITE STATUS", string.Format("claimed=%1 startup=%2 operational=%3 crew agents=%4 fighting=%5 inventory HE=%6 radio connected=%7 cooldown remaining=%8s", Claimed, StartupActivated, Operational(), agents, living, CountShells(), connected, Math.Max(0, NextOrder - now) / 1000)); + Audit("ORDER STATUS", string.Format("open=%1 route pending=%2 native action=%3 shell committed=%4 order shots=%5 total shots=%6 age=%7s last failure=%8", CommandOpen, RadioOrder != null, actionState, Released, OrderShots, TotalShots, Math.Max(0, now - OrderedAt) / 1000, LastFailure)); + if (!SpawnFailure.IsEmpty()) Audit("PARTIAL DEPLOYMENT", SpawnFailure); + if (!Operational()) Trace("SITE BLOCK", OperationalReason(), "spawn failure=" + SpawnFailure); + } + + bool Operational() + { + return OperationalReason().IsEmpty(); + } + + int CountShells() + { + if (!Group) + return 0; + int count; + array items = {}; + array agents = {}; + Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + if (!agent || !ERR_Actors.CanFight(agent.GetControlledEntity())) + continue; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(agent.GetControlledEntity().FindComponent(InventoryStorageManagerComponent)); + if (!inventory) + continue; + ERR_Inventory.AppendUnique(inventory, items); + } + foreach (IEntity item : items) + if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == SHELL) count++; + return count; + } + + void Bind(int siteId, SCR_AIGroup group, IEntity gun, float now) + { + SiteId = siteId; + Group = group; + Gun = gun; + Position = gun.GetOrigin(); + SpawnedAt = now; + Claimed = true; + m_Readiness = new ERR_MortarReadiness(this); + } + + + int InventoryShells(InventoryStorageManagerComponent inventory) + { + if (!inventory) + return 0; + int count; + array items = {}; + ERR_Inventory.Items(inventory, items); + foreach (IEntity item : items) + { + if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == SHELL) + count++; + } + return count; + } + + bool Stopped() { return m_Stopped; } + bool SupplyPending() { return m_Transfer && m_Transfer.Unresolved(); } + bool SupplyAuthorized(float now) + { + if (!Replication.IsServer() || m_Stopped || !StartupActivated || !Operational() || !CommandOpen || !ERR_HQ.MissionActive()) return false; + ERR_MortarSystem system = ERR_MortarSystem.Get(); + if (!system || system.FindGun(Gun) != this) return false; + ERR_HQReport suppliedReport = Report; + if (!suppliedReport) suppliedReport = PendingSupplyReport; + return ERR_MortarPrediction.Fresh(suppliedReport, now); + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + Cancel("HQ stopped"); + if (m_Readiness) m_Readiness.Stop(); + } + + ERR_MortarSupplyState SupplyState(float now) + { + // Observe an existing native operation even after its order was canceled. + // No second request may race an unresolved transfer on this battery. + if (m_Transfer) + { + ERR_MortarSupplyState observed = m_Transfer.Poll(now); + if (m_Transfer.CapturedOrder() == OrderId) + { + if (observed == ERR_MortarSupplyState.READY) m_Transfer = null; + return observed; + } + if (m_Transfer.Unresolved()) return ERR_MortarSupplyState.FAILED; + m_Transfer = null; + } + if (!SupplyAuthorized(now)) return SupplyStateFailed("current HQ order, crew or report is unavailable"); + SCR_AIVehicleUsageComponent usage = SCR_AIVehicleUsageComponent.Cast(Gun.FindComponent(SCR_AIVehicleUsageComponent)); + IEntity gunner; + if (usage && usage.GetTurretCompartmentSlot()) + gunner = usage.GetTurretCompartmentSlot().GetOccupant(); + array agents = {}; + Group.GetAgents(agents); + float nearest = float.MAX; + if (!gunner) + { + foreach (AIAgent candidate : agents) + { + if (!candidate || candidate.GetControlledEntity() == RadioOperator || !ERR_Actors.CanFight(candidate.GetControlledEntity())) + continue; + float distance = vector.DistanceXZ(Gun.GetOrigin(), candidate.GetControlledEntity().GetOrigin()); + if (distance < nearest) + { + nearest = distance; + gunner = candidate.GetControlledEntity(); + } + } + } + if (!gunner) return SupplyStateFailed("no fighting gunner found"); + if (ERR_Actors.Group(gunner) != Group) return SupplyStateFailed("turret occupant belongs to another group"); + if (!ERR_Actors.CanFight(gunner)) return SupplyStateFailed("gunner cannot fight"); + InventoryStorageManagerComponent destination = InventoryStorageManagerComponent.Cast(gunner.FindComponent(InventoryStorageManagerComponent)); + if (!destination) + return SupplyStateFailed("gunner inventory missing"); + if (InventoryShells(destination) > 0) + return ERR_MortarSupplyState.READY; + int nearbyDonors, donorShells, storageRejected; + array consideredShells = {}; + foreach (AIAgent bearer : agents) + { + if (!bearer || !ERR_Actors.CanFight(bearer.GetControlledEntity())) + continue; + IEntity donor = bearer.GetControlledEntity(); + if (donor == gunner || vector.DistanceXZ(donor.GetOrigin(), gunner.GetOrigin()) > 12) + continue; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(donor.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) + continue; + nearbyDonors++; + array items = {}; + ERR_Inventory.Items(inventory, items); + foreach (IEntity item : items) + { + if (!item || !item.GetPrefabData() || item.GetPrefabData().GetPrefabName() != SHELL) + continue; + if (consideredShells.Contains(item) || m_AttemptedShells.Contains(item)) continue; + consideredShells.Insert(item); + donorShells++; + BaseInventoryStorageComponent storage = destination.FindStorageForItem(item, EStoragePurpose.PURPOSE_DEPOSIT); + if (!storage) { storageRejected++; continue; } + m_AttemptedShells.Insert(item); // even rejected/ambiguous requests are never retried + m_Transfer = new ERR_MortarSupplyTransfer(this, donor, gunner, item, storage, now); + if (!m_Transfer.Begin(now)) return SupplyStateFailed("exact shell transfer request rejected; no retry"); + Audit("AMMO TRANSFER", string.Format("one exact-item move pending donor=%1 gunner=%2 shell=%3 order=%4; awaiting callback AND physical destination", donor, gunner, item, OrderId)); + return ERR_MortarSupplyState.PENDING; + } + } + return SupplyStateFailed(string.Format("gunner empty; fighting donors within 12m=%1 unattempted HE=%2 destination storage rejected=%3", nearbyDonors, donorShells, storageRejected)); + } + + // Compatibility for existing native callers; request acceptance is NOT ready. + bool SupplyGunner() { return SupplyState(GetGame().GetWorld().GetWorldTime()) == ERR_MortarSupplyState.READY; } + protected ERR_MortarSupplyState SupplyStateFailed(string reason) + { + SupplyFailed(reason); + return ERR_MortarSupplyState.FAILED; + } + + bool SupplyFailed(string reason) + { + LastFailure = reason; + Audit("AMMO FAILED", reason); + return false; + } + + protected void WatchActivity() + { + DetachActivity(); + if (!Activity || !CommandOpen || m_Stopped) return; + m_ObservedActivity = Activity; + m_ObservedActivityOrder = OrderId; + Activity.m_OnActionCompleted.Insert(OnActivityCompleted); + Activity.m_OnActionFailed.Insert(OnActivityFailed); + } + protected void DetachActivity() + { + if (m_ObservedActivity) + { + m_ObservedActivity.m_OnActionCompleted.Remove(OnActivityCompleted); + m_ObservedActivity.m_OnActionFailed.Remove(OnActivityFailed); + } + m_ObservedActivity = null; + m_ObservedActivityOrder = 0; + m_ActivityTerminal = EAIActionState.EVALUATED; + } + protected void OnActivityCompleted(SCR_AIActionBase action) + { + ObserveActivityTerminal(action, EAIActionState.COMPLETED); + } + protected void OnActivityFailed(SCR_AIActionBase action) + { + ObserveActivityTerminal(action, EAIActionState.FAILED); + } + protected void ObserveActivityTerminal(SCR_AIActionBase action, EAIActionState terminal) + { + if (m_Stopped || !CommandOpen || !Activity || action != Activity || action != m_ObservedActivity || OrderId != m_ObservedActivityOrder) return; + if (m_ActivityTerminal != EAIActionState.EVALUATED) return; + if (terminal != EAIActionState.COMPLETED && terminal != EAIActionState.FAILED) return; + // Vanilla deselection can overwrite COMPLETED/FAILED with EVALUATED + // before the next HQ tick. Record its actual event, never infer completion + // from projectile totals, and never cancel from inside the native callback. + m_ActivityTerminal = terminal; + Audit("ACTIVITY EVENT", string.Format("native terminal event=%1 current state=%2 captured order=%3 physical order shots=%4 total shots=%5 committed=%6", terminal, Activity.GetActionState(), m_ObservedActivityOrder, OrderShots, TotalShots, Released)); + } + protected EAIActionState ActivityTerminal() + { + if (Activity == m_ObservedActivity && OrderId == m_ObservedActivityOrder) + if (m_ActivityTerminal == EAIActionState.COMPLETED || m_ActivityTerminal == EAIActionState.FAILED) return m_ActivityTerminal; + return Activity.GetActionState(); + } + + void Cancel(string reason = "cancel requested") + { + if (CommandOpen) + { + FlushTraces(); + Audit("ORDER END", string.Format("reason=%1 observed shots=%2 shell committed=%3 elapsed=%4s last failure=%5", reason, OrderShots, Released, (GetGame().GetWorld().GetWorldTime() - OrderedAt) / 1000, LastFailure)); + } + CommandOpen = false; + // Remove before our own cleanup calls Complete; that is not a native + // successful fire mission and must not manufacture an observed event. + DetachActivity(); + RadioOrder = null; + PendingRadioReport = null; + PendingSupplyReport = null; + Refresh = null; + RefreshRejected = false; + if (m_Transfer) m_Transfer.Invalidate(); + Report = null; + AimedAt = -1; + AimValidatedAt = -1; + AimSolver = null; + AimSolution = null; + if (Activity) + Activity.Complete(); + Activity = null; + } + + // Idle distant batteries still report through HQ's scheduler. Their native + // AI needs full detail while firing or when players can interact with them. + protected void UpdateCrewDetail(float now, bool firing = false) + { + if (!Group || Group.GetPlayerCount(true) > 0) + return; + bool active = firing || Activity != null || ERR_MortarSystem.NearPlayer(Position); + int lod = -1; + if (active) + lod = 0; + if (Group.GetPermanentLOD() != lod) + Group.SetPermanentLOD(lod); + if (active && !Group.IsAIActivated()) + Group.ActivateAI(); + array agents = {}; + Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + if (!agent || EntityUtils.IsPlayer(agent.GetControlledEntity())) + continue; + if (agent.GetPermanentLOD() != lod) + agent.SetPermanentLOD(lod); + if (active && !agent.IsAIActivated() && ERR_Actors.CanFight(agent.GetControlledEntity())) + agent.ActivateAI(); + } + } + + void Update(float now) + { + if (m_Stopped) return; + if (!StartupActivated) + { + if (!SpawnFailure.IsEmpty()) return; + if (!m_Readiness) { SpawnFailed("initial support readiness owner missing"); return; } + ERR_MortarSupplyState startup = m_Readiness.Poll(now); + if (startup != ERR_MortarSupplyState.READY) return; + StartupActivated = true; + } + if (m_Transfer) m_Transfer.Poll(now); + if (!Operational()) + { + Cancel(OperationalReason()); + return; + } + if (Activity) + { + Trace("ACTIVITY", string.Format("native state=%1", Activity.GetActionState()), string.Format("age=%1s aim age=%2s committed=%3 shots=%4", (now - OrderedAt) / 1000, (now - AimedAt) / 1000, Released, OrderShots)); + EAIActionState terminal = ActivityTerminal(); + if (terminal == EAIActionState.FAILED) Cancel("native artillery activity FAILED"); + else if (terminal == EAIActionState.COMPLETED) Cancel("native artillery activity COMPLETED (shot count is separate)"); + else if (now - OrderedAt > ERR_MortarSalvo.TIMEOUT_MS) Cancel("120s artillery salvo timeout"); + } + if (StartupActivated) + UpdateCrewDetail(now); + } + + void Order(ERR_HQReport report, float now) + { + if (m_Stopped || !StartupActivated || !Operational() || !CommandOpen || Activity || !ERR_MortarPrediction.Fresh(report, now)) return; + Report = report.Snapshot(); + OrderedAt = now; + NextOrder = now + 30000; + Released = false; + UpdateCrewDetail(now, true); + Activity = new SCR_AIStaticArtilleryActivity(Group.GetGroupUtilityComponent(), null, report.Position, SCR_EAIArtilleryAmmoType.HIGH_EXPLOSIVE, ERR_MortarSalvo.ROUNDS); + WatchActivity(); + Group.GetGroupUtilityComponent().AddAction(Activity); + Audit("AIM", string.Format("native activity created; latest source=M%1 observed=%2", report.MessageId, report.Description(now))); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c new file mode 100644 index 0000000..a225a87 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarCourierTransfer.c @@ -0,0 +1,68 @@ +class ERR_MortarCourierCallback : ScriptedInventoryOperationCallback +{ + ERR_MortarCourierTransfer Transfer; + protected override void OnComplete() { if (Transfer) Transfer.Acknowledge(true); } + protected override void OnFailed() { if (Transfer) Transfer.Acknowledge(false); } +} +// One exact native move belonging to one courier trip. Never retries ambiguous work. +class ERR_MortarCourierTransfer +{ + protected ERR_MortarLogistics m_Service; + protected IEntity m_Shell; + protected IEntity m_From; + protected IEntity m_To; + protected InventoryStorageManagerComponent m_Source; + protected InventoryStorageManagerComponent m_Destination; + protected BaseInventoryStorageComponent m_Storage; + protected ref ERR_MortarCourierCallback m_Callback; + protected int m_Trip; + protected int m_Acknowledgement; + protected float m_Deadline; + protected bool m_Accepted; + protected bool m_Invalidated; + protected bool m_Resolved; + void ERR_MortarCourierTransfer(ERR_MortarLogistics service, int trip, IEntity shell, IEntity from, IEntity to, BaseInventoryStorageComponent storage, float now) + { + m_Service = service; m_Trip = trip; m_Shell = shell; m_From = from; m_To = to; m_Storage = storage; m_Deadline = now + 8000; + m_Source = InventoryStorageManagerComponent.Cast(from.FindComponent(InventoryStorageManagerComponent)); + m_Destination = InventoryStorageManagerComponent.Cast(to.FindComponent(InventoryStorageManagerComponent)); + } + static bool Proven(bool complete, bool source, bool destination, bool exact) { return complete && !source && destination && exact; } + protected bool Contains(InventoryStorageManagerComponent inventory) + { + if (!inventory || !m_Shell) return false; + array items = {}; ERR_Inventory.Items(inventory, items); return items.Contains(m_Shell); + } + void Acknowledge(bool success) + { + if (m_Acknowledgement != 0) return; + if (success) m_Acknowledgement = 1; + else m_Acknowledgement = -1; + } + bool Begin(float now) + { + if (m_Callback || !Replication.IsServer() || !m_Service.TransferAllowed(m_Trip, m_Shell, m_From, m_To, now) || !Contains(m_Source) || Contains(m_Destination)) return false; + m_Callback = new ERR_MortarCourierCallback(); m_Callback.Transfer = this; + m_Accepted = m_Source.TryMoveItemToStorage(m_Shell, m_Storage, -1, m_Callback); + if (!m_Accepted) { Acknowledge(false); m_Resolved = true; } + return m_Accepted; + } + void Invalidate() { m_Invalidated = true; } + bool Unresolved() { return m_Accepted && !m_Resolved; } + IEntity Shell() { return m_Shell; } + int Poll(float now) + { + // A deleted exact entity cannot complete later; close as a permanent loss. + if (!m_Shell) { m_Resolved = true; m_Invalidated = true; return -1; } + bool exact; + InventoryItemComponent item; + if (m_Shell) item = InventoryItemComponent.Cast(m_Shell.FindComponent(InventoryItemComponent)); + if (item && item.GetParentSlot()) exact = item.GetParentSlot().GetStorage() == m_Storage; + bool proven = Proven(m_Acknowledgement == 1, Contains(m_Source), Contains(m_Destination), exact); + if (proven || m_Acknowledgement < 0) m_Resolved = true; + if (m_Invalidated || now >= m_Deadline || !m_Service.TransferAllowed(m_Trip, m_Shell, m_From, m_To, now)) { m_Invalidated = true; return -1; } + if (proven) return 1; + if (m_Acknowledgement < 0 || !m_Accepted) return -1; + return 0; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c new file mode 100644 index 0000000..a457392 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c @@ -0,0 +1,308 @@ +// The dedicated manpack operator has no mortar-shell backpack. Preserve the +// native chooser and its caller's original index for every eligible gunner. +modded class SCR_AIStaticArtilleryActivity +{ + protected override AIAgent FindBestAgentForArtillery(notnull array agents, notnull IEntity artilleryEntity, out int outIndex) + { + ERR_MortarSystem system = ERR_MortarSystem.Get(); + ERR_MortarBattery battery; + if (system) battery = system.FindGun(artilleryEntity); + if (!battery) return super.FindBestAgentForArtillery(agents, artilleryEntity, outIndex); + array gunners = {}; + foreach (AIAgent agent : agents) + { + if (agent && agent.GetControlledEntity() != battery.RadioOperator && ERR_Actors.CanFight(agent.GetControlledEntity())) + gunners.Insert(agent); + } + int filteredIndex; + AIAgent selected = super.FindBestAgentForArtillery(gunners, artilleryEntity, filteredIndex); + outIndex = -1; + if (selected) outIndex = agents.Find(selected); + return selected; + } +} + +// Leave all other artillery (including player-operated captured guns) native. +modded class SCR_AIGetArtilleryAimDistanceCompensation +{ + override ENodeResult EOnTaskSimulate(AIAgent owner, float dt) + { + IEntity gun; + GetVariableIn(PORT_ARTILLERY_ENTITY, gun); + ERR_MortarSystem system = ERR_MortarSystem.Get(); + ERR_MortarBattery battery; + if (system) + battery = system.FindGun(gun); + if (!battery) + return super.EOnTaskSimulate(owner, dt); + battery.AimedAt = -1; + battery.AimValidatedAt = -1; + battery.AimSolver = null; + battery.AimSolution = null; + float now = GetGame().GetWorld().GetWorldTime(); + ERR_HQReport report = system.Latest(battery, now); + if (!ERR_HQ.MissionActive()) { system.Withhold(battery, "aim: mission inactive"); return ENodeResult.FAIL; } + if (!battery.CommandOpen || battery.OrderShots >= ERR_MortarSalvo.ROUNDS) { system.Withhold(battery, "aim: salvo complete or order closed"); return ENodeResult.FAIL; } + if (battery.Released) { system.Withhold(battery, "aim: waiting for committed projectile"); return ENodeResult.FAIL; } + if (!report) { system.Withhold(battery, "aim: " + system.ContactFailure(battery)); return ENodeResult.FAIL; } + battery.Trace("AIM START", "solving moving intercept", string.Format("latest source=M%1; %2", report.MessageId, report.Description(now))); + ERR_MortarAimSolution solution = ERR_Solve(battery, system, report, now); + if (!solution) return ENodeResult.FAIL; + battery.Impact = solution.Impact; + battery.AimOffset = solution.SalvoOffset; + battery.AimedShot = battery.OrderShots; + battery.FlightTime = solution.FlightTime; + battery.AimSolution = solution; + battery.AimSolver = this; // weak: do not retain a destroyed native behavior tree + battery.AimedAt = now; + battery.AimValidatedAt = now; + battery.LastFailure = ""; + battery.Trace("AIM SOLUTION", "ready", string.Format("predicted impact=%1 flight=%2s charge index=%3 aim target=%4 latest source=M%5", solution.Impact, solution.FlightTime, solution.Charge, solution.AimTarget, report.MessageId)); + SetVariableOut(PORT_AIM_POS, solution.AimTarget); + SetVariableOut(PORT_INIT_SPEED_ID, solution.Charge); + return ENodeResult.SUCCESS; + } + + // Reuse this exact native node's coefficient/elevation APIs. A slow native + // barrel can keep its command only if a NEW solve still matches that command. + bool ERR_RevalidateAim(ERR_MortarBattery battery, ERR_MortarSystem system, ERR_HQReport report, float now) + { + IEntity gun; + ResourceName ammo; + GetVariableIn(PORT_ARTILLERY_ENTITY, gun); + GetVariableIn(PORT_AMMO_PREFAB, ammo); + ERR_MortarAimSolution commanded = battery.AimSolution; + if (battery.AimSolver != this || !commanded || !commanded.Matches(battery, report) || gun != battery.Gun || ammo != ERR_MortarBattery.SHELL) + return system.Withhold(battery, "original aim solver or command no longer available"); + if (!ERR_MortarPrediction.Fresh(report, now)) return system.Withhold(battery, system.ContactFailure(battery)); + ERR_MortarAimSolution updated = ERR_Solve(battery, system, report, now); + if (!updated) return false; + if (!ERR_MortarAimRules.Equivalent(commanded.Charge, updated.Charge, commanded.GunOrigin, updated.GunOrigin, commanded.Impact, updated.Impact, commanded.AimTarget, updated.AimTarget, commanded.FlightTime, updated.FlightTime)) + return system.Withhold(battery, "new ballistic solution requires native re-aim", string.Format("gun drift=%1m impact drift=%2m aim drift=%3m charge=%4/%5 flight=%6/%7s", vector.Distance(commanded.GunOrigin, updated.GunOrigin), vector.Distance(commanded.Impact, updated.Impact), vector.Distance(commanded.AimTarget, updated.AimTarget), commanded.Charge, updated.Charge, commanded.FlightTime, updated.FlightTime)); + // Keep the ORIGINAL command/impact/flight. Comparing successive refreshed + // solutions would allow a moving target to drift away in small increments. + battery.AimValidatedAt = now; + battery.Trace("AIM REVALIDATED", "same native command", string.Format("fresh ballistic solve matched original; source=M%1 observed age=%2s", report.MessageId, (now - report.ObservedAt) / 1000)); + return true; + } + + // The report may change only after a real HQ downlink. Re-solve against the + // ORIGINAL geometry; never replace the commanded solution with an + // approximately equivalent successor (which would permit tolerance creep). + bool ERR_AdoptReport(ERR_MortarBattery battery, ERR_MortarSystem system, ERR_HQReport report, float now) + { + IEntity gun; + ResourceName ammo; + GetVariableIn(PORT_ARTILLERY_ENTITY, gun); + GetVariableIn(PORT_AMMO_PREFAB, ammo); + ERR_MortarAimSolution commanded = battery.AimSolution; + if (battery.Released || battery.RefreshRejected || !battery.CommandOpen || !battery.Refresh || !battery.Refresh.DeliveredFor(battery, report)) + return system.Withhold(battery, "target update lacks completed delivery for this uncommitted order"); + if (battery.AimSolver != this || !commanded || !commanded.Matches(battery, battery.Report) || gun != battery.Gun || ammo != ERR_MortarBattery.SHELL) + return system.Withhold(battery, "target update lost its original native aim owner"); + if (battery.AimedAt < 0 || now < battery.AimedAt) return system.Withhold(battery, "original native aim timestamp invalid"); + if (!ERR_MortarRefreshRules.Newer(battery.Report, report, now)) return system.Withhold(battery, "target update is not a newer fresh same-target observation"); + ERR_MortarAimSolution updated = ERR_Solve(battery, system, report, now); + if (!updated) return false; + if (!ERR_MortarAimRules.Equivalent(commanded.Charge, updated.Charge, commanded.GunOrigin, updated.GunOrigin, commanded.Impact, updated.Impact, commanded.AimTarget, updated.AimTarget, commanded.FlightTime, updated.FlightTime)) + return system.Withhold(battery, "target update requires a different native aim command"); + // Synchronous adoption changes accepted observation identity together. + // Original command time/geometry, order deadline and shot count survive. + commanded.Report = report; + battery.Report = report; + battery.AimValidatedAt = now; + return true; + } + + protected ERR_MortarAimSolution ERR_Solve(ERR_MortarBattery battery, ERR_MortarSystem system, ERR_HQReport report, float now) + { + IEntity gun = battery.Gun; + vector gunOrigin = gun.GetOrigin(); + ResourceName ammo; + GetVariableIn(PORT_AMMO_PREFAB, ammo); + if (ammo != ERR_MortarBattery.SHELL) { system.Withhold(battery, "unsupported ammunition prefab", ammo); return null; } + Resource resource = Resource.Load(ammo); + if (!resource || !resource.IsValid() || !resource.GetResource()) { system.Withhold(battery, "shell resource load failed", ammo); return null; } + IEntitySource source = resource.GetResource().ToEntitySource(); + if (!source) { system.Withhold(battery, "shell resource has no entity source", ammo); return null; } + array coefficients = {}; + GetAmmoInitialSpeedCoefficients(ammo, coefficients); + if (coefficients.IsEmpty()) + coefficients.Insert(1.0); + float minimum, maximum; + GetVerticalAimLimits(gun, minimum, maximum); + float flight = 30; + float offset; + int charge; + vector impact; + vector salvoOffset = ERR_MortarSalvo.Offset(battery.SiteId, battery.OrderId, battery.OrderShots); + bool converged; + // Iterate the moving intercept using the native shell's flight time. + // Reject non-convergence rather than fire with an arbitrary lead time. + for (int iteration = 0; iteration < 4; iteration++) + { + if (!ERR_MortarPrediction.Predict(report, now, flight + 2, impact)) { system.Withhold(battery, "aim prediction: " + ERR_MortarPrediction.FailureReason, string.Format("flight lead=%1s; %2", flight + 2, report.Description(now))); return null; } + if (!system.OutsideSettlements(impact)) { system.Withhold(battery, "aim target inside settlement exclusion", system.SettlementReason); return null; } + impact += salvoOffset; + impact[1] = SCR_TerrainHelper.GetTerrainY(impact); + float distance = vector.DistanceXZ(gunOrigin, impact); + float altitude = impact[1] - gunOrigin[1]; + if (distance < 350 || distance > 4000) { system.Withhold(battery, "predicted impact out of range", string.Format("iteration=%1 distance=%2m impact=%3 allowed=350..4000m", iteration, distance, impact)); return null; } + bool reachable; + float calculated; + for (int i = 0; i < coefficients.Count(); i++) + { + if (!BallisticTable.GetAimHeightOfProjectileAltitudeFromSource(distance, offset, calculated, source, altitude, coefficients[i])) + continue; + float tangent = (offset + altitude) / distance; + if (calculated <= 0 || calculated > 75 || tangent < Math.Tan(minimum) || tangent > Math.Tan(maximum)) + continue; + charge = i; + reachable = true; + break; + } + if (!reachable) { system.Withhold(battery, "no native ballistic solution within elevation/flight-time limits", string.Format("iteration=%1 distance=%2 altitude=%3 charges=%4 elevation radians=%5..%6 flight limit=75s", iteration, distance, altitude, coefficients.Count(), minimum, maximum)); return null; } + converged = Math.AbsFloat(calculated - flight) < 1; + flight = calculated; + if (converged) + break; + } + if (!converged) { system.Withhold(battery, "moving intercept did not converge in four iterations"); return null; } + if (!system.Safe(battery, impact, flight + 2)) { system.Withhold(battery, "aim impact safety rejected", system.SafetyReason); return null; } + ERR_MortarAimSolution solution = new ERR_MortarAimSolution(); + solution.Gun = gun; + solution.Report = report; + solution.OrderId = battery.OrderId; + solution.Shot = battery.OrderShots; + solution.GunOrigin = gunOrigin; + solution.Impact = impact; + solution.AimTarget = impact + Vector(0, offset, 0); + solution.SalvoOffset = salvoOffset; + solution.Charge = charge; + solution.FlightTime = flight; + return solution; + } +} + +modded class SCR_AIShootStaticArtillery +{ + override ENodeResult EOnTaskSimulate(AIAgent owner, float dt) + { + IEntity gun; + GetVariableIn(PORT_ARTILLERY_ENTITY, gun); + ERR_MortarSystem system = ERR_MortarSystem.Get(); + ERR_MortarBattery battery; + if (system) + battery = system.FindGun(gun); + if (battery && !system.AllowShot(battery)) + { + battery.Trace("SHOOT NODE", "authorization rejected", battery.LastFailure); + return ENodeResult.FAIL; + } + ENodeResult result = super.EOnTaskSimulate(owner, dt); + if (battery) + battery.Trace("SHOOT NODE", string.Format("native result=%1", result), "authorization passed; node result does not confirm a physical shot"); + return result; + } +} + +modded class SCR_MortarMuzzleComponent +{ + protected override void TransferShellToMortar() + { + ERR_MortarSystem system = ERR_MortarSystem.Get(); + ERR_MortarBattery battery; + if (system && m_CharController && !EntityUtils.IsPlayer(m_CharController.GetOwner())) + battery = system.FindGun(GetOwner()); + if (battery) + { + // The loading animation takes time. Recheck at the actual transfer, + // before native inventory insertion triggers the physical projectile. + if (!system.AllowShot(battery)) + { + if (m_ShellComponent) + { + m_ShellComponent.GetOnShellUsed().Remove(TransferShellToMortar); + m_ShellComponent.SetLoadedState(false); + } + CharacterAnimationComponent animation = m_CharController.GetAnimationComponent(); + if (animation && animation.GetCommandHandler()) + animation.GetCommandHandler().FinishItemUse(false); + battery.Audit("ABORT", "final shell transfer rejected; " + battery.LastFailure); + return; + } + battery.Released = true; + battery.ReserveShellAirspace(GetGame().GetWorld().GetWorldTime()); + battery.Audit("SHELL COMMIT", string.Format("final safety passed; gunner=%1 predicted impact=%2 flight=%3s; invoking native transfer, awaiting projectile event", m_CharController.GetOwner(), battery.Impact, battery.FlightTime)); + } + super.TransferShellToMortar(); + } + + override void OnWeaponFired(IEntity effectEntity, BaseMuzzleComponent muzzle, IEntity projectileEntity) + { + IEntity firingCharacter; + if (m_CharController) firingCharacter = m_CharController.GetOwner(); + super.OnWeaponFired(effectEntity, muzzle, projectileEntity); + ERR_MortarSystem system = ERR_MortarSystem.Get(); + ERR_MortarBattery battery; + if (system) + battery = system.FindGun(GetOwner()); + if (!battery) + return; + bool playerGunner; + if (firingCharacter) playerGunner = EntityUtils.IsPlayer(firingCharacter); + battery.ObserveProjectile(projectileEntity, firingCharacter, playerGunner); + } +} + +// The native tree normally re-aims only every five shots (and skips the first +// re-aim). Each salvo shell needs its own spread point and fresh authorization. +modded class SCR_AIStaticArtilleryBehavior +{ + ERR_MortarBattery ERR_GetMortarBattery() + { + ERR_MortarSystem system = ERR_MortarSystem.Get(); + if (!system) return null; + return system.FindGun(m_ArtilleryEntity.m_Value); + } +} + +modded class SCR_AIStaticArtilleryBehavior_ShootingLogic +{ + override ENodeResult EOnTaskSimulate(AIAgent owner, float dt) + { + ERR_MortarBattery battery; + SCR_AIStaticArtilleryBehavior behavior; + if (m_Utility) + { + behavior = SCR_AIStaticArtilleryBehavior.Cast(m_Utility.GetExecutedAction()); + if (behavior) battery = behavior.ERR_GetMortarBattery(); + } + if (battery) + { + int gate = ERR_MortarSupplyRules.CycleGate(battery.CommandOpen, battery.OrderShots, behavior.GetShotCount(), ERR_MortarSalvo.ROUNDS, ERR_MortarSupplyState.READY); + if (gate < 0) return ENodeResult.FAIL; + if (gate == 0) return ENodeResult.RUNNING; + // Native super increments the behavior counter. Wait BEFORE calling it, + // so repeated pending ticks cannot count the same projectile twice. + if (battery.OrderShots < ERR_MortarSalvo.ROUNDS) + { + float now = GetGame().GetWorld().GetWorldTime(); + ERR_MortarSupplyState supply = battery.SupplyState(now); + if (supply == ERR_MortarSupplyState.PENDING) return ENodeResult.RUNNING; + if (supply == ERR_MortarSupplyState.FAILED) + { + ERR_MortarSystem system = ERR_MortarSystem.Get(); + if (system) system.Withhold(battery, system.SupplyFailure(battery, now)); + return ENodeResult.FAIL; + } + } + } + ENodeResult result = super.EOnTaskSimulate(owner, dt); + if (battery && result == ENodeResult.SUCCESS) + { + SetVariableOut(PORT_AIMING_NEEDED, true); + } + return result; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c new file mode 100644 index 0000000..8c3d42d --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarLogistics.c @@ -0,0 +1,347 @@ +class ERR_MortarSupplyStatus +{ + SCR_AIGroup Group; + IEntity Gun; + vector Position; + float ObservedAt; + int MessageId; + int Shells; +} +class ERR_MortarLogisticsRules +{ + static bool Fresh(float observedAt, float now) { return observedAt >= 0 && now >= observedAt && now - observedAt <= 180000; } + static bool Need(int shells) { return shells >= 0 && shells <= 6; } + static bool NewRequest(int message, int consumed, bool fresh) { return fresh && message > 0 && message > consumed; } + static bool Near(float distance) { return distance >= 0 && distance <= 12; } + static bool ActiveTrip(bool server, bool stopped, int trip, int current, bool fresh, bool ownershipValid) { return server && !stopped && trip > 0 && trip == current && fresh && ownershipValid; } +} +// One finite western-cache courier, owned and ticked exclusively by HQ. +class ERR_MortarLogistics +{ + protected ERR_HQ m_HQ; + protected ERR_GameMode m_Mode; + protected ERR_SiteRuntime m_Site; + protected IEntity m_Cache; + protected SCR_AIGroup m_Group; + protected ERR_MortarBattery m_Battery; + protected IEntity m_OriginalGun; + protected SCR_AIGroup m_OriginalBatteryGroup; + protected ref array m_BatteryMembers = {}; + protected ref array m_OriginalMembers = {}; + protected ref array m_Stock = {}; + protected ref array m_Cargo = {}; + protected ref array m_AttemptedPickup = {}; + protected ref array m_AttemptedUnload = {}; + protected ref array m_Initial = {}; + protected ref ERR_MortarSupplyStatus m_Report; + protected ref ERR_HQRoute m_Order; + protected ref ERR_MortarCourierTransfer m_Move; + protected IEntity m_Courier; + protected AIWaypoint m_Waypoint; + protected AIWaypoint m_HoldWaypoint; + protected float m_InitialDeadline; + protected float m_NextReport; + protected float m_LastDeliveryAt = -1; + protected int m_ConsumedMessage; + protected int m_Trip; + protected int m_State; // 0 initial, 1 idle, 2 downlink, 3 pickup, 4 travel, 5 unload + protected int m_Delivered; + protected int m_CompletedTrips; + protected bool m_Started; + protected bool m_Stopped; + protected string m_Reason; + static const int INITIAL_SHELLS = 12; + static const int TRIP_SHELLS = 6; + void ERR_MortarLogistics(ERR_HQ hq, ERR_GameMode mode) { m_HQ = hq; m_Mode = mode; } + int State() { return m_State; } + int Trip() { return m_Trip; } + int Delivered() { return m_Delivered; } + int CompletedTrips() { return m_CompletedTrips; } + IEntity Cache() { return m_Cache; } + SCR_AIGroup Group() { return m_Group; } + IEntity Courier() { return m_Courier; } + ERR_MortarBattery Battery() { return m_Battery; } + ERR_MortarSupplyStatus Report() { return m_Report; } + bool Stopped() { return m_Stopped; } + void InitialStock(out array items) { items.Copy(m_Stock); } + protected void Audit(string kind, string reason) + { + int message; if (m_Report) message = m_Report.MessageId; + m_Reason = reason; + m_HQ.Journal().Write("COURIER " + kind, string.Format("trip=%1 state=%2 delivered=%3; %4", m_Trip, m_State, m_Delivered, reason), message); + } + protected InventoryStorageManagerComponent Inventory(IEntity entity) + { + if (!entity) return null; + return InventoryStorageManagerComponent.Cast(entity.FindComponent(InventoryStorageManagerComponent)); + } + protected bool Contains(IEntity owner, IEntity shell) + { + InventoryStorageManagerComponent inventory = Inventory(owner); + if (!inventory || !shell) return false; + array items = {}; ERR_Inventory.Items(inventory, items); return items.Contains(shell); + } + protected void Shells(IEntity owner, out array shells) + { + shells.Clear(); InventoryStorageManagerComponent inventory = Inventory(owner); if (!inventory) return; + array items = {}; ERR_Inventory.Items(inventory, items); + foreach (IEntity item : items) + if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == ERR_MortarBattery.SHELL) shells.Insert(item); + } + bool Prepare() + { + if (!Replication.IsServer() || m_Started || m_Stopped) return false; + m_Started = true; + ERR_ScenarioComponent scenario = ERR_ScenarioComponent.Cast(m_Mode.FindComponent(ERR_ScenarioComponent)); + if (!scenario || !scenario.Sites()) return false; + m_Site = scenario.Sites().Find("everon-supply-2"); + if (!m_Site || !m_Site.Group || !m_Site.PatrolCycle || !scenario.Sites().Owns(m_Site.Container)) return false; + m_Cache = m_Site.Container; m_Group = m_Site.Group; + array batteries = {}; m_HQ.Mortars().Batteries(batteries); + if (batteries.Count() != 1) return false; + m_Battery = batteries[0]; m_OriginalGun = m_Battery.Gun; m_OriginalBatteryGroup = m_Battery.Group; + InventoryStorageManagerComponent inventory = Inventory(m_Cache); + if (!inventory || !inventory.CanInsertResource(ERR_MortarBattery.SHELL, EStoragePurpose.PURPOSE_DEPOSIT)) return false; + array existing = {}; Shells(m_Cache, existing); if (!existing.IsEmpty()) return false; + array agents = {}; m_Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + if (!agent || !ERR_Actors.CanFight(agent.GetControlledEntity())) return false; + m_OriginalMembers.Insert(agent.GetControlledEntity()); + } + if (m_OriginalMembers.Count() != m_Site.InitialGuardCount) return false; + m_InitialDeadline = GetGame().GetWorld().GetWorldTime() + 15000; + // SiteService owns this existing cache and its contents through rollback/world teardown. + // This bounded startup allocation is never reopened, including partial failure/theft. + for (int i = 0; i < INITIAL_SHELLS; i++) + { + IEntity shell = ERR_Actors.Spawn(ERR_MortarBattery.SHELL, m_Cache.GetOrigin()); + if (!shell) return false; + // Keep the exact created identity; counts cannot prove an external item was + // not substituted while an asynchronous insertion was pending. + m_Mode.Own(shell); m_Stock.Insert(shell); + ERR_MortarInitialItem operation = new ERR_MortarInitialItem(); m_Initial.Insert(operation); + if (!inventory.TryInsertItem(shell, EStoragePurpose.PURPOSE_DEPOSIT, operation)) { operation.Rejected(); return false; } + } + return true; + } + protected bool OriginalGroup() + { + if (!m_Site || m_Site.Group != m_Group || m_Site.Container != m_Cache || !m_Group || !m_Cache || m_Group.GetPlayerCount(true) > 0 || m_Group.GetFaction() != m_Mode.EnemyFaction()) return false; + array agents = {}; m_Group.GetAgents(agents); bool living; + foreach (AIAgent agent : agents) + { + if (!agent || !agent.GetControlledEntity()) continue; + IEntity actor = agent.GetControlledEntity(); + if (!m_OriginalMembers.Contains(actor) || ERR_Actors.Player(actor) || ERR_Actors.Group(actor) != m_Group || SCR_FactionManager.SGetFaction(actor) != m_Mode.EnemyFaction()) return false; + if (ERR_Actors.CanFight(actor)) living = true; + } + return living; + } + protected bool BindBatteryMembers() + { + if (!m_Battery || !m_Battery.StartupActivated || m_Battery.Group != m_OriginalBatteryGroup || m_Battery.Gun != m_OriginalGun) return false; + if (!m_BatteryMembers.IsEmpty()) return true; + array agents = {}; m_Battery.Group.GetAgents(agents); + foreach (AIAgent agent : agents) + if (agent && agent.GetControlledEntity() && !m_BatteryMembers.Contains(agent.GetControlledEntity())) m_BatteryMembers.Insert(agent.GetControlledEntity()); + return !m_BatteryMembers.IsEmpty(); + } + bool TargetAvailable() + { + if (!m_Battery || m_Battery.Gun != m_OriginalGun || m_Battery.Group != m_OriginalBatteryGroup || !m_OriginalGun || !m_Battery.StartupActivated || m_Battery.Stopped() || !m_Battery.Operational() || m_HQ.Mortars().FindGun(m_OriginalGun) != m_Battery || m_BatteryMembers.IsEmpty()) return false; + if (SCR_FactionManager.SGetFaction(m_OriginalGun) != m_Mode.EnemyFaction()) return false; + SCR_AIVehicleUsageComponent usage = SCR_AIVehicleUsageComponent.Cast(m_OriginalGun.FindComponent(SCR_AIVehicleUsageComponent)); + if (!usage || !usage.GetTurretCompartmentSlot()) return false; + IEntity occupant = usage.GetTurretCompartmentSlot().GetOccupant(); + if (!occupant) return true; + return m_BatteryMembers.Contains(occupant) && ERR_Actors.CanFight(occupant) && !ERR_Actors.Player(occupant) && ERR_Actors.Group(occupant) == m_OriginalBatteryGroup && SCR_FactionManager.SGetFaction(occupant) == m_Mode.EnemyFaction(); + } + bool CanSample(ERR_MortarBattery battery) { return battery == m_Battery && TargetAvailable(); } + protected bool Bearer(IEntity actor) + { + return actor && m_OriginalMembers.Contains(actor) && ERR_Actors.Group(actor) == m_Group && ERR_Actors.CanFight(actor) && !ERR_Actors.Player(actor) && !CompartmentAccessComponent.GetVehicleIn(actor) && SCR_FactionManager.SGetFaction(actor) == m_Mode.EnemyFaction() && ERR_HQRadio.Capability(actor) != 2; + } + bool AcceptsStatus(ERR_MortarSupplyStatus report, float now) + { + return !m_Stopped && m_State == 1 && report && m_Battery && report.Group == m_Battery.Group && report.Gun == m_Battery.Gun && ERR_MortarLogisticsRules.Need(report.Shells) && ERR_MortarLogisticsRules.NewRequest(report.MessageId, m_ConsumedMessage, ERR_MortarLogisticsRules.Fresh(report.ObservedAt, now)); + } + void Receive(ERR_MortarSupplyStatus report, float now) + { + if (!AcceptsStatus(report, now)) return; + m_Report = report; + Audit("RECEIVED", "immutable low-ammunition status delivered by native physical radio route"); + } + protected bool Authorized(float now) + { + if (!m_Mode || !m_Mode.Active() || !m_Report || !m_Battery) return false; + return ERR_MortarLogisticsRules.ActiveTrip(Replication.IsServer(), m_Stopped, m_Trip, m_HQ.LogisticsToken(m_Group), ERR_MortarLogisticsRules.Fresh(m_Report.ObservedAt, now), OriginalGroup()) && TargetAvailable() && m_Report.Gun == m_Battery.Gun && m_Report.Group == m_Battery.Group && vector.Distance(m_Report.Position, m_Battery.Gun.GetOrigin()) <= 5; + } + bool TransferAllowed(int trip, IEntity shell, IEntity from, IEntity to, float now) + { + if (trip != m_Trip || !Authorized(now) || !shell || !m_Stock.Contains(shell) || !Bearer(m_Courier)) return false; + if (m_State == 3) return from == m_Cache && to == m_Courier && ERR_MortarLogisticsRules.Near(vector.Distance(from.GetOrigin(), to.GetOrigin())); + if (m_State != 5 || from != m_Courier || !m_Cargo.Contains(shell) || !ERR_Actors.CanFight(to) || ERR_Actors.Player(to) || to == m_Battery.RadioOperator || !m_BatteryMembers.Contains(to) || ERR_Actors.Group(to) != m_Battery.Group || SCR_FactionManager.SGetFaction(to) != m_Mode.EnemyFaction()) return false; + return !CompartmentAccessComponent.GetVehicleIn(to) && ERR_MortarLogisticsRules.Near(vector.Distance(from.GetOrigin(), to.GetOrigin())); + } + protected void ClearWaypoint() + { + if (m_Waypoint) { if (m_Group) m_Group.RemoveWaypoint(m_Waypoint); ERR_Actors.DeleteSpawned(m_Waypoint); } + m_Waypoint = null; + if (m_HoldWaypoint) { if (m_Group) m_Group.RemoveWaypoint(m_HoldWaypoint); ERR_Actors.DeleteSpawned(m_HoldWaypoint); } + m_HoldWaypoint = null; + } + protected bool MoveTo(vector position) + { + ClearWaypoint(); + m_Waypoint = AIWaypoint.Cast(ERR_Actors.Spawn(ERR_Resources.MoveWaypoint(), ERR_Actors.Ground(position))); + if (!m_Waypoint) return false; + // A completed Move alone would let the original patrol resume during the + // asynchronous item operation. This owned, non-completing native Defend + // keeps that queue below us until release; its original entries are untouched. + m_HoldWaypoint = AIWaypoint.Cast(ERR_Actors.Spawn(ERR_Resources.DefendWaypoint(), ERR_Actors.Ground(position))); + if (!m_HoldWaypoint) { ClearWaypoint(); return false; } + m_HoldWaypoint.SetCompletionRadius(8); + m_Group.AddWaypointAt(m_HoldWaypoint, 0); m_Group.AddWaypointAt(m_Waypoint, 0); m_Group.ActivateAI(); return true; + } + protected void Finish(string reason) + { + Audit("END", reason); + if (m_Move) m_Move.Invalidate(); + ClearWaypoint(); m_HQ.ReleaseLogistics(m_Group, m_Trip); + m_Order = null; m_Report = null; m_Courier = null; m_Cargo.Clear(); m_State = 1; + // Native requests cannot be canceled. A pending move remains held until its + // physical outcome resolves; callbacks cannot authorize a later trip. + m_NextReport = GetGame().GetWorld().GetWorldTime() + 60000; + } + protected bool BeginMove(IEntity shell, IEntity from, IEntity to, float now) + { + InventoryStorageManagerComponent destination = Inventory(to); + BaseInventoryStorageComponent storage; if (destination) storage = destination.FindStorageForItem(shell, EStoragePurpose.PURPOSE_DEPOSIT); + if (!storage) return false; + m_Move = new ERR_MortarCourierTransfer(this, m_Trip, shell, from, to, storage, now); + return m_Move.Begin(now); + } + protected bool PollMove(float now) + { + if (!m_Move) return true; + int result = m_Move.Poll(now); + if (result == 0) return false; + if (result < 0) { Finish("native item operation rejected, expired or lost authority; physical items retained"); return false; } + IEntity shell = m_Move.Shell(); m_Move = null; + if (m_State == 3) { m_Cargo.Insert(shell); Audit("PICKUP", "exact depot shell confirmed in original bearer inventory"); } + else if (m_State == 5) { m_Cargo.RemoveItem(shell); m_Delivered++; m_LastDeliveryAt = now; Audit("DELIVERED", "exact original shell confirmed in living mortar crew inventory"); } + return true; + } + protected void Pickup(float now) + { + if (!m_Courier) + { + foreach (IEntity candidate : m_OriginalMembers) + if (Bearer(candidate) && Inventory(candidate) && Inventory(candidate).CanInsertResource(ERR_MortarBattery.SHELL, EStoragePurpose.PURPOSE_DEPOSIT) && ERR_MortarLogisticsRules.Near(vector.Distance(candidate.GetOrigin(), m_Cache.GetOrigin()))) { m_Courier = candidate; break; } + if (!m_Courier) return; + } + if (!Bearer(m_Courier)) { Finish("original bearer lost or captured"); return; } + if (!PollMove(now)) return; + if (m_Cargo.Count() < TRIP_SHELLS) + { + foreach (IEntity shell : m_Stock) + { + if (!shell || !Contains(m_Cache, shell) || m_AttemptedPickup.Contains(shell)) continue; + InventoryStorageManagerComponent destination = Inventory(m_Courier); + if (!destination || !destination.FindStorageForItem(shell, EStoragePurpose.PURPOSE_DEPOSIT)) break; + m_AttemptedPickup.Insert(shell); + if (!BeginMove(shell, m_Cache, m_Courier, now)) Finish("native pickup rejected; no second request for that shell"); + return; + } + } + if (m_Cargo.IsEmpty()) { Finish("finite cache empty or bearer native storage full"); return; } + m_State = 4; + if (!MoveTo(m_Report.Position)) { Finish("native delivery waypoint unavailable"); return; } + Audit("OUTBOUND", "original patrol walking with verified finite cargo to reported battery position"); + } + protected void Unload(float now) + { + if (!PollMove(now)) return; + if (m_Cargo.IsEmpty()) { m_CompletedTrips++; Finish("finite delivery complete; original patrol restored"); return; } + array agents = {}; m_Battery.Group.GetAgents(agents); + foreach (IEntity shell : m_Cargo) + { + if (!shell || !Contains(m_Courier, shell)) { Finish("carried shell lost or stolen; no replacement"); return; } + if (m_AttemptedUnload.Contains(shell)) { Finish("previous unload unresolved or failed; no retry"); return; } + foreach (AIAgent agent : agents) + { + if (!agent) continue; + IEntity recipient = agent.GetControlledEntity(); + if (!TransferAllowed(m_Trip, shell, m_Courier, recipient, now)) continue; + InventoryStorageManagerComponent destination = Inventory(recipient); + if (!destination || !destination.FindStorageForItem(shell, EStoragePurpose.PURPOSE_DEPOSIT)) continue; + m_AttemptedUnload.Insert(shell); + if (!BeginMove(shell, m_Courier, recipient, now)) Finish("native recipient move rejected; cargo remains physical"); + return; + } + } + } + void Tick(float now) + { + if (m_Stopped || !m_Started || !Replication.IsServer() || !m_Mode.Active()) return; + if (m_State == 0) + { + bool failed; foreach (ERR_MortarInitialItem operation : m_Initial) { if (!operation.Finished) { if (now < m_InitialDeadline) return; failed = true; } else if (!operation.Succeeded) failed = true; } + if (!OriginalGroup()) failed = true; + array shells = {}; Shells(m_Cache, shells); + if (shells.Count() != INITIAL_SHELLS) { if (now < m_InitialDeadline && !failed) return; failed = true; } + foreach (IEntity originalShell : m_Stock) if (!originalShell || !shells.Contains(originalShell)) failed = true; + if (m_Stock.Count() != INITIAL_SHELLS) failed = true; + if (failed) { Audit("STARTUP FAILED", "one-time native stock allocation incomplete; no refill"); Stop(); return; } + m_State = 1; Audit("READY", "12 distinct original HE shells physically confirmed in existing western cache"); + } + if (m_State == 1) + { + if (m_Move) { m_Move.Poll(now); if (m_Move.Unresolved()) return; m_Move = null; } + if (!OriginalGroup() || !BindBatteryMembers() || !TargetAvailable()) return; + bool available; foreach (IEntity stocked : m_Stock) if (Contains(m_Cache, stocked) && !m_AttemptedPickup.Contains(stocked)) available = true; + if (!available) return; + if (now >= m_NextReport && ERR_MortarLogisticsRules.Need(m_Battery.CountShells())) { if (m_HQ.QueueSupplyStatus(m_Battery, now)) m_NextReport = now + 60000; } + if (!m_Report || !ERR_MortarLogisticsRules.NewRequest(m_Report.MessageId, m_ConsumedMessage, ERR_MortarLogisticsRules.Fresh(m_Report.ObservedAt, now))) return; + int nextTrip = m_Trip + 1; + if (!m_HQ.ReserveLogistics(m_Group, nextTrip)) return; + m_Trip = nextTrip; m_ConsumedMessage = m_Report.MessageId; + m_Order = m_HQ.Downlink(m_Group, "MORTAR SUPPLY", "collect finite western-cache HE; walk to reported battery", m_Report.MessageId); + m_State = 2; + if (!m_Order) { Finish("no native courier downlink"); return; } + Audit("QUEUED", "original patrol reserved pending physical radio command delivery"); + } + if (!Authorized(now)) { Finish("supply report expired or original ownership/gun/group changed"); return; } + if (m_Courier && !Bearer(m_Courier)) { Finish("original bearer unavailable; surviving cargo retained"); return; } + if (m_State == 2) + { + int delivered = m_Order.Advance(now, m_HQ.Journal()); + if (delivered == 0) return; + if (delivered < 0) { Finish("courier command interrupted"); return; } + m_Order = null; m_State = 3; + if (!MoveTo(m_Cache.GetOrigin())) { Finish("native pickup waypoint unavailable"); return; } + Audit("DISPATCH", "same original patrol receives delivered order and walks to finite cache"); + } + if (m_State == 3) { Pickup(now); return; } + if (m_State == 4) + { + if (!ERR_MortarLogisticsRules.Near(vector.Distance(m_Courier.GetOrigin(), m_Report.Position))) return; + m_State = 5; Audit("ARRIVED", "physical bearer reached reported gun area; exact recipient checks still required"); + } + if (m_State == 5) Unload(now); + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_Move) m_Move.Invalidate(); + ClearWaypoint(); m_HQ.ReleaseLogistics(m_Group, m_Trip); m_Order = null; m_Report = null; + } + #ifdef WORKBENCH + ERR_HQRoute ProbeOrder() { return m_Order; } + int ProbeSourceMessage() { return m_ConsumedMessage; } + float ProbeLastDelivery() { return m_LastDeliveryAt; } + #endif + string Status() { return string.Format("courier state=%1 finite initial=%2 delivered=%3 stopped=%4 (%5)", m_State, m_Stock.Count(), m_Delivered, m_Stopped, m_Reason); } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c new file mode 100644 index 0000000..7f513e2 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c @@ -0,0 +1,131 @@ +// All target coordinates come from delivered HQ observations, never a player's +// current transform. Road projection stops at an unknown junction/road end. +class ERR_MortarPrediction +{ + // Read immediately after a failed synchronous prediction; no extra world scan. + static string FailureReason; + // Includes observation uplink, HQ downlink and native aiming. All stages + // retain the original observation time; radio delivery never renews it. + static const float MAX_REPORT_AGE_MS = 60000; + + static bool Fresh(ERR_HQReport report, float now) + { + return report && report.Target && !report.Distress && now >= report.ObservedAt && now - report.ObservedAt <= MAX_REPORT_AGE_MS && report.TravelMode != "aircraft"; + } + + static bool Reject(string reason) + { + FailureReason = reason; + return false; + } + + static vector ClosestOnSegment(vector point, vector start, vector end) + { + vector segment = end - start; + segment[1] = 0; + vector offset = point - start; + offset[1] = 0; + float lengthSq = segment.LengthSq(); + if (lengthSq < 0.01) + return start; + return vector.Lerp(start, end, Math.Clamp(vector.Dot(offset, segment) / lengthSq, 0, 1)); + } + + static bool FollowRoad(array points, vector observed, vector velocity, float seconds, out vector impact) + { + if (!points || points.Count() < 2) + return Reject("road polyline has fewer than two points"); + int segment = -1; + float closest = 20; + vector projected; + for (int i = 0; i < points.Count() - 1; i++) + { + vector candidate = ClosestOnSegment(observed, points[i], points[i + 1]); + float distance = vector.DistanceXZ(candidate, observed); + if (distance < closest) + { + closest = distance; + segment = i; + projected = candidate; + } + } + if (segment < 0) + return Reject("observed vehicle is not within 20m of a road segment"); + vector forward = points[segment + 1] - points[segment]; + forward[1] = 0; + forward.Normalize(); + vector travel = velocity; + travel[1] = 0; + float speed = travel.Length(); + travel.Normalize(); + float alignment = vector.Dot(forward, travel); + if (Math.AbsFloat(alignment) < 0.7) + return Reject("vehicle heading crosses road; alignment below 0.7"); + int step = 1; + int next = segment + 1; + if (alignment < 0) + { + step = -1; + next = segment; + } + float remaining = speed * seconds; + vector position = projected; + while (next >= 0 && next < points.Count()) + { + float length = vector.DistanceXZ(position, points[next]); + if (length >= remaining && length > 0.01) + { + impact = vector.Lerp(position, points[next], remaining / length); + return true; + } + remaining -= length; + position = points[next]; + next += step; + } + return Reject("prediction reaches unknown road end/junction"); + } + + static bool Predict(ERR_HQReport report, float now, float flightSeconds, out vector impact) + { + FailureReason = ""; + if (!report) return Reject("target report missing"); + if (report.Distress) return Reject("distress report cannot authorize fire"); + if (now < report.ObservedAt) return Reject("observation timestamp is in the future"); + if (now - report.ObservedAt > MAX_REPORT_AGE_MS) return Reject("observation older than 60s"); + float seconds = (now - report.ObservedAt) / 1000 + flightSeconds; + if (seconds < 0 || seconds > 90) + return Reject("observation age plus flight outside 0..90s"); + if (report.TravelMode == "aircraft") return Reject("aircraft target unsupported"); + if (report.TravelMode == "mixed travel") return Reject("mixed travel cannot be predicted"); + impact = report.Position; + if (!report.HasVelocity || report.Velocity.Length() < 0.5) + return true; + if (report.Velocity.Length() * seconds > 1800) + return Reject("predicted travel exceeds 1800m"); + bool vehicle = report.TravelMode == "vehicle" || report.TravelMode == "in vehicle"; + if (vehicle) + { + SCR_AIWorld world = SCR_AIWorld.Cast(GetGame().GetAIWorld()); + if (!world || !world.GetRoadNetworkManager()) + return Reject("road network unavailable"); + BaseRoad road; + float roadDistance; + world.GetRoadNetworkManager().GetClosestRoad(report.Position, road, roadDistance, skipNavlinks: true); + if (!road) return Reject("no road near reported vehicle position"); + if (roadDistance > 20) return Reject("reported vehicle farther than 20m from road"); + array points = {}; + road.GetPoints(points); + return FollowRoad(points, report.Position, report.Velocity, seconds, impact); + } + impact += report.Velocity * seconds; + return true; + } + + static bool ThreatensFriendly(vector impact, vector position, vector velocity, float flightSeconds) + { + velocity[1] = 0; + vector future = position + velocity * Math.Clamp(flightSeconds, 0, 90); + // Protect the entire predicted path, not only where a soldier is now. + return vector.DistanceXZ(impact, ClosestOnSegment(impact, position, future)) <= 100; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c new file mode 100644 index 0000000..49d3b4f --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c @@ -0,0 +1,180 @@ +enum ERR_MortarSupplyState { FAILED = -1, PENDING, READY } + +class ERR_MortarSupplyRules +{ + static int CycleGate(bool commandOpen, int confirmedShots, int behaviorShots, int limit, int supplyState) + { + if (!commandOpen) return -1; + if (confirmedShots <= behaviorShots) return 0; + if (confirmedShots < limit) return supplyState; + return 1; + } +} + +class ERR_MortarInitialItem : ScriptedInventoryOperationCallback +{ + bool Finished; + bool Succeeded; + protected void Finish(bool success) { if (!Finished) { Finished = true; Succeeded = success; } } + protected override void OnComplete() { Finish(true); } + protected override void OnFailed() { Finish(false); } + protected override void OnAllComplete() { Finish(true); } + protected override void OnAllFailed() { Finish(false); } + void Rejected() { Finish(false); } +} + +// One finite allocation, after the ENTIRE original support crew exists. Failed +// or stopped setup retains physical assets and retires only its pending spawn intent. +class ERR_MortarReadiness +{ + protected ERR_MortarBattery m_Battery; + protected ref array m_Members = {}; + protected ref array m_Operations = {}; + protected bool m_Allocated; + protected bool m_Ready; + protected bool m_Stopped; + protected bool m_Retired; + protected int m_RequestedShells; + void ERR_MortarReadiness(ERR_MortarBattery battery) { m_Battery = battery; } + static ERR_MortarSupplyState Population(int physical, int gunners, int operators, bool complete, bool expired) + { + if (physical > 4 || gunners > 3 || operators > 1) return ERR_MortarSupplyState.FAILED; + if (physical == 4 && gunners == 3 && operators == 1 && complete && !expired) return ERR_MortarSupplyState.READY; + if (expired) return ERR_MortarSupplyState.FAILED; + return ERR_MortarSupplyState.PENDING; + } + static bool AllocationValid(int shells) { return shells >= 0 && shells <= 9; } + int RequestedShells() { return m_RequestedShells; } + bool Ready() { return m_Ready && !m_Stopped; } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_Ready || m_Retired || !m_Battery || !m_Battery.Group || !Replication.IsServer()) return; + m_Retired = true; + // As in Core initial guard cleanup: stopping the current request alone does + // not retire the native group's still-authored future expansion intent. + RetireGroup(m_Battery.Group); + } + static void RetireGroup(SCR_AIGroup group) + { + if (!group || !Replication.IsServer()) return; + group.SetSpawnImmediately(false); + group.m_aUnitPrefabSlots = new array(); + if (!GetGame()) return; + ChimeraAIWorld world = ChimeraAIWorld.Cast(GetGame().GetAIWorld()); + if (world) world.PurgeSpawnRequestsForGroup(group); + } + + protected ERR_MortarSupplyState Fail(string reason) + { + m_Battery.SpawnFailed(reason); + Stop(); + return ERR_MortarSupplyState.FAILED; + } + protected bool Allocate() + { + m_Allocated = true; // before native requests; never refill or retry a failure + foreach (IEntity actor : m_Members) + { + if (actor == m_Battery.RadioOperator) continue; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(actor.FindComponent(InventoryStorageManagerComponent)); + int existing = m_Battery.InventoryShells(inventory); + if (!AllocationValid(existing)) return false; + if (ERR_HQRadio.Capability(actor) == 0 && !inventory.TrySpawnPrefabToStorage("{E1A5D4B878AA8980}Prefabs/Items/Equipment/Radios/Radio_R148.et")) + m_Battery.Audit("RADIO EQUIP", "optional crew handset did not fit; dedicated manpack remains required"); + for (int i = existing; i < 9; i++) + { + ERR_MortarInitialItem operation = new ERR_MortarInitialItem(); + m_Operations.Insert(operation); + m_RequestedShells++; + if (!inventory.TrySpawnPrefabToStorage(ERR_MortarBattery.SHELL, purpose: EStoragePurpose.PURPOSE_DEPOSIT, cb: operation)) + { + operation.Rejected(); + return false; + } + } + } + return true; + } + ERR_MortarSupplyState Poll(float now) + { + if (m_Stopped || !Replication.IsServer() || !m_Battery || m_Battery.Stopped()) return ERR_MortarSupplyState.FAILED; + if (m_Ready) return ERR_MortarSupplyState.READY; + SCR_AIGroup group = m_Battery.Group; + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode || !group || !m_Battery.Gun || group.GetFaction() != mode.EnemyFaction() || group.GetPlayerCount(true) > 0) return Fail("initial support group/gun/faction changed"); + DamageManagerComponent damage = DamageManagerComponent.Cast(m_Battery.Gun.FindComponent(DamageManagerComponent)); + if (!damage || damage.IsDestroyed()) return Fail("initial support gun missing damage manager or destroyed"); + bool expired = now < m_Battery.SpawnedAt || now - m_Battery.SpawnedAt >= 90000; + array agents = {}; group.GetAgents(agents); + array physical = {}; + int gunners, operators; + IEntity operatorActor; + foreach (AIAgent agent : agents) + { + if (!agent || !agent.GetControlledEntity()) continue; + IEntity actor = agent.GetControlledEntity(); + if (physical.Contains(actor)) return Fail("initial support group reports duplicate physical actor"); + physical.Insert(actor); + if (!ERR_Actors.CanFight(actor) || SCR_FactionManager.SGetFaction(actor) != mode.EnemyFaction() || !actor.GetPrefabData()) return Fail("initial support actor unavailable or has wrong faction/resource"); + ResourceName prefab = actor.GetPrefabData().GetPrefabName(); + if (prefab == ERR_MortarBattery.CREW) gunners++; + else if (prefab == ERR_MortarBattery.RADIO_OPERATOR) { operators++; operatorActor = actor; } + else return Fail("initial support actor does not belong to authored crew catalog"); + } + ERR_MortarSupplyState population = Population(physical.Count(), gunners, operators, group.IsExpandComplete(), expired); + if (population == ERR_MortarSupplyState.FAILED) return Fail("initial four-person support population incomplete/invalid within 90 seconds"); + if (population == ERR_MortarSupplyState.PENDING) return population; + if (m_Allocated) + { + foreach (IEntity original : m_Members) + if (!physical.Contains(original)) return Fail("initial support member replaced after finite allocation"); + } + foreach (IEntity member : physical) + { + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(member.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) return ERR_MortarSupplyState.PENDING; + if (!m_Allocated && member != operatorActor && m_Battery.InventoryShells(inventory) < 9 && !inventory.CanInsertResource(ERR_MortarBattery.SHELL, EStoragePurpose.PURPOSE_DEPOSIT)) return ERR_MortarSupplyState.PENDING; + } + if (ERR_HQRadio.Capability(operatorActor) != 2) return ERR_MortarSupplyState.PENDING; + // Preserve the existing earliest activation delay, but it is not readiness. + if (now - m_Battery.SpawnedAt < 10000) return ERR_MortarSupplyState.PENDING; + if (!m_Allocated) + { + if (!group.GetGroupUtilityComponent() || !group.GetGroupUtilityComponent().m_VehicleMgr) return ERR_MortarSupplyState.PENDING; + SCR_AIVehicleUsageComponent usage = SCR_AIVehicleUsageComponent.Cast(m_Battery.Gun.FindComponent(SCR_AIVehicleUsageComponent)); + if (!usage || !group.GetGroupUtilityComponent().m_VehicleMgr.TryAddVehicle(usage)) return Fail("native support gun registration failed"); + m_Members.Copy(physical); m_Battery.RadioOperator = operatorActor; + if (!Allocate()) return Fail("finite initial support shell allocation rejected; no retry"); + return ERR_MortarSupplyState.PENDING; // never accept mutation-frame readiness + } + foreach (ERR_MortarInitialItem operation : m_Operations) + { + if (!operation.Finished) return ERR_MortarSupplyState.PENDING; + if (!operation.Succeeded) return Fail("finite initial support shell operation failed; no retry"); + } + foreach (IEntity equipped : m_Members) + { + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(equipped.FindComponent(InventoryStorageManagerComponent)); + int shells = m_Battery.InventoryShells(inventory); + if (equipped == operatorActor) + { + if (shells != 0) return Fail("dedicated initial manpack operator unexpectedly carries mortar shells"); + } + else if (shells != 9) return ERR_MortarSupplyState.PENDING; + } + if (m_Battery.CountShells() != 27) return ERR_MortarSupplyState.PENDING; + m_Ready = true; + // One physical-ready handoff: HQ already owns/reserves this group, while + // Intel must see its actual late-spawned members after finite stock settles. + mode.RegisterGroup(group); + group.ActivateAI(); + foreach (AIAgent readyAgent : agents) + { + if (readyAgent) { readyAgent.SetPermanentLOD(0); readyAgent.ActivateAI(); } + } + m_Battery.Audit("CREW READY", string.Format("four original physical members, one manpack, 27 confirmed HE; new shell requests=%1; allocation permanently closed", m_RequestedShells)); + return ERR_MortarSupplyState.READY; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c new file mode 100644 index 0000000..f0e68c5 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarRefresh.c @@ -0,0 +1,37 @@ +// One newer observation in transit for one existing physical firing order. +// The report's observed time survives both radio legs unchanged. +class ERR_MortarRefresh +{ + IEntity Gun; + SCR_AIGroup Group; + int OrderId; + int RadioId; + ref ERR_HQReport Report; + ref ERR_HQRoute Route; + + void ERR_MortarRefresh(ERR_MortarBattery battery, ERR_HQReport report, ERR_HQRoute route) + { + Gun = battery.Gun; + Group = battery.Group; + OrderId = battery.OrderId; + RadioId = route.MessageId; + Report = report.Snapshot(); + Route = route; + } + bool Owns(ERR_MortarBattery battery) + { + return battery && Gun && Group && Gun == battery.Gun && Group == battery.Group && OrderId == battery.OrderId; + } + bool DeliveredFor(ERR_MortarBattery battery, ERR_HQReport report) + { + return !Route && Report && Report == report && Owns(battery); + } +} + +class ERR_MortarRefreshRules +{ + static bool Newer(ERR_HQReport current, ERR_HQReport incoming, float now) + { + return current && incoming && current.Target && incoming.Target == current.Target && incoming.MessageId > 0 && incoming.MessageId != current.MessageId && incoming.ObservedAt > current.ObservedAt && ERR_MortarPrediction.Fresh(incoming, now); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c new file mode 100644 index 0000000..46aad47 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c @@ -0,0 +1,20 @@ +// One finite response per delivered observation at this battery. Cancellation +// does not turn the same radio message into new ammunition authorization. +class ERR_MortarReportLedger +{ + protected ref map m_Attempts = new map(); + + bool Available(int messageId, float observedAt, float now) + { + if (messageId <= 0 || observedAt < 0 || now < observedAt || now - observedAt > ERR_MortarPrediction.MAX_REPORT_AGE_MS) return false; + for (int i = m_Attempts.Count() - 1; i >= 0; i--) + if (now - m_Attempts.GetElement(i) > ERR_MortarPrediction.MAX_REPORT_AGE_MS) m_Attempts.Remove(m_Attempts.GetKey(i)); + return !m_Attempts.Contains(messageId) && m_Attempts.Count() < 128; + } + bool Claim(int messageId, float observedAt, float now) + { + if (!Available(messageId, observedAt, now)) return false; + m_Attempts.Insert(messageId, observedAt); + return true; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c new file mode 100644 index 0000000..1a4a07b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c @@ -0,0 +1,16 @@ +// One delivered HQ order drives a continuous native loading/firing cycle. +class ERR_MortarSalvo +{ + static const int ROUNDS = 8; + static const float RADIUS_METRES = 40; + static const float TIMEOUT_MS = 120000; + + static vector Offset(int site, int order, int shot) + { + // Stable throughout one ballistic solve; successive shells cover the disk + // instead of clustering on the same point or changing every iteration. + float radius = RADIUS_METRES * Math.Sqrt((shot + 1.0) / ROUNDS); + float angle = (site * 53 + order * 97 + shot * 137.5) * Math.DEG2RAD; + return Vector(Math.Sin(angle) * radius, 0, Math.Cos(angle) * radius); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c new file mode 100644 index 0000000..ece2586 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c @@ -0,0 +1,108 @@ +class ERR_MortarSupplyCallback : ScriptedInventoryOperationCallback +{ + ERR_MortarSupplyTransfer Transfer; + protected override void OnComplete() { if (Transfer) Transfer.Acknowledge(true); } + protected override void OnFailed() { if (Transfer) Transfer.Acknowledge(false); } +} + +// Exact-item native transaction. Callbacks only record outcomes; the HQ tick +// authorizes progress after checking actual inventory ownership and the order. +class ERR_MortarSupplyTransfer +{ + protected ERR_MortarBattery m_Battery; + protected IEntity m_Gun; + protected SCR_AIGroup m_Group; + protected IEntity m_Donor; + protected IEntity m_Gunner; + protected IEntity m_Shell; + protected InventoryStorageManagerComponent m_Source; + protected InventoryStorageManagerComponent m_Destination; + protected BaseInventoryStorageComponent m_Storage; + protected ref ERR_MortarSupplyCallback m_Callback; + protected int m_Order; + protected int m_Acknowledgement; + protected float m_Deadline; + protected bool m_Accepted; + protected bool m_Invalidated; + protected bool m_Resolved; + protected bool m_Ready; + void ERR_MortarSupplyTransfer(ERR_MortarBattery battery, IEntity donor, IEntity gunner, IEntity shell, BaseInventoryStorageComponent storage, float now) + { + m_Battery = battery; m_Gun = battery.Gun; m_Group = battery.Group; + m_Donor = donor; m_Gunner = gunner; m_Shell = shell; m_Storage = storage; + m_Order = battery.OrderId; m_Deadline = now + 8000; + m_Source = InventoryStorageManagerComponent.Cast(donor.FindComponent(InventoryStorageManagerComponent)); + m_Destination = InventoryStorageManagerComponent.Cast(gunner.FindComponent(InventoryStorageManagerComponent)); + } + static bool Authority(bool valid, bool invalidated, int capturedOrder, int currentOrder) + { + return valid && !invalidated && capturedOrder == currentOrder; + } + static bool Proven(bool callbackComplete, bool sourceContains, bool destinationContains, bool exactSlot) + { + return callbackComplete && !sourceContains && destinationContains && exactSlot; + } + protected bool Contains(InventoryStorageManagerComponent inventory) + { + if (!inventory || !m_Shell) return false; + array items = {}; ERR_Inventory.Items(inventory, items); + return items.Contains(m_Shell); + } + protected bool Valid(float now) + { + if (!m_Battery || !Authority(m_Battery.SupplyAuthorized(now), m_Invalidated, m_Order, m_Battery.OrderId)) return false; + if (m_Battery.Gun != m_Gun || m_Battery.Group != m_Group || !m_Donor || !m_Gunner || m_Donor == m_Gunner || !m_Shell || !m_Source || !m_Destination || !m_Storage) return false; + if (!ERR_Actors.CanFight(m_Donor) || !ERR_Actors.CanFight(m_Gunner) || ERR_Actors.Group(m_Donor) != m_Group || ERR_Actors.Group(m_Gunner) != m_Group) return false; + Faction faction = m_Group.GetFaction(); + if (SCR_FactionManager.SGetFaction(m_Donor) != faction || SCR_FactionManager.SGetFaction(m_Gunner) != faction || vector.Distance(m_Donor.GetOrigin(), m_Gunner.GetOrigin()) > 12) return false; + SCR_AIVehicleUsageComponent usage = SCR_AIVehicleUsageComponent.Cast(m_Gun.FindComponent(SCR_AIVehicleUsageComponent)); + if (!usage || !usage.GetTurretCompartmentSlot()) return false; + IEntity occupant = usage.GetTurretCompartmentSlot().GetOccupant(); + return !occupant || occupant == m_Gunner; + } + void Acknowledge(bool success) + { + if (m_Acknowledgement != 0) return; + if (success) m_Acknowledgement = 1; + else m_Acknowledgement = -1; + } + bool Begin(float now) + { + if (m_Callback || !Replication.IsServer() || !Valid(now) || !Contains(m_Source) || Contains(m_Destination)) return false; + m_Callback = new ERR_MortarSupplyCallback(); m_Callback.Transfer = this; + // Do not use callback.GetItem(): the native contract excludes Move operations. + m_Accepted = m_Source.TryMoveItemToStorage(m_Shell, m_Storage, -1, m_Callback); + if (!m_Accepted) { Acknowledge(false); m_Resolved = true; } + return m_Accepted; + } + void Invalidate() { m_Invalidated = true; m_Ready = false; } + bool Unresolved() { return m_Accepted && !m_Resolved; } + int CapturedOrder() { return m_Order; } + ERR_MortarSupplyState Poll(float now) + { + if (!Replication.IsServer()) return ERR_MortarSupplyState.FAILED; + bool valid = Valid(now); + bool sourceContains = Contains(m_Source); + bool destinationContains = Contains(m_Destination); + bool exactSlot; + InventoryItemComponent item; + if (m_Shell) item = InventoryItemComponent.Cast(m_Shell.FindComponent(InventoryItemComponent)); + if (item && item.GetParentSlot()) exactSlot = item.GetParentSlot().GetStorage() == m_Storage; + bool proven = Proven(m_Acknowledgement == 1, sourceContains, destinationContains, exactSlot); + if (proven || m_Acknowledgement < 0) m_Resolved = true; + // A successful callback without physical destination proof is ambiguous. + // Keep it reserved through timeout/cancellation; never start a second move. + if (!valid || now >= m_Deadline) + { + m_Invalidated = true; m_Ready = false; + return ERR_MortarSupplyState.FAILED; + } + if (proven) + { + m_Ready = true; + return ERR_MortarSupplyState.READY; + } + if (m_Acknowledgement < 0 || !m_Accepted) return ERR_MortarSupplyState.FAILED; + return ERR_MortarSupplyState.PENDING; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c new file mode 100644 index 0000000..b09e66e --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c @@ -0,0 +1,343 @@ +// Owned and ticked by HQ. Initial assets are authored once; losses are never replaced. +class ERR_MortarSystem +{ + protected ERR_HQ m_HQ; + protected ref array m_Batteries = {}; + protected ref ERR_SettlementSafety m_Settlements = new ERR_SettlementSafety(); + protected bool m_Prepared; + protected bool m_Stopped; + protected float m_NextDecision; + protected float m_NextRefreshDecision; + string SafetyReason; + string SettlementReason; + + void ERR_MortarSystem(ERR_HQ hq) { m_HQ = hq; } + static ERR_MortarSystem Get() + { + ERR_HQ hq = ERR_HQ.Get(); + if (!hq || !Replication.IsServer()) return null; + return hq.Mortars(); + } + static bool NearPlayer(vector position) + { + array players = {}; + ERR_Actors.Players(players); + foreach (IEntity player : players) + if (vector.DistanceXZ(player.GetOrigin(), position) <= 1200) return true; + return false; + } + bool Prepare() + { + if (!Replication.IsServer() || m_Prepared || m_Stopped) return false; + m_Prepared = true; + vector position = ERR_Actors.Ground("6000 0 7000"); + if (position[1] < 1) return false; + IEntity gun = ERR_Actors.Spawn(ERR_MortarBattery.GUN, position); + SCR_AIGroup group = SCR_AIGroup.Cast(ERR_Actors.Spawn(MortarGroup(), ERR_Actors.Ground(position + "0 0 4"))); + if (!gun || !group) + { + ERR_Actors.DeleteSpawned(gun); + ERR_MortarReadiness.RetireGroup(group); + ERR_Actors.DeleteSpawned(group); + return false; + } + if (group.GetFaction() != ERR_GameMode.Get().EnemyFaction()) + { + ERR_Actors.DeleteSpawned(gun); + ERR_MortarReadiness.RetireGroup(group); + ERR_Actors.DeleteSpawned(group); + return false; + } + FactionAffiliationComponent affiliation = FactionAffiliationComponent.Cast(gun.FindComponent(FactionAffiliationComponent)); + if (affiliation) affiliation.SetAffiliatedFaction(ERR_GameMode.Get().EnemyFaction()); + ERR_MortarBattery battery = new ERR_MortarBattery(); + battery.Bind(1, group, gun, GetGame().GetWorld().GetWorldTime()); + m_Batteries.Insert(battery); + ERR_GameMode mode = ERR_GameMode.Get(); + mode.Own(gun); + // HQ owns/reserves the finite asset immediately. Publish its physical + // membership to companion consumers only after readiness has completed. + mode.Own(group); + m_HQ.RegisterGroup(group); + m_HQ.ReserveGroup(group); + battery.Audit("DEPLOY", "authored gun and four-person crew; finite ammunition initialization pending"); + return true; + } + static ResourceName MortarGroup() { return "{B84C05941C4C81B8}Prefabs/ERR/MortarCrew.et"; } + void Batteries(out array batteries) + { + batteries.Clear(); + foreach (ERR_MortarBattery battery : m_Batteries) batteries.Insert(battery); + } + ERR_MortarBattery FindGun(IEntity gun) + { + foreach (ERR_MortarBattery battery : m_Batteries) + if (gun && battery.Gun == gun) return battery; + return null; + } + ERR_MortarBattery FindGroup(SCR_AIGroup group) + { + foreach (ERR_MortarBattery battery : m_Batteries) + if (group && battery.Group == group) return battery; + return null; + } + ERR_HQReport Latest(ERR_MortarBattery battery, float now) + { + // Only the coordinates actually delivered to this battery are available. + // A newer HQ contact cannot update a gun's knowledge without another downlink. + if (!battery || !ERR_MortarPrediction.Fresh(battery.Report, now)) return null; + return battery.Report; + } + string ContactFailure(ERR_MortarBattery battery) + { + if (!battery.Report) return "no delivered target report"; + return "delivered target report expired or invalid"; + } + // Classify only after SupplyState has observed any accepted inventory move. + // Report expiry must not be mislabeled as physical ammunition depletion. + string SupplyFailure(ERR_MortarBattery battery, float now) + { + if (!Latest(battery, now)) return ContactFailure(battery); + return "next native load lacks confirmed physical gunner ammunition"; + } + bool OutsideSettlements(vector impact) + { + bool clear = m_Settlements.OutsideSettlements(impact); + SettlementReason = m_Settlements.SettlementReason; + return clear; + } + bool Safe(ERR_MortarBattery battery, vector impact, float flight) + { + SafetyReason = "clear"; + if (!battery.Operational()) { SafetyReason = battery.OperationalReason(); return false; } + if (!OutsideSettlements(impact)) { SafetyReason = SettlementReason; return false; } + if (SCR_TerrainHelper.GetTerrainY(impact) < 0) { SafetyReason = "impact below Everon sea level"; return false; } + Faction faction = battery.Group.GetFaction(); + if (!faction) { SafetyReason = "battery faction missing"; return false; } + array friendlies = {}; + m_HQ.PhysicalForces(friendlies); + foreach (IEntity entity : friendlies) + { + Faction friendly = SCR_FactionManager.SGetFaction(entity); + if (!friendly || faction.IsFactionEnemy(friendly) || !ERR_Actors.Alive(entity)) continue; + vector velocity; + IEntity moving = CompartmentAccessComponent.GetVehicleIn(entity); + if (!moving) moving = entity; + if (moving.GetPhysics()) velocity = moving.GetPhysics().GetVelocity(); + if (ERR_MortarPrediction.ThreatensFriendly(impact, entity.GetOrigin(), velocity, flight)) + { + SafetyReason = "friendly physical force can enter the impact area"; + return false; + } + } + return true; + } + bool Withhold(ERR_MortarBattery battery, string reason, string detail = "") + { + battery.LastFailure = reason + "; " + detail; + battery.Trace("WITHHELD", reason, detail); + // Finish the activity from the next HQ tick, never from inside its own node. + battery.Rejected = true; + return false; + } + bool AllowShot(ERR_MortarBattery battery) + { + float now = GetGame().GetWorld().GetWorldTime(); + if (m_Stopped || !ERR_HQ.MissionActive()) return Withhold(battery, "mission inactive or HQ stopped"); + if (!battery.Operational()) return Withhold(battery, battery.OperationalReason()); + if (battery.RefreshRejected) return Withhold(battery, "target update failed; order awaiting cancellation"); + if (!battery.CommandOpen || battery.OrderShots >= ERR_MortarSalvo.ROUNDS) return Withhold(battery, "salvo complete or order closed"); + if (battery.Released) return Withhold(battery, "waiting for committed projectile"); + if (battery.AimedShot != battery.OrderShots || battery.AimedAt < 0 || now < battery.AimedAt) return Withhold(battery, "fresh aim solution required"); + ERR_HQReport report = Latest(battery, now); + if (!report) return Withhold(battery, ContactFailure(battery)); + if (!battery.AimSolution || !battery.AimSolution.Matches(battery, report)) return Withhold(battery, "aim command does not match delivered order"); + if (battery.AimValidatedAt < battery.AimedAt || now < battery.AimValidatedAt) return Withhold(battery, "aim validation timestamp invalid"); + if (now - battery.AimValidatedAt > 10000) + { + if (!battery.AimSolver) return Withhold(battery, "original native aim solver no longer available"); + if (!battery.AimSolver.ERR_RevalidateAim(battery, this, report, now)) return false; + } + vector updated; + if (!ERR_MortarPrediction.Predict(report, now, battery.FlightTime, updated)) return Withhold(battery, ERR_MortarPrediction.FailureReason); + updated += battery.AimOffset; + if (vector.DistanceXZ(updated, battery.Impact) > 60) return Withhold(battery, "predicted target left aimed impact area"); + if (!OutsideSettlements(updated)) return Withhold(battery, SettlementReason); + if (!Safe(battery, battery.Impact, battery.FlightTime)) return Withhold(battery, SafetyReason); + return true; + } + protected void AdvanceOrder(ERR_MortarBattery battery, float now) + { + if (battery.RadioOrder) + { + int deliveredState = battery.RadioOrder.Advance(now, m_HQ.Journal()); + if (deliveredState == 0) return; + ERR_HQReport delivered = battery.PendingRadioReport; + battery.RadioOrder = null; + battery.PendingRadioReport = null; + if (deliveredState < 0 || !ERR_MortarPrediction.Fresh(delivered, now) || !battery.Operational() || battery.Activity || !battery.CommandOpen) + { + battery.Cancel("radio delivery, report freshness or battery availability failed"); + battery.NextOrder = now + 10000; + return; + } + battery.PendingSupplyReport = delivered; + } + if (!battery.PendingSupplyReport) return; + if (!battery.CommandOpen || !ERR_MortarPrediction.Fresh(battery.PendingSupplyReport, now) || !battery.Operational() || battery.Activity) + { + battery.Cancel("delivered order expired or became unavailable while awaiting physical ammunition"); + battery.NextOrder = now + 10000; + return; + } + ERR_MortarSupplyState supply = battery.SupplyState(now); + if (supply == ERR_MortarSupplyState.PENDING) return; + if (supply == ERR_MortarSupplyState.FAILED) + { + battery.Cancel("physical gunner ammunition unavailable or transfer failed"); + battery.NextOrder = now + 10000; + return; + } + ERR_HQReport ready = battery.PendingSupplyReport; + battery.PendingSupplyReport = null; + battery.Order(ready, now); + } + + protected void AdvanceRefresh(ERR_MortarBattery battery, float now) + { + ERR_MortarRefresh update = battery.Refresh; + if (!update) return; + // A stale transaction must not cancel or modify a later order. + if (update.OrderId != battery.OrderId || !battery.CommandOpen) + { + battery.Refresh = null; + return; + } + if (!update.Owns(battery) || !battery.Operational() || !battery.Activity || !ERR_MortarRefreshRules.Newer(battery.Report, update.Report, now)) + { + battery.RejectRefresh("target update ownership, observation freshness or activity changed"); + return; + } + if (update.Route) + { + int state = update.Route.Advance(now, m_HQ.Journal()); + if (state == 0) return; + if (state < 0) + { + battery.RejectRefresh("new target observation failed physical HQ radio delivery"); + return; + } + update.Route = null; + } + // The original committed shell owns its report, geometry and airspace until + // native OnWeaponFired confirms it. A delivered update cannot relabel it. + if (battery.Released) return; + if (battery.AimSolution) + { + if (!battery.AimSolver || !battery.AimSolver.ERR_AdoptReport(battery, this, update.Report, now)) + { + battery.RejectRefresh("delivered update cannot preserve the original native aim command"); + return; + } + } + else + { + // No barrel command exists for the next shell yet. Its normal native aim + // node must solve this report; receiving it is not an aim authorization. + battery.Report = update.Report; + } + battery.Audit("UPDATE RECEIVED", string.Format("same order; update radio=M%1 accepted observation=M%2 observed=%3; shots=%4 original aim time=%5", update.RadioId, update.Report.MessageId, update.Report.ObservedAt, battery.OrderShots, battery.AimedAt)); + battery.Refresh = null; + } + + protected void QueueRefreshes(float now) + { + if (now < m_NextRefreshDecision) return; + m_NextRefreshDecision = now + 5000; + array reports = {}; + m_HQ.SupportContacts(reports, now); + foreach (ERR_MortarBattery battery : m_Batteries) + { + ERR_HQReport newest; + foreach (ERR_HQReport report : reports) + { + if (!battery.CanRefresh(report, now)) continue; + if (!newest || report.ObservedAt > newest.ObservedAt) newest = report; + } + if (!newest) continue; + ERR_HQRoute route = m_HQ.Downlink(battery.Group, "MORTAR UPDATE", newest.Description(now), newest.MessageId); + if (!route) + { + battery.RejectRefresh("HQ has a newer observation but no physical downlink to the active battery"); + continue; + } + battery.BeginRefresh(newest, route, now); + } + } + + void Tick(float now) + { + if (m_Stopped || !Replication.IsServer()) return; + foreach (ERR_MortarBattery battery : m_Batteries) + { + if ((battery.Rejected || battery.RefreshRejected) && !battery.Released) + { + battery.Cancel("native aim or firing authorization rejected"); + battery.NextOrder = now + 10000; + } + battery.Rejected = false; + battery.Update(now); + AdvanceOrder(battery, now); + AdvanceRefresh(battery, now); + } + QueueRefreshes(now); + if (now < m_NextDecision) return; + m_NextDecision = now + 10000; + array reports = {}; + m_HQ.SupportContacts(reports, now); + ERR_MortarBattery selected; + ERR_HQReport target; + float distance = float.MAX; + foreach (ERR_MortarBattery battery : m_Batteries) + { + if (!battery.StartupActivated || !battery.Operational() || battery.Activity || battery.RadioOrder || battery.PendingSupplyReport || battery.SupplyPending() || now < battery.NextOrder || battery.CountShells() == 0) continue; + foreach (ERR_HQReport report : reports) + { + if (!battery.CanRequest(report, now)) continue; + float candidate = vector.DistanceXZ(battery.Position, report.Position); + if (candidate < 350 || candidate > 4000 || candidate >= distance || !OutsideSettlements(report.Position)) continue; + selected = battery; + target = report; + distance = candidate; + } + } + if (!selected || !target) return; + ERR_HQRoute route = m_HQ.Downlink(selected.Group, "MORTAR ORDER", target.Description(now), target.MessageId); + if (!route) return; + if (!selected.BeginRequest(target, now)) return; + selected.RadioId = route.MessageId; + selected.RadioOrder = route; + selected.PendingRadioReport = target.Snapshot(); + m_NextDecision = now + 20000; + } + void AppendGuns(array entities) + { + foreach (ERR_MortarBattery battery : m_Batteries) + if (battery.Gun && !entities.Contains(battery.Gun)) entities.Insert(battery.Gun); + } + string Status() + { + int ready, shells; + foreach (ERR_MortarBattery battery : m_Batteries) + { + if (battery.StartupActivated && battery.Operational()) ready++; + shells += battery.CountShells(); + } + return string.Format("mortars %1/%2; HE shells %3", ready, m_Batteries.Count(), shells); + } + void Stop() + { + m_Stopped = true; + foreach (ERR_MortarBattery battery : m_Batteries) battery.Stop(); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c new file mode 100644 index 0000000..d08a12a --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c @@ -0,0 +1,366 @@ +#ifdef WORKBENCH +// Separate Chat fixture for the ACTUAL dormant AI controller. Core's original +// powered-flight probe is disabled for this outcome and retains its own evidence. +modded class SCR_CharacterControllerComponent +{ + override void OnPrepareControls(IEntity owner, ActionManager am, float dt, bool player) + { + ERR_NativeAircraftControlProbe probe = ERR_NativeAircraftControlProbe.Current(); + if (probe && !player) probe.PrepareActions(this, owner, am, dt); + super.OnPrepareControls(owner, am, dt, player); + } +} +modded class SCR_HelicopterControllerComponent +{ + protected override event void OnPrepareControls() + { + super.OnPrepareControls(); + ERR_NativeAircraftControlProbe probe = ERR_NativeAircraftControlProbe.Current(); + if (probe) probe.PrepareHelicopter(this); + } +} +// Read-only native fixture observation; no production method or state override. +modded class ERR_AircraftFlight +{ + float ERR_NativeControlDeadline() { return m_Deadline; } +} +class ERR_NativeAircraftControlRules +{ + static bool Terminal(bool cancellation, int state, int cancellationCount) + { + if (cancellation) return state == ERR_AircraftFlightState.CANCELLED && cancellationCount == 1; + return state == ERR_AircraftFlightState.COMPLETE && cancellationCount == 0; + } + static bool CanCancel(int state, bool contact, float height) + { + return state == ERR_AircraftFlightState.CLIMB && !contact && height >= 5 && height <= 18; + } + static bool CancelProof(bool airborneHooks, bool landingHeld, bool sameDeadline, bool sameToken) + { + return airborneHooks && landingHeld && sameDeadline && sameToken; + } + static bool TranslateProof(bool proven, bool held, float requestedDistance, float displacement, float targetError) + { + return proven && held && requestedDistance >= 1.75 && requestedDistance <= 4.05 && displacement >= 1 && targetError >= 0 && targetError <= 0.75; + } + static bool PhysicalFinish(bool originalOccupancy, bool landed, bool engineOff, float fuelUsed, int wakes, int starts, int controllerStarts, int pilotHooks, int helicopterHooks) + { + if (!originalOccupancy || !landed || !engineOff) return false; + return fuelUsed > 0.05 && wakes == 1 && starts == 1 && controllerStarts == 1 && pilotHooks > 100 && helicopterHooks > 100; + } + static bool CanDispose(bool context, bool noPlayers, bool sameFaction, bool groupUnchanged, bool pilotUnchanged) + { + return context && noPlayers && sameFaction && groupUnchanged && pilotUnchanged; + } +} +class ERR_NativeAircraftControlProbe +{ + protected static ERR_NativeAircraftControlProbe s_Current; + protected ERR_GameMode m_Mode; + protected Vehicle m_Aircraft; + protected SCR_AIGroup m_Group; + protected IEntity m_Pilot; + protected PilotCompartmentSlot m_Seat; + protected HelicopterControllerComponent m_Controller; + protected VehicleHelicopterSimulation m_Simulation; + protected FuelManagerComponent m_Fuel; + protected ref ERR_AircraftFlightEnvelope m_Envelope; + protected ref ERR_AircraftFlight m_Flight; + protected float m_Deadline; + protected float m_StageDeadline; + protected float m_Stable = -1; + protected float m_LastTick = -1; + protected float m_NextLog; + protected float m_InitialFuel; + protected float m_ControlDeadline; + protected float m_CancelAt = -1; + protected float m_LandingStable = -1; + protected int m_CancelCount; + protected int m_CancelPilotHooks; + protected int m_CancelHelicopterHooks; + protected bool m_CancelFixture; + protected bool m_TranslationFixture; + protected bool m_TranslationObserved; + protected bool m_TranslationHeld; + protected vector m_TranslationOrigin; + protected vector m_TranslationTarget; + protected float m_TranslationStable = -1; + protected bool m_ContinuedAirborneControl; + protected bool m_LandingHeld; + protected vector m_Pad; + protected int m_Step; + protected int m_Wakes; + protected int m_ControllerStarts; + protected int m_EngineStarts; + protected int m_PilotHooks; + protected int m_HelicopterHooks; + protected bool m_LastEngine; + protected bool m_AllocationRequested; + protected bool m_PilotRequested; + protected bool m_Stopped; + protected bool m_Complete; + static const int ORDER_TOKEN = 771001; + static const ResourceName AIRCRAFT = "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et"; + static const ResourceName GROUP = "{000CD338713F2B5A}Prefabs/AI/Groups/Group_Base.et"; + static const ResourceName PILOT = "{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et"; + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && (outcome == "aircraft-control" || outcome == "aircraft-cancel" || outcome == "aircraft-translate"); + } + static ERR_NativeAircraftControlProbe Current() { return s_Current; } + void ERR_NativeAircraftControlProbe(ERR_GameMode mode) + { + m_Mode = mode; + if (!GetGame() || !GetGame().GetWorld() || !Enabled() || s_Current) { m_Stopped = true; return; } + string outcome; System.GetCLIParam("errSmokeOutcome", outcome); m_CancelFixture = outcome == "aircraft-cancel"; m_TranslationFixture = outcome == "aircraft-translate"; + m_Deadline = GetGame().GetWorld().GetWorldTime() + 300000; + s_Current = this; + } + protected bool Check(bool passed, string detail) + { + string outcome = "aircraft-control"; if (m_CancelFixture) outcome = "aircraft-cancel"; else if (m_TranslationFixture) outcome = "aircraft-translate"; + if (passed) { Print("ERR SMOKE PASS: " + outcome + " " + detail); return true; } + Print("ERR SMOKE FAIL: " + outcome + " " + detail, LogLevel.ERROR); Stop(); return false; + } + protected bool NoPlayers() + { + if (!GetGame() || !GetGame().GetPlayerManager()) return false; + if (m_Group && m_Group.GetPlayerCount(true) > 0) return false; + array players = {}; GetGame().GetPlayerManager().GetPlayers(players); + foreach (int id : players) + { + IEntity actor = GetGame().GetPlayerManager().GetPlayerControlledEntity(id); + if (actor && (actor == m_Pilot || actor == m_Aircraft || (m_Aircraft && CompartmentAccessComponent.GetVehicleIn(actor) == m_Aircraft))) return false; + } + return true; + } + protected bool OriginalOccupancy() + { + if (!m_Pilot || !m_Group || !m_Aircraft || !m_Controller || !m_Seat || !NoPlayers()) return false; + if (m_Group.GetAgentsCount() != 1 || ERR_Actors.Group(m_Pilot) != m_Group || !ERR_Actors.CanFight(m_Pilot)) return false; + return m_Seat.GetOccupant() == m_Pilot && m_Controller.GetPilotCompartmentSlot() == m_Seat && CompartmentAccessComponent.GetVehicleIn(m_Pilot) == m_Aircraft; + } + void PrepareActions(CharacterControllerComponent controller, IEntity owner, ActionManager am, float dt) + { + if (m_Stopped || !m_Flight || owner != m_Pilot) return; + m_Flight.PrepareActions(controller, owner, am, dt); m_PilotHooks++; + } + void PrepareHelicopter(HelicopterControllerComponent controller) + { + if (m_Stopped || !m_Flight || controller != m_Controller) return; + m_Flight.PrepareHelicopter(controller); m_HelicopterHooks++; + } + protected bool FindPad(out vector result) + { + vector anchor = m_Mode.ExtractionVehicle().GetOrigin(); + float bestSlope = float.MAX; vector bestCandidate, refinementAnchor; + int localCandidates = ERR_PoweredFlightRules.PAD_CANDIDATES + ERR_PoweredFlightRules.PAD_REFINEMENTS; + for (int index = 0; index < localCandidates + ERR_PoweredFlightRules.AIRPORT_CANDIDATES; index++) + { + if (index == ERR_PoweredFlightRules.PAD_CANDIDATES) + { + refinementAnchor = anchor; if (bestSlope != float.MAX) refinementAnchor = bestCandidate; + } + vector candidate; + if (index < ERR_PoweredFlightRules.PAD_CANDIDATES) candidate = ERR_Actors.Ground(anchor + ERR_PoweredFlightRules.PadOffset(index)); + else if (index < localCandidates) candidate = ERR_Actors.Ground(refinementAnchor + ERR_PoweredFlightRules.RefineOffset(index - ERR_PoweredFlightRules.PAD_CANDIDATES)); + else candidate = ERR_Actors.Ground("4900.953 0 11787.412" + ERR_PoweredFlightRules.AirportOffset(index - localCandidates)); + if (candidate[1] < 2) continue; + float delta; + for (int edge = 0; edge < 4; edge++) + { + float side = edge * Math.PI / 2; + vector point = candidate + Vector(Math.Cos(side) * 14, 0, Math.Sin(side) * 14); + delta = Math.Max(delta, Math.AbsFloat(SCR_TerrainHelper.GetTerrainY(point) - candidate[1])); + } + if (delta < bestSlope) { bestSlope = delta; bestCandidate = candidate; } + if (delta > 0.8) continue; + if (!SCR_WorldTools.TraceCilinderUtil(candidate + "0 2.5 0", 40, 4, TraceFlags.ENTS)) continue; + TraceBox clearance = new TraceBox(); clearance.Start = candidate + "0 3 0"; clearance.End = candidate + "0 60 0"; + clearance.Mins = "-40 -1 -40"; clearance.Maxs = "40 1 40"; clearance.Flags = TraceFlags.ENTS | TraceFlags.WORLD; + if (!(GetGame().GetWorld().TraceMove(clearance, null) >= 1)) continue; + PrintFormat("ERR AIRCRAFT FIXTURE PAD: candidate=%1 tested=%2 terrainDelta=%3; no fallback", candidate, index + 1, delta); + result = candidate; return true; + } + return false; + } + protected bool ReadyComponents() + { + m_Controller = HelicopterControllerComponent.Cast(m_Aircraft.FindComponent(HelicopterControllerComponent)); + if (!m_Controller) return false; + m_Simulation = m_Controller.GetSimulation(); + m_Fuel = FuelManagerComponent.Cast(m_Aircraft.FindComponent(FuelManagerComponent)); + if (!m_Simulation || !m_Simulation.IsValid() || !m_Fuel || !m_Fuel.HasFuel()) return false; + BaseCompartmentManagerComponent manager = BaseCompartmentManagerComponent.Cast(m_Aircraft.FindComponent(BaseCompartmentManagerComponent)); + if (!manager) return false; + array slots = {}; manager.GetCompartments(slots); + if (slots.Count() > 64) return false; + foreach (BaseCompartmentSlot slot : slots) + { + PilotCompartmentSlot pilotSlot = PilotCompartmentSlot.Cast(slot); + if (!pilotSlot || pilotSlot.GetOwner() != m_Aircraft || pilotSlot.GetVehicle() != m_Aircraft || pilotSlot.GetCompartmentName() != "PilotCompartment") continue; + if (pilotSlot.GetType() != ECompartmentType.PILOT) continue; + if (pilotSlot.GetOccupant() || pilotSlot.IsReserved() || pilotSlot.IsGetInLocked() || !pilotSlot.IsCompartmentAccessible()) continue; + m_Seat = pilotSlot; return true; + } + return false; + } + protected void Diagnostic(float now) + { + if (!m_Aircraft || !m_Controller || !m_Simulation || now < m_NextLog) return; + m_NextLog = now + 2000; + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + vector home = m_Pad; if (m_Envelope) home = m_Envelope.Home(); + int state = -1; string reason; if (m_Flight) { state = m_Flight.State(); reason = m_Flight.Reason(); } + PrintFormat("ERR AIRCRAFT FIXTURE: step=%1 state=%2 height=%3 drift=%4 speed=%5 contact=%6 engine=%7 fuelUsed=%8 reason=%9", m_Step, state, transform[3][1] - home[1], vector.DistanceXZ(transform[3], home), m_Simulation.GetVelocity().Length(), m_Simulation.HasAnyGroundContact(), m_Controller.IsEngineOn(), m_InitialFuel - m_Fuel.GetTotalFuel(), reason); + } + int Tick(float now) + { + if (m_Complete) return 1; + if (m_Stopped) return -1; + if (!Enabled() || !m_Mode || m_Mode != ERR_GameMode.Get() || !m_Mode.Active() || now >= m_Deadline) { Check(false, "active exact mission and bounded300-second fixture"); return -1; } + if (!NoPlayers()) { Check(false, "fixture remains unclaimed by any human"); return -1; } + if (m_LastTick >= 0 && (now < m_LastTick || now - m_LastTick > 1500)) { m_Stable = -1; m_LandingStable = -1; m_TranslationStable = -1; } + m_LastTick = now; + if (m_Step == 0) + { + if (!m_Mode.ExtractionVehicle()) return 0; + if (!Check(!m_AllocationRequested && FindPad(m_Pad), "independent qualified candidate found before one finite allocation")) return -1; + m_AllocationRequested = true; + m_Aircraft = Vehicle.Cast(ERR_Actors.Spawn(AIRCRAFT, m_Pad)); + m_Group = SCR_AIGroup.Cast(ERR_Actors.Spawn(GROUP, m_Pad + "20 0 0")); + if (!Check(m_Aircraft && m_Group && m_Group.InitFactionKey("USSR") && m_Group.GetFaction() == m_Mode.EnemyFaction(), "one finite native Mi8 and memberless enemy group created")) return -1; + m_Group.SetPermanentLOD(0); m_Group.ActivateAI(); + m_Step = 1; m_StageDeadline = now + 30000; return 0; + } + if (!m_Aircraft || !m_Group || !ERR_Actors.Alive(m_Aircraft)) { Check(false, "original airframe and group survive without replacement"); return -1; } + if (m_Step == 1) + { + if (now >= m_StageDeadline) { Check(false, "real components and original pilot initialize within30seconds"); return -1; } + if (!ReadyComponents()) return 0; + if (!Check(!m_PilotRequested && m_Group.GetAgentsCount() == 0, "one original native pilot request only")) return -1; + m_PilotRequested = true; AIGroup originalGroup = m_Group; + m_Pilot = m_Seat.SpawnCharacterInCompartment(PILOT, originalGroup, GROUP); + AIControlComponent control; if (m_Pilot) control = AIControlComponent.Cast(m_Pilot.FindComponent(AIControlComponent)); + AIAgent agent; if (control) agent = control.GetControlAIAgent(); + if (!Check(m_Pilot && originalGroup == m_Group && agent, "pilot seated by native mechanism in original group")) return -1; + agent.SetPermanentLOD(0); agent.ActivateAI(); m_Step = 2; return 0; + } + Diagnostic(now); + if (m_Step == 2) + { + if (now >= m_StageDeadline) { Check(false, "actual initial seating and native ground settling within30seconds"); return -1; } + if (!OriginalOccupancy()) { m_Stable = -1; return 0; } + Physics physics = m_Aircraft.GetPhysics(); + if (!physics || !physics.IsDynamic()) return 0; + if (m_Wakes == 0) { m_Wakes = 1; physics.SetActive(ActiveState.ACTIVE); m_Stable = -1; return 0; } + if (!m_Simulation.HasAnyGroundContact() || !ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft)) { m_Stable = -1; return 0; } + if (m_Stable < 0) m_Stable = now; + if (now - m_Stable < 1000) return 0; + if (!Check(!m_Controller.IsEngineOn(), "post-spawn qualification precedes native engine start")) return -1; + m_Envelope = ERR_AircraftFlightEnvelope.Qualify(m_Mode, m_Aircraft, m_Pilot); + if (!Check(m_Envelope != null, "actual post-spawn column and complete rotor/model footprint issue exact qualification")) return -1; + m_InitialFuel = m_Fuel.GetTotalFuel(); + m_Flight = new ERR_AircraftFlight(); m_ControllerStarts++; + m_ControlDeadline = Math.Min(m_Deadline, now + 240000); + bool started; + if (m_TranslationFixture) started = m_Flight.StartTranslation(m_Mode, m_Aircraft, m_Group, m_Pilot, m_Seat, m_Envelope, ORDER_TOKEN, m_ControlDeadline, m_Envelope.Home()); + else started = m_Flight.Start(m_Mode, m_Aircraft, m_Group, m_Pilot, m_Seat, m_Envelope, ORDER_TOKEN, m_ControlDeadline); + if (!Check(started, "actual controller accepts one qualified original pilot/aircraft order")) return -1; + m_Step = 3; return 0; + } + if (m_Step == 3) + { + if (!OriginalOccupancy()) { Check(false, "original pilot remains conscious and in its exact seat/group"); return -1; } + bool engine = m_Controller.IsEngineOn(); if (engine && !m_LastEngine) m_EngineStarts++; m_LastEngine = engine; + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + vector home = m_Envelope.Home(); float height = transform[3][1] - home[1]; + bool contact = m_Simulation.HasAnyGroundContact(); + bool landed = ERR_AircraftFlightRules.Landed(contact, height, m_Simulation.GetVelocity().Length(), m_Simulation.GetAngularVelocity().Length(), transform[1][1]); + if (m_CancelFixture && m_CancelCount == 0 && ERR_NativeAircraftControlRules.CanCancel(m_Flight.State(), contact, height)) + { + m_CancelCount = 1; m_CancelAt = now; + m_CancelPilotHooks = m_PilotHooks; m_CancelHelicopterHooks = m_HelicopterHooks; + m_Flight.Cancel("native fixture deliberate airborne cancellation"); + PrintFormat("ERR AIRCRAFT CANCEL: height=%1 contact=%2 state=%3 token=%4 deadline=%5 pilotHooks=%6 helicopterHooks=%7", height, contact, m_Flight.State(), m_Flight.OrderToken(), m_Flight.ERR_NativeControlDeadline(), m_PilotHooks, m_HelicopterHooks); + if (!Check(m_Flight.State() == ERR_AircraftFlightState.LANDING && !m_Flight.Finished(), "one actual airborne Cancel enters retained LANDING control")) return -1; + } + if (m_CancelCount == 1) + { + if (m_Flight.ERR_NativeControlDeadline() != m_ControlDeadline || m_Flight.OrderToken() != ORDER_TOKEN) { Check(false, "cancel retains original overall deadline and exact order token"); return -1; } + int state = m_Flight.State(); + if (state != ERR_AircraftFlightState.LANDING && state != ERR_AircraftFlightState.SHUTDOWN && state != ERR_AircraftFlightState.CANCELLED) { Check(false, "cancel retains landing or grounded shutdown states only"); return -1; } + if (state == ERR_AircraftFlightState.LANDING && !contact && height > 1 && m_PilotHooks > m_CancelPilotHooks + 10 && m_HelicopterHooks > m_CancelHelicopterHooks + 10) m_ContinuedAirborneControl = true; + if (!landed) m_LandingStable = -1; + else if (m_LandingStable < 0) m_LandingStable = now; + } + if (m_TranslationFixture && m_Flight.State() == ERR_AircraftFlightState.TRANSLATING) + { + if (!m_TranslationObserved) + { + m_TranslationObserved = true; m_TranslationOrigin = m_Flight.TranslationOrigin(); m_TranslationTarget = m_Flight.TranslationTarget(); + if (!Check(vector.DistanceXZ(m_TranslationTarget, home) < 0.001, "pre-takeoff translation target remains the original qualified home")) return -1; + } + if (m_Flight.TranslationTarget() != m_TranslationTarget || m_Flight.TranslationOrigin() != m_TranslationOrigin || m_Flight.ERR_NativeControlDeadline() != m_ControlDeadline) { Check(false, "translation never retargets or renews its original deadline"); return -1; } + vector horizontal = m_Simulation.GetVelocity(); horizontal[1] = 0; + float requested = vector.DistanceXZ(m_TranslationOrigin, m_TranslationTarget); + bool held = ERR_AircraftTranslationRules.Held(contact, height, m_Simulation.GetVelocity().Length(), m_Simulation.GetVelocity()[1], transform[1][1], horizontal.Length(), vector.DistanceXZ(transform[3], m_TranslationTarget), vector.DistanceXZ(transform[3], m_TranslationOrigin), requested); + if (!held) m_TranslationStable = -1; + else if (m_TranslationStable < 0) m_TranslationStable = now; + if (m_TranslationStable >= 0 && now - m_TranslationStable >= 5000) m_TranslationHeld = true; + } + m_Flight.Tick(); + if (m_CancelCount == 1 && m_Flight.State() == ERR_AircraftFlightState.SHUTDOWN) + { + if (!Check(landed && m_LandingStable >= 0 && now - m_LandingStable >= 2000, "cancel reaches shutdown only after two observed stable grounded seconds")) return -1; + m_LandingHeld = true; + } + if (!m_Flight.Finished()) return 0; + PrintFormat("ERR AIRCRAFT FIXTURE RESULT: state=%1 token=%2 engineStarts=%3 controllerStarts=%4 wakes=%5 pilotHooks=%6 helicopterHooks=%7 reason=%8", m_Flight.State(), m_Flight.OrderToken(), m_EngineStarts, m_ControllerStarts, m_Wakes, m_PilotHooks, m_HelicopterHooks, m_Flight.Reason()); + bool complete = ERR_NativeAircraftControlRules.Terminal(m_CancelFixture, m_Flight.State(), m_CancelCount); + complete = complete && ERR_NativeAircraftControlRules.PhysicalFinish(OriginalOccupancy(), landed, !m_Controller.IsEngineOn(), m_InitialFuel - m_Fuel.GetTotalFuel(), m_Wakes, m_EngineStarts, m_ControllerStarts, m_PilotHooks, m_HelicopterHooks); + if (m_CancelFixture) + { + bool proof = ERR_NativeAircraftControlRules.CancelProof(m_ContinuedAirborneControl, m_LandingHeld, m_Flight.ERR_NativeControlDeadline() == m_ControlDeadline, m_Flight.OrderToken() == ORDER_TOKEN); + PrintFormat("ERR AIRCRAFT CANCEL RESULT: count=%1 elapsed=%2 airborneHooks=%3 landingHeld=%4 deadline=%5 originalDeadline=%6", m_CancelCount, now - m_CancelAt, m_ContinuedAirborneControl, m_LandingHeld, m_Flight.ERR_NativeControlDeadline(), m_ControlDeadline); + complete = complete && proof; + } + if (m_TranslationFixture) + { + float requestedDistance = vector.DistanceXZ(m_TranslationOrigin, m_TranslationTarget); + float displacement = vector.DistanceXZ(transform[3], m_TranslationOrigin); + float targetError = vector.DistanceXZ(transform[3], m_TranslationTarget); + bool translated = ERR_NativeAircraftControlRules.TranslateProof(m_Flight.TranslationProven(), m_TranslationObserved && m_TranslationHeld, requestedDistance, displacement, targetError); + PrintFormat("ERR AIRCRAFT TRANSLATION RESULT: proven=%1 held=%2 requested=%3 displacement=%4 targetError=%5 updates=%6", m_Flight.TranslationProven(), m_TranslationHeld, requestedDistance, displacement, targetError, m_Flight.TranslationUpdates()); + complete = complete && translated; + } + if (!Check(complete && m_Flight.OrderToken() == ORDER_TOKEN, "actual control order completes on original physical grounded aircraft with engine off, finite fuel use and exact pilot")) return -1; + m_Complete = true; Stop(); return 1; + } + return 0; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (s_Current == this) s_Current = null; + if (m_Flight && !m_Flight.Finished() && m_CancelCount == 0) m_Flight.Cancel("native fixture stopped"); + // End-of-test disposal is not successful flight or a production cancellation. + // These assets are fixture-owned only, never registered with mission cleanup. + // Release the controller before deleting disposable unclaimed physical assets. + m_Flight = null; + bool context = GetGame() && GetGame().GetWorld() && GetGame().GetPlayerManager() && m_Mode && m_Mode == ERR_GameMode.Get(); + bool faction = context && (!m_Group || (!m_PilotRequested && m_Group.GetAgentsCount() == 0 && !m_Group.GetFaction()) || m_Group.GetFaction() == m_Mode.EnemyFaction()) && (!m_Aircraft || SCR_FactionManager.SGetFaction(m_Aircraft) == m_Mode.EnemyFaction()); + bool groupUnchanged = context && (!m_Group || m_Group.GetAgentsCount() == 0 || (m_Group.GetAgentsCount() == 1 && m_Pilot && ERR_Actors.Group(m_Pilot) == m_Group)); + bool pilotUnchanged = context && (!m_Pilot || (m_Group && ERR_Actors.Group(m_Pilot) == m_Group && !ERR_Actors.Player(m_Pilot))); + if (ERR_NativeAircraftControlRules.CanDispose(context, NoPlayers(), faction, groupUnchanged, pilotUnchanged)) + { + ERR_Actors.DeleteSpawned(m_Group); ERR_Actors.DeleteSpawned(m_Pilot); ERR_Actors.DeleteSpawned(m_Aircraft); + } + else Print("ERR AIRCRAFT FIXTURE CLEANUP: ownership changed; captured entities preserved"); + m_Envelope = null; + } + void ~ERR_NativeAircraftControlProbe() { Stop(); } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c new file mode 100644 index 0000000..b141896 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c @@ -0,0 +1,213 @@ +#ifdef WORKBENCH +class ERR_NativeCourierMoveCallback : ScriptedInventoryOperationCallback +{ + int Result; + protected override void OnComplete() { if (Result == 0) Result = 1; } + protected override void OnFailed() { if (Result == 0) Result = -1; } +} +modded class ERR_HQ +{ + override bool QueueSupplyStatus(ERR_MortarBattery battery, float now) + { + bool queued = super.QueueSupplyStatus(battery, now); + ERR_NativeMortarCourierProbe probe = ERR_NativeMortarCourierProbe.Current(); + if (queued && probe) + foreach (ERR_HQUnit unit : m_Units) + if (unit.Group == battery.Group && unit.PendingSupplyStatus) probe.Uplink(unit.Uplink, unit.PendingSupplyStatus); + return queued; + } +} +class ERR_NativeMortarCourierProbe +{ + protected static ERR_NativeMortarCourierProbe s_Current; + protected ERR_GameMode m_Mode; + protected ERR_MortarLogistics m_Service; + protected ERR_MortarBattery m_Battery; + protected ref array m_Original = {}; + protected ref array m_Crew = {}; + protected ref array m_Depot = {}; + protected ref array m_Forces = {}; + protected ref array m_Boxes = {}; + protected ref array m_Stores = {}; + protected ref ERR_NativeCourierMoveCallback m_Callback; + protected IEntity m_Moving; + protected IEntity m_Source; + protected BaseInventoryStorageComponent m_Destination; + protected ref ERR_HQRoute m_Uplink; + protected ref ERR_HQRoute m_Downlink; + protected ref ERR_MortarSupplyStatus m_Status; + protected float m_ObservedAt; + protected int m_Message; + protected int m_Index; + protected int m_Stage; + protected float m_Deadline; + protected float m_MoveDeadline; + protected bool m_Complete; + protected bool m_Stopped; + protected vector m_Departure; + protected IEntity m_Bearer; + protected AIWaypointCycle m_OriginalPatrolCycle; + protected ref array m_OriginalPatrolMoves = {}; + static const int STORAGE_CANDIDATES = 64; + static const int STORAGE_COUNT = 5; + // The compact 8x8 grid keeps 3m between centers; blocked points are skipped. + static vector StorageOffset(int index) + { + if (index < 0 || index >= STORAGE_CANDIDATES) return vector.Zero; + int column = Math.Mod(index, 8); + int row = index / 8; + return Vector(20 + column * 3, 0, 15 + row * 3); + } + static const ResourceName BOX = "{EBBC859CCD94D96D}Prefabs/Props/EmptyStorages/USSR_AmmoBox_empty.et"; + static ERR_NativeMortarCourierProbe Current() { return s_Current; } + static bool Enabled() + { + string smoke, outcome; + return Replication.IsServer() && System.GetCLIParam("errSmoke", smoke) && smoke == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "mortar-courier"; + } + void ERR_NativeMortarCourierProbe(ERR_GameMode mode) { m_Mode = mode; if (Enabled()) s_Current = this; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: mortar courier " + detail); return true; } + Print("ERR SMOKE FAIL: mortar courier " + detail, LogLevel.ERROR); Stop(); return false; + } + protected bool Has(IEntity owner, IEntity shell) + { + if (!owner || !shell) return false; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(owner.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) return false; + array items = {}; ERR_Inventory.Items(inventory, items); return items.Contains(shell); + } + void Uplink(ERR_HQRoute route, ERR_MortarSupplyStatus report) + { + if (m_Stopped || !report || !m_Battery || report.Group != m_Battery.Group || m_Status) return; + m_Uplink = route; m_Status = report; m_ObservedAt = report.ObservedAt; m_Message = report.MessageId; + } + protected bool OriginalStored() + { + foreach (IEntity shell : m_Original) + { + if (!shell) return false; + int owners; + foreach (BaseInventoryStorageComponent storage : m_Stores) if (storage && storage.Contains(shell)) owners++; + foreach (IEntity actor : m_Crew) if (Has(actor, shell)) owners++; + if (owners != 1) return false; + } + return true; + } + protected bool PreservedForces(ERR_HQ hq) + { + array forces = {}; hq.PhysicalForces(forces); + if (forces.Count() != m_Forces.Count()) return false; + foreach (IEntity original : m_Forces) if (!original || !forces.Contains(original)) return false; + return true; + } + int Tick(float now) + { + if (m_Complete) return 1; + if (m_Stopped || !Enabled()) return -1; + if (m_Deadline == 0) m_Deadline = now + 360000; + if (now > m_Deadline) { Check(false, "bounded native courier deadline"); return -1; } + ERR_HQ hq = ERR_HQ.Get(); if (!hq) return 0; + m_Service = hq.Logistics(); if (!m_Service) return 0; + m_Battery = m_Service.Battery(); + if (m_Service.Stopped()) { Check(false, "production finite stock setup remains available"); return -1; } + if (!m_Battery || !m_Battery.StartupActivated || m_Service.State() == 0) return 0; + // No fire-controller hold, synthetic contact or routing bypass: this fixture + // requires the actual local prisoner to remain inside the gun's minimum range. + PlayerController controller = GetGame().GetPlayerController(); + IEntity player; if (controller) player = controller.GetControlledEntity(); + if (!player || !m_Mode.Players().CurrentActor(player) || vector.DistanceXZ(player.GetOrigin(), m_Battery.Gun.GetOrigin()) >= 300) { Check(false, "actual local prisoner remains below artillery minimum engagement range"); return -1; } + if (m_Stage == 0) + { + m_Service.InitialStock(m_Depot); hq.PhysicalForces(m_Forces); + ERR_ScenarioComponent scenario = ERR_ScenarioComponent.Cast(m_Mode.FindComponent(ERR_ScenarioComponent)); + ERR_SiteRuntime site = scenario.Sites().Find("everon-supply-2"); + if (!Check(site && site.Group == m_Service.Group() && site.PatrolCycle, "same original western cache patrol")) return -1; + m_OriginalPatrolCycle = site.PatrolCycle; m_OriginalPatrolMoves.Copy(site.PatrolWaypoints); + array agents = {}; m_Battery.Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + if (!agent || !agent.GetControlledEntity()) continue; + IEntity actor = agent.GetControlledEntity(); m_Crew.Insert(actor); + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(actor.FindComponent(InventoryStorageManagerComponent)); + array items = {}; ERR_Inventory.Items(inventory, items); + foreach (IEntity item : items) if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == ERR_MortarBattery.SHELL && !m_Original.Contains(item)) m_Original.Insert(item); + } + if (!Check(m_Original.Count() == 27 && m_Depot.Count() == 12 && m_Battery.TotalShots == 0, "27 original crew rounds and 12 distinct finite depot rounds")) return -1; + foreach (IEntity depotShell : m_Depot) if (!Check(!m_Original.Contains(depotShell) && Has(m_Service.Cache(), depotShell), "depot round is a distinct original cache item")) return -1; + int tested, lowGround, obstructed; + for (int i = 0; i < STORAGE_CANDIDATES && m_Stores.Count() < STORAGE_COUNT; i++) + { + tested++; + vector position = ERR_Actors.Ground(m_Battery.Gun.GetOrigin() + StorageOffset(i)); + if (position[1] <= 1) { lowGround++; continue; } + if (!SCR_WorldTools.TraceCilinderUtil(position + "0 1 0", 1.3, 2, TraceFlags.ENTS | TraceFlags.WORLD)) { obstructed++; continue; } + IEntity box = ERR_Actors.Spawn(BOX, position); + if (!Check(box != null, "fixture-only empty box created; no new ammunition")) return -1; + m_Mode.Own(box); m_Boxes.Insert(box); + BaseInventoryStorageComponent storage = BaseInventoryStorageComponent.Cast(box.FindComponent(BaseInventoryStorageComponent)); + if (!Check(storage != null, "fixture box has real native storage")) return -1; + m_Stores.Insert(storage); + } + Print(string.Format("ERR COURIER STORAGE: tested=%1/64 ready=%2/5 lowGround=%3 obstructed=%4", tested, m_Stores.Count(), lowGround, obstructed)); + if (!Check(m_Boxes.Count() == STORAGE_COUNT && m_Stores.Count() == STORAGE_COUNT, "five owned empty native stores ready before moving any original shell")) return -1; + Print("ERR COURIER FIXTURE: original 27 shells will be physically sequestered in five fixture boxes, not fired/destroyed; no report insertion, teleport, AI hold or replacement ammunition"); + m_Stage = 1; + } + if (m_Stage == 1) + { + if (m_Callback) + { + if (m_Callback.Result < 0 || now >= m_MoveDeadline || !m_Moving) { Check(false, "native depletion move neither failed nor timed out/item lost"); return -1; } + InventoryItemComponent item = InventoryItemComponent.Cast(m_Moving.FindComponent(InventoryItemComponent)); + if (m_Callback.Result == 0 || !item || !item.GetParentSlot() || item.GetParentSlot().GetStorage() != m_Destination || Has(m_Source, m_Moving) || !m_Destination.Contains(m_Moving)) return 0; + m_Callback = null; m_Moving = null; m_Source = null; m_Destination = null; m_Index++; + } + if (m_Index < m_Original.Count()) + { + m_Moving = m_Original[m_Index]; + foreach (IEntity owner : m_Crew) if (Has(owner, m_Moving)) m_Source = owner; + if (!Check(m_Source != null, "original shell still belongs to original crew before depletion")) return -1; + foreach (BaseInventoryStorageComponent candidate : m_Stores) if (candidate.PerformVolumeValidation(m_Moving)) { m_Destination = candidate; break; } + if (!Check(m_Destination != null, "five native boxes have capacity for original shells")) return -1; + InventoryStorageManagerComponent source = InventoryStorageManagerComponent.Cast(m_Source.FindComponent(InventoryStorageManagerComponent)); + m_Callback = new ERR_NativeCourierMoveCallback(); m_MoveDeadline = now + 8000; + if (!Check(source.TryMoveItemToStorage(m_Moving, m_Destination, -1, m_Callback), "native depletion move accepted, awaiting exact ownership proof")) return -1; + return 0; + } + if (!Check(OriginalStored() && m_Battery.CountShells() == 0, "all 27 original shells remain physical while real battery inventory is exhausted")) return -1; + m_Stage = 2; + } + if (!OriginalStored() || !PreservedForces(hq)) { Check(false, "all original shells and all original physical forces preserved"); return -1; } + if (!m_Downlink && m_Service.ProbeOrder()) m_Downlink = m_Service.ProbeOrder(); + if (!m_Bearer && m_Service.Courier()) { m_Bearer = m_Service.Courier(); m_Departure = m_Bearer.GetOrigin(); } + if (m_Service.Delivered() < 1 || m_Service.CompletedTrips() < 1 || m_Service.State() != 1) return 0; + AIWaypoint current = m_Service.Group().GetCurrentWaypoint(); + if (!current || (current != m_OriginalPatrolCycle && !m_OriginalPatrolMoves.Contains(current))) return 0; + if (!Check(m_Service.CompletedTrips() == 1 && hq.LogisticsToken(m_Service.Group()) == 0, "complete physical trip released HQ reservation and restored original native patrol")) return -1; + if (!Check(m_Status && m_Service.ProbeSourceMessage() == m_Message && m_Status.MessageId == m_Message && m_Status.ObservedAt == m_ObservedAt && ERR_MortarLogisticsRules.Fresh(m_ObservedAt, m_Service.ProbeLastDelivery()), "same immutable originally delivered supply status authorizes delivery")) return -1; + if (!Check(m_Uplink && !m_Uplink.Failed && !m_Uplink.Sending && m_Uplink.Cursor >= m_Uplink.Nodes.Count(), "actual low-ammo radio uplink reached HQ")) return -1; + if (!Check(m_Downlink && !m_Downlink.Failed && !m_Downlink.Sending && m_Downlink.Cursor == m_Downlink.Nodes.Count() - 1, "actual courier downlink completed before item delivery")) return -1; + if (!Check(m_Bearer && ERR_Actors.Group(m_Bearer) == m_Service.Group() && vector.DistanceXZ(m_Departure, m_Bearer.GetOrigin()) > 100, "same original bearer physically walked more than 100m")) return -1; + bool found; foreach (IEntity deliveredShell : m_Depot) foreach (IEntity recipient : m_Crew) if (Has(recipient, deliveredShell)) found = true; + if (!Check(found && m_Battery.CountShells() > 0 && m_Battery.TotalShots == 0, "previously empty battery now owns an exact original depot shell; no synthetic rounds or shots")) return -1; + foreach (IEntity retained : m_Depot) + { + int owners; + if (Has(m_Service.Cache(), retained)) owners++; + if (Has(m_Bearer, retained)) owners++; + foreach (IEntity crew : m_Crew) if (Has(crew, retained)) owners++; + if (!Check(retained && owners == 1, "each of 12 initial depot shells has exactly one physical owner")) return -1; + } + m_Complete = true; Stop(); return 1; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; if (s_Current == this) s_Current = null; + // Boxes with borrowed originals remain owned by normal mission cleanup. + // No manual restoration/deletion can race the production/native moves. + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c new file mode 100644 index 0000000..8f3c5dc --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c @@ -0,0 +1,334 @@ +#ifdef WORKBENCH +// Explicit synthetic observation only. Delivery, HQ scheduling and native fire +// are unchanged; this helper never writes directly into the HQ contact list. +modded class ERR_HQ +{ + int ERR_QueueMortarFixtureReport(SCR_AIGroup source, IEntity target, vector position, float now) + { + if (!ERR_NativeMortarFiringProbe.Enabled() || !target || !m_Contacts.IsEmpty()) return 0; + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != source || !unit.ReservedForSupport || !unit.Radio || unit.Uplink || unit.PendingReport) continue; + ERR_HQRoute route = m_Network.Route(unit.Radio); + if (!route || route.Nodes.IsEmpty()) return 0; + ERR_HQReport report = new ERR_HQReport(); + report.MessageId = m_Journal.Message(); report.Target = target; report.Source = source; + report.Position = position; report.ObservedAt = now; report.DetailsObservedAt = now; + report.HasVelocity = true; report.Velocity = vector.Zero; + report.TravelMode = "on foot"; report.SeenEscapists = 1; report.SeenWeapons = "fixture observation"; + route.MessageId = report.MessageId; route.Payload = "EXPLICIT SYNTHETIC OBSERVATION: " + report.Description(now); + unit.PendingReport = report; unit.Uplink = route; + m_Journal.Write("FIXTURE REPORT", route.Payload, report.MessageId); + return report.MessageId; + } + return 0; + } + void ERR_RemoveMortarFixtureReport(IEntity target) + { + if (!target) return; + for (int i = m_Contacts.Count() - 1; i >= 0; i--) + if (m_Contacts[i].Target == target) m_Contacts.Remove(i); + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.PendingReport && unit.PendingReport.Target == target) { unit.PendingReport = null; unit.Uplink = null; } + if ((unit.PendingOrder && unit.PendingOrder.Target == target) || (unit.Assignment && unit.Assignment.Target == target)) unit.Release(); + } + } +} + +// Production sets Released immediately before reserving shell airspace, then +// invokes native inventory transfer. Observe that existing commit boundary so +// even a synchronous native projectile has a prior recorded authorization. +modded class ERR_MortarBattery +{ + override void ReserveShellAirspace(float now) + { + super.ReserveShellAirspace(now); + ERR_NativeMortarFiringProbe probe = ERR_NativeMortarFiringProbe.Active(); + if (probe) probe.NativeCommit(this, now); + } + override void Cancel(string reason = "cancel requested") + { + ERR_NativeMortarFiringProbe probe = ERR_NativeMortarFiringProbe.Active(); + if (probe) probe.NativeClosing(this, reason, LastFailure); + super.Cancel(reason); + } +} + +class ERR_NativeMortarEvidenceRules +{ + static bool AimFresh(float commandedAt, float validatedAt, float now) + { + return commandedAt >= 0 && now >= commandedAt && validatedAt >= commandedAt && now >= validatedAt && now - validatedAt <= 10000; + } + static bool CommitFresh(float observed, float expectedObserved, float committed) + { + return observed == expectedObserved && observed >= 0 && committed >= observed && committed - observed <= ERR_MortarPrediction.MAX_REPORT_AGE_MS; + } + static bool EventBound(bool pending, int order, int currentOrder, int shot, int currentShot, float committed, float emitted) + { + // The fixture has its own overall deadline. A committed shell does not gain + // a second authorization expiry while native physical transfer completes. + return pending && order == currentOrder && shot == currentShot && emitted >= committed; + } + static bool ExpiredClosure(float observed, float closed, string failure) + { + return observed >= 0 && closed > observed + ERR_MortarPrediction.MAX_REPORT_AGE_MS && (failure.Contains("delivered target report expired") || failure.Contains("observation older than 60s")); + } +} + +// Observe only the actual native event. Node SUCCESS, accepted inventory moves +// and committed shell loading are never counted as physical projectiles. +modded class SCR_MortarMuzzleComponent +{ + override void OnWeaponFired(IEntity effectEntity, BaseMuzzleComponent muzzle, IEntity projectileEntity) + { + ERR_NativeMortarFiringProbe probe = ERR_NativeMortarFiringProbe.Active(); + if (probe) probe.NativeProjectile(GetOwner(), projectileEntity); + super.OnWeaponFired(effectEntity, muzzle, projectileEntity); + } +} + +class ERR_NativeMortarFiringProbe +{ + protected static ERR_NativeMortarFiringProbe s_Active; + protected ERR_GameMode m_Mode; + protected ERR_MortarBattery m_Battery; + protected IEntity m_Gun; + protected SCR_AIGroup m_Group; + protected IEntity m_Target; + protected vector m_Impact; + protected ref array m_Crew = {}; + protected ref array m_InitialShells = {}; + protected ref array m_Projectiles = {}; + protected int m_Source; + protected int m_Order; + protected int m_Step; + protected int m_Events; + protected int m_StoppedShells; + protected float m_Deadline; + protected float m_NextDiagnostic; + protected float m_StopUntil; + protected float m_ObservedAt; + protected bool m_WaitForExpiry; + protected int m_FinalEvents; + protected bool m_CommitPending; + protected float m_CommittedAt; + protected int m_CommitOrder; + protected int m_CommitShot; + protected int m_Commits; + protected bool m_ClosureSeen; + protected bool m_ClosureExpired; + protected bool m_ClosureComplete; + protected bool m_Unsafe; + protected bool m_BadProjectile; + protected bool m_SawUplink; + protected bool m_SawDownlink; + protected bool m_SawActivity; + protected bool m_Stopped; + protected string m_BadReason; + + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && (outcome == "mortar-fire" || outcome == "mortar-expiry"); + } + static ERR_NativeMortarFiringProbe Active() { return s_Active; } + void ERR_NativeMortarFiringProbe(ERR_GameMode mode) + { + m_Mode = mode; + string outcome; System.GetCLIParam("errSmokeOutcome", outcome); m_WaitForExpiry = outcome == "mortar-expiry"; + m_Deadline = GetGame().GetWorld().GetWorldTime() + 180000; + if (Enabled() && !s_Active) s_Active = this; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: mortar firing " + detail); return true; } + Print("ERR SMOKE FAIL: mortar firing " + detail, LogLevel.ERROR); Stop(); return false; + } + protected void Shells(out array shells) + { + shells.Clear(); + foreach (IEntity actor : m_Crew) + { + if (!actor) continue; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(actor.FindComponent(InventoryStorageManagerComponent)); + array items = {}; ERR_Inventory.Items(inventory, items); + foreach (IEntity item : items) + if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == ERR_MortarBattery.SHELL && !shells.Contains(item)) shells.Insert(item); + } + } + protected bool CheckNoOccupants(IEntity entity) + { + if (ChimeraCharacter.Cast(entity) || Vehicle.Cast(entity)) { m_Unsafe = true; return false; } + return true; + } + protected bool EmptyImpact(vector position) + { + m_Unsafe = false; + GetGame().GetWorld().QueryEntitiesByAABB(position - "200 5000 200", position + "200 5000 200", CheckNoOccupants, null, EQueryEntitiesFlags.ALL); + return !m_Unsafe; + } + protected bool SelectImpact(ERR_MortarSystem system) + { + // Bounded candidate survey: no clearance assumption from coordinates alone. + array offsets = {"-800 0 -600", "-600 0 -800", "0 0 -1000", "600 0 -800", "-1000 0 0", "800 0 -600", "-800 0 600", "0 0 1000"}; + foreach (vector offset : offsets) + { + vector candidate = ERR_Actors.Ground(m_Battery.Position + offset); + if (candidate[1] < 1 || !EmptyImpact(candidate) || !system.Safe(m_Battery, candidate, 75)) continue; + bool clear = true; + for (int shot = 0; shot < ERR_MortarSalvo.ROUNDS; shot++) + { + vector spread = ERR_Actors.Ground(candidate + ERR_MortarSalvo.Offset(m_Battery.SiteId, m_Battery.OrderId + 1, shot)); + if (!system.Safe(m_Battery, spread, 75)) { clear = false; break; } + } + if (!clear) continue; + m_Impact = candidate; + PrintFormat("ERR MORTAR FIXTURE IMPACT: position=%1 batteryDistance=%2; no characters/vehicles in 400m square; production settlement/friendly exclusions passed", candidate, vector.DistanceXZ(candidate, m_Battery.Position)); + return true; + } + return false; + } + protected void Diagnose(float now) + { + if (now < m_NextDiagnostic) return; + m_NextDiagnostic = now + 5000; + if (!m_Battery) { Print("ERR MORTAR FIXTURE: waiting for one authored battery"); return; } + PrintFormat("ERR MORTAR FIXTURE: step=%1 startup=%2 source=M%3 observedEvents=%4 ready=%5 failure=%6", m_Step, m_Battery.StartupActivated, m_Source, m_Events, m_Battery.Operational(), m_Battery.SpawnFailure); + m_Battery.SiteStatus(now); + } + void NativeCommit(ERR_MortarBattery battery, float now) + { + if (m_Stopped || battery != m_Battery) return; + if ((m_Step != 1 && m_Step != 3) || m_CommitPending || !battery.CommandOpen || !battery.Released || battery.SourceId != m_Source || battery.OrderId != m_Order || !battery.Report || battery.Report.MessageId != m_Source || !ERR_NativeMortarEvidenceRules.CommitFresh(battery.Report.ObservedAt, m_ObservedAt, now) || !ERR_NativeMortarEvidenceRules.AimFresh(battery.AimedAt, battery.AimValidatedAt, now) || battery.FlightTime <= 0) + { m_BadProjectile = true; m_BadReason = "physical commit lacks immutable fresh report/current order/native aim, or duplicates pending commit"; return; } + m_CommitPending = true; m_CommittedAt = now; m_CommitOrder = battery.OrderId; m_CommitShot = battery.OrderShots; m_Commits++; + PrintFormat("ERR MORTAR FIXTURE COMMIT: count=%1 order=%2 shot=%3 source=M%4 observedAge=%5; recorded before native inventory transfer", m_Commits, m_CommitOrder, m_CommitShot, m_Source, now - m_ObservedAt); + } + void NativeClosing(ERR_MortarBattery battery, string reason, string failure) + { + if (m_Stopped || !m_WaitForExpiry || battery != m_Battery || !battery.CommandOpen || battery.SourceId != m_Source || m_Source <= 0) return; + float now = GetGame().GetWorld().GetWorldTime(); + m_ClosureSeen = true; + m_ClosureComplete = battery.OrderShots == ERR_MortarSalvo.ROUNDS && m_Events == ERR_MortarSalvo.ROUNDS; + m_ClosureExpired = ERR_NativeMortarEvidenceRules.ExpiredClosure(m_ObservedAt, now, failure); + PrintFormat("ERR MORTAR FIXTURE CLOSURE: order=%1 observedAge=%2 reason=%3 lastFailure=%4 complete=%5 expiredWithheld=%6", battery.OrderId, now - m_ObservedAt, reason, failure, m_ClosureComplete, m_ClosureExpired); + if (battery.Stopped() || battery.OrderId != m_Order || (!m_ClosureExpired && !m_ClosureComplete)) + { m_BadProjectile = true; m_BadReason = "expiry evidence interrupted by Stop or unrelated/incomplete order closure"; } + } + void NativeProjectile(IEntity gun, IEntity projectile) + { + if (m_Stopped || !m_Battery || gun != m_Gun) return; + if (!projectile) { m_BadProjectile = true; m_BadReason = "native fired event has no physical projectile"; return; } + if (m_Projectiles.Contains(projectile)) { m_BadProjectile = true; m_BadReason = "same physical projectile observed twice"; return; } + m_Projectiles.Insert(projectile); m_Events++; + float now = GetGame().GetWorld().GetWorldTime(); + if ((m_Step != 1 && m_Step != 3) || !m_Battery.Released || m_Battery.SourceId != m_Source || !ERR_NativeMortarEvidenceRules.EventBound(m_CommitPending, m_CommitOrder, m_Battery.OrderId, m_CommitShot, m_Battery.OrderShots, m_CommittedAt, now)) + { m_BadProjectile = true; m_BadReason = "projectile lacks the recorded fresh physical commit for its current order/shot"; } + m_CommitPending = false; + PrintFormat("ERR MORTAR FIXTURE PROJECTILE: event=%1 entity=%2 origin=%3 order=%4 source=M%5 aimAge=%6 flight=%7; impact is not measured", m_Events, projectile, projectile.GetOrigin(), m_Battery.OrderId, m_Battery.SourceId, now - m_Battery.AimedAt, m_Battery.FlightTime); + } + int Tick(float now) + { + if (m_Stopped) return -1; + if (!Enabled() || s_Active != this || !m_Mode || !m_Mode.Active()) { Check(false, "explicit active fixture context retained"); return -1; } + ERR_HQ hq = ERR_HQ.Get(); + ERR_MortarSystem system; + if (hq) system = hq.Mortars(); + if (!system) { Check(false, "real HQ mortar service available"); return -1; } + if (!m_Battery) + { + array guns = {}; system.AppendGuns(guns); + if (guns.Count() == 1) { m_Gun = guns[0]; m_Battery = system.FindGun(m_Gun); } + } + Diagnose(now); + if (now >= m_Deadline) { Check(false, "bounded deadline; inspect readiness/route/activity/aim diagnostics"); return -1; } + if (m_BadProjectile) { Check(false, m_BadReason); return -1; } + if (!m_Battery) return 0; + if (!m_Battery.SpawnFailure.IsEmpty()) { Check(false, "battery startup failed: " + m_Battery.SpawnFailure); return -1; } + if (m_Step == 0) + { + if (!m_Battery.StartupActivated || !m_Battery.Operational() || !hq.MortarConnected(m_Battery.Group)) return 0; + m_Group = m_Battery.Group; + if (!Check(m_Group && m_Group.IsExpandComplete() && m_Group.GetAgentsCount() == 4 && m_Battery.TotalShots == 0 && m_Battery.OrderId == 0 && !m_Battery.CommandOpen && !m_Battery.Activity && !m_Battery.RadioOrder, "untasked original gun and complete four-person crew start without shots")) return -1; + array agents = {}; m_Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + IEntity actor; if (agent) actor = agent.GetControlledEntity(); + if (!Check(ERR_Actors.CanFight(actor) && !m_Crew.Contains(actor), "initial physical crew member is conscious and unique")) return -1; + m_Crew.Insert(actor); + } + if (!Check(m_Battery.RadioOperator && ERR_HQRadio.Capability(m_Battery.RadioOperator) == 2, "dedicated actual manpack supplies the radio route")) return -1; + Shells(m_InitialShells); + if (!Check(m_InitialShells.Count() == 27 && m_Battery.CountShells() == 27, "exactly 27 distinct physical initial HE shells")) return -1; + if (!Check(SelectImpact(system), "bounded candidate survey finds an unoccupied production-safe impact area")) return -1; + m_Target = ERR_Actors.Spawn(ERR_Resources.IntelFolder(), m_Impact); + if (!Check(m_Target != null, "fixture-owned inert report identity exists; no enemy perception is claimed")) return -1; + m_Source = hq.ERR_QueueMortarFixtureReport(m_Group, m_Target, m_Impact, now); + if (!Check(m_Source > 0, "synthetic observation enters actual existing radio uplink once")) return -1; + m_ObservedAt = now; m_SawUplink = true; m_Deadline = now + 90000; m_Step = 1; return 0; + } + if (m_WaitForExpiry && m_Battery.Stopped()) { Check(false, "battery must remain running throughout natural expiry observation"); return -1; } + if (m_Battery.Report && (m_Battery.Report.MessageId != m_Source || m_Battery.Report.ObservedAt != m_ObservedAt)) { Check(false, "delivered report identity and original observation timestamp remain immutable"); return -1; } + if (m_Battery.Gun != m_Gun || m_Battery.Group != m_Group) { Check(false, "original gun and crew identity retained"); return -1; } + if (!EmptyImpact(m_Impact)) { Check(false, "impact exclusion stays unoccupied before native firing/cancellation"); return -1; } + array remaining = {}; Shells(remaining); + foreach (IEntity item : remaining) + if (!m_InitialShells.Contains(item)) { Check(false, "no replacement HE shell appears after initialization"); return -1; } + if (m_Step == 1) + { + if (m_Battery.RadioOrder && m_Battery.SourceId == m_Source) { m_SawDownlink = true; m_Order = m_Battery.OrderId; } + if (m_Battery.Activity && m_Battery.Report && m_Battery.Report.MessageId == m_Source) m_SawActivity = true; + if (m_Battery.OrderId > 1 || (m_Battery.SourceId != 0 && m_Battery.SourceId != m_Source)) { Check(false, "one unchanged fixture source creates only one HQ order"); return -1; } + if (m_Events == 0) return 0; + if (!Check(m_Events == 1 && m_Battery.TotalShots == 1 && m_Battery.OrderShots == 1 && !m_Battery.Released && m_SawUplink && m_SawDownlink && m_SawActivity && m_Order == 1, "one physical projectile follows real uplink/downlink, native activity and fresh aim")) return -1; + if (!Check(remaining.Count() == 26 && m_Battery.CountShells() == 26, "one fired projectile consumes one of 27 original inventory shells")) return -1; + if (m_WaitForExpiry) + { + m_Step = 3; m_Deadline = m_ObservedAt + ERR_MortarPrediction.MAX_REPORT_AGE_MS + 50000; + return 0; + } + m_FinalEvents = m_Events; + // Cancel on this later fixture tick, never reentrantly inside the firing node. + hq.ERR_RemoveMortarFixtureReport(m_Target); + system.Stop(); system.Stop(); + if (!Check(!m_Battery.CommandOpen && !m_Battery.Activity && !m_Battery.RadioOrder, "explicit support Stop closes native order and route idempotently")) return -1; + m_StoppedShells = remaining.Count(); m_StopUntil = now + 12000; m_Deadline = m_StopUntil + 2000; m_Step = 2; return 0; + } + if (m_Step == 3) + { + if (m_Battery.OrderId != m_Order || m_Battery.SourceId != m_Source) { Check(false, "unchanged delivered observation received a second order"); return -1; } + if (m_Events > ERR_MortarSalvo.ROUNDS || m_Battery.TotalShots > ERR_MortarSalvo.ROUNDS) { Check(false, "single observation cannot exceed finite salvo"); return -1; } + if (now < m_ObservedAt + ERR_MortarPrediction.MAX_REPORT_AGE_MS + 25000) return 0; + if (!Check(m_ClosureSeen && (m_ClosureExpired || m_ClosureComplete) && !m_CommitPending && m_Commits == m_Events && m_Events >= 1 && m_Battery.TotalShots == m_Events && m_Battery.OrderShots == m_Events && remaining.Count() == 27 - m_Events && !m_Battery.CommandOpen && !m_Battery.Activity && !m_Battery.RadioOrder && !m_Battery.Report, "explicit expired-withheld closure or complete finite salvo, with only fresh commits and observed physical shells consumed")) return -1; + m_FinalEvents = m_Events; + // Keep HQ running and the expired contact present throughout this next wait. + m_StoppedShells = remaining.Count(); m_StopUntil = now + 12000; m_Deadline = m_StopUntil + 2000; m_Step = 4; + return 0; + } + if (now < m_StopUntil) return 0; + if (!Check(m_Battery.TotalShots == m_FinalEvents && m_Events == m_FinalEvents && m_Battery.OrderId == m_Order && remaining.Count() == m_StoppedShells && !m_Battery.CommandOpen && !m_Battery.Activity && !m_Battery.RadioOrder, "closed order issues no duplicate order, projectile or replenishment over 12 seconds")) return -1; + array finalCrew = {}; m_Group.GetAgents(finalCrew); + if (!Check(finalCrew.Count() == 4 && m_Battery.Gun == m_Gun, "original group and gun retain four crew")) return -1; + foreach (AIAgent finalAgent : finalCrew) + if (!Check(finalAgent && m_Crew.Contains(finalAgent.GetControlledEntity()) && ERR_Actors.CanFight(finalAgent.GetControlledEntity()), "final conscious crew entity belongs to original physical roster")) return -1; + if (m_WaitForExpiry) { hq.ERR_RemoveMortarFixtureReport(m_Target); system.Stop(); system.Stop(); } + Stop(); return 1; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + ERR_HQ hq = ERR_HQ.Get(); + if (hq) + { + hq.ERR_RemoveMortarFixtureReport(m_Target); + if (m_Battery && m_Battery.SourceId == m_Source && m_Source > 0) m_Battery.Cancel("mortar firing fixture cleanup"); + } + ERR_Actors.DeleteSpawned(m_Target); m_Target = null; + if (s_Active == this) s_Active = null; + } + void ~ERR_NativeMortarFiringProbe() { Stop(); } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c new file mode 100644 index 0000000..cbc0d66 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c @@ -0,0 +1,476 @@ +#ifdef WORKBENCH +// Explicit synthetic observation only. Delivery, HQ scheduling and native fire +// are unchanged; this helper never writes directly into the HQ contact list. +modded class ERR_HQ +{ + int ERR_QueueMortarRefreshReport(SCR_AIGroup source, IEntity radio, IEntity target, vector position, out float observedAt) + { + observedAt = -1; + if (!ERR_NativeMortarSalvoProbe.RefreshEnabled() || !target || !radio || ERR_HQRadio.Capability(radio) != 2) return 0; + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != source || !unit.ReservedForSupport || unit.Radio != radio || unit.Uplink || unit.PendingReport || unit.PendingSupplyStatus) continue; + ERR_HQRoute route = m_Network.Route(radio); + if (!route || route.Nodes.IsEmpty()) return 0; + observedAt = GetGame().GetWorld().GetWorldTime(); + ERR_HQReport report = new ERR_HQReport(); + report.MessageId = m_Journal.Message(); report.Target = target; report.Source = source; + report.Position = position; report.ObservedAt = observedAt; report.DetailsObservedAt = observedAt; + report.HasVelocity = true; report.Velocity = vector.Zero; + report.TravelMode = "on foot"; report.SeenEscapists = 1; report.SeenWeapons = "fixture observation"; + route.MessageId = report.MessageId; route.Payload = "NEW EXPLICIT SYNTHETIC OBSERVATION: " + report.Description(observedAt); + unit.PendingReport = report; unit.Uplink = route; + m_Journal.Write("FIXTURE REPORT", route.Payload, report.MessageId); + return report.MessageId; + } + return 0; + } + int ERR_QueueMortarSalvoReport(SCR_AIGroup source, IEntity target, vector position, float now) + { + if (!ERR_NativeMortarSalvoProbe.Enabled() || !target || !m_Contacts.IsEmpty()) return 0; + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != source || !unit.ReservedForSupport || !unit.Radio || unit.Uplink || unit.PendingReport) continue; + ERR_HQRoute route = m_Network.Route(unit.Radio); + if (!route || route.Nodes.IsEmpty()) return 0; + ERR_HQReport report = new ERR_HQReport(); + report.MessageId = m_Journal.Message(); report.Target = target; report.Source = source; + report.Position = position; report.ObservedAt = now; report.DetailsObservedAt = now; + report.HasVelocity = true; report.Velocity = vector.Zero; + report.TravelMode = "on foot"; report.SeenEscapists = 1; report.SeenWeapons = "fixture observation"; + route.MessageId = report.MessageId; route.Payload = "EXPLICIT SYNTHETIC OBSERVATION: " + report.Description(now); + unit.PendingReport = report; unit.Uplink = route; + m_Journal.Write("FIXTURE REPORT", route.Payload, report.MessageId); + return report.MessageId; + } + return 0; + } + void ERR_RemoveMortarSalvoReport(IEntity target) + { + if (!target) return; + for (int i = m_Contacts.Count() - 1; i >= 0; i--) + if (m_Contacts[i].Target == target) m_Contacts.Remove(i); + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.PendingReport && unit.PendingReport.Target == target) { unit.PendingReport = null; unit.Uplink = null; } + if ((unit.PendingOrder && unit.PendingOrder.Target == target) || (unit.Assignment && unit.Assignment.Target == target)) unit.Release(); + } + } +} + +// Production sets Released immediately before reserving shell airspace, then +// invokes native inventory transfer. Observe that existing commit boundary so +// even a synchronous native projectile has a prior recorded authorization. +modded class ERR_MortarBattery +{ + override void Audit(string kind, string detail) + { + super.Audit(kind, detail); + ERR_NativeMortarSalvoProbe probe = ERR_NativeMortarSalvoProbe.Active(); + if (probe) probe.NativeAudit(this, kind); + } + override void ReserveShellAirspace(float now) + { + super.ReserveShellAirspace(now); + ERR_NativeMortarSalvoProbe probe = ERR_NativeMortarSalvoProbe.Active(); + if (probe) probe.NativeCommit(this, now); + } + override void Cancel(string reason = "cancel requested") + { + ERR_NativeMortarSalvoProbe probe = ERR_NativeMortarSalvoProbe.Active(); + if (probe) probe.NativeClosing(this, reason, LastFailure); + super.Cancel(reason); + } +} + +// Exact completion is separate from native activity success or accepted loading. +class ERR_NativeMortarSalvoRules +{ + static bool Complete(int events, int commits, int total, int orderShots, int shells, bool pending) + { + return events == ERR_MortarSalvo.ROUNDS && commits == events && total == events && orderShots == events && shells == 27 - events && !pending; + } + static bool QueueUpdate(bool accepted, bool pending, int shots, float observedAt, float orderedAt, float now) + { + return accepted && !pending && shots < ERR_MortarSalvo.ROUNDS / 2 && now >= observedAt + 20000 && orderedAt >= 0 && now >= orderedAt && now - orderedAt < 90000; + } +} + +class ERR_NativeMortarRefreshRecord +{ + int MessageId; + float ObservedAt; + int DownlinkId; + bool Accepted; + ref ERR_HQReport Delivered; + + bool Matches(ERR_HQReport report, IEntity target, SCR_AIGroup group, vector position) + { + if (!report || report.MessageId != MessageId || report.ObservedAt != ObservedAt || report.Target != target || report.Source != group) return false; + return vector.Distance(report.Position, position) < 0.01 && report.HasVelocity && report.Velocity.Length() < 0.001 && !report.Distress; + } +} + +// Observe only the actual native event. Node SUCCESS, accepted inventory moves +// and committed shell loading are never counted as physical projectiles. +modded class SCR_MortarMuzzleComponent +{ + override void OnWeaponFired(IEntity effectEntity, BaseMuzzleComponent muzzle, IEntity projectileEntity) + { + ERR_NativeMortarSalvoProbe probe = ERR_NativeMortarSalvoProbe.Active(); + if (probe) probe.NativeProjectile(GetOwner(), projectileEntity); + super.OnWeaponFired(effectEntity, muzzle, projectileEntity); + } +} + +class ERR_NativeMortarSalvoProbe +{ + protected static ERR_NativeMortarSalvoProbe s_Active; + protected ERR_GameMode m_Mode; + protected ERR_MortarBattery m_Battery; + protected IEntity m_Gun; + protected SCR_AIGroup m_Group; + protected IEntity m_Target; + protected vector m_Impact; + protected ref array m_Crew = {}; + protected ref array m_InitialShells = {}; + protected ref array m_Projectiles = {}; + protected int m_Source; + protected int m_Order; + protected int m_Step; + protected int m_Events; + protected int m_StoppedShells; + protected float m_Deadline; + protected float m_NextDiagnostic; + protected float m_StopUntil; + protected float m_ObservedAt; + protected ref ERR_HQReport m_Delivered; + protected bool m_RefreshCase; + protected IEntity m_OriginalRTO; + protected SCR_AIStaticArtilleryActivity m_OriginalActivity; + protected ref array m_Observations = {}; + protected int m_UpdatesAccepted; + protected int m_UpdatedCommits; + protected int m_CommitSource; + protected float m_CommitObservedAt; + protected bool m_CommitPending; + protected float m_CommittedAt; + protected int m_CommitOrder; + protected int m_CommitShot; + protected int m_Commits; + protected bool m_ClosureSeen; + protected bool m_ClosureComplete; + protected bool m_Unsafe; + protected bool m_BadProjectile; + protected bool m_SawUplink; + protected bool m_SawDownlink; + protected bool m_SawActivity; + protected bool m_Stopped; + protected string m_BadReason; + + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && (outcome == "mortar-salvo" || outcome == "mortar-refresh"); + } + static bool RefreshEnabled() + { + string outcome; + return Enabled() && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "mortar-refresh"; + } + static ERR_NativeMortarSalvoProbe Active() { return s_Active; } + void ERR_NativeMortarSalvoProbe(ERR_GameMode mode) + { + m_Mode = mode; + m_RefreshCase = RefreshEnabled(); + m_Deadline = GetGame().GetWorld().GetWorldTime() + 180000; + if (Enabled() && !s_Active) s_Active = this; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: mortar salvo " + detail); return true; } + Print("ERR SMOKE FAIL: mortar salvo " + detail, LogLevel.ERROR); Stop(); return false; + } + protected void Shells(out array shells) + { + shells.Clear(); + foreach (IEntity actor : m_Crew) + { + if (!actor) continue; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(actor.FindComponent(InventoryStorageManagerComponent)); + array items = {}; ERR_Inventory.Items(inventory, items); + foreach (IEntity item : items) + if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == ERR_MortarBattery.SHELL && !shells.Contains(item)) shells.Insert(item); + } + } + protected bool CheckNoOccupants(IEntity entity) + { + if (ChimeraCharacter.Cast(entity) || Vehicle.Cast(entity)) { m_Unsafe = true; return false; } + return true; + } + protected bool EmptyImpact(vector position) + { + m_Unsafe = false; + GetGame().GetWorld().QueryEntitiesByAABB(position - "200 5000 200", position + "200 5000 200", CheckNoOccupants, null, EQueryEntitiesFlags.ALL); + return !m_Unsafe; + } + protected bool SelectImpact(ERR_MortarSystem system) + { + // Bounded candidate survey: no clearance assumption from coordinates alone. + array offsets = {"-800 0 -600", "-600 0 -800", "0 0 -1000", "600 0 -800", "-1000 0 0", "800 0 -600", "-800 0 600", "0 0 1000"}; + foreach (vector offset : offsets) + { + vector candidate = ERR_Actors.Ground(m_Battery.Position + offset); + if (candidate[1] < 1 || !EmptyImpact(candidate) || !system.Safe(m_Battery, candidate, 75)) continue; + bool clear = true; + for (int shot = 0; shot < ERR_MortarSalvo.ROUNDS; shot++) + { + vector spread = ERR_Actors.Ground(candidate + ERR_MortarSalvo.Offset(m_Battery.SiteId, m_Battery.OrderId + 1, shot)); + if (!system.Safe(m_Battery, spread, 75)) { clear = false; break; } + } + if (!clear) continue; + m_Impact = candidate; + PrintFormat("ERR MORTAR SALVO IMPACT: position=%1 batteryDistance=%2; no characters/vehicles in 400m square; production settlement/friendly exclusions passed", candidate, vector.DistanceXZ(candidate, m_Battery.Position)); + return true; + } + return false; + } + protected void Diagnose(float now) + { + if (now < m_NextDiagnostic) return; + m_NextDiagnostic = now + 5000; + if (!m_Battery) { Print("ERR MORTAR SALVO: waiting for one authored battery"); return; } + PrintFormat("ERR MORTAR SALVO: step=%1 startup=%2 source=M%3 observedEvents=%4 ready=%5 failure=%6", m_Step, m_Battery.StartupActivated, m_Source, m_Events, m_Battery.Operational(), m_Battery.SpawnFailure); + m_Battery.SiteStatus(now); + } + protected ERR_NativeMortarRefreshRecord FindObservation(int messageId) + { + foreach (ERR_NativeMortarRefreshRecord observation : m_Observations) + if (observation.MessageId == messageId) return observation; + return null; + } + protected bool AddObservation(int messageId, float observedAt) + { + if (messageId <= 0 || observedAt < 0 || FindObservation(messageId) || m_Observations.Count() >= 8) return false; + if (!m_Observations.IsEmpty() && observedAt <= m_Observations[m_Observations.Count() - 1].ObservedAt) return false; + ERR_NativeMortarRefreshRecord record = new ERR_NativeMortarRefreshRecord(); + record.MessageId = messageId; record.ObservedAt = observedAt; + m_Observations.Insert(record); + PrintFormat("ERR MORTAR REFRESH OBSERVATION: source=M%1 actualObservedAt=%2 originalRTO=%3 synthetic stationary inert target; awaiting actual uplink and HQ downlink", messageId, observedAt, m_OriginalRTO); + return true; + } + protected bool ReportKnown(ERR_HQReport report, bool accepted = true) + { + if (!report) return false; + if (!m_RefreshCase) return report.MessageId == m_Source && report.ObservedAt == m_ObservedAt; + ERR_NativeMortarRefreshRecord record = FindObservation(report.MessageId); + return record && (!accepted || record.Accepted) && record.Matches(report, m_Target, m_Group, m_Impact); + } + protected bool AllAccepted() + { + if (!m_RefreshCase) return true; + if (m_Observations.Count() < 2 || m_UpdatesAccepted != m_Observations.Count() - 1 || m_UpdatedCommits < 1) return false; + foreach (ERR_NativeMortarRefreshRecord record : m_Observations) + if (!record.Accepted || !record.Delivered || record.DownlinkId <= 0) return false; + return true; + } + protected bool NoReportReplay(float now) + { + if (!m_RefreshCase) return m_Delivered && !m_Battery.CanRequest(m_Delivered, now); + if (!AllAccepted()) return false; + foreach (ERR_NativeMortarRefreshRecord record : m_Observations) + if (m_Battery.CanRequest(record.Delivered, now)) return false; + return true; + } + // Observational only: never stop/cancel inside production's current call. + void NativeAudit(ERR_MortarBattery battery, string kind) + { + if (!m_RefreshCase || m_Stopped || battery != m_Battery || m_Source <= 0) return; + if (kind == "AIM") + { + if (m_OriginalActivity || !battery.Activity || !m_SawDownlink || battery.SourceId != m_Source || battery.OrderId != m_Order || !ReportKnown(battery.Report, false)) + { m_BadProjectile = true; m_BadReason = "initial native activity does not match recorded report/downlink or was recreated"; return; } + m_OriginalActivity = battery.Activity; m_SawActivity = true; + ERR_NativeMortarRefreshRecord initial = FindObservation(m_Source); + initial.Accepted = true; initial.Delivered = battery.Report.Snapshot(); + m_Delivered = initial.Delivered; + return; + } + if (kind != "UPDATE QUEUED" && kind != "UPDATE RECEIVED") return; + ERR_MortarRefresh update = battery.Refresh; + if (!update || !update.Owns(battery) || battery.OrderId != m_Order || battery.Activity != m_OriginalActivity || !ReportKnown(update.Report, false)) + { m_BadProjectile = true; m_BadReason = "update lost recorded observation or original gun/group/order/activity"; return; } + ERR_NativeMortarRefreshRecord record = FindObservation(update.Report.MessageId); + if (kind == "UPDATE QUEUED") + { + if (record.DownlinkId != 0 || record.Accepted || !update.Route || !update.Route.Downlink || update.Route.Nodes.IsEmpty() || update.Route.MessageId != update.RadioId) + { m_BadProjectile = true; m_BadReason = "refresh downlink was missing, duplicated or already accepted"; return; } + record.DownlinkId = update.RadioId; + return; + } + if (record.Accepted || record.DownlinkId != update.RadioId || update.Route || battery.Released || battery.Report != update.Report || !ReportKnown(battery.Report, false)) + { m_BadProjectile = true; m_BadReason = "refresh acceptance lacks its completed route or overwrites committed shell"; return; } + record.Accepted = true; record.Delivered = battery.Report.Snapshot(); m_UpdatesAccepted++; + m_Delivered = record.Delivered; + PrintFormat("ERR MORTAR REFRESH ACCEPTED: source=M%1 observedAt=%2 downlink=M%3 sameOrder=%4 originalActivity=%5", record.MessageId, record.ObservedAt, record.DownlinkId, battery.OrderId, battery.Activity == m_OriginalActivity); + } + void NativeCommit(ERR_MortarBattery battery, float now) + { + if (m_Stopped || battery != m_Battery) return; + if (m_RefreshCase && (!m_OriginalActivity || battery.Activity != m_OriginalActivity)) + { m_BadProjectile = true; m_BadReason = "refreshed commit requires the original unchanged native activity"; return; } + if (m_Commits >= ERR_MortarSalvo.ROUNDS || battery.OrderShots != m_Commits) + { m_BadProjectile = true; m_BadReason = "commit count or physical shot sequence exceeds configured finite salvo"; return; } + if (m_Step != 1 || m_CommitPending || !battery.CommandOpen || !battery.Released || battery.SourceId != m_Source || battery.OrderId != m_Order || !ReportKnown(battery.Report) || !ERR_NativeMortarEvidenceRules.CommitFresh(battery.Report.ObservedAt, battery.Report.ObservedAt, now) || !ERR_NativeMortarEvidenceRules.AimFresh(battery.AimedAt, battery.AimValidatedAt, now) || battery.FlightTime <= 0) + { m_BadProjectile = true; m_BadReason = "physical commit lacks immutable fresh report/current order/native aim, or duplicates pending commit"; return; } + m_CommitPending = true; m_CommittedAt = now; m_CommitOrder = battery.OrderId; m_CommitShot = battery.OrderShots; m_Commits++; + m_CommitSource = battery.Report.MessageId; m_CommitObservedAt = battery.Report.ObservedAt; + if (m_RefreshCase && m_CommitSource != m_Source) m_UpdatedCommits++; + PrintFormat("ERR MORTAR SALVO COMMIT: count=%1 order=%2 shot=%3 acceptedSource=M%4 observedAge=%5 commandAge=%6 validationAge=%7; recorded before native inventory transfer", m_Commits, m_CommitOrder, m_CommitShot, m_CommitSource, now - m_CommitObservedAt, now - battery.AimedAt, now - battery.AimValidatedAt); + } + void NativeClosing(ERR_MortarBattery battery, string reason, string failure) + { + if (m_Stopped || battery != m_Battery || !battery.CommandOpen || battery.SourceId != m_Source || m_Source <= 0) return; + m_ClosureSeen = true; + m_ClosureComplete = battery.OrderShots == ERR_MortarSalvo.ROUNDS && m_Events == ERR_MortarSalvo.ROUNDS && !m_CommitPending && m_Commits == m_Events; + PrintFormat("ERR MORTAR SALVO CLOSURE: order=%1 reason=%2 lastFailure=%3 events=%4 commits=%5 complete=%6", battery.OrderId, reason, failure, m_Events, m_Commits, m_ClosureComplete); + if (battery.Stopped() || battery.OrderId != m_Order || !m_ClosureComplete || !AllAccepted() || reason != "native artillery activity COMPLETED (shot count is separate)") + { m_BadProjectile = true; m_BadReason = "full salvo requires natural native completion; partial expiry, rejection, timeout or Stop is not success"; } + if (m_RefreshCase && (battery.Activity != m_OriginalActivity || battery.Refresh || battery.RefreshRejected)) + { m_BadProjectile = true; m_BadReason = "natural completion cannot leave a refresh pending or replace original activity"; } + } + void NativeProjectile(IEntity gun, IEntity projectile) + { + if (m_Stopped || !m_Battery || gun != m_Gun) return; + if (!projectile) { m_BadProjectile = true; m_BadReason = "native fired event has no physical projectile"; return; } + if (m_Projectiles.Contains(projectile)) { m_BadProjectile = true; m_BadReason = "same physical projectile observed twice"; return; } + m_Projectiles.Insert(projectile); m_Events++; + float now = GetGame().GetWorld().GetWorldTime(); + if (m_Step != 1 || !m_Battery.Released || m_Battery.SourceId != m_Source || !ERR_NativeMortarEvidenceRules.EventBound(m_CommitPending, m_CommitOrder, m_Battery.OrderId, m_CommitShot, m_Battery.OrderShots, m_CommittedAt, now)) + { m_BadProjectile = true; m_BadReason = "projectile lacks the recorded fresh physical commit for its current order/shot"; } + if (!m_Battery.Report || m_Battery.Report.MessageId != m_CommitSource || m_Battery.Report.ObservedAt != m_CommitObservedAt) + { m_BadProjectile = true; m_BadReason = "committed shell was relabelled with another report before native emission"; } + m_CommitPending = false; + PrintFormat("ERR MORTAR SALVO PROJECTILE: event=%1 entity=%2 origin=%3 order=%4 acceptedSource=M%5 aimAge=%6 flight=%7; impact is not measured", m_Events, projectile, projectile.GetOrigin(), m_Battery.OrderId, m_CommitSource, now - m_Battery.AimedAt, m_Battery.FlightTime); + } + int Tick(float now) + { + if (m_Stopped) return -1; + if (!Enabled() || s_Active != this || !m_Mode || !m_Mode.Active()) { Check(false, "explicit active fixture context retained"); return -1; } + ERR_HQ hq = ERR_HQ.Get(); + ERR_MortarSystem system; + if (hq) system = hq.Mortars(); + if (!system) { Check(false, "real HQ mortar service available"); return -1; } + if (!m_Battery) + { + array guns = {}; system.AppendGuns(guns); + if (guns.Count() == 1) { m_Gun = guns[0]; m_Battery = system.FindGun(m_Gun); if (m_Battery) m_Group = m_Battery.Group; } + } + Diagnose(now); + if (now >= m_Deadline) { Check(false, "bounded deadline; inspect readiness/route/activity/aim diagnostics"); return -1; } + if (m_BadProjectile) { Check(false, m_BadReason); return -1; } + if (!m_Battery) return 0; + if (!m_Battery.SpawnFailure.IsEmpty()) { Check(false, "battery startup failed: " + m_Battery.SpawnFailure); return -1; } + if (m_Step == 0) + { + if (!m_Battery.StartupActivated || !m_Battery.Operational() || !hq.MortarConnected(m_Battery.Group)) return 0; + m_Group = m_Battery.Group; + if (!Check(m_Group && m_Group.IsExpandComplete() && m_Group.GetAgentsCount() == 4 && m_Battery.TotalShots == 0 && m_Battery.OrderId == 0 && !m_Battery.CommandOpen && !m_Battery.Activity && !m_Battery.RadioOrder, "untasked original gun and complete four-person crew start without shots")) return -1; + array agents = {}; m_Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + IEntity actor; if (agent) actor = agent.GetControlledEntity(); + if (!Check(ERR_Actors.CanFight(actor) && !m_Crew.Contains(actor), "initial physical crew member is conscious and unique")) return -1; + m_Crew.Insert(actor); + } + if (!Check(m_Battery.RadioOperator && ERR_HQRadio.Capability(m_Battery.RadioOperator) == 2, "dedicated actual manpack supplies the radio route")) return -1; + m_OriginalRTO = m_Battery.RadioOperator; + Shells(m_InitialShells); + if (!Check(m_InitialShells.Count() == 27 && m_Battery.CountShells() == 27, "exactly 27 distinct physical initial HE shells")) return -1; + if (!Check(SelectImpact(system), "bounded candidate survey finds an unoccupied production-safe impact area")) return -1; + m_Target = ERR_Actors.Spawn(ERR_Resources.IntelFolder(), m_Impact); + if (!Check(m_Target != null, "fixture-owned inert report identity exists; no enemy perception is claimed")) return -1; + if (m_RefreshCase) m_Source = hq.ERR_QueueMortarRefreshReport(m_Group, m_OriginalRTO, m_Target, m_Impact, m_ObservedAt); + else { m_Source = hq.ERR_QueueMortarSalvoReport(m_Group, m_Target, m_Impact, now); m_ObservedAt = now; } + if (!Check(m_Source > 0, "synthetic observation enters actual existing radio uplink once")) return -1; + if (m_RefreshCase && !Check(AddObservation(m_Source, m_ObservedAt), "first actual-clock observation recorded without replacement")) return -1; + m_SawUplink = true; m_Deadline = now + ERR_MortarSalvo.TIMEOUT_MS + 35000; m_Step = 1; return 0; + } + if (m_Battery.Stopped()) { Check(false, "battery must remain running throughout full salvo and replay observation"); return -1; } + if (m_Battery.Report && !ReportKnown(m_Battery.Report)) { Check(false, "delivered report identity and original observation timestamp remain immutable and accepted"); return -1; } + if (m_Battery.Gun != m_Gun || m_Battery.Group != m_Group) { Check(false, "original gun and crew identity retained"); return -1; } + if (m_RefreshCase && (m_Battery.RadioOperator != m_OriginalRTO || (m_OriginalActivity && m_Battery.Activity && m_Battery.Activity != m_OriginalActivity))) + { Check(false, "refreshes preserve original RTO and native activity"); return -1; } + if (!EmptyImpact(m_Impact)) { Check(false, "impact exclusion stays unoccupied before native firing/cancellation"); return -1; } + array remaining = {}; Shells(remaining); + foreach (IEntity item : remaining) + if (!m_InitialShells.Contains(item)) { Check(false, "no replacement HE shell appears after initialization"); return -1; } + if (m_Battery.OrderId > 1 || (m_Battery.SourceId != 0 && m_Battery.SourceId != m_Source)) { Check(false, "one unchanged fixture source creates only one HQ order"); return -1; } + if (m_Events > ERR_MortarSalvo.ROUNDS || m_Battery.TotalShots > ERR_MortarSalvo.ROUNDS) { Check(false, "physical event count never exceeds configured salvo"); return -1; } + if (m_Step == 1) + { + if (m_Battery.RadioOrder && m_Battery.SourceId == m_Source) + { + m_SawDownlink = true; m_Order = m_Battery.OrderId; + if (m_RefreshCase) + { + ERR_NativeMortarRefreshRecord first = FindObservation(m_Source); + if (!first || first.DownlinkId == 0) + { + if (!Check(first && m_Battery.RadioOrder.Downlink && !m_Battery.RadioOrder.Nodes.IsEmpty(), "initial order traverses actual nonempty HQ downlink")) return -1; + first.DownlinkId = m_Battery.RadioOrder.MessageId; + } + } + } + if (m_Battery.Activity && m_Battery.Report && m_Battery.Report.MessageId == m_Source) + { + m_SawActivity = true; + if (!m_Delivered) m_Delivered = m_Battery.Report.Snapshot(); + } + if (m_RefreshCase && m_Battery.CommandOpen && m_Battery.Activity && !m_Observations.IsEmpty()) + { + ERR_NativeMortarRefreshRecord latest = m_Observations[m_Observations.Count() - 1]; + if (ERR_NativeMortarSalvoRules.QueueUpdate(latest.Accepted, m_Battery.Refresh != null, m_Battery.OrderShots, latest.ObservedAt, m_Battery.OrderedAt, now)) + { + float observed; + int messageId = hq.ERR_QueueMortarRefreshReport(m_Group, m_OriginalRTO, m_Target, m_Impact, observed); + if (!Check(messageId > 0 && AddObservation(messageId, observed), "next distinct actual-clock synthetic observation queued only after previous acceptance")) return -1; + } + } + if (m_Battery.CommandOpen || m_Battery.Activity) return 0; + if (!m_ClosureSeen) return 0; + if (!Check(m_ClosureComplete && m_SawUplink && m_SawDownlink && m_SawActivity && m_Order == 1, "one real uplink/downlink and native activity naturally complete the entire configured salvo")) return -1; + if (m_RefreshCase && !Check(AllAccepted(), "every queued update was accepted under the same order before closure and at least one updated report authorized a commit")) return -1; + if (!Check(ERR_NativeMortarSalvoRules.Complete(m_Events, m_Commits, m_Battery.TotalShots, m_Battery.OrderShots, remaining.Count(), m_CommitPending) && m_Battery.CountShells() == remaining.Count(), "exact configured native projectiles equal fresh commits and missing original inventory shells")) return -1; + if (!Check(NoReportReplay(now), "all delivered messages are ineligible for a second request after completion")) return -1; + if (!Check(!m_Battery.RadioOrder && !m_Battery.Report && !m_Battery.PendingRadioReport && !m_Battery.PendingSupplyReport && !m_Battery.SupplyPending() && !m_Battery.Released && !m_Battery.Refresh, "natural completion clears command, routes, loading and projectile reservation")) return -1; + // Keep the unchanged HQ contact, battery and scheduler alive. This exceeds + // the normal 20-second post-dispatch decision interval without forging time. + m_StoppedShells = remaining.Count(); m_StopUntil = now + 25000; m_Deadline = m_StopUntil + 2000; m_Step = 2; + return 0; + } + if (m_Battery.CommandOpen || m_Battery.Activity || m_Battery.RadioOrder || m_Battery.Report || m_Battery.PendingRadioReport || m_Battery.PendingSupplyReport || m_Battery.SupplyPending() || m_Battery.Released) + { Check(false, "completed observation must not reopen command, activity, route or physical loading"); return -1; } + if (!ERR_NativeMortarSalvoRules.Complete(m_Events, m_Commits, m_Battery.TotalShots, m_Battery.OrderShots, remaining.Count(), m_CommitPending) || m_Battery.OrderId != m_Order || remaining.Count() != m_StoppedShells) + { Check(false, "closed order cannot add shots, orders or replacement ammunition during replay window"); return -1; } + if (now < m_StopUntil) return 0; + if (!Check(NoReportReplay(now), "all claimed contacts produce no second request, projectile or replenishment over 25 seconds")) return -1; + array finalCrew = {}; m_Group.GetAgents(finalCrew); + if (!Check(finalCrew.Count() == 4 && m_Battery.Gun == m_Gun, "original group and gun retain four crew")) return -1; + foreach (AIAgent finalAgent : finalCrew) + if (!Check(finalAgent && m_Crew.Contains(finalAgent.GetControlledEntity()) && ERR_Actors.CanFight(finalAgent.GetControlledEntity()), "final conscious crew entity belongs to original physical roster")) return -1; + Stop(); return 1; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + ERR_HQ hq = ERR_HQ.Get(); + if (hq) hq.ERR_RemoveMortarSalvoReport(m_Target); + if (m_Battery && m_Battery.Gun == m_Gun && m_Battery.Group == m_Group) m_Battery.Stop(); + ERR_Actors.DeleteSpawned(m_Target); m_Target = null; + if (s_Active == this) s_Active = null; + } + void ~ERR_NativeMortarSalvoProbe() { Stop(); } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c new file mode 100644 index 0000000..c0d206a --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c @@ -0,0 +1,383 @@ +#ifdef WORKBENCH +// Mechanism-only fixture: radio delivery and automatic artillery scheduling are +// explicitly bypassed. All ammunition and inventory operations remain physical. +modded class ERR_MortarSystem +{ + protected ERR_NativeMortarTransferProbe m_ERRTransferFixture; + bool ERR_HoldForTransfer(ERR_NativeMortarTransferProbe owner) + { + if (!ERR_NativeMortarTransferProbe.Enabled() || m_Stopped || m_ERRTransferFixture || !owner) return false; + m_ERRTransferFixture = owner; return true; + } + void ERR_ReleaseTransferHold(ERR_NativeMortarTransferProbe owner) + { + if (m_ERRTransferFixture == owner) m_ERRTransferFixture = null; + } + override void Tick(float now) + { + if (m_ERRTransferFixture) return; + super.Tick(now); + } + ERR_MortarBattery ERR_TransferBattery() + { + if (m_Batteries.Count() != 1) return null; + return m_Batteries[0]; + } +} +modded class ERR_MortarBattery +{ + ERR_MortarSupplyTransfer ERR_TransferForProbe() { return m_Transfer; } + int ERR_TransferAttempts() { return m_AttemptedShells.Count(); } +} +modded class ERR_MortarSupplyTransfer +{ + int ERR_CallbackState() { return m_Acknowledgement; } + IEntity ERR_TransferredShell() { return m_Shell; } + IEntity ERR_TransferRecipient() { return m_Gunner; } + bool ERR_RequestAccepted() { return m_Accepted; } +} +class ERR_NativeMortarMoveCallback : ScriptedInventoryOperationCallback +{ + int Result; + protected override void OnComplete() { if (Result == 0) Result = 1; } + protected override void OnFailed() { if (Result == 0) Result = -1; } +} +class ERR_NativeMortarShellOwner +{ + IEntity Shell; + IEntity OriginalOwner; +} + +class ERR_NativeMortarTransferProbe +{ + protected ERR_GameMode m_Mode; + protected ERR_MortarSystem m_System; + protected ERR_MortarBattery m_Battery; + protected IEntity m_Gunner; + protected BaseCompartmentSlot m_Seat; + protected ref array m_Crew = {}; + protected ref array m_Boxes = {}; + protected ref array m_Stores = {}; + protected ref array m_Original = {}; + protected ref ERR_NativeMortarMoveCallback m_MoveCallback; + protected IEntity m_MoveShell; + protected BaseInventoryStorageComponent m_MoveDestination; + protected float m_MoveDeadline; + protected ref ERR_MortarSupplyTransfer m_ObservedTransfer; + protected IEntity m_FirstShell; + protected IEntity m_SecondShell; + protected int m_AttemptsAtStart; + protected int m_ShotsAtStart; + protected int m_CallbackAtCancel; + protected int m_CancelOrder; + protected int m_Step; + protected float m_Deadline; + protected float m_StepDeadline; + protected float m_Wait; + protected bool m_Held; + protected bool m_Stopped; + protected bool m_Complete; + static const ResourceName STORE = "{EBBC859CCD94D96D}Prefabs/Props/EmptyStorages/USSR_AmmoBox_empty.et"; + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "mortar-transfer"; + } + void ERR_NativeMortarTransferProbe(ERR_GameMode mode) + { + m_Mode = mode; m_Deadline = GetGame().GetWorld().GetWorldTime() + 180000; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: mortar transfer " + detail); return true; } + Print("ERR SMOKE FAIL: mortar transfer " + detail, LogLevel.ERROR); Stop(); return false; + } + protected bool IsShell(IEntity item) + { + return item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == ERR_MortarBattery.SHELL; + } + protected InventoryStorageManagerComponent Inventory(IEntity actor) + { + if (!actor) return null; + return InventoryStorageManagerComponent.Cast(actor.FindComponent(InventoryStorageManagerComponent)); + } + protected bool Has(IEntity actor, IEntity item) + { + array items = {}; ERR_Inventory.Items(Inventory(actor), items); + return item && items.Contains(item); + } + protected IEntity CrewOwner(IEntity item) + { + foreach (IEntity actor : m_Crew) if (Has(actor, item)) return actor; + return null; + } + protected IEntity OriginalOwner(IEntity item) + { + foreach (ERR_NativeMortarShellOwner entry : m_Original) if (entry.Shell == item) return entry.OriginalOwner; + return null; + } + protected bool InStore(IEntity item) + { + foreach (BaseInventoryStorageComponent storage : m_Stores) if (storage && storage.Contains(item)) return true; + return false; + } + static bool Conservation(int originals, int actual, bool allOriginal, bool singleOwner) + { + return originals == 27 && actual == originals && allOriginal && singleOwner; + } + protected bool Conserved() + { + array actual = {}; + foreach (IEntity actor : m_Crew) + { + array items = {}; ERR_Inventory.Items(Inventory(actor), items); + foreach (IEntity item : items) if (IsShell(item) && !actual.Contains(item)) actual.Insert(item); + } + foreach (BaseInventoryStorageComponent storage : m_Stores) + { + if (!storage) return false; + array items = {}; storage.GetAll(items); + foreach (IEntity item : items) if (IsShell(item) && !actual.Contains(item)) actual.Insert(item); + } + bool allOriginal = true; + bool singleOwner = true; + foreach (ERR_NativeMortarShellOwner entry : m_Original) + { + if (!entry.Shell || !actual.Contains(entry.Shell)) allOriginal = false; + int owners; + foreach (IEntity actor : m_Crew) if (Has(actor, entry.Shell)) owners++; + foreach (BaseInventoryStorageComponent storage : m_Stores) if (storage && storage.Contains(entry.Shell)) owners++; + if (owners != 1) singleOwner = false; + } + return Conservation(m_Original.Count(), actual.Count(), allOriginal, singleOwner); + } + protected IEntity FirstGunnerShell() + { + array items = {}; ERR_Inventory.Items(Inventory(m_Gunner), items); + foreach (IEntity item : items) if (IsShell(item)) return item; + return null; + } + protected bool BeginMove(IEntity shell, BaseInventoryStorageComponent destination, float now) + { + if (!shell || !destination || m_MoveCallback) return false; + IEntity current = CrewOwner(shell); + // A vanilla empty box has storage but no inventory manager. The original + // recipient manager performs its explicit pickup from the external storage. + if (!current) current = OriginalOwner(shell); + InventoryStorageManagerComponent manager = Inventory(current); + if (!manager) return false; + m_MoveShell = shell; m_MoveDestination = destination; + m_MoveCallback = new ERR_NativeMortarMoveCallback(); m_MoveDeadline = now + 8000; + if (!manager.TryMoveItemToStorage(shell, destination, -1, m_MoveCallback)) return false; + return true; + } + protected int MoveResult(float now) + { + if (!m_MoveCallback) return 1; + if (m_MoveCallback.Result < 0 || now >= m_MoveDeadline) return -1; + if (m_MoveCallback.Result == 0 || !m_MoveShell || !m_MoveDestination || !m_MoveDestination.Contains(m_MoveShell)) return 0; + InventoryItemComponent item = InventoryItemComponent.Cast(m_MoveShell.FindComponent(InventoryItemComponent)); + if (!item || !item.GetParentSlot() || item.GetParentSlot().GetStorage() != m_MoveDestination) return 0; + m_MoveCallback = null; m_MoveShell = null; m_MoveDestination = null; + return 1; + } + protected bool Stash(IEntity shell, float now) + { + foreach (BaseInventoryStorageComponent storage : m_Stores) + if (storage && storage.GetEstimatedCountFitForItem(shell) > 0) return BeginMove(shell, storage, now); + return false; + } + protected void StageOrder(float now) + { + ERR_HQReport report = new ERR_HQReport(); + report.Target = GetGame().GetPlayerController().GetControlledEntity(); + report.Source = m_Battery.Group; + report.Position = m_Battery.Gun.GetOrigin() + "700 0 0"; + report.ObservedAt = now; report.DetailsObservedAt = now; + report.TravelMode = "on foot"; report.MessageId = 900001 + m_Battery.OrderId; + m_Battery.BeginRequest(report, now); + m_Battery.PendingSupplyReport = report.Snapshot(); + PrintFormat("ERR MORTAR TRANSFER FIXTURE: synthetic supply order=%1; radio bypassed; scheduler held; no artillery activity authorized", m_Battery.OrderId); + } + protected bool NoFire() + { + return m_Battery && m_Battery.TotalShots == m_ShotsAtStart && !m_Battery.Activity && !m_Battery.RadioOrder && !m_Battery.Released; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_Battery) m_Battery.Cancel("native transfer fixture stopped"); + if (m_System) + { + m_System.Stop(); // do not resume automatic fire while test items may be stored + if (m_Held) m_System.ERR_ReleaseTransferHold(this); + } + m_Held = false; + // Never delete a box containing borrowed shells or an outstanding operation. + // Failure preserves it for diagnosis/normal round-owned cleanup. + if (!m_MoveCallback) + { + foreach (IEntity box : m_Boxes) + { + if (!box) continue; + BaseInventoryStorageComponent storage = BaseInventoryStorageComponent.Cast(box.FindComponent(BaseInventoryStorageComponent)); + array items = {}; if (storage) storage.GetAll(items); + if (storage && items.IsEmpty()) ERR_Actors.DeleteSpawned(box); + } + } + } + int Tick(float now) + { + if (m_Complete) return 1; + if (m_Stopped) return -1; + if (!Enabled() || now > m_Deadline) { Check(false, "enabled server fixture and bounded 180-second deadline"); return -1; } + if (now < m_Wait) return 0; + if (m_MoveCallback) + { + int moved = MoveResult(now); + if (moved < 0) { Check(false, "fixture inventory move completed with exact destination before deadline; borrowed shells retained"); return -1; } + if (moved == 0) return 0; + if (!Check(Conserved(), "all original 27 shell identities conserved after fixture move")) return -1; + } + if (m_Step == 0) + { + m_System = ERR_MortarSystem.Get(); + if (!m_System) return 0; + m_Battery = m_System.ERR_TransferBattery(); + if (!m_Battery || !m_Battery.StartupActivated) return 0; + if (!Check(m_Battery.Operational() && m_Battery.CountShells() == 27 && !m_Battery.Activity && !m_Battery.RadioOrder && !m_Battery.CommandOpen, "actual initialized idle battery has finite 27 shells")) return -1; + if (!Check(m_System.ERR_HoldForTransfer(this), "opt-in mechanism fixture holds automatic mortar scheduler")) return -1; + m_Held = true; m_AttemptsAtStart = m_Battery.ERR_TransferAttempts(); m_ShotsAtStart = m_Battery.TotalShots; + array agents = {}; m_Battery.Group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + if (!agent || !ERR_Actors.CanFight(agent.GetControlledEntity())) continue; + IEntity actor = agent.GetControlledEntity(); if (m_Crew.Contains(actor)) continue; + m_Crew.Insert(actor); + array items = {}; ERR_Inventory.Items(Inventory(actor), items); + foreach (IEntity item : items) + { + if (!IsShell(item)) continue; + ERR_NativeMortarShellOwner entry = new ERR_NativeMortarShellOwner(); entry.Shell = item; entry.OriginalOwner = actor; m_Original.Insert(entry); + } + if (!m_Gunner && actor != m_Battery.RadioOperator) m_Gunner = actor; + } + if (!Check(m_Crew.Count() == 4 && m_Original.Count() == 27 && m_Gunner != null, "four real crew and original shell-owner identities captured")) return -1; + SCR_AIVehicleUsageComponent usage = SCR_AIVehicleUsageComponent.Cast(m_Battery.Gun.FindComponent(SCR_AIVehicleUsageComponent)); + if (usage) m_Seat = usage.GetTurretCompartmentSlot(); + if (m_Seat && m_Seat.GetOccupant()) + { + IEntity occupant = m_Seat.GetOccupant(); + if (!Check(m_Crew.Contains(occupant) && occupant != m_Battery.RadioOperator && ERR_Actors.CanFight(occupant), "existing native seat occupant is original fighting gunner")) return -1; + m_Gunner = occupant; + } + else + { + CompartmentAccessComponent access = CompartmentAccessComponent.Cast(m_Gunner.FindComponent(CompartmentAccessComponent)); + if (!Check(m_Seat && access && access.GetInVehicle(m_Battery.Gun, m_Seat, true, -1, ECloseDoorAfterActions.INVALID, false), "native seating request selects actual original crew gunner")) return -1; + } + if (!Check(m_Battery.InventoryShells(Inventory(m_Gunner)) == 9, "selected actual gunner owns its original nine physical shells")) return -1; + for (int i = 0; i < 2; i++) + { + IEntity box = ERR_Actors.Spawn(STORE, ERR_Actors.Ground(m_Battery.Gun.GetOrigin() + Vector(3 + i * 2, 0, 3))); + if (!Check(box != null, "fixture-owned empty vanilla storage created")) return -1; + m_Boxes.Insert(box); m_Mode.Own(box); + BaseInventoryStorageComponent storage = BaseInventoryStorageComponent.Cast(box.FindComponent(BaseInventoryStorageComponent)); + if (!Check(storage != null, "real vanilla storage component available without attaching it to gunner inventory")) return -1; + m_Stores.Insert(storage); + } + m_Step = 1; m_StepDeadline = now + 8000; m_Wait = now + 500; return 0; + } + if (!NoFire()) { Check(false, "no artillery activity, committed load or physical projectile during inventory mechanism test"); return -1; } + if (m_Step == 1) + { + if (m_Seat.GetOccupant() != m_Gunner) + { + if (now >= m_StepDeadline) { Check(false, "actual original gunner occupies native mortar seat"); return -1; } + return 0; + } + if (!Check(Conserved(), "27 original shells have exactly one observed owner each")) return -1; + m_Step = 2; + } + if (m_Step == 2 || m_Step == 5) + { + IEntity shell = FirstGunnerShell(); + if (shell) + { + if (!Check(Stash(shell, now), "one existing gunner shell move to vanilla store accepted; no shell minted")) return -1; + return 0; + } + if (!Check(m_Battery.InventoryShells(Inventory(m_Gunner)) == 0 && Conserved(), "actual gunner empty while all 27 original shells remain in crew or fixture storage")) return -1; + StageOrder(now); + ERR_MortarSupplyState started = m_Battery.SupplyState(now); + m_ObservedTransfer = m_Battery.ERR_TransferForProbe(); + if (!Check(started == ERR_MortarSupplyState.PENDING && m_ObservedTransfer && m_ObservedTransfer.ERR_RequestAccepted() && m_ObservedTransfer.ERR_TransferRecipient() == m_Gunner && m_ObservedTransfer.CapturedOrder() == m_Battery.OrderId, "production exact-shell request accepted once with captured current order and real gunner")) return -1; + if (m_Step == 2) + { + m_FirstShell = m_ObservedTransfer.ERR_TransferredShell(); + m_Step = 3; + } + else + { + m_SecondShell = m_ObservedTransfer.ERR_TransferredShell(); m_CallbackAtCancel = m_ObservedTransfer.ERR_CallbackState(); m_CancelOrder = m_Battery.OrderId; + m_Battery.Cancel("native fixture cancels authorization immediately after accepted inventory request"); + if (!Check(m_SecondShell && m_SecondShell != m_FirstShell && !m_Battery.CommandOpen && m_Battery.SupplyState(now) == ERR_MortarSupplyState.FAILED, "canceled current order cannot report supply READY or issue another request")) return -1; + PrintFormat("ERR MORTAR TRANSFER CANCEL: callbackBeforeCancel=%1 order=%2; accepted native move is not retracted", m_CallbackAtCancel, m_CancelOrder); + m_Step = 6; + } + m_StepDeadline = now + 8000; m_Wait = now + 250; return 0; + } + if (m_Step == 3) + { + ERR_MortarSupplyState state = m_Battery.SupplyState(now); + if (state == ERR_MortarSupplyState.FAILED || now >= m_StepDeadline) { Check(false, "production transfer completes within its bounded deadline"); return -1; } + if (state == ERR_MortarSupplyState.PENDING) return 0; + if (!Check(m_ObservedTransfer.ERR_CallbackState() == 1 && Has(m_Gunner, m_FirstShell) && !Has(OriginalOwner(m_FirstShell), m_FirstShell) && Conserved() && m_Battery.ERR_TransferAttempts() == m_AttemptsAtStart + 1, "successful native callback and exact donor-to-gunner ownership, one attempt, original 27 conserved")) return -1; + if (!Check(m_Battery.SupplyState(now) == ERR_MortarSupplyState.READY && m_Battery.ERR_TransferAttempts() == m_AttemptsAtStart + 1, "repeated supply check reuses actual inventory without another move")) return -1; + m_Battery.Cancel("native success subcase finished; no artillery activity requested"); + m_Step = 5; return 0; + } + if (m_Step == 6) + { + if (m_Battery.SupplyState(now) != ERR_MortarSupplyState.FAILED || m_Battery.OrderId != m_CancelOrder || m_Battery.ERR_TransferAttempts() != m_AttemptsAtStart + 2) { Check(false, "canceled order/generation remains failed with exactly two total move attempts"); return -1; } + if (m_ObservedTransfer.ERR_CallbackState() == 0 || m_ObservedTransfer.Unresolved()) + { + if (now >= m_StepDeadline) { Check(false, "accepted canceled operation reached definite native outcome; no ambiguous retry"); return -1; } + return 0; + } + if (!Check(m_ObservedTransfer.ERR_CallbackState() == 1 && Has(m_Gunner, m_SecondShell) && Conserved(), "canceled accepted native move has definite physical outcome with exactly two attempts and original 27 conserved")) return -1; + if (m_CallbackAtCancel == 0) Print("ERR SMOKE PASS: mortar transfer actual native completion observed after authorization cancellation"); + else Print("ERR MORTAR TRANSFER LIMIT: native callback completed synchronously before cancellation; late callback timing not exercised"); + m_Step = 7; return 0; + } + if (m_Step == 7) + { + // Return foreign shells first, leaving room for each original nine-round kit. + IEntity misplaced; + foreach (ERR_NativeMortarShellOwner entry : m_Original) + if (Has(m_Gunner, entry.Shell) && entry.OriginalOwner != m_Gunner) { misplaced = entry.Shell; break; } + if (!misplaced) + foreach (ERR_NativeMortarShellOwner entry : m_Original) if (InStore(entry.Shell)) { misplaced = entry.Shell; break; } + if (misplaced) + { + InventoryStorageManagerComponent recipient = Inventory(OriginalOwner(misplaced)); + BaseInventoryStorageComponent destination; + if (recipient) destination = recipient.FindStorageForItem(misplaced, EStoragePurpose.PURPOSE_DEPOSIT); + if (!Check(destination && BeginMove(misplaced, destination, now), "one borrowed shell return to its original crew owner accepted")) return -1; + return 0; + } + foreach (ERR_NativeMortarShellOwner entry : m_Original) + if (!Check(Has(entry.OriginalOwner, entry.Shell), "original shell identity returned to original crew inventory")) return -1; + if (!Check(Conserved() && m_Battery.CountShells() == 27 && NoFire(), "all original ammunition restored; no minted/deleted shell or shot")) return -1; + foreach (BaseInventoryStorageComponent storage : m_Stores) + { + array items = {}; storage.GetAll(items); + if (!Check(items.IsEmpty(), "borrowed-ammunition fixture storage empty before deletion")) return -1; + } + Stop(); m_Complete = true; return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c new file mode 100644 index 0000000..d93b082 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c @@ -0,0 +1,87 @@ +#ifdef WORKBENCH +// Test access only: trigger the real delivered-order method on an existing +// registered squad. Radio transit is intentionally not simulated by this test. +modded class ERR_HQ +{ + bool ERR_TestPatrolSearch(SCR_AIGroup group, out AIWaypoint search) + { + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != group) continue; + if (unit.Assignment || unit.PendingOrder || unit.Waypoint || !unit.Eligible(m_Mode)) return false; + ERR_HQReport order = new ERR_HQReport(); + order.Position = group.GetOrigin() + "40 0 0"; + order.ObservedAt = GetGame().GetWorld().GetWorldTime(); + order.MessageId = m_Journal.Message(); + unit.PendingOrder = order; + DeliverOrder(unit, order.ObservedAt); + search = unit.Waypoint; + return search && unit.Assignment == order; + } + return false; + } + bool ERR_TestPatrolRelease(SCR_AIGroup group, AIWaypoint search) + { + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != group || unit.Waypoint != search) continue; + unit.Release(); + return !unit.Assignment && !unit.PendingOrder && !unit.Waypoint; + } + return false; + } +} + +class ERR_NativePatrolHQProbe +{ + protected ERR_GameMode m_Mode; + protected ERR_SiteRuntime m_Site; + protected AIWaypoint m_Search; + protected ref array m_Baseline = {}; + protected int m_Step; + protected float m_Wait; + void ERR_NativePatrolHQProbe(ERR_GameMode mode) { m_Mode = mode; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: patrol HQ " + detail); return true; } + Print("ERR SMOKE FAIL: patrol HQ " + detail, LogLevel.ERROR); return false; + } + int Tick(float now) + { + if (now < m_Wait) return 0; + ERR_HQ hq = ERR_HQ.Get(); + if (!Check(hq != null, "real HQ available")) return -1; + if (m_Step == 0) + { + m_Site = m_Mode.Sites().Find("everon-outpost-1"); + if (!Check(m_Site && m_Site.Group && m_Site.PatrolCycle, "existing outpost route available")) return -1; + m_Site.Group.GetWaypoints(m_Baseline); + if (!Check(!m_Baseline.IsEmpty() && hq.ERR_TestPatrolSearch(m_Site.Group, m_Search), "real delivered-order method assigns existing squad")) return -1; + m_Step = 1; m_Wait = now + 750; return 0; + } + if (m_Step == 1) + { + array queue = {}; + m_Site.Group.GetWaypoints(queue); + if (!Check(m_Search && !queue.IsEmpty() && queue[0] == m_Search && m_Site.Group.GetCurrentWaypoint() == m_Search, "Search preempts native patrol")) return -1; + foreach (AIWaypoint waypoint : m_Baseline) + if (!Check(queue.Contains(waypoint), "preempted baseline route remains queued")) return -1; + if (!Check(hq.ERR_TestPatrolRelease(m_Site.Group, m_Search), "real HQ release removes only its assignment")) return -1; + m_Step = 2; m_Wait = now + 750; return 0; + } + if (m_Step == 2) + { + AIWaypoint current = m_Site.Group.GetCurrentWaypoint(); + if (!Check(current && (current == m_Site.PatrolCycle || m_Site.PatrolWaypoints.Contains(current)), "native patrol resumes after Search release")) return -1; + m_Step = 3; return 1; + } + return 1; + } + void Stop() + { + ERR_HQ hq = ERR_HQ.Get(); + if (hq && m_Site && m_Search) hq.ERR_TestPatrolRelease(m_Site.Group, m_Search); + } + void ~ERR_NativePatrolHQProbe() { Stop(); } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c new file mode 100644 index 0000000..f76d2ba --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c @@ -0,0 +1,63 @@ +// Vanilla named settlements supply exclusion areas; no original mission location system. +// Shared town/village exclusion for mortar impacts, roadblocks and mine sites. +// Fixed distance from mapped settlement centres, independent of mission +// activation radii. Scattered buildings and props are not settlements. +class ERR_SettlementSafety +{ + static const float RADIUS = 200; + string SettlementReason; + protected vector m_SafeImpact; + protected bool m_SettlementNear; + protected vector m_LastSettlementImpact; + protected float m_LastSettlementCheck = -1; + protected bool m_LastSettlementClear; + + bool OutsideSettlements(vector impact) + { + float now = GetGame().GetWorld().GetWorldTime(); + if (m_LastSettlementCheck >= 0 && now >= m_LastSettlementCheck && now - m_LastSettlementCheck < 1000 && vector.DistanceXZ(impact, m_LastSettlementImpact) == 0) + return m_LastSettlementClear; + m_LastSettlementCheck = now; + m_LastSettlementImpact = impact; + m_LastSettlementClear = false; + m_SafeImpact = impact; + m_SettlementNear = false; + SettlementReason = "clear"; + // Also cover named native map settlements, independent of whether the + // mission placed a garrison marker there. Generic building entities also + // include deer stands, bridge pillars, rubble and electrical cabinets. + // Broad vertical bounds keep the 200m distance horizontal on hills. + GetGame().GetWorld().QueryEntitiesByAABB(impact - Vector(RADIUS, 5000, RADIUS), impact + Vector(RADIUS, 5000, RADIUS), CheckSettlement, FilterSettlement, EQueryEntitiesFlags.ALL); + m_LastSettlementClear = !m_SettlementNear; + return m_LastSettlementClear; + } + + protected bool FilterSettlement(IEntity entity) + { + return entity && entity.FindComponent(MapDescriptorComponent); + } + + protected bool CheckSettlement(IEntity entity) + { + float radius; + MapDescriptorComponent descriptor = MapDescriptorComponent.Cast(entity.FindComponent(MapDescriptorComponent)); + if (descriptor) + { + int type = descriptor.GetBaseType(); + if (type == EMapDescriptorType.MDT_NAME_CITY) + radius = RADIUS; + else if (type == EMapDescriptorType.MDT_NAME_TOWN) + radius = RADIUS; + else if (type == EMapDescriptorType.MDT_NAME_VILLAGE || type == EMapDescriptorType.MDT_NAME_SETTLEMENT) + radius = RADIUS; + } + if (radius > 0 && vector.DistanceXZ(m_SafeImpact, entity.GetOrigin()) <= radius) + { + m_SettlementNear = true; + SettlementReason = string.Format("named map settlement entity=%1 position=%2 distance=%3m exclusion=%4m", entity, entity.GetOrigin(), vector.DistanceXZ(m_SafeImpact, entity.GetOrigin()), radius); + return false; + } + return true; + } + +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c new file mode 100644 index 0000000..1cb5412 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c @@ -0,0 +1,9 @@ +modded class ERR_ScenarioComponent +{ + protected override bool PrepareAdditionalForces() + { + if (!super.PrepareAdditionalForces()) return false; + ERR_HQ hq = ERR_HQ.Get(); + return hq && hq.PrepareSupport(); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/addon.gproj b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/addon.gproj new file mode 100644 index 0000000..ec3100b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/ai/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Ai" + GUID "5192138CB9D5B911" + TITLE "Escapists Rereintroduced - Ai" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Missions/ERR_Everon.conf b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Missions/ERR_Everon.conf new file mode 100644 index 0000000..d63df9d --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Missions/ERR_Everon.conf @@ -0,0 +1,11 @@ +SCR_MissionHeader { + World "{B6C516F86302C679}Worlds/ERR_Everon.ent" + SystemsConfig "{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" + m_sName "Rereintroduced: Everon (development)" + m_sAuthor "Rereintroduced contributors" + m_sDescription "Independent escape prototype. Development scenario; runtime validation in progress." + m_sGameMode "Escape" + m_iPlayerCount 12 + m_eSaveTypes 0 + m_bShowInScenarioMenu 1 +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Missions/ERR_Everon.conf.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Missions/ERR_Everon.conf.meta new file mode 100644 index 0000000..4d75705 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Missions/ERR_Everon.conf.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{C1E20667DCE324ED}Missions/ERR_Everon.conf" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c new file mode 100644 index 0000000..f1b6593 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c @@ -0,0 +1,36 @@ +// Companion-specific commands extend Core's authenticated transport. +modded class ERR_AdminService +{ + protected override string Setting(string section, string option) + { + if (section == "hq") + { + if (option == "interval") return "reportIntervalSeconds"; + if (option == "squads") return "supportSquadLimit"; + if (option == "radius") return "responseRadiusMetres"; + } + if (section == "intel") + { + if (option == "carrying") return "aiIntelChancePercent"; + } + return super.Setting(section, option); + } + protected override bool Extension(ERR_GameMode mode, string arguments, array replies) + { + if (arguments != "status" && arguments != "hq show" && arguments != "hq log") return super.Extension(mode, arguments, replies); + ERR_HQ hq = ERR_HQ.Cast(mode.Command()); + if (!hq) { replies.Insert("HQ unavailable"); return true; } + if (arguments == "hq show" || arguments == "status") replies.Insert(hq.Status()); + else + { + int cursor; + hq.Journal().Read(Math.Max(0, hq.Journal().Sequence() - 8), replies, cursor); + if (replies.IsEmpty()) replies.Insert("HQ journal is empty."); + } + return true; + } + protected override string Help() + { + return super.Help() + " | hq show|log | hq interval|squads|radius show|set N | intel carrying show|set N"; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c new file mode 100644 index 0000000..442c72f --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c @@ -0,0 +1,288 @@ +#ifdef WORKBENCH +// Read-only evidence hooks. Every production method delegates unchanged. +modded class ERR_HQ +{ + void ERR_ResponseUnits(out array units) + { + units.Clear(); + if (!ERR_NativeHQResponseProof.Enabled()) return; + foreach (ERR_HQUnit unit : m_Units) units.Insert(unit); + } + protected override void Observe(ERR_HQUnit unit, float now) + { + ERR_HQReport previous = unit.PendingReport; + super.Observe(unit, now); + ERR_NativeHQResponseProof proof = ERR_NativeHQResponseProof.Active(); + if (proof && unit.PendingReport && unit.PendingReport != previous) proof.Observed(this, unit, now); + } + protected override void Accept(ERR_HQReport report, float now) + { + super.Accept(report, now); + ERR_NativeHQResponseProof proof = ERR_NativeHQResponseProof.Active(); + if (!proof || !report) return; + foreach (ERR_HQReport accepted : m_Contacts) + if (accepted.MessageId == report.MessageId) { proof.Accepted(this, accepted, now); break; } + } + protected override void DeliverOrder(ERR_HQUnit unit, float now) + { + ERR_HQReport order = unit.PendingOrder; + ERR_HQRoute route = unit.Downlink; + super.DeliverOrder(unit, now); + ERR_NativeHQResponseProof proof = ERR_NativeHQResponseProof.Active(); + if (proof && order && route && unit.Assignment == order && unit.Waypoint) proof.Delivered(this, unit, route, now); + } +} +modded class ERR_HQJournal +{ + override void Write(string kind, string message, int messageId = 0) + { + super.Write(kind, message, messageId); + ERR_NativeHQResponseProof proof = ERR_NativeHQResponseProof.Active(); + if (proof) proof.JournalEvent(this, kind, message, messageId); + } +} +modded class SCR_AIGroupUtilityComponent +{ + IEntity ERR_ResponseVisualObserver(ERR_HQReport report, float now) + { + foreach (SCR_AIInfoComponent info : m_aInfoComponents) + { + if (!info || !info.m_Perception) continue; + AIAgent agent = AIAgent.Cast(info.GetOwner()); + if (!agent || !ERR_Actors.CanFight(agent.GetControlledEntity())) continue; + array targets = {}; info.m_Perception.GetTargetsList(targets, ETargetCategory.ENEMY); + foreach (BaseTarget target : targets) + { + ERR_HQVisualContact sample = ERR_HQObservation.Capture(target, now); + if (sample && sample.Entity == report.Target && sample.Escapist && Math.AbsFloat(sample.ObservedAt - report.ObservedAt) < 1 && vector.Distance(sample.Position, report.Position) < 0.1) return agent.GetControlledEntity(); + } + } + return null; + } +} +class ERR_NativeResponseUnit +{ + ERR_HQUnit Unit; + SCR_AIGroup Group; + IEntity Radio; + ref array Actors = {}; +} +class ERR_NativeResponseJournal +{ + bool Report; + bool Transmit; + bool HQReceive; + bool HQTransmit; + bool UnitReceive; + bool Delivered; +} +class ERR_NativeResponseLineage +{ + ref ERR_HQReport Report; + ERR_HQUnit Source; + IEntity Observer; + IEntity SourceRadio; + ref ERR_HQRoute Uplink; + bool Accepted; + float AcceptedAt; + ERR_HQUnit Recipient; + IEntity RecipientRadio; + int DeliveryId; + AIWaypoint Waypoint; + IEntity MovingActor; + vector DeliveredOrigin; + float DeliveredAt; +} +class ERR_NativeHQResponseProof +{ + protected static ERR_NativeHQResponseProof s_Active; + protected ERR_GameMode m_Mode; + protected ERR_HQ m_HQ; + protected IEntity m_Player; + protected SCR_PlayerController m_Controller; + protected ERR_PlayerLife m_Life; + protected ERR_HQUnit m_Source; + protected DamageManagerComponent m_Damage; + protected bool m_DamageWasEnabled; + protected bool m_Protected; + protected bool m_Started; + protected bool m_Stopped; + protected bool m_Failed; + protected string m_Failure; + protected float m_Deadline; + protected float m_NextDiagnostic; + protected ref array m_Units = {}; + protected ref array m_Forces = {}; + protected ref array m_Reports = {}; + protected ref map m_Journal = new map(); + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "hq-response"; + } + static ERR_NativeHQResponseProof Active() { return s_Active; } + void ERR_NativeHQResponseProof(ERR_GameMode mode, IEntity player) + { + m_Mode = mode; m_Player = player; m_HQ = ERR_HQ.Get(); m_Deadline = GetGame().GetWorld().GetWorldTime() + 140000; + if (Enabled() && !s_Active) s_Active = this; + } + protected bool Fail(string reason) { m_Failed = true; m_Failure = reason; return false; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: HQ response " + detail); return true; } + Print("ERR SMOKE FAIL: HQ response " + detail, LogLevel.ERROR); Stop(); return false; + } + protected ERR_NativeResponseUnit Original(ERR_HQUnit unit) + { + foreach (ERR_NativeResponseUnit original : m_Units) if (original.Unit == unit && original.Group == unit.Group) return original; + return null; + } + protected ERR_NativeResponseLineage Report(int id) + { + foreach (ERR_NativeResponseLineage report : m_Reports) if (report.Report.MessageId == id) return report; + return null; + } + protected bool Canonical() + { + return m_Player && m_Controller && m_Life && m_Mode.Players().CurrentActor(m_Player) == m_Life && m_Controller == GetGame().GetPlayerController() && m_Controller.GetControlledEntity() == m_Player && m_Life.Actor == m_Player && m_Life.Connected && m_Life.UsedLife; + } + protected bool UnchangedForces() + { + array current = {}; m_HQ.ERR_ResponseUnits(current); + if (current.Count() != m_Units.Count()) return false; + foreach (ERR_HQUnit unit : current) + { + ERR_NativeResponseUnit original = Original(unit); + if (!original) return false; + array agents = {}; unit.Group.GetAgents(agents); + if (agents.Count() != original.Actors.Count()) return false; + foreach (AIAgent agent : agents) if (!agent || !original.Actors.Contains(agent.GetControlledEntity())) return false; + } + array forces = {}; m_HQ.PhysicalForces(forces); + if (forces.Count() != m_Forces.Count()) return false; + foreach (IEntity entity : forces) if (!m_Forces.Contains(entity)) return false; + return true; + } + protected bool Arrange() + { + array units = {}; m_HQ.ERR_ResponseUnits(units); + foreach (ERR_HQUnit unit : units) + { + if (!unit.Group || !unit.Utility || !unit.Radio || ERR_HQRadio.Capability(unit.Radio) != 2) return false; + array agents = {}; unit.Group.GetAgents(agents); + if (agents.IsEmpty() || !unit.Group.IsExpandComplete()) return false; + ERR_NativeResponseUnit original = new ERR_NativeResponseUnit(); original.Unit = unit; original.Group = unit.Group; original.Radio = unit.Radio; + foreach (AIAgent agent : agents) + { + if (!agent || !ERR_Actors.CanFight(agent.GetControlledEntity())) return false; + original.Actors.Insert(agent.GetControlledEntity()); + } + m_Units.Insert(original); + if (!m_Source && !unit.ReservedForSupport) m_Source = unit; + } + if (!m_Source || m_Units.Count() < 2) return false; + m_HQ.PhysicalForces(m_Forces); + m_Controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); m_Life = m_Mode.Players().CurrentActor(m_Player); + if (!Canonical()) return false; + m_Damage = DamageManagerComponent.Cast(m_Player.FindComponent(DamageManagerComponent)); + if (!m_Damage) return false; + m_DamageWasEnabled = m_Damage.IsDamageHandlingEnabled(); m_Damage.EnableDamageHandling(false); m_Protected = true; + // Preserve the established fixture arrangement: move only the real prisoner. + // Native perception must discover him; neither targets nor reports are seeded. + vector position = ERR_Actors.Ground(m_Source.Group.GetOrigin() + "0 0 20"); + vector transform[4]; m_Player.GetWorldTransform(transform); transform[3] = position; + ChimeraCharacter.Cast(m_Player).Teleport(transform); + m_Started = true; + PrintFormat("ERR HQ RESPONSE ARRANGEMENT: canonical prisoner moved to=%1 near original source group=%2; temporary player damage protection=%3; no AI/report/radio cadence changes", position, m_Source.Id, m_Protected); + return true; + } + void JournalEvent(ERR_HQJournal journal, string kind, string message, int messageId) + { + if (!m_Started || m_Stopped || !m_HQ || journal != m_HQ.Journal() || messageId <= 0) return; + ERR_NativeResponseJournal entry = m_Journal.Get(messageId); + if (!entry) + { + if (m_Journal.Count() >= 128) { Fail("bounded journal evidence map exhausted"); return; } + entry = new ERR_NativeResponseJournal(); m_Journal.Insert(messageId, entry); + } + if (kind == "REPORT") entry.Report = true; + if (kind == "TRANSMIT") { entry.Transmit = true; if (message.StartsWith("HQ -> ")) entry.HQTransmit = true; } + if (kind == "RECEIVE") { if (message.StartsWith("HQ received from ")) entry.HQReceive = true; else if (message.StartsWith("unit ")) entry.UnitReceive = true; } + if (kind == "ORDER DELIVERED") entry.Delivered = true; + } + void Observed(ERR_HQ hq, ERR_HQUnit unit, float now) + { + if (!m_Started || m_Stopped || hq != m_HQ || unit != m_Source || unit.PendingReport.Target != m_Player) return; + ERR_HQReport report = unit.PendingReport; + ERR_NativeResponseUnit original = Original(unit); + IEntity observer = unit.Utility.ERR_ResponseVisualObserver(report, now); + if (!Canonical() || !original || !original.Actors.Contains(observer) || !unit.Uplink || unit.Uplink.Nodes.IsEmpty() || unit.Uplink.Nodes[0].Carrier != unit.Radio || unit.Uplink.MessageId != report.MessageId || unit.Radio != original.Radio || !original.Actors.Contains(unit.Radio) || report.Source != original.Group || report.ObservedAt > now || Report(report.MessageId)) { Fail("real observed report lacks canonical original observer/radio/source lineage"); return; } + if (m_Reports.Count() >= 32) { Fail("bounded report evidence exhausted"); return; } + ERR_NativeResponseLineage proof = new ERR_NativeResponseLineage(); proof.Report = report.Snapshot(); proof.Source = unit; proof.Observer = observer; proof.SourceRadio = unit.Radio; proof.Uplink = unit.Uplink; m_Reports.Insert(proof); + PrintFormat("ERR HQ RESPONSE SIGHTING: source=%1 report=M%2 observer=%3 radio=%4 target=%5 observedAt=%6; actual native visual sample", unit.Id, report.MessageId, observer, unit.Radio, m_Player, report.ObservedAt); + } + void Accepted(ERR_HQ hq, ERR_HQReport report, float now) + { + if (!m_Started || m_Stopped || hq != m_HQ) return; + ERR_NativeResponseLineage proof = Report(report.MessageId); if (!proof) return; + if (report.Target != m_Player || report.Source != proof.Report.Source || report.ObservedAt != proof.Report.ObservedAt || vector.Distance(report.Position, proof.Report.Position) > 0.01 || !proof.Uplink || proof.Uplink.Failed || proof.Uplink.Sending || proof.Uplink.Cursor < proof.Uplink.Nodes.Count()) { Fail("accepted report lacks completed actual uplink or immutable observed time"); return; } + proof.Accepted = true; proof.AcceptedAt = now; + } + void Delivered(ERR_HQ hq, ERR_HQUnit unit, ERR_HQRoute route, float now) + { + if (!m_Started || m_Stopped || hq != m_HQ || !unit.Assignment) return; + ERR_NativeResponseLineage proof = Report(unit.Assignment.MessageId); if (!proof || proof.Recipient) return; + ERR_NativeResponseUnit original = Original(unit); + if (!proof.Accepted || !original || unit == proof.Source || !unit.Assignment || !unit.Waypoint) { Fail("delivered response lacks accepted original recipient/order"); return; } + if (unit.Assignment.Target != m_Player || unit.Assignment.Source != proof.Report.Source || unit.Assignment.ObservedAt != proof.Report.ObservedAt || vector.Distance(unit.Assignment.Position, proof.Report.Position) > 0.01) { Fail("delivered response changed immutable report"); return; } + if (unit.Radio != original.Radio || !original.Actors.Contains(unit.Radio) || !route.Downlink || route.Nodes.IsEmpty()) { Fail("delivered response lacks original radio/downlink"); return; } + ERR_HQRadioNode recipientNode = route.Nodes[route.Nodes.Count() - 1]; + if (recipientNode.Carrier != unit.Radio || route.Failed || route.Sending || route.Cursor != route.Nodes.Count() - 1) { Fail("delivered response lacks completed actual recipient downlink"); return; } + proof.Recipient = unit; proof.RecipientRadio = unit.Radio; proof.DeliveryId = route.MessageId; proof.Waypoint = unit.Waypoint; proof.DeliveredAt = now; + foreach (IEntity actor : original.Actors) if (ERR_Actors.CanFight(actor)) { proof.MovingActor = actor; break; } + if (proof.MovingActor) proof.DeliveredOrigin = proof.MovingActor.GetOrigin(); + PrintFormat("ERR HQ RESPONSE DELIVERED: report=M%1 downlink=M%2 source=%3 recipient=%4 radio=%5 waypoint=%6 observedAt=%7", proof.Report.MessageId, route.MessageId, proof.Source.Id, unit.Id, unit.Radio, unit.Waypoint, unit.Assignment.ObservedAt); + } + int Tick(float now) + { + if (m_Stopped) return -1; + if (!Enabled() || s_Active != this || !m_Mode || !m_Mode.Active() || !m_HQ || now > m_Deadline || m_Failed) { Check(false, "bounded active evidence context: " + m_Failure); return -1; } + if (!m_Started) + { + if (!m_HQ.ERR_ProbeSquadsReady()) return 0; + array guns = {}; m_HQ.Mortars().AppendGuns(guns); + foreach (IEntity gun : guns) { ERR_MortarBattery battery = m_HQ.Mortars().FindGun(gun); if (!battery || !battery.StartupActivated || !battery.Operational() || !m_HQ.MortarConnected(battery.Group)) return 0; } + if (!Check(Arrange(), "original physical force, RTOs and canonical prisoner captured before arranged sighting")) return -1; + return 0; + } + if (!Canonical() || !UnchangedForces()) { Check(false, "canonical player and all original physical group/actor identities retained without added force"); return -1; } + if (now >= m_NextDiagnostic) + { + PrintFormat("ERR HQ RESPONSE PROOF: observed source reports=%1; %2", m_Reports.Count(), m_HQ.ERR_ProbePerception()); m_NextDiagnostic = now + 10000; + } + foreach (ERR_NativeResponseLineage proof : m_Reports) + { + if (!proof.Recipient || !proof.MovingActor) continue; + if (proof.Recipient.Waypoint != proof.Waypoint || !proof.Recipient.Assignment || proof.Recipient.Assignment.MessageId != proof.Report.MessageId) continue; + ERR_NativeResponseJournal uplink = m_Journal.Get(proof.Report.MessageId); + ERR_NativeResponseJournal downlink = m_Journal.Get(proof.DeliveryId); + if (!uplink || !downlink || !uplink.Report || !uplink.Transmit || !uplink.HQReceive || !downlink.HQTransmit || !downlink.UnitReceive || !downlink.Delivered) continue; + if (proof.Recipient.Group.GetCurrentWaypoint() != proof.Waypoint || vector.DistanceXZ(proof.MovingActor.GetOrigin(), proof.DeliveredOrigin) < 3) continue; + if (vector.DistanceXZ(proof.MovingActor.GetOrigin(), proof.Report.Position) >= vector.DistanceXZ(proof.DeliveredOrigin, proof.Report.Position) - 1) continue; + if (!Check(proof.SourceRadio && proof.RecipientRadio && m_HQ.ERR_ProbeUniqueAssignments(), "actual sighting/report/uplink/HQ receipt/downlink journal lineage reaches distinct original infantry with bounded unique waypoints")) return -1; + if (!Check(UnchangedForces(), "original recipient physically moves toward its native Search waypoint with no replacement or additional force")) return -1; + Stop(); return 1; + } + return 0; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_Protected && m_Damage) m_Damage.EnableDamageHandling(m_DamageWasEnabled); + m_Protected = false; + if (s_Active == this) s_Active = null; + } + void ~ERR_NativeHQResponseProof() { Stop(); } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c new file mode 100644 index 0000000..74516fd --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c @@ -0,0 +1,10 @@ +#ifdef WORKBENCH +modded class ERR_MortarSystem +{ + ERR_MortarBattery ERR_ProbeBattery() + { + if (m_Batteries.Count() != 1) return null; + return m_Batteries[0]; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c new file mode 100644 index 0000000..c237258 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c @@ -0,0 +1,114 @@ +// Opt-in engine fixture: physical radios and production delivery routes only. +#ifdef WORKBENCH +modded class ERR_HQ +{ + vector ERR_ProbeResponseOrigin() + { + foreach (ERR_HQUnit unit : m_Units) + if (!unit.ReservedForSupport && unit.Group) return unit.Group.GetOrigin() + "0 0 20"; + return vector.Zero; + } + bool ERR_ProbeDeliveredResponse() + { + foreach (ERR_HQUnit unit : m_Units) + if (unit.Assignment && unit.Waypoint && unit.Group != unit.Assignment.Source) return true; + return false; + } + bool ERR_ProbeUniqueAssignments() + { + array waypoints = {}; + foreach (ERR_HQUnit unit : m_Units) + { + if (!unit.Waypoint) continue; + if (!unit.Assignment || waypoints.Contains(unit.Waypoint)) return false; + waypoints.Insert(unit.Waypoint); + } + return waypoints.Count() > 0 && Assigned() <= m_Mode.Settings().Get("supportSquadLimit"); + } + string ERR_ProbePerception() + { + int targets, sightings, radios; + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Radio) radios++; + if (!unit.Utility) continue; + array samples = {}; + ERR_HQObservation.Gather(unit.Utility, GetGame().GetWorld().GetWorldTime(), samples); + sightings += samples.Count(); + if (unit.Utility.m_Perception) targets += unit.Utility.m_Perception.m_aTargets.Count(); + } + return string.Format("%1; radios=%2 targets=%3 fresh visual samples=%4", Status(), radios, targets, sightings); + } + ERR_HQRoute ERR_ProbeRoute(IEntity carrier = null, bool downlink = false) + { + if (carrier) return m_Network.Route(carrier, downlink); + foreach (ERR_HQUnit unit : m_Units) + if (unit.Radio) return m_Network.Route(unit.Radio, downlink); + return null; + } + bool ERR_ProbeSquadsReady() + { + int infantry; + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.ReservedForSupport) continue; + infantry++; + if (!unit.Group || ERR_HQRadio.Capability(unit.Radio) != 2) return false; + array agents = {}; + unit.Group.GetAgents(agents); + if (agents.Count() != 6) return false; + } + return infantry == 6; + } +} + +class ERR_NativeRadioProbe +{ + protected ref ERR_HQRoute m_Route; + protected IEntity m_Carrier; + protected int m_Step; + + int Tick(ERR_HQ hq, float now) + { + if (!hq) return -1; + if (m_Step == 0) + { + if (!hq.ERR_ProbeSquadsReady()) return 0; + Print("ERR SMOKE PASS: six physical six-person squads each have a manpack operator"); + m_Route = hq.ERR_ProbeRoute(); + if (!m_Route || m_Route.Nodes.IsEmpty()) return -1; + m_Carrier = m_Route.Nodes[0].Carrier; + m_Route.MessageId = hq.Journal().Message(); + m_Step = 1; + } + int result = m_Route.Advance(now, hq.Journal()); + if (result == 0) return 0; + if (m_Step == 3) + { + if (result >= 0) return -1; + Print("ERR SMOKE PASS: removing receiving manpack interrupts an in-flight HQ order"); + return 1; + } + if (result < 0) return -1; + if (m_Step == 1) Print("ERR SMOKE PASS: physical manpack uplink delivers to HQ"); + if (m_Step == 2) Print("ERR SMOKE PASS: HQ downlink delivers to a physical receiver"); + m_Route = hq.ERR_ProbeRoute(m_Carrier, true); + if (!m_Route || m_Route.Nodes.IsEmpty()) return -1; + m_Route.MessageId = hq.Journal().Message(); + m_Step++; + if (m_Step == 3) + { + // Start HQ transmission, then remove the actual receiving equipment. + if (m_Route.Advance(now, hq.Journal()) != 0) return -1; + IEntity receiver = m_Route.Nodes[0].Carrier; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(receiver.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) return -1; + array items = {}; + inventory.GetItems(items); + foreach (IEntity item : items) + if (item && item.FindComponent(BaseRadioComponent)) SCR_EntityHelper.DeleteEntityAndChildren(item); + } + return 0; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c new file mode 100644 index 0000000..933dd7f --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c @@ -0,0 +1,579 @@ +// Explicit, local Workbench diagnostic only. Never compiled into game/server builds. +#ifdef WORKBENCH +modded class ERR_GameMode +{ + protected bool m_ERRTestPatrolHQ; + protected ref ERR_NativePatrolProbe m_ERRHQPatrolMovement; + protected ref ERR_NativePatrolHQProbe m_ERRHQPatrolOrder; + protected int m_ERRSmokeStep; + protected float m_ERRSmokeDeadline; + protected float m_ERRSmokeWait; + protected IEntity m_ERRSmokePlayer; + protected BaseDoorComponent m_ERRGate; + protected ERR_LocationComponent m_ERRSmokeRadio; + protected bool m_ERRSmokeDone; + protected bool m_ERRTestLostHelicopter; + protected bool m_ERRTestPlayerDeath; + protected bool m_ERRTestRadioNetwork; + protected bool m_ERRTestHQResponse; + protected bool m_ERRTestMortar; + protected bool m_ERRTestMortarFire; + protected bool m_ERRTestMapOwnership; + protected bool m_ERRTestAircraftControl; + protected bool m_ERRTestAircraftCancel; + protected bool m_ERRTestAircraftTranslate; + protected ref ERR_NativeAircraftControlProbe m_ERRAircraftControl; + protected ref ERRM_NativeMapOwnershipProbe m_ERRMapOwnership; + protected bool m_ERRTestMortarSalvo; + protected ref ERR_NativeMortarSalvoProbe m_ERRMortarSalvo; + protected bool m_ERRTestMortarCourier; + protected ref ERR_NativeMortarCourierProbe m_ERRMortarCourier; + protected bool m_ERRTestMortarTransfer; + protected ref ERR_NativeMortarTransferProbe m_ERRMortarTransfer; + protected ref ERR_NativeMortarFiringProbe m_ERRMortarFire; + protected float m_ERRNextProbeLog; + protected ref ERR_NativeRadioProbe m_ERRRadioProbe; + protected ref ERR_NativeHQResponseProof m_ERRHQResponseProof; + protected ref array m_ERRCacheFolders = {}; + + protected override void EOnInit(IEntity owner) + { + super.EOnInit(owner); + string enabled; + if (SCR_Global.IsEditMode() || !Replication.IsServer() || !System.GetCLIParam("errSmoke", enabled) || enabled != "1") return; + string outcome; + m_ERRTestLostHelicopter = System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "lost-helicopter"; + m_ERRTestRadioNetwork = outcome == "radio-network"; + m_ERRTestHQResponse = outcome == "hq-response"; + m_ERRTestMortar = outcome == "mortar-inventory"; + m_ERRTestMapOwnership = outcome == "map-ownership"; + m_ERRTestAircraftCancel = outcome == "aircraft-cancel"; + m_ERRTestAircraftTranslate = outcome == "aircraft-translate"; + m_ERRTestAircraftControl = outcome == "aircraft-control" || m_ERRTestAircraftCancel || m_ERRTestAircraftTranslate; + m_ERRTestMortarFire = outcome == "mortar-fire" || outcome == "mortar-expiry"; + m_ERRTestMortarCourier = outcome == "mortar-courier"; + m_ERRTestMortarSalvo = outcome == "mortar-salvo" || outcome == "mortar-refresh"; + m_ERRTestMortarTransfer = outcome == "mortar-transfer"; + m_ERRTestPatrolHQ = outcome == "patrol-hq"; + m_ERRTestPlayerDeath = outcome == "player-death" || m_ERRTestRadioNetwork || m_ERRTestHQResponse || m_ERRTestMortar; + m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 150000; + if (m_ERRTestAircraftControl) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 330000; + if (m_ERRTestMortarCourier) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 450000; + if (m_ERRTestMortarTransfer) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 330000; + if (m_ERRTestMortarSalvo) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 330000; + if (m_ERRTestMortarFire) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 330000; + if (m_ERRTestPatrolHQ) m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 420000; + OnStop().Insert(ERR_StopHQPatrol); + OnPhaseChanged().Insert(ERR_SmokePhase); + GetGame().GetCallqueue().CallLater(ERR_SmokeTick, 500, true); + Print("ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate"); + } + + protected bool ERR_Check(bool condition, string name) + { + if (condition) { Print("ERR SMOKE PASS: " + name); return true; } + ERR_StopHQPatrol(); + Print("ERR SMOKE FAIL: " + name, LogLevel.ERROR); + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + return false; + } + protected void ERR_StopHQPatrol() + { + if (m_ERRMapOwnership) m_ERRMapOwnership.Stop(); + if (m_ERRAircraftControl) m_ERRAircraftControl.Stop(); + if (m_ERRHQResponseProof) m_ERRHQResponseProof.Stop(); + if (m_ERRMortarSalvo) m_ERRMortarSalvo.Stop(); + if (m_ERRMortarCourier) m_ERRMortarCourier.Stop(); + if (m_ERRMortarTransfer) m_ERRMortarTransfer.Stop(); + if (m_ERRMortarFire) m_ERRMortarFire.Stop(); + if (m_ERRHQPatrolMovement) m_ERRHQPatrolMovement.Stop(); + if (m_ERRHQPatrolOrder) m_ERRHQPatrolOrder.Stop(); + } + protected void ERR_MovePlayer(vector position) + { + vector transform[4]; + m_ERRSmokePlayer.GetWorldTransform(transform); + transform[3] = ERR_Actors.Ground(position); + ChimeraCharacter.Cast(m_ERRSmokePlayer).Teleport(transform); + } + protected ERR_UnlockPrisonAction ERR_FindLock(IEntity entity) + { + BaseActionsManagerComponent manager = BaseActionsManagerComponent.Cast(entity.FindComponent(BaseActionsManagerComponent)); + if (manager) + { + array actions = {}; + manager.GetActionsList(actions); + foreach (BaseUserAction action : actions) + { + ERR_UnlockPrisonAction lock = ERR_UnlockPrisonAction.Cast(action); + if (lock) return lock; + } + } + IEntity child = entity.GetChildren(); + while (child) + { + ERR_UnlockPrisonAction lock = ERR_FindLock(child); + if (lock) return lock; + child = child.GetSibling(); + } + return null; + } + protected void ERR_SmokePhase(ERR_Phase previous, ERR_Phase current) + { + if (m_ERRSmokeDone || !ERR_MissionRules.Terminal(current)) return; + if (m_ERRTestAircraftControl) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 221, "actual aircraft controller completed before explicit fixture reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + ERR_StopHQPatrol(); + if (m_ERRTestAircraftCancel) + Print("ERR SMOKE COMPLETE: actual airborne aircraft cancellation retains inputs through settled contact landing and engine-off; isolated mechanism, not HQ dispatch"); + else if (m_ERRTestAircraftTranslate) + Print("ERR SMOKE COMPLETE: actual aircraft controller immutable target translation, observed target hold and contact landing; bounded mechanism, not route support or HQ dispatch"); + else Print("ERR SMOKE COMPLETE: actual aircraft controller and post-spawn qualification, powered hover and contact landing; isolated physical mechanism, not HQ dispatch"); + return; + } + if (m_ERRTestMapOwnership) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 201, "native map ownership probe cleaned up before explicit reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + ERR_StopHQPatrol(); + Print("ERR SMOKE COMPLETE: native replacement map/config/root ownership and spare deletion; camera authorization observed, render flag not measured"); + return; + } + if (m_ERRTestMortarSalvo) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 191, "native configured salvo and unchanged-report replay observation complete before reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + ERR_StopHQPatrol(); + Print("ERR SMOKE COMPLETE: native full configured mortar salvo, exact original ammunition and unchanged-report replay refusal; fixture reset requested"); + return; + } + if (m_ERRTestMortarCourier) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 181, "native finite courier reached an exhausted battery before explicit reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + ERR_StopHQPatrol(); + Print("ERR SMOKE COMPLETE: native finite courier, real supply uplink/downlink, original patrol walking and exact physical shell delivery; original 27 shells sequestered in fixture boxes; reset requested"); + return; + } + if (m_ERRTestMortarTransfer) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 161, "native exact shell transfers and original-owner restoration complete before explicit reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + ERR_StopHQPatrol(); + Print("ERR SMOKE COMPLETE: native exact mortar inventory transfer, accepted-operation cancellation and original-owner restoration; radio bypassed; fixture reset requested"); + return; + } + if (m_ERRTestMortarFire) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 151, "native mortar first shot and stop complete before explicit reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + ERR_StopHQPatrol(); + Print("ERR SMOKE COMPLETE: native HQ radio mortar projectile and configured cancellation/expiry; fixture reset requested"); + return; + } + if (m_ERRTestPatrolHQ) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 133, "HQ patrol preemption and physical resumption before explicit reset")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + Print("ERR SMOKE COMPLETE: native HQ patrol preemption and physical resumption"); + return; + } + if (m_ERRTestPlayerDeath) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 91, "death exhausts round life and reaches defeat after spectator grace")) return; + } + else if (m_ERRTestLostHelicopter) + { + if (!ERR_Check(current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 8, "lost extraction helicopter causes defeat")) return; + } + else if (!ERR_Check(current == ERR_Phase.VICTORY && m_ERRSmokeStep == 7, "scripted escape reaches victory after physical vehicle occupancy")) return; + m_ERRSmokeDone = true; + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + PrintFormat("ERR SMOKE COMPLETE: terminal=%1 lostHelicopterCase=%2 playerDeathCase=%3", current, m_ERRTestLostHelicopter, m_ERRTestPlayerDeath); + GetGame().GetCallqueue().CallLater(ERR_EndScreenshot, 4000); + } + protected bool ERR_CheckRoster() + { + ERR_PlayerRoster roster = new ERR_PlayerRoster(); + UUID first = "00e77100-0000-0000-0000-000000000101"; + UUID second = "00e77100-0000-0000-0000-000000000202"; + if (!ERR_Check(roster.Bind(101, first) && roster.CanEnter(101, ERR_Phase.PRISON), "new identity may enter prison")) return false; + roster.Spawned(101, m_ERRSmokePlayer); + if (!ERR_Check(!roster.CanEnter(101, ERR_Phase.PRISON), "spawn consumes identity life")) return false; + roster.Disconnect(101); + if (!ERR_Check(roster.HasSurvivor() && !roster.Get(101), "disconnect retains living actor and clears connection")) return false; + if (!ERR_Check(roster.Bind(202, first) && !roster.CanEnter(202, ERR_Phase.PRISON), "reconnected identity retains spent life")) return false; + if (!ERR_Check(!roster.Bind(303, first), "duplicate active identity rejected")) return false; + if (!ERR_Check(roster.Bind(101, second) && roster.CanEnter(101, ERR_Phase.RADIO_DEFENCE) && !roster.CanEnter(101, ERR_Phase.EXTRACTION), "recycled connection receives independent life and extraction admission policy")) return false; + return true; + } + protected bool ERR_CheckCompanionCommands() + { + array replies = {}; + array commands = {"hq interval show", "hq squads show", "hq radius show", "intel carrying show", "intel reveal show"}; + array keys = {"reportIntervalSeconds", "supportSquadLimit", "responseRadiusMetres", "aiIntelChancePercent", "intelRevealChancePercent"}; + for (int i = 0; i < commands.Count(); i++) + { + Admin().Execute(this, true, commands[i], replies); + if (!ERR_Check(replies.Count() == 1 && replies[0] == keys[i] + "=" + Settings().Get(keys[i]).ToString(), "companion command retained: " + commands[i])) return false; + } + Admin().Execute(this, false, "hq log", replies); + if (!ERR_Check(replies.Count() == 1 && replies[0] == "Administrator access required.", "companion journal is behind Core admin authorization")) return false; + Admin().Execute(this, true, "hq show", replies); + ERR_HQ hq = ERR_HQ.Cast(Command()); + if (!ERR_Check(hq && replies.Count() == 1 && replies[0] == hq.Status(), "companion HQ status uses the shared command service")) return false; + return true; + } + protected void ERR_PrisonScreenshot() { System.MakeScreenshot("$logs:err-prison"); } + protected void ERR_EndScreenshot() { System.MakeScreenshot("$logs:err-result"); } + protected void ERR_SmokeTick() + { + float now = GetWorld().GetWorldTime(); + if (m_ERRSmokeDone) return; + if (now > m_ERRSmokeDeadline) { ERR_Check(false, "timeout at step " + m_ERRSmokeStep.ToString()); return; } + if (now < m_ERRSmokeWait) return; + if (m_ERRSmokeStep == 220) + { + int result = m_ERRAircraftControl.Tick(now); + if (result < 0) { ERR_Check(false, "native actual aircraft controller fixture"); return; } + if (result == 1) { m_ERRSmokeStep = 221; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRSmokeStep == 200) + { + int result = m_ERRMapOwnership.Tick(now); + if (result < 0) { ERR_Check(false, "native map ownership fixture"); return; } + if (result == 1) { m_ERRSmokeStep = 201; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRSmokeStep == 190) + { + int result = m_ERRMortarSalvo.Tick(now); + if (result < 0) { ERR_Check(false, "native complete mortar salvo fixture; inspect source diagnostics"); return; } + if (result == 1) { m_ERRSmokeStep = 191; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRSmokeStep == 180) + { + int result = m_ERRMortarCourier.Tick(now); + if (result < 0) { ERR_Check(false, "native finite courier fixture"); return; } + if (result == 1) { m_ERRSmokeStep = 181; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRSmokeStep == 160) + { + int result = m_ERRMortarTransfer.Tick(now); + if (result < 0) { ERR_Check(false, "native mortar exact-shell transfer fixture"); return; } + if (result == 1) { m_ERRSmokeStep = 161; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRSmokeStep == 150) + { + int result = m_ERRMortarFire.Tick(now); + if (result < 0) { ERR_Check(false, "native mortar firing probe failed; see diagnostics"); return; } + if (result == 1) { m_ERRSmokeStep = 151; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRSmokeStep == 130 || m_ERRSmokeStep == 132) + { + int result = m_ERRHQPatrolMovement.Tick(now); + if (result < 0) { ERR_StopHQPatrol(); GetGame().GetCallqueue().Remove(ERR_SmokeTick); return; } + if (result == 1) + { + if (m_ERRSmokeStep == 130) { m_ERRHQPatrolOrder = new ERR_NativePatrolHQProbe(this); m_ERRSmokeStep = 131; } + else { m_ERRSmokeStep = 133; Transition(ERR_Phase.DEFEAT); } + } + return; + } + if (m_ERRSmokeStep == 131) + { + int result = m_ERRHQPatrolOrder.Tick(now); + if (result < 0) { ERR_StopHQPatrol(); GetGame().GetCallqueue().Remove(ERR_SmokeTick); return; } + if (result == 1) { m_ERRHQPatrolMovement = new ERR_NativePatrolProbe(this); m_ERRSmokeStep = 132; } + return; + } + if (m_ERRSmokeStep == 0) + { + array players = {}; + ERR_Actors.Players(players, true); + if (players.Count() != 1 || Phase() != ERR_Phase.PRISON) return; + m_ERRSmokePlayer = players[0]; + if (!ERR_CheckRoster() || !ERR_NativeContractsProbe.Run(this, m_ERRSmokePlayer) || !ERR_CheckCompanionCommands()) return; + if (m_ERRTestAircraftControl) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRAircraftControl = new ERR_NativeAircraftControlProbe(this); + m_ERRSmokeStep = 220; + return; + } + if (m_ERRTestPatrolHQ) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRHQPatrolMovement = new ERR_NativePatrolProbe(this); + m_ERRSmokeStep = 130; + return; + } + if (m_ERRTestMapOwnership) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRMapOwnership = new ERRM_NativeMapOwnershipProbe(); + m_ERRSmokeStep = 200; + return; + } + if (m_ERRTestMortarSalvo) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRMortarSalvo = new ERR_NativeMortarSalvoProbe(this); + m_ERRSmokeStep = 190; + return; + } + if (m_ERRTestMortarCourier) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRMortarCourier = new ERR_NativeMortarCourierProbe(this); + m_ERRSmokeStep = 180; + return; + } + if (m_ERRTestMortarTransfer) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRMortarTransfer = new ERR_NativeMortarTransferProbe(this); + m_ERRSmokeStep = 160; + return; + } + if (m_ERRTestMortarFire) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRMortarFire = new ERR_NativeMortarFiringProbe(this); + m_ERRSmokeStep = 150; + return; + } + if (m_ERRTestMortar) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRSmokeStep = 120; + return; + } + if (m_ERRTestHQResponse) + { + m_ERRHQResponseProof = new ERR_NativeHQResponseProof(this, m_ERRSmokePlayer); + m_ERRSmokeStep = 110; + return; + } + if (m_ERRTestRadioNetwork) + { + m_ERRRadioProbe = new ERR_NativeRadioProbe(); + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRSmokeStep = 100; + return; + } + if (m_ERRTestPlayerDeath) + { + m_ERRSmokeStep = 9; + SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent)).Kill(Instigator.CreateInstigator(m_ERRSmokePlayer)); + m_ERRSmokeWait = now + 4000; + return; + } + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + if (!ERR_Check(vector.DistanceXZ(m_ERRSmokePlayer.GetOrigin(), PrisonPosition()) < 5, "initial prisoner position")) return; + foreach (ERR_LocationComponent location : m_Locations) + if (location.Kind() == ERR_LocationKind.RADIO) m_ERRSmokeRadio = location; + if (!ERR_Check(m_ERRSmokeRadio && ERR_Actors.Alive(ExtractionVehicle()), "radio and extraction vehicle exist")) return; + ERR_UnlockPrisonAction lock; + foreach (IEntity tracked : m_OwnedEntities) + { + if (tracked) lock = ERR_FindLock(tracked); + if (lock) break; + } + if (!ERR_Check(lock != null, "authored gate exposes lock action")) return; + ERR_MovePlayer(lock.GetOwner().GetOrigin() + "1 0 1"); + vector gateLow, gateHigh; + lock.GetOwner().GetWorldBounds(gateLow, gateHigh); + PrintFormat("ERR GEOMETRY: gate low=%1 high=%2", gateLow, gateHigh); + IEntity wall = lock.GetOwner().GetParent().GetChildren(); + while (wall) + { + vector wallLow, wallHigh; + wall.GetWorldBounds(wallLow, wallHigh); + PrintFormat("ERR GEOMETRY: child origin=%1 low=%2 high=%3", wall.GetOrigin(), wallLow, wallHigh); + wall = wall.GetSibling(); + } + GetGame().GetCallqueue().CallLater(ERR_PrisonScreenshot, 2000); + if (!ERR_Check(lock.CanBePerformedScript(m_ERRSmokePlayer), "lock permits prisoner")) return; + m_ERRGate = BaseDoorComponent.Cast(lock.GetOwner().FindComponent(BaseDoorComponent)); + lock.PerformAction(lock.GetOwner(), m_ERRSmokePlayer); + if (!ERR_Check(Phase() == ERR_Phase.RADIO_SEARCH, "lock action advances mission")) return; + array cacheStock = {}; + ERR_Inventory.Items(InventoryStorageManagerComponent.Cast(Sites().Find("everon-supply-1").Container.FindComponent(InventoryStorageManagerComponent)), cacheStock); + foreach (IEntity tracked : cacheStock) + { + if (tracked && tracked.GetPrefabData() && tracked.GetPrefabData().GetPrefabName() == ERR_Resources.ObjectiveDocument()) m_ERRCacheFolders.Insert(tracked); + } + if (!ERR_Check(m_ERRCacheFolders.Count() == 2, "two guaranteed physical cache documents")) return; + if (!ERR_Check(m_Settings.Set("aiIntelChancePercent", 0), "test does not rely on random intel")) return; + if (!ERR_Check(m_Settings.Set("radioDefenceSeconds", 30), "isolated test profile defence duration")) return; + m_ERRSmokeStep = 1; + } + else if (m_ERRSmokeStep == 1 || m_ERRSmokeStep == 2) + { + if (m_ERRSmokeStep == 2 && !ERR_Check(m_ERRGate && m_ERRGate.IsOpen() && m_ERRGate.CanCharacterPass(0.6), "unlocked gate physically permits passage")) return; + ERR_MovePlayer(Sites().Find("everon-supply-1").Container.GetOrigin() + "0 0 2"); + SCR_InventoryStorageManagerComponent inventory = SCR_InventoryStorageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_InventoryStorageManagerComponent)); + InventoryStorageManagerComponent source = InventoryStorageManagerComponent.Cast(Sites().Find("everon-supply-1").Container.FindComponent(InventoryStorageManagerComponent)); + BaseInventoryStorageComponent destination = inventory.FindStorageForItem(m_ERRCacheFolders[m_ERRSmokeStep - 1]); + if (!ERR_Check(destination && source.TryMoveItemToStorage(m_ERRCacheFolders[m_ERRSmokeStep - 1], destination), "authored cache document recovered into inventory")) return; + m_ERRSmokeStep++; + m_ERRSmokeWait = now + 2500; + } + else if (m_ERRSmokeStep == 3) + { + if (!ERR_Check(m_ERRSmokeRadio.Knowledge() == 2, "carried intel identifies radio through intel service")) return; + if (!ERR_Check(!TuneRadio(m_ERRSmokePlayer, m_ERRSmokeRadio), "radio rejects distant player")) return; + ERR_MovePlayer(m_ERRSmokeRadio.Position() + "2 0 0"); + m_ERRSmokeStep = 30; + m_ERRSmokeWait = now + 1000; + } + else if (m_ERRSmokeStep == 30) + { + PrintFormat("ERR SMOKE: radio=%1 player=%2", m_ERRSmokeRadio.Position(), m_ERRSmokePlayer.GetOrigin()); + if (!ERR_Check(TuneRadio(m_ERRSmokePlayer, m_ERRSmokeRadio), "identified radio starts defence")) return; + m_ERRSmokeStep = 4; + m_ERRSmokeWait = now + 3000; + } + else if (m_ERRSmokeStep == 4) + { + if (!ERR_Check(DefenceOccupied(), "occupied defence timer running")) return; + ERR_MovePlayer(m_ERRSmokeRadio.Position() + "90 0 0"); + m_ERRSmokeStep = 5; + m_ERRSmokeWait = now + 2500; + } + else if (m_ERRSmokeStep == 5) + { + if (!ERR_Check(!DefenceOccupied() && Phase() == ERR_Phase.RADIO_DEFENCE, "leaving area resets defence")) return; + ERR_MovePlayer(m_ERRSmokeRadio.Position() + "2 0 0"); + m_ERRSmokeStep = 6; + m_ERRSmokeWait = now + 33000; + } + else if (m_ERRSmokeStep == 6) + { + if (!ERR_Check(Phase() == ERR_Phase.EXTRACTION, "continuous occupied defence completes")) return; + if (m_ERRTestLostHelicopter) + { + m_ERRSmokeStep = 8; + ERR_Actors.DeleteSpawned(ExtractionVehicle()); + return; + } + CompartmentAccessComponent access = CompartmentAccessComponent.Cast(m_ERRSmokePlayer.FindComponent(CompartmentAccessComponent)); + BaseCompartmentSlot slot = access.FindFreeCompartment(ExtractionVehicle(), ECompartmentType.PILOT); + if (!ERR_Check(slot && access.GetInVehicle(ExtractionVehicle(), slot, true, -1, ECloseDoorAfterActions.INVALID, false), "boarding extraction vehicle")) return; + m_ERRSmokeStep = 7; + m_ERRSmokeWait = now + 3000; + } + else if (m_ERRSmokeStep == 120) + { + ERR_MortarBattery battery = ERR_MortarSystem.Get().ERR_ProbeBattery(); + if (!battery || !battery.StartupActivated) return; + if (!ERR_Check(battery.Operational() && battery.Group.GetAgentsCount() == 4, "authored physical mortar and four-person crew initialize")) return; + if (!ERR_Check(ERR_HQRadio.Capability(battery.RadioOperator) == 2, "mortar has a dedicated physical manpack operator")) return; + if (!ERR_Check(battery.CountShells() == 27, "mortar starts with exactly 27 physical HE shells")) return; + array agents = {}; + battery.Group.GetAgents(agents); + array intelCrew = {}; + foreach (AIAgent intelAgent : agents) + { + IEntity intelActor; + if (intelAgent) intelActor = intelAgent.GetControlledEntity(); + if (!ERR_Check(intelActor && !intelCrew.Contains(intelActor), "mortar Intel observation uses distinct actual crew actors")) return; + if (!ERR_Check(m_Intel && m_Intel.ERR_ProbeWasRolled(intelActor), "ready mortar crew actor reached its one optional Intel carrying roll")) return; + intelCrew.Insert(intelActor); + } + if (!ERR_Check(intelCrew.Count() == 4, "all four original ready physical crew reached Intel without forcing documents or changing carrying chance")) return; + foreach (AIAgent agent : agents) + { + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(agent.GetControlledEntity().FindComponent(InventoryStorageManagerComponent)); + array items = {}; + ERR_Inventory.Items(inventory, items); + foreach (IEntity item : items) + if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == ERR_MortarBattery.SHELL) SCR_EntityHelper.DeleteEntityAndChildren(item); + } + m_ERRSmokeStep = 121; + m_ERRSmokeWait = now + 15000; + } + else if (m_ERRSmokeStep == 121) + { + ERR_MortarBattery battery = ERR_MortarSystem.Get().ERR_ProbeBattery(); + if (!ERR_Check(battery.CountShells() == 0 && battery.TotalShots == 0, "depleted mortar inventory stays empty without fabricated ammunition")) return; + ERR_Actors.DeleteSpawned(battery.Gun); + ERR_Actors.DeleteSpawned(battery.Group); + m_ERRSmokeStep = 122; + m_ERRSmokeWait = now + 12000; + } + else if (m_ERRSmokeStep == 122) + { + ERR_MortarBattery battery = ERR_MortarSystem.Get().ERR_ProbeBattery(); + if (!ERR_Check(battery && !battery.Gun && !battery.Group && !battery.Operational(), "lost mortar and crew remain lost without replacement spawning")) return; + m_ERRSmokeStep = 9; + SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent)); + damage.EnableDamageHandling(true); + damage.Kill(Instigator.CreateInstigator(m_ERRSmokePlayer)); + m_ERRSmokeWait = now + 4000; + } + else if (m_ERRSmokeStep == 110) + { + int result = m_ERRHQResponseProof.Tick(now); + if (result < 0) { ERR_Check(false, "native HQ response evidence failed; inspect report lineage diagnostics"); return; } + if (result == 0) return; + m_ERRSmokeStep = 9; + SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent)); + damage.EnableDamageHandling(true); + damage.Kill(Instigator.CreateInstigator(m_ERRSmokePlayer)); + m_ERRSmokeWait = now + 4000; + } + else if (m_ERRSmokeStep == 100) + { + int result = m_ERRRadioProbe.Tick(ERR_HQ.Cast(Command()), now); + if (result == 0) return; + if (!ERR_Check(result == 1, "native radio delivery and interruption sequence")) return; + m_ERRSmokeStep = 9; + SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent)); + damage.EnableDamageHandling(true); + damage.Kill(Instigator.CreateInstigator(m_ERRSmokePlayer)); + m_ERRSmokeWait = now + 4000; + } + else if (m_ERRSmokeStep == 9) + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + if (!ERR_Check(!ERR_Actors.Alive(m_ERRSmokePlayer), "native damage kills prisoner")) return; + if (!ERR_Check(controller && controller.ERR_ObserverState() == ERR_ObserverReason.SPENT_LIFE, "death selects spectator without another life")) return; + if (!ERR_Check(controller.ERR_HasObserverCamera() && SCR_ManualCamera.Cast(GetGame().GetCameraManager().CurrentCamera()), "spectator camera activates after native death")) return; + m_ERRSmokeStep = 91; + } + else if (m_ERRSmokeStep == 7) + { + if (!ERR_Check(CompartmentAccessComponent.GetVehicleIn(m_ERRSmokePlayer) == ExtractionVehicle(), "physical extraction occupancy")) return; + // Controlled transport tests the boundary detector, not piloting skill. + ExtractionVehicle().SetOrigin(m_EscapeCenter + Vector(m_EscapeRadius + 100, 300, 0)); + m_ERRSmokeWait = now + 5000; + } + } + void ~ERR_GameMode() + { + if (GetGame()) + { + GetGame().GetCallqueue().Remove(ERR_SmokeTick); + GetGame().GetCallqueue().Remove(ERR_PrisonScreenshot); + GetGame().GetCallqueue().Remove(ERR_EndScreenshot); + } + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c new file mode 100644 index 0000000..bc6fb76 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c @@ -0,0 +1,16 @@ +#ifndef WORKBENCH +modded class ArmaReforgerScripted +{ + override protected ResourceName ERR_DiagnosticHeader(string project) + { + if (project == "chat") return "{C1E20667DCE324ED}Missions/ERR_Everon.conf"; + return super.ERR_DiagnosticHeader(project); + } + + override protected string ERR_DiagnosticAddon(string project) + { + if (project == "chat") return "FA804F411BDDF2C6"; + return super.ERR_DiagnosticAddon(project); + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c new file mode 100644 index 0000000..2702220 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c @@ -0,0 +1,51 @@ +[WorkbenchPluginAttribute(name: "Validate Rereintroduced scenario", wbModules: {"WorldEditor"})] +class ERR_ValidateWorldPlugin : WorldEditorPlugin +{ + protected bool m_Obstructed; + protected bool CheckClearance(IEntity entity) + { + if (entity && entity.GetVObject()) m_Obstructed = true; + return !m_Obstructed; + } + override void Run() { Validate(); } + override void RunCommandline() { Validate(); } + protected void Validate() + { + WorldEditor editor = Workbench.GetModule(WorldEditor); + if (!editor) { Print("ERR VALIDATION: World Editor missing", LogLevel.ERROR); return; } + WorldEditorAPI api = editor.GetApi(); + if (!api) { Print("ERR VALIDATION: world API missing", LogLevel.ERROR); return; } + PrintFormat("ERR VALIDATION: prison terrain=%1, radio terrain=%2, extraction terrain=%3", api.GetTerrainSurfaceY(6090,7160), api.GetTerrainSurfaceY(6500,7200), api.GetTerrainSurfaceY(7000,7500)); + for (int dx = -6; dx <= 6; dx += 3) + for (int dz = -6; dz <= 6; dz += 3) + PrintFormat("ERR TERRAIN: x=%1 z=%2 y=%3", 6090 + dx, 7160 + dz, api.GetTerrainSurfaceY(6090 + dx, 7160 + dz)); + float bestSlope = 1000; + vector bestPosition; + for (int x = 5800; x <= 6200; x += 10) + { + for (int z = 6800; z <= 7200; z += 10) + { + float low = 10000; + float high = -10000; + for (int sx = -9; sx <= 9; sx += 3) + for (int sz = -15; sz <= 9; sz += 3) + { + float height = api.GetTerrainSurfaceY(x + sx, z + sz); + low = Math.Min(low, height); + high = Math.Max(high, height); + } + if (low > 5 && high - low < bestSlope) + { + m_Obstructed = false; + api.GetWorld().QueryEntitiesByAABB(Vector(x - 10, low + 0.1, z - 16), Vector(x + 10, high + 5, z + 10), CheckClearance); + if (m_Obstructed) continue; + bestSlope = high - low; + bestPosition = Vector(x, api.GetTerrainSurfaceY(x, z), z); + } + } + } + PrintFormat("ERR SITE CANDIDATE: position=%1 elevationRange=%2", bestPosition, bestSlope); + string play; + if (System.GetCLIParam("errPlay", play) && play == "1") editor.SwitchToGameMode(); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/addon.gproj b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/addon.gproj new file mode 100644 index 0000000..d2e277c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/chat/addon.gproj @@ -0,0 +1,12 @@ +GameProject { + ID "ERR_Chat" + GUID "FA804F411BDDF2C6" + TITLE "Escapists Rereintroduced - Chat" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + "5192138CB9D5B911" + "D31039C7C53E348A" + "9AAEE9041D79809E" + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/EveronSites.conf b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/EveronSites.conf new file mode 100644 index 0000000..e15dc4b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/EveronSites.conf @@ -0,0 +1,136 @@ +ERR_ScenarioDefinition { + MinimumRadioSources 2 + Sites { + ERR_SiteDefinition { + Id "everon-prison-1" + Label "Prison" + Kind 0 + Prefab "{BE6B8D56349038A6}Prefabs/ERR/Prison.et" + Position 6090 0 7160 + Guarded 1 + GuardOffset 35 0 0 + Container "{40986810D0B1F4AE}Prefabs/ERR/SupplyCache.et" + ContainerOffset -4 0 0 + Stock { + ERR_SiteStock { Prefab "{C0F7DD85A86B2900}Prefabs/Weapons/Handguns/PM/Handgun_PM.et" Count 5 } + ERR_SiteStock { Prefab "{8B853CDD11BA916E}Prefabs/Weapons/Magazines/Magazine_9x18_PM_8rnd_Ball.et" Count 8 } + ERR_SiteStock { Prefab "{13772C903CB5E4F7}Prefabs/Items/Equipment/Maps/Map_Paper_01/PaperMap_01_folded.et" Count 1 } + } + } + ERR_SiteDefinition { + Id "everon-supply-1" + Label "Southern supply cache" + Kind 4 + Prefab "{7C3D16C17C24D351}Prefabs/ERR/SupplySite.et" + Position 6150 0 7050 + Guarded 1 + GuardOffset 18 0 0 + Container "{40986810D0B1F4AE}Prefabs/ERR/SupplyCache.et" + ContainerOffset 0 0 0 + Stock { + ERR_SiteStock { Prefab "{FA5C25BF66A53DCF}Prefabs/Weapons/Rifles/AK74/Rifle_AK74.et" Count 8 } + ERR_SiteStock { Prefab "{BBB50A815A2F916B}Prefabs/Weapons/Magazines/Magazine_545x39_AK_30rnd_Ball.et" Count 16 } + ERR_SiteStock { Prefab "{C3F1FA1E2EC2B345}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et" Count 12 } + ERR_SiteStock { Prefab "{554159A6740C3F3E}Prefabs/ERR/ObjectiveDocument.et" Count 2 TargetId "everon-radio-1" } + } + RevealOnEscape 1 + } + ERR_SiteDefinition { + Id "everon-radio-1" + Label "Radio station" + DiscoverRadius 8 + Kind 1 + Prefab "{F7E7E3D6ACF0C860}Prefabs/ERR/Radio.et" + Position 6500 0 7200 + Guarded 1 + GuardOffset 30 0 0 + } + ERR_SiteDefinition { + Id "everon-extraction-1" + Label "Initial helicopter pickup site" + Kind 2 + Prefab "{033503110AC34EAC}Prefabs/ERR/Extraction.et" + Position 7000 0 7500 + Guarded 1 + GuardOffset 30 0 0 + } + ERR_SiteDefinition { + Id "everon-supply-2" + Label "Western supply cache" + Kind 4 + Prefab "{7C3D16C17C24D351}Prefabs/ERR/SupplySite.et" + Position 5960 0 7220 + Guarded 1 + GuardOffset 16 0 0 + Patrol { + ERR_SitePatrolPoint { Offset 18 0 0 } + ERR_SitePatrolPoint { Offset 18 0 24 } + ERR_SitePatrolPoint { Offset -6 0 24 } + ERR_SitePatrolPoint { Offset -6 0 0 } + } + Container "{40986810D0B1F4AE}Prefabs/ERR/SupplyCache.et" + DiscoverRadius 25 + RevealOnEscape 1 + Transport ERR_SiteTransport { + Prefab "{259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et" + Offset 0 0 -8 + Heading 180 + ClearanceRadius 4 + MaximumTerrainRange 1 + } + Stock { + ERR_SiteStock { Prefab "{FA5C25BF66A53DCF}Prefabs/Weapons/Rifles/AK74/Rifle_AK74.et" Count 4 } + ERR_SiteStock { Prefab "{BBB50A815A2F916B}Prefabs/Weapons/Magazines/Magazine_545x39_AK_30rnd_Ball.et" Count 8 } + ERR_SiteStock { Prefab "{C3F1FA1E2EC2B345}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et" Count 6 } + ERR_SiteStock { Prefab "{554159A6740C3F3E}Prefabs/ERR/ObjectiveDocument.et" Count 2 TargetId "everon-radio-1" } + } + } + ERR_SiteDefinition { + Id "everon-medical-1" + Label "Medical stash" + Kind 4 + Prefab "{7C3D16C17C24D351}Prefabs/ERR/SupplySite.et" + Position 6340 0 7400 + Guarded 0 + GuardOffset 16 0 0 + Container "{40986810D0B1F4AE}Prefabs/ERR/SupplyCache.et" + DiscoverRadius 25 + RevealOnEscape 0 + Stock { + ERR_SiteStock { Prefab "{C3F1FA1E2EC2B345}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et" Count 12 } + ERR_SiteStock { Prefab "{527D7C5D2E476BDC}Prefabs/Items/Medicine/SalineBag_01/SalineBag_USSR_01.et" Count 6 } + ERR_SiteStock { Prefab "{0D9A5DCF89AE7AA9}Prefabs/Items/Medicine/MorphineInjection_01/MorphineInjection_01.et" Count 6 } + ERR_SiteStock { Prefab "{13772C903CB5E4F7}Prefabs/Items/Equipment/Maps/Map_Paper_01/PaperMap_01_folded.et" Count 3 } + } + } + ERR_SiteDefinition { + Id "everon-outpost-1" + Label "Eastern guard outpost" + Kind 3 + Prefab "{7C3D16C17C24D351}Prefabs/ERR/SupplySite.et" + Position 6740 0 7300 + Guarded 1 + GuardOffset 16 0 0 + Patrol { + ERR_SitePatrolPoint { Offset 18 0 0 } + ERR_SitePatrolPoint { Offset 18 0 24 } + ERR_SitePatrolPoint { Offset -6 0 24 } + ERR_SitePatrolPoint { Offset -6 0 0 } + } + Container "{40986810D0B1F4AE}Prefabs/ERR/SupplyCache.et" + DiscoverRadius 35 + RevealOnEscape 0 + Stock { + ERR_SiteStock { Prefab "{FA5C25BF66A53DCF}Prefabs/Weapons/Rifles/AK74/Rifle_AK74.et" Count 2 } + ERR_SiteStock { Prefab "{BBB50A815A2F916B}Prefabs/Weapons/Magazines/Magazine_545x39_AK_30rnd_Ball.et" Count 10 } + ERR_SiteStock { Prefab "{243948B23D90BECB}Prefabs/Items/Equipment/Binoculars/Binoculars_B8/Binoculars_B8.et" Count 2 } + ERR_SiteStock { Prefab "{C3F1FA1E2EC2B345}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et" Count 4 } + } + Props { + ERR_SiteProp { Prefab "{4B6AC1D8701C35A1}Prefabs/ERR/FieldCover.et" Offset 0 0 -4 } + ERR_SiteProp { Prefab "{4B6AC1D8701C35A1}Prefabs/ERR/FieldCover.et" Offset -4 0 0 Angles 90 0 0 } + ERR_SiteProp { Prefab "{4B6AC1D8701C35A1}Prefabs/ERR/FieldCover.et" Offset 4 0 0 Angles 90 0 0 } + } + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/EveronSites.conf.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/EveronSites.conf.meta new file mode 100644 index 0000000..98c7363 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/EveronSites.conf.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{BC310DC0CD27F523}Configs/ERR/EveronSites.conf" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf new file mode 100644 index 0000000..bb80989 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf @@ -0,0 +1,24 @@ +SCR_EntityCatalogMultiList { + m_eEntityCatalogType VEHICLE + m_aMultiLists { + SCR_EntityCatalogMultiListEntry { + m_sIdentifier "Mission transport" + m_aEntities { + SCR_EntityCatalogEntry { + m_sEntityPrefab "{259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et" + m_aEntityDataList { + SCR_EntityCatalogEditorData { m_eValidEditorModes 33 } + SCR_EntityCatalogSpawnerData { m_eSlotTypes 24 } + } + } + SCR_EntityCatalogEntry { + m_sEntityPrefab "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et" + m_aEntityDataList { + SCR_EntityCatalogEditorData { m_eValidEditorModes 33 } + SCR_EntityCatalogSpawnerData { m_eSlotTypes VEHICLE_LARGE } + } + } + } + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta new file mode 100644 index 0000000..eeeb160 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{E4785D3AF1D043C2}Configs/ERR/Factions/MissionVehicles.conf" + Configurations { + ResourceClass PC {} + ResourceClass HEADLESS : PC {} + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/US.conf b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/US.conf new file mode 100644 index 0000000..8d454a0 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/US.conf @@ -0,0 +1,277 @@ +SCR_Faction : "{E7B7EA4823DD81F0}Configs/Factions/BLUFOR.conf" { + FactionKey "US" + UIInfo SCR_FactionUIInfo "{528C961236B7DCD3}" { + Name "#AR-Faction_US" + Icon "{EB7F65DBC9392557}UI/Textures/Editor/EditableEntities/Factions/EditableEntity_Faction_USA.edds" + m_sNameUpper "#AR-Faction_US-UC" + } + "Identity of soldiers" FactionIdentity "{570D128F4022EF5A}" : "{B600946E9ACC17C2}Configs/Identities/FactionIdentity_US.conf" { + } + "Radio encryption key" "chickenNuggets" + m_sFactionFlag "{46FB2FB2C2125A3C}UI/Textures/Flags/US-flag-base-3it.edds" + m_FactionFlagMaterial "{610803CC3F3D6649}Assets/Props/Fabric/Flags/Data/Flag_1_2_USA.emat" + m_FactionLabel FACTION_US + m_CallsignInfo SCR_FactionCallsignInfo "{5DA0F2A6677ADA9E}" : "{CB7824D572DD0D5C}Configs/Callsigns/Callsigns_US.conf" { + } + m_iFactionRadioFrequency 48000 + m_aEntityCatalogs { + SCR_EntityCatalogMultiList "{5C68A0EE815FA292}" : "{B56E8B4D4B195559}Configs/EntityCatalog/US/Characters_EntityCatalog_US.conf" { + } + SCR_EntityCatalogMultiList "{5C9E82F29B327997}" : "{E4785D3AF1D043C2}Configs/ERR/Factions/MissionVehicles.conf" { + } + SCR_EntityCatalogMultiList "{5C68A0EE8B97CA50}" : "{4E70E7C4C2C17D4A}Configs/EntityCatalog/US/Groups_EntityCatalog_US.conf" { + } + SCR_EntityCatalog "{5C68A0EEB7DB3E84}" : "{0E4B62F186F97C43}Configs/EntityCatalog/US/WeaponTripod_EntityCatalog_US.conf" { + } + SCR_EntityCatalogMultiList "{5C68A0EEB3F124F9}" : "{5F7EC52FC40A03E2}Configs/EntityCatalog/US/InventoryItems_EntityCatalog_US.conf" { + } + SCR_EntityCatalog "{5C9EDDD37394AD40}" : "{0BF36EFF9FFAF92B}Configs/EntityCatalog/US/SupplyContainerItems_EntityCatalog_US.conf" { + } + } + m_aFlagNames +{ + } + m_aBaseCallsigns { + SCR_MilitaryBaseCallsign "{5C90D92F493E764B}" { + m_sCallsign "#AR-Campaign_PointAlabama" + m_sCallsignShort "#AR-Comm_Variable_Base_Alabama_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Alabama_US_UC" + m_iSignalIndex 0 + } + SCR_MilitaryBaseCallsign "{5C90D92F49F79967}" { + m_sCallsign "#AR-Campaign_PointAlaska" + m_sCallsignShort "#AR-Comm_Variable_Base_Alaska_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Alaska_US_UC" + m_iSignalIndex 1 + } + SCR_MilitaryBaseCallsign "{5C90D92F482DA59B}" { + m_sCallsign "#AR-Campaign_PointArizona" + m_sCallsignShort "#AR-Comm_Variable_Base_Arizona_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Arizona_US_UC" + m_iSignalIndex 2 + } + SCR_MilitaryBaseCallsign "{5C90D92F483330D2}" { + m_sCallsign "#AR-Campaign_PointArkansas" + m_sCallsignShort "#AR-Comm_Variable_Base_Arkansas_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Arkansas_US_UC" + m_iSignalIndex 3 + } + SCR_MilitaryBaseCallsign "{5C90D92F48170DA8}" { + m_sCallsign "#AR-Campaign_PointCalifornia" + m_sCallsignShort "#AR-Comm_Variable_Base_California_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_California_US_UC" + m_iSignalIndex 4 + } + SCR_MilitaryBaseCallsign "{5C90D92F487834E8}" { + m_sCallsign "#AR-Campaign_PointColorado" + m_sCallsignShort "#AR-Comm_Variable_Base_Colorado_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Colorado_US_UC" + m_iSignalIndex 5 + } + SCR_MilitaryBaseCallsign "{5C90D92F48410A86}" { + m_sCallsign "#AR-Campaign_PointConnecticut" + m_sCallsignShort "#AR-Comm_Variable_Base_Connecticut_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Connecticut_US_UC" + m_iSignalIndex 6 + } + SCR_MilitaryBaseCallsign "{5C90D92F48A4E31F}" { + m_sCallsign "#AR-Campaign_PointDelaware" + m_sCallsignShort "#AR-Comm_Variable_Base_Delaware_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Delaware_US_UC" + m_iSignalIndex 7 + } + SCR_MilitaryBaseCallsign "{5C90D92F488C6B57}" { + m_sCallsign "#AR-Campaign_PointFlorida" + m_sCallsignShort "#AR-Comm_Variable_Base_Florida_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Florida_US_UC" + m_iSignalIndex 8 + } + SCR_MilitaryBaseCallsign "{5C90D92F4896F764}" { + m_sCallsign "#AR-Campaign_PointGeorgia" + m_sCallsignShort "#AR-Comm_Variable_Base_Georgia_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Georgia_US_UC" + m_iSignalIndex 9 + } + SCR_MilitaryBaseCallsign "{5C90D92F48FBD90E}" { + m_sCallsign "#AR-Campaign_PointHawaii" + m_sCallsignShort "#AR-Comm_Variable_Base_Hawaii_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Hawaii_US_UC" + m_iSignalIndex 10 + } + SCR_MilitaryBaseCallsign "{5C90D92F48DFF562}" { + m_sCallsign "#AR-Campaign_PointIdaho" + m_sCallsignShort "#AR-Comm_Variable_Base_Idaho_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Idaho_US_UC" + m_iSignalIndex 11 + } + SCR_MilitaryBaseCallsign "{5C90D92F7724C851}" { + m_sCallsign "#AR-Campaign_PointIllinois" + m_sCallsignShort "#AR-Comm_Variable_Base_Illinois_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Illinois_US_UC" + m_iSignalIndex 12 + } + SCR_MilitaryBaseCallsign "{5C90D92F77097F3F}" { + m_sCallsign "#AR-Campaign_PointIndiana" + m_sCallsignShort "#AR-Comm_Variable_Base_Indiana_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Indiana_US_UC" + m_iSignalIndex 13 + } + SCR_MilitaryBaseCallsign "{5C90D92F77102B55}" { + m_sCallsign "#AR-Campaign_PointIowa" + m_sCallsignShort "#AR-Comm_Variable_Base_Iowa_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Iowa_US_UC" + m_iSignalIndex 14 + } + SCR_MilitaryBaseCallsign "{5C90D92F777ABD04}" { + m_sCallsign "#AR-Campaign_PointKansas" + m_sCallsignShort "#AR-Comm_Variable_Base_Kansas_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Kansas_US_UC" + m_iSignalIndex 15 + } + SCR_MilitaryBaseCallsign "{5C90D92F775EBBC1}" { + m_sCallsign "#AR-Campaign_PointKentucky" + m_sCallsignShort "#AR-Comm_Variable_Base_Kentucky_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Kentucky_US_UC" + m_iSignalIndex 16 + } + SCR_MilitaryBaseCallsign "{5C90D92F77A28EB6}" { + m_sCallsign "#AR-Campaign_PointLouisiana" + m_sCallsignShort "#AR-Comm_Variable_Base_Louisiana_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Louisiana_US_UC" + m_iSignalIndex 17 + } + SCR_MilitaryBaseCallsign "{5C90D92F77871C23}" { + m_sCallsign "#AR-Campaign_PointMaine" + m_sCallsignShort "#AR-Comm_Variable_Base_Maine_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Maine_US_UC" + m_iSignalIndex 18 + } + SCR_MilitaryBaseCallsign "{5C90D92F77EB96A0}" { + m_sCallsign "#AR-Campaign_PointMaryland" + m_sCallsignShort "#AR-Comm_Variable_Base_Maryland_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Maryland_US_UC" + m_iSignalIndex 19 + } + SCR_MilitaryBaseCallsign "{5C90D92F77CC2518}" { + m_sCallsign "#AR-Campaign_PointMassachusetts" + m_sCallsignShort "#AR-Comm_Variable_Base_Massachusetts_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Massachusetts_US_UC" + m_iSignalIndex 20 + } + SCR_MilitaryBaseCallsign "{5C90D92F77D3715B}" { + m_sCallsign "#AR-Campaign_PointMichigan" + m_sCallsignShort "#AR-Comm_Variable_Base_Michigan_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Michigan_US_UC" + m_iSignalIndex 21 + } + SCR_MilitaryBaseCallsign "{5C90D92F7635D418}" { + m_sCallsign "#AR-Campaign_PointMinnesota" + m_sCallsignShort "#AR-Comm_Variable_Base_Minnesota_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Minnesota_US_UC" + m_iSignalIndex 22 + } + SCR_MilitaryBaseCallsign "{5C90D92F761C3FF2}" { + m_sCallsign "#AR-Campaign_PointMississippi" + m_sCallsignShort "#AR-Comm_Variable_Base_Mississippi_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Mississippi_US_UC" + m_iSignalIndex 23 + } + SCR_MilitaryBaseCallsign "{5C90D92F7660CFAA}" { + m_sCallsign "#AR-Campaign_PointMissouri" + m_sCallsignShort "#AR-Comm_Variable_Base_Missouri_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Missouri_US_UC" + m_iSignalIndex 24 + } + SCR_MilitaryBaseCallsign "{5C90D92F764A6E6B}" { + m_sCallsign "#AR-Campaign_PointMontana" + m_sCallsignShort "#AR-Comm_Variable_Base_Montana_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Montana_US_UC" + m_iSignalIndex 25 + } + SCR_MilitaryBaseCallsign "{5C90D92F76AD4D35}" { + m_sCallsign "#AR-Campaign_PointNebraska" + m_sCallsignShort "#AR-Comm_Variable_Base_Nebraska_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Nebraska_US_UC" + m_iSignalIndex 26 + } + SCR_MilitaryBaseCallsign "{5C90D92F76B1EF3A}" { + m_sCallsign "#AR-Campaign_PointNevada" + m_sCallsignShort "#AR-Comm_Variable_Base_Nevada_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Nevada_US_UC" + m_iSignalIndex 27 + } + SCR_MilitaryBaseCallsign "{5C90D92F7695FF2F}" { + m_sCallsign "#AR-Campaign_PointNewYork" + m_sCallsignShort "#AR-Comm_Variable_Base_NewYork_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_NewYork_US_UC" + m_iSignalIndex 28 + } + SCR_MilitaryBaseCallsign "{5C90D92F76FF94B1}" { + m_sCallsign "#AR-Campaign_PointOhio" + m_sCallsignShort "#AR-Comm_Variable_Base_Ohio_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Ohio_US_UC" + m_iSignalIndex 29 + } + SCR_MilitaryBaseCallsign "{5C90D92F76C68EED}" { + m_sCallsign "#AR-Campaign_PointOklahoma" + m_sCallsignShort "#AR-Comm_Variable_Base_Oklahoma_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Oklahoma_US_UC" + m_iSignalIndex 30 + } + SCR_MilitaryBaseCallsign "{5C90D92F752A9F29}" { + m_sCallsign "#AR-Campaign_PointOregon" + m_sCallsignShort "#AR-Comm_Variable_Base_Oregon_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Oregon_US_UC" + m_iSignalIndex 31 + } + SCR_MilitaryBaseCallsign "{5C90D92F750E6FB9}" { + m_sCallsign "#AR-Campaign_PointPennsylvania" + m_sCallsignShort "#AR-Comm_Variable_Base_Pennsylvania_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Pennsylvania_US_UC" + m_iSignalIndex 32 + } + SCR_MilitaryBaseCallsign "{5C90D92F7517240F}" { + m_sCallsign "#AR-Campaign_PointTexas" + m_sCallsignShort "#AR-Comm_Variable_Base_Texas_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Texas_US_UC" + m_iSignalIndex 33 + } + SCR_MilitaryBaseCallsign "{5C90D92F7574D867}" { + m_sCallsign "#AR-Campaign_PointUtah" + m_sCallsignShort "#AR-Comm_Variable_Base_Utah_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Utah_US_UC" + m_iSignalIndex 34 + } + SCR_MilitaryBaseCallsign "{5C90D92F755C4871}" { + m_sCallsign "#AR-Campaign_PointVermont" + m_sCallsignShort "#AR-Comm_Variable_Base_Vermont_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Vermont_US_UC" + m_iSignalIndex 35 + } + SCR_MilitaryBaseCallsign "{5C90D92F75A0502B}" { + m_sCallsign "#AR-Campaign_PointVirginia" + m_sCallsignShort "#AR-Comm_Variable_Base_Virginia_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Virginia_US_UC" + m_iSignalIndex 36 + } + SCR_MilitaryBaseCallsign "{5C90D92F758ABFD3}" { + m_sCallsign "#AR-Campaign_PointWashington" + m_sCallsignShort "#AR-Comm_Variable_Base_Washington_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Washington_US_UC" + m_iSignalIndex 37 + } + SCR_MilitaryBaseCallsign "{5C90D92F75EF8263}" { + m_sCallsign "#AR-Campaign_PointWisconsin" + m_sCallsignShort "#AR-Comm_Variable_Base_Wisconsin_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Wisconsin_US_UC" + m_iSignalIndex 38 + } + SCR_MilitaryBaseCallsign "{5C90D92F75F0F224}" { + m_sCallsign "#AR-Campaign_PointWyoming" + m_sCallsignShort "#AR-Comm_Variable_Base_Wyoming_US" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Wyoming_US_UC" + m_iSignalIndex 39 + } + } + m_FactionHomeTerritoryConfig SCR_FactionHomeTerritoryConfig "{5AEE94D54FB58C33}" : "{B548A5B264939A98}Configs/Identities/Territories/FactionHomeTerritory_US.conf" { + } +} \ No newline at end of file diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/US.conf.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/US.conf.meta new file mode 100644 index 0000000..340f26d --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/US.conf.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{5C67A1DDE0044806}Configs/ERR/Factions/US.conf" + Configurations { + ResourceClass PC {} + ResourceClass HEADLESS : PC {} + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/USSR.conf b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/USSR.conf new file mode 100644 index 0000000..53e7886 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/USSR.conf @@ -0,0 +1,276 @@ +SCR_Faction : "{B122E3B10BB3404B}Configs/Factions/OPFOR.conf" { + FactionKey "USSR" + UIInfo SCR_FactionUIInfo "{528C96127F8B6B08}" { + Name "#AR-Faction_USSR" + Icon "{40B12B0DF911B856}UI/Textures/Editor/EditableEntities/Factions/EditableEntity_Faction_USSR.edds" + m_sNameUpper "#AR-Faction_USSR-UC" + } + "Identity of soldiers" FactionIdentity "{570CFDC6685B6B25}" : "{FBBCD73926989580}Configs/Identities/FactionIdentity_USSR.conf" { + } + "Radio encryption key" "coldBorscht" + m_sFactionFlag "{50824EB9F2C215AB}UI/Textures/Flags/USSR-flag-base-3it.edds" + m_FactionFlagMaterial "{B47B52D9DA68905D}Assets/Props/Fabric/Flags/Data/Flag_1_2_SovietArmy.emat" + m_FactionLabel FACTION_USSR + m_CallsignInfo SCR_FactionCallsignInfo "{5DA0F2A67DFB8809}" : "{958043CE1648EC43}Configs/Callsigns/Callsigns_USSR.conf" { + } + m_iFactionRadioFrequency 42000 + m_aEntityCatalogs { + SCR_EntityCatalogMultiList "{5C68A0E9BD5E5DD9}" : "{3B679F1799D55F6F}Configs/EntityCatalog/USSR/Characters_EntityCatalog_USSR.conf" { + } + SCR_EntityCatalogMultiList "{5C9E82F285C09E24}" : "{E4785D3AF1D043C2}Configs/ERR/Factions/MissionVehicles.conf" { + } + SCR_EntityCatalogMultiList "{5C68A0E9B9AA3C2D}" : "{37D5B75AAC3E72EA}Configs/EntityCatalog/USSR/Groups_EntityCatalog_USSR.conf" { + } + SCR_EntityCatalog "{5C68A0E9A51460AB}" : "{DDF17C8C140BD1F2}Configs/EntityCatalog/USSR/WeaponTripod_EntityCatalog_USSR.conf" { + } + SCR_EntityCatalogMultiList "{5C68A0E9AFE1E631}" : "{C53421647C3D0D2E}Configs/EntityCatalog/USSR/InventoryItems_EntityCatalog_USSR.conf" { + } + SCR_EntityCatalog "{5C9EDDD378BA3298}" : "{B4CA6761AC935808}Configs/EntityCatalog/USSR/SupplyContainerItems_EntityCatalog_USSR.conf" { + } + } + m_iIdentityVoiceSignal 100 + m_aBaseCallsigns { + SCR_MilitaryBaseCallsign "{5C9108F95F3FB520}" { + m_sCallsign "#AR-Campaign_PointArena" + m_sCallsignShort "#AR-Comm_Variable_Base_Arena_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Arena_RU_UC" + m_iSignalIndex 0 + } + SCR_MilitaryBaseCallsign "{5C9108F95F0034DB}" { + m_sCallsign "#AR-Campaign_PointAvrora" + m_sCallsignShort "#AR-Comm_Variable_Base_Avrora_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Avrora_RU_UC" + m_iSignalIndex 1 + } + SCR_MilitaryBaseCallsign "{5C9108F95F6514E7}" { + m_sCallsign "#AR-Campaign_PointBekas" + m_sCallsignShort "#AR-Comm_Variable_Base_Bekas_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Bekas_RU_UC" + m_iSignalIndex 2 + } + SCR_MilitaryBaseCallsign "{5C9108F95F4EE8BF}" { + m_sCallsign "#AR-Campaign_PointBizon" + m_sCallsignShort "#AR-Comm_Variable_Base_Bizon_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Bizon_RU_UC" + m_iSignalIndex 3 + } + SCR_MilitaryBaseCallsign "{5C9108F95F5021F9}" { + m_sCallsign "#AR-Campaign_PointBolero" + m_sCallsignShort "#AR-Comm_Variable_Base_Bolero_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Bolero_RU_UC" + m_iSignalIndex 4 + } + SCR_MilitaryBaseCallsign "{5C9108F95FBA4C89}" { + m_sCallsign "#AR-Campaign_PointCafftan" + m_sCallsignShort "#AR-Comm_Variable_Base_Cafftan_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Cafftan_RU_UC" + m_iSignalIndex 5 + } + SCR_MilitaryBaseCallsign "{5C9108F95F9C00A9}" { + m_sCallsign "#AR-Campaign_PointKaban" + m_sCallsignShort "#AR-Comm_Variable_Base_Kaban_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Kaban_RU_UC" + m_iSignalIndex 6 + } + SCR_MilitaryBaseCallsign "{5C9108F95FE17E10}" { + m_sCallsign "#AR-Campaign_PointConsul" + m_sCallsignShort "#AR-Comm_Variable_Base_Consul_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Consul_RU_UC" + m_iSignalIndex 7 + } + SCR_MilitaryBaseCallsign "{5C9108F95FCBA475}" { + m_sCallsign "#AR-Campaign_PointDimok" + m_sCallsignShort "#AR-Comm_Variable_Base_Dimok_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Dimok_RU_UC" + m_iSignalIndex 8 + } + SCR_MilitaryBaseCallsign "{5C9108F95E2B2963}" { + m_sCallsign "#AR-Campaign_PointEffir" + m_sCallsignShort "#AR-Comm_Variable_Base_Effir_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Effir_RU_UC" + m_iSignalIndex 9 + } + SCR_MilitaryBaseCallsign "{5C9108F95E3040F5}" { + m_sCallsign "#AR-Campaign_PointFakir" + m_sCallsignShort "#AR-Comm_Variable_Base_Fakir_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Fakir_RU_UC" + m_iSignalIndex 10 + } + SCR_MilitaryBaseCallsign "{5C9108F95E17C67D}" { + m_sCallsign "#AR-Campaign_PointGips" + m_sCallsignShort "#AR-Comm_Variable_Base_Gips_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Gips_RU_UC" + m_iSignalIndex 11 + } + SCR_MilitaryBaseCallsign "{5C9108F95E797F8A}" { + m_sCallsign "#AR-Campaign_PointGussar" + m_sCallsignShort "#AR-Comm_Variable_Base_Gussar_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Gussar_RU_UC" + m_iSignalIndex 12 + } + SCR_MilitaryBaseCallsign "{5C9108F95E431F83}" { + m_sCallsign "#AR-Campaign_PointIgla" + m_sCallsignShort "#AR-Comm_Variable_Base_Igla_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Igla_RU_UC" + m_iSignalIndex 13 + } + SCR_MilitaryBaseCallsign "{5C9108F95EA7F87E}" { + m_sCallsign "#AR-Campaign_PointKhek" + m_sCallsignShort "#AR-Comm_Variable_Base_Khek_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Khek_RU_UC" + m_iSignalIndex 14 + } + SCR_MilitaryBaseCallsign "{5C9108F95E88C6B9}" { + m_sCallsign "#AR-Campaign_PointLednik" + m_sCallsignShort "#AR-Comm_Variable_Base_Lednik_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Lednik_RU_UC" + m_iSignalIndex 15 + } + SCR_MilitaryBaseCallsign "{5C9108F95EEDE322}" { + m_sCallsign "#AR-Campaign_PointMatros" + m_sCallsignShort "#AR-Comm_Variable_Base_Matros_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Matros_RU_UC" + m_iSignalIndex 16 + } + SCR_MilitaryBaseCallsign "{5C9108F95EF6244A}" { + m_sCallsign "#AR-Campaign_PointMuskat" + m_sCallsignShort "#AR-Comm_Variable_Base_Muskat_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Muskat_RU_UC" + m_iSignalIndex 17 + } + SCR_MilitaryBaseCallsign "{5C9108F95EDAF04A}" { + m_sCallsign "#AR-Campaign_PointNagan" + m_sCallsignShort "#AR-Comm_Variable_Base_Nagan_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Nagan_RU_UC" + m_iSignalIndex 18 + } + SCR_MilitaryBaseCallsign "{5C9108F95D3CCF27}" { + m_sCallsign "#AR-Campaign_PointNitka" + m_sCallsignShort "#AR-Comm_Variable_Base_Nitka_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Nitka_RU_UC" + m_iSignalIndex 19 + } + SCR_MilitaryBaseCallsign "{5C9108F95D076483}" { + m_sCallsign "#AR-Campaign_PointOmega" + m_sCallsignShort "#AR-Comm_Variable_Base_Omega_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Omega_RU_UC" + m_iSignalIndex 20 + } + SCR_MilitaryBaseCallsign "{5C9108F95D68D0F3}" { + m_sCallsign "#AR-Campaign_PointPlazma" + m_sCallsignShort "#AR-Comm_Variable_Base_Plazma_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Plazma_RU_UC" + m_iSignalIndex 21 + } + SCR_MilitaryBaseCallsign "{5C9108F95D4C0F8E}" { + m_sCallsign "#AR-Campaign_PointPolyn" + m_sCallsignShort "#AR-Comm_Variable_Base_Polyn_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Polyn_RU_UC" + m_iSignalIndex 22 + } + SCR_MilitaryBaseCallsign "{5C9108F95D56EEEE}" { + m_sCallsign "#AR-Campaign_PointProlog" + m_sCallsignShort "#AR-Comm_Variable_Base_Prolog_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Prolog_RU_UC" + m_iSignalIndex 23 + } + SCR_MilitaryBaseCallsign "{5C9108F95DBA92EE}" { + m_sCallsign "#AR-Campaign_PointRabkor" + m_sCallsignShort "#AR-Comm_Variable_Base_Rabkor_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Rabkor_RU_UC" + m_iSignalIndex 24 + } + SCR_MilitaryBaseCallsign "{5C9108F95C69680D}" { + m_sCallsign "#AR-Campaign_PointRadon" + m_sCallsignShort "#AR-Comm_Variable_Base_Radon_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Radon_RU_UC" + m_iSignalIndex 25 + } + SCR_MilitaryBaseCallsign "{5C9108F95C4FD930}" { + m_sCallsign "#AR-Campaign_PointSadko" + m_sCallsignShort "#AR-Comm_Variable_Base_Sadko_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Sadko_RU_UC" + m_iSignalIndex 26 + } + SCR_MilitaryBaseCallsign "{5C9108F95C5255FD}" { + m_sCallsign "#AR-Campaign_PointSekret" + m_sCallsignShort "#AR-Comm_Variable_Base_Sekret_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Sekret_RU_UC" + m_iSignalIndex 27 + } + SCR_MilitaryBaseCallsign "{5C9108F95CB621AE}" { + m_sCallsign "#AR-Campaign_PointShtanga" + m_sCallsignShort "#AR-Comm_Variable_Base_Shtanga_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Shtanga_RU_UC" + m_iSignalIndex 28 + } + SCR_MilitaryBaseCallsign "{5C9108F95C9545BC}" { + m_sCallsign "#AR-Campaign_PointShuka" + m_sCallsignShort "#AR-Comm_Variable_Base_Shuka_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Shuka_RU_UC" + m_iSignalIndex 29 + } + SCR_MilitaryBaseCallsign "{5C9108F95CFE26C3}" { + m_sCallsign "#AR-Campaign_PointTabor" + m_sCallsignShort "#AR-Comm_Variable_Base_Tabor_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Tabor_RU_UC" + m_iSignalIndex 30 + } + SCR_MilitaryBaseCallsign "{5C9108F95CDD263C}" { + m_sCallsign "#AR-Campaign_PointTenor" + m_sCallsignShort "#AR-Comm_Variable_Base_Tenor_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Tenor_RU_UC" + m_iSignalIndex 31 + } + SCR_MilitaryBaseCallsign "{5C9108F95B27128C}" { + m_sCallsign "#AR-Campaign_PointTsikson" + m_sCallsignShort "#AR-Comm_Variable_Base_Tsikson_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Tsikson_RU_UC" + m_iSignalIndex 32 + } + SCR_MilitaryBaseCallsign "{5C9108F95B08D83D}" { + m_sCallsign "#AR-Campaign_PointUlan" + m_sCallsignShort "#AR-Comm_Variable_Base_Ulan_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Ulan_RU_UC" + m_iSignalIndex 33 + } + SCR_MilitaryBaseCallsign "{5C9108F95B6D3FC2}" { + m_sCallsign "#AR-Campaign_PointVermout" + m_sCallsignShort "#AR-Comm_Variable_Base_Vermout_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Vermout_RU_UC" + m_iSignalIndex 34 + } + SCR_MilitaryBaseCallsign "{5C9108F95B712949}" { + m_sCallsign "#AR-Campaign_PointViympel" + m_sCallsignShort "#AR-Comm_Variable_Base_Viympel_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Viympel_RU_UC" + m_iSignalIndex 35 + } + SCR_MilitaryBaseCallsign "{5C9108F95B57D185}" { + m_sCallsign "#AR-Campaign_PointYantar" + m_sCallsignShort "#AR-Comm_Variable_Base_Yantar_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Yantar_RU_UC" + m_iSignalIndex 36 + } + SCR_MilitaryBaseCallsign "{5C9108F95BB17114}" { + m_sCallsign "#AR-Campaign_PointYolka" + m_sCallsignShort "#AR-Comm_Variable_Base_Yolka_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Yolka_RU_UC" + m_iSignalIndex 37 + } + SCR_MilitaryBaseCallsign "{5C9108F95B97C054}" { + m_sCallsign "#AR-Campaign_PointZheton" + m_sCallsignShort "#AR-Comm_Variable_Base_Zheton_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Zheton_RU_UC" + m_iSignalIndex 38 + } + SCR_MilitaryBaseCallsign "{5C9108F95BFC33E5}" { + m_sCallsign "#AR-Campaign_PointZurna" + m_sCallsignShort "#AR-Comm_Variable_Base_Zurna_RU" + m_sCallsignUpperCase "#AR-Comm_Variable_Base_Zurna_RU_UC" + m_iSignalIndex 39 + } + } + m_FactionHomeTerritoryConfig SCR_FactionHomeTerritoryConfig "{5AEE94D5517C30BD}" : "{31FC78AF00523A99}Configs/Identities/Territories/FactionHomeTerritory_USSR.conf" { + } +} \ No newline at end of file diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/USSR.conf.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/USSR.conf.meta new file mode 100644 index 0000000..f60822c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/Factions/USSR.conf.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{D7A5CFA62A36480D}Configs/ERR/Factions/USSR.conf" + Configurations { + ResourceClass PC {} + ResourceClass HEADLESS : PC {} + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/GameOverScreens.conf b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/GameOverScreens.conf new file mode 100644 index 0000000..a7eafe8 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/GameOverScreens.conf @@ -0,0 +1,21 @@ +SCR_GameOverScreenConfig : "{651583FFFB7FC765}Configs/GameOverScreen/BaseGameOverScreensConfig.conf" { + m_aGameOverScreens { + ERR_EscapeGameOverScreenInfo "{6B193DC8DDC63507}" { + m_GameOverScreenId VICTORY + m_GameOverContentLayout "{C4507D07F3C54831}UI/layouts/HUD/GameOver/EndScreen/EndScreenContent_NoImage.layout" + m_OptionalParams SCR_BaseGameOverScreenInfoOptional "{4984A5C1BFEFC04E}" { + m_sTitle "Escape complete" + m_sAudioOneShot "SOUND_ONVICTORY" + } + } + ERR_FailureGameOverScreenInfo "{E66F29A7A8AD7438}" { + m_GameOverScreenId LOOSE + m_GameOverContentLayout "{C4507D07F3C54831}UI/layouts/HUD/GameOver/EndScreen/EndScreenContent_NoImage.layout" + m_OptionalParams SCR_BaseGameOverScreenInfoOptional "{3DBF0BDE715945FA}" { + m_sTitle "Escape failed" + m_sDebriefing "No surviving prisoners can complete the escape, or the extraction helicopter has been lost." + m_sAudioOneShot "SOUND_ONDEFEAT" + } + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/GameOverScreens.conf.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/GameOverScreens.conf.meta new file mode 100644 index 0000000..8f032b0 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/GameOverScreens.conf.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{F6633922A25F9441}Configs/ERR/GameOverScreens.conf" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/VanillaFactions.conf b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/VanillaFactions.conf new file mode 100644 index 0000000..ca1abae --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/VanillaFactions.conf @@ -0,0 +1,7 @@ +ERR_FactionCatalog { + PlayerFactionKey "US" + EnemyFactionKey "USSR" + PrisonerPrefab "{3FF693715C9F8928}Prefabs/ERR/Prisoner.et" + GuardGroupPrefab "{D5A4D0D3AE1A3E26}Prefabs/ERR/Patrol.et" + ExtractionPrefab "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/VanillaFactions.conf.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/VanillaFactions.conf.meta new file mode 100644 index 0000000..47f3162 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Configs/ERR/VanillaFactions.conf.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{BE50B97B8E2B36E6}Configs/ERR/VanillaFactions.conf" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Missions/ERR_Everon_Base.conf b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Missions/ERR_Everon_Base.conf new file mode 100644 index 0000000..b44da89 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Missions/ERR_Everon_Base.conf @@ -0,0 +1,11 @@ +SCR_MissionHeader { + World "{B6C516F86302C679}Worlds/ERR_Everon.ent" + SystemsConfig "{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" + m_sName "Rereintroduced: Everon Base (development)" + m_sAuthor "Rereintroduced contributors" + m_sDescription "Independent base escape mission using vanilla Reforger. Companion addons optional. Development scenario." + m_sGameMode "Escape" + m_iPlayerCount 12 + m_eSaveTypes 0 + m_bShowInScenarioMenu 1 +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Missions/ERR_Everon_Base.conf.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Missions/ERR_Everon_Base.conf.meta new file mode 100644 index 0000000..566e857 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Missions/ERR_Everon_Base.conf.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{AD62322D5213C440}Missions/ERR_Everon_Base.conf" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Extraction.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Extraction.et new file mode 100644 index 0000000..2ad6dc1 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Extraction.et @@ -0,0 +1,6 @@ +GenericEntity { + components { + ERR_LocationComponent "{C17CA14398A1CD7E}" { m_Kind 2 } + RplComponent "{0BF5BAAA5FBFEECE}" { Streamable Disabled } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Extraction.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Extraction.et.meta new file mode 100644 index 0000000..742075d --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Extraction.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{033503110AC34EAC}Prefabs/ERR/Extraction.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/FactionManager.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/FactionManager.et new file mode 100644 index 0000000..b2c8f02 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/FactionManager.et @@ -0,0 +1,10 @@ +SCR_FactionManager : "{A242612865F2A48E}Prefabs/MP/Managers/Factions/FactionManager_Base.et" { + Factions { + SCR_Faction : "{5C67A1DDE0044806}Configs/ERR/Factions/US.conf" { + m_sFactionBackground "{F8AC305446D5D480}UI/Textures/DeployMenu/Loadout-BG/Loadout_US_BG.imageset" + } + SCR_Faction : "{D7A5CFA62A36480D}Configs/ERR/Factions/USSR.conf" { + m_sFactionBackground "{21533F2089005056}UI/Textures/DeployMenu/Loadout-BG/Loadout_BG_USSR.imageset" + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/FactionManager.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/FactionManager.et.meta new file mode 100644 index 0000000..170d8da --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/FactionManager.et.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" + Configurations { + EntityTemplateResourceClass PC {} + EntityTemplateResourceClass HEADLESS : PC {} + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/FieldCover.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/FieldCover.et new file mode 100644 index 0000000..ec18f1f --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/FieldCover.et @@ -0,0 +1,13 @@ +GenericEntity { + components { + MeshObject "{A557F6DC012E5101}" { + Object "{268DBDABB3C94AD7}Assets/Props/Military/Sandbags/Sandbag_01_short.xob" + Materials { + MaterialAssignClass "{A557F6DC012E5102}" { SourceMaterial "Sandbags_01_Short" AssignedMaterial "{31529E064AA7C917}Assets/Props/Military/Sandbags/Data/Sandbags_01_short_Burlap.emat" } + MaterialAssignClass "{A557F6DC012E5103}" { SourceMaterial "Sandbags_01_MLOD" AssignedMaterial "{2169E8EB73E1C127}Assets/Props/Military/Sandbags/Data/Sandbags_01_Burlap_MLOD.emat" } + } + } + RigidBody "{A557F6DC012E5104}" { ModelGeometry 1 Static 1 } + RplComponent "{A557F6DC012E5105}" {} + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/FieldCover.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/FieldCover.et.meta new file mode 100644 index 0000000..c8c4e70 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/FieldCover.et.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{4B6AC1D8701C35A1}Prefabs/ERR/FieldCover.et" + Configurations { + ResourceClass PC {} + ResourceClass HEADLESS : PC {} + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/GameMode.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/GameMode.et new file mode 100644 index 0000000..41a9d62 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/GameMode.et @@ -0,0 +1,14 @@ +ERR_GameMode : "{0F307326459A1395}Prefabs/MP/Modes/GameMode_Base.et" { + components { + SCR_GameOverScreenManagerComponent "{56DEC646298AD219}" { + m_GameOverScreenConfig SCR_GameOverScreenConfig "{56DEC6462FFDD82D}" : "{F6633922A25F9441}Configs/ERR/GameOverScreens.conf" {} + } + ERR_ScenarioComponent "{B78E910E88DE30D2}" { + m_Definition "{BC310DC0CD27F523}Configs/ERR/EveronSites.conf" + } + SCR_RespawnSystemComponent "{56B2B4793051E7C9}" { + m_SpawnLogic ERR_SpawnLogic "{79AD722B2EFD595F}" {} + } + } + m_bUseSpawnPreload 0 +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/GameMode.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/GameMode.et.meta new file mode 100644 index 0000000..f8dfb87 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/GameMode.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{978E045E53EF36C8}Prefabs/ERR/GameMode.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/ObjectiveDocument.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/ObjectiveDocument.et new file mode 100644 index 0000000..850c6c1 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/ObjectiveDocument.et @@ -0,0 +1,5 @@ +GenericEntity : "{6D56FED1E55A8F84}Prefabs/Items/Misc/IntelligenceFolder_E_01/IntelligenceFolder_E_01.et" { + components { + ERR_DocumentComponent "{E4598D0BE2C251A3}" {} + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/ObjectiveDocument.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/ObjectiveDocument.et.meta new file mode 100644 index 0000000..68f2b8a --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/ObjectiveDocument.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{554159A6740C3F3E}Prefabs/ERR/ObjectiveDocument.et" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Patrol.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Patrol.et new file mode 100644 index 0000000..7295625 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Patrol.et @@ -0,0 +1,10 @@ +SCR_AIGroup : "{E552DABF3636C2AD}Prefabs/Groups/OPFOR/Group_USSR_RifleSquad.et" { + m_aUnitPrefabSlots { + "{5436629450D8387A}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_SL.et" + "{612F43A4D5AE765F}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_RTO.et" + "{23ADBBC31B6A3DC6}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_AR.et" + "{1C78331E156A3D65}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_AT.et" + "{333DA6244C7DA34C}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_SR.et" + "{BF643BE4ADBDFDD3}Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_LAT.et" + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Patrol.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Patrol.et.meta new file mode 100644 index 0000000..6eef9b5 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Patrol.et.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{D5A4D0D3AE1A3E26}Prefabs/ERR/Patrol.et" + Configurations { + EntityTemplateResourceClass PC {} + EntityTemplateResourceClass HEADLESS {} + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Prison.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Prison.et new file mode 100644 index 0000000..047a5ed --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Prison.et @@ -0,0 +1,100 @@ +GenericEntity { + components { + ERR_LocationComponent "{3B60CBEB3C04333C}" { m_Kind 0 } + Hierarchy "{30ADADE77D1EC3B8}" {} + RplComponent "{7FA5168C6FBD0C22}" {} + } + { + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "2879356FFFBE36E0" + coords -6 0 6 + angles 0 0 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "C99EF9AFCEBA863D" + coords -3 0 6 + angles 0 0 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "91048277F04ACA61" + coords 0 0 6 + angles 0 0 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "8F2200A922FB0A6E" + coords 3 0 6 + angles 0 0 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "3C442429BBCF5D2F" + coords -6 0 -6 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "9E855CC802C592CA" + coords 6 0 -6 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "778DAC42C9208F67" + coords -6 0 -3 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "7E350EB9053673C4" + coords 6 0 -3 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "AD17884D5EA37D37" + coords -6 0 0 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "1A157E23E1A995D8" + coords 6 0 0 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "3A78A6F3ACB7ACB1" + coords -6 0 3 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "275B472B565FFF6C" + coords 6 0 3 + angles 0 -90 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "1B20E11B3FC7B59A" + coords -6 0 -6 + angles 0 0 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "2735B52246DD6213" + coords -3 0 -6 + angles 0 0 0 + } + GenericEntity : "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" { + ID "28101A0E33470B38" + coords 3 0 -6 + angles 0 0 0 + } + GenericEntity : "{C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et" { + ID "54D8F96ECC743335" + scale 1.5 + coords 0 -0.1 -6 + angles 0 0 0 + } + DecalEntity : "{4AD6EB80A8B1FA3A}Prefabs/Decals/Dirt/Decal_Dirt_Patch_03.et" { + ID "FCFBA935CC13E016" + components { + Hierarchy "{EF4B704D646D1759}" {} + } + coords 0 0 0 + angles -90 0 0 + scale 10 + FarPlane 1.5 + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Prison.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Prison.et.meta new file mode 100644 index 0000000..3341905 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Prison.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{BE6B8D56349038A6}Prefabs/ERR/Prison.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/PrisonDoor.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/PrisonDoor.et new file mode 100644 index 0000000..2725dd5 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/PrisonDoor.et @@ -0,0 +1,19 @@ +GenericEntity : "{34B08027DBDE322A}Prefabs/Structures/BuildingParts/Doors/Door_MetalGate_01_Short_LEFT_EXT_ST_B.et" { + components { + DoorComponent "{221C667A9F7D4B69}" { + DoorAction ERR_PrisonDoorAction "{50888D3646A61640}" { + ParentContextList { "SCR_DoorUserAction" } + } + } + ActionsManagerComponent "{F32B667C3C823800}" { + ActionContexts { UserActionContext "{50888D37F529F720}" { ContextName "SCR_DoorUserAction" Radius 2 } } + additionalActions { + ERR_UnlockPrisonAction "{CA7918FEA177BFB8}" { + ParentContextList { "SCR_DoorUserAction" } + UIInfo SCR_ActionUIInfo "{F734C81E11AA6BEF}" { Name "Pick prison lock" } + Duration 4 + } + } + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/PrisonDoor.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/PrisonDoor.et.meta new file mode 100644 index 0000000..018cdc5 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/PrisonDoor.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/PrisonWall.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/PrisonWall.et new file mode 100644 index 0000000..90d2735 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/PrisonWall.et @@ -0,0 +1,8 @@ +GenericEntity { + components { + Hierarchy "{4F20A90EDBD625A4}" {} + MeshObject "{4F20A90EDBD625A1}" { Object "{0B96D139FEBCA006}Assets/Structures/Walls/Concrete/ConcreteWall_01_3m.xob" } + RigidBody "{4F20A90EDBD625A2}" { ModelGeometry 1 Static 1 } + RplComponent "{4F20A90EDBD625A3}" {} + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/PrisonWall.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/PrisonWall.et.meta new file mode 100644 index 0000000..a0183ef --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/PrisonWall.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Prisoner.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Prisoner.et new file mode 100644 index 0000000..8b8d49f --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Prisoner.et @@ -0,0 +1,55 @@ +SCR_ChimeraCharacter : "{836E7E39AAC5888B}Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Base.et" { + components { + ActionsManagerComponent "{520EA1D2F659CE02}" { + additionalActions { + ERR_LoadCasualtyAction "{E7016B8C499EC8A3}" { + ParentContextList { "Chest" "LowerTorso" } + UIInfo SCR_ActionUIInfo "{E7016B8C499EC8A4}" { Name "Load casualty into extraction helicopter" } + Duration 5 + } + } + } + SCR_EditableCharacterComponent "{520EA1D2F659C85C}" { + m_UIInfo SCR_EditableEntityUIInfo "{5298E609432D192D}" { + Name "Prisoner" + } + } + SCR_CharacterInventoryStorageComponent "{520EA1D2DB118DAC}" { + components { + SCR_EquipmentStorageComponent "{56B49DA9722B635D}" { + InitialStorageSlots { + SCR_EquipmentStorageSlot BinocularSlot { Prefab "" } + SCR_EquipmentStorageSlot WristwatchSlot { + Prefab "{78ED4FEF62BBA728}Prefabs/Items/Equipment/Watches/Watch_SandY184A.et" + } + } + } + } + } + BaseLoadoutManagerComponent "{520EA1D2DB11821E}" { + Slots { + LoadoutSlotInfo Hat { Prefab "{F545C1BE7C99954A}Prefabs/Characters/HeadGear/Hat_Patrol_US_01/Hat_Patrol_US_01.et" } + LoadoutSlotInfo Jacket { Prefab "{3CCA7A9BB4FD3197}Prefabs/Characters/Uniforms/Jacket_US_BDU_rolledup.et" } + LoadoutSlotInfo Pants { Prefab "{604BB72BE8E023C2}Prefabs/Characters/Uniforms/Pants_US_BDU.et" } + SCR_FeetLoadoutSlotInfo Boots { Prefab "{DAAFD15478BDE1C3}Prefabs/Characters/Footwear/CombatBoots_US_01.et" } + LoadoutSlotInfo ArmoredVest { Prefab "" } + LoadoutSlotInfo Back { Prefab "" } + LoadoutSlotInfo Vest { Prefab "" } + LoadoutSlotInfo HandWear { Prefab "" } + } + } + SCR_InventoryStorageManagerComponent "{520EA1D2DB118DE5}" { + InitialInventoryItems { + ItemsInitConfigurationItem "{EA7AC3C2078B68C1}" { + TargetStorage "Prefabs/Characters/Uniforms/Pants_US_BDU.et" + PrefabsToSpawn { + "{A81F501D3EF6F38E}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_US_01.et" + "{A81F501D3EF6F38E}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_US_01.et" + "{D70216B1B2889129}Prefabs/Items/Medicine/Tourniquet_01/Tourniquet_US_01.et" + "{0D9A5DCF89AE7AA9}Prefabs/Items/Medicine/MorphineInjection_01/MorphineInjection_01.et" + } + } + } + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Prisoner.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Prisoner.et.meta new file mode 100644 index 0000000..edf4d1e --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Prisoner.et.meta @@ -0,0 +1,7 @@ +MetaFileClass { + Name "{3FF693715C9F8928}Prefabs/ERR/Prisoner.et" + Configurations { + EntityTemplateResourceClass PC {} + EntityTemplateResourceClass HEADLESS : PC {} + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Radio.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Radio.et new file mode 100644 index 0000000..8fd6e6b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Radio.et @@ -0,0 +1,16 @@ +GenericEntity { + components { + MeshObject "{111C06CB740ED195}" { Object "{77C9FCF3FB1246E9}Assets/Items/Equipment/Radios/Radio_R107M/Radio_R107M_01_item.xob" } + RigidBody "{4C174A44D07B91BA}" { ModelGeometry 1 Static 1 } + ERR_LocationComponent "{C19CA6CC83470879}" { m_Kind 1 } + RplComponent "{54ED7463161A5622}" { Streamable Disabled } + ActionsManagerComponent "{B081EC0768636EAB}" { + ActionContexts { UserActionContext "{C1A75A5D8B7EF1E4}" { ContextName "ERR_Radio" Radius 2 } } + additionalActions { ERR_TuneRadioAction "{7ABBB6B5D73DDD95}" { + ParentContextList { "ERR_Radio" } + UIInfo SCR_ActionUIInfo "{1B42BB7CEDECB994}" { Name "Contact extraction HQ" } + Duration 8 + } } + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Radio.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Radio.et.meta new file mode 100644 index 0000000..9b57d02 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/Radio.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{F7E7E3D6ACF0C860}Prefabs/ERR/Radio.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SpectatorCamera.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SpectatorCamera.et new file mode 100644 index 0000000..db6fbed --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SpectatorCamera.et @@ -0,0 +1,7 @@ +SCR_ManualCamera { + m_bInputEnabled 0 + m_bStartAtEntity 1 + m_aComponents { + ERR_FollowSurvivorCameraComponent "{965C2E8B2339B926}" {} + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SpectatorCamera.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SpectatorCamera.et.meta new file mode 100644 index 0000000..c192bbd --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SpectatorCamera.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{EB1210AAE1BB8F54}Prefabs/ERR/SpectatorCamera.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SupplyCache.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SupplyCache.et new file mode 100644 index 0000000..de68b39 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SupplyCache.et @@ -0,0 +1,28 @@ +GenericEntity : "{EBBC859CCD94D96D}Prefabs/Props/EmptyStorages/USSR_AmmoBox_empty.et" { + components { + MeshObject "{6530845A09309E37}" { + Object "{819ED3266EE5113B}Assets/Props/Military/AmmoBox/EquipmentBoxWooden_01/EquipmentBoxWooden_Weapon_01.xob" + Materials { + MaterialAssignClass "{6530845A093091BB}" { + SourceMaterial "EquipmentBoxWooden_Weapon_01" + AssignedMaterial "{7D2E831AFA5CF50D}Assets/Props/Military/AmmoBox/EquipmentBoxWooden_01/Data/EquipmentBoxWooden_Weapon_01_USSR.emat" + } + MaterialAssignClass "{6530845A093091B2}" { + SourceMaterial "EquipmentBoxWooden_Weapon_01_Decal" + } + } + } + SCR_UniversalInventoryStorageComponent "{6530845A09302DE0}" { + MaxCumulativeVolume 120000 + MaxItemSize 120 40 40 + m_fMaxWeight 80 + Attributes SCR_ItemAttributeCollection "{6530845A09302DFF}" { + ItemDisplayName SCR_InventoryUIInfo "{6530845A09302D03}" { + Name "Supply cache" + Description "Limited equipment shared between prisoners." + } + } + } + InventoryStorageManagerComponent "{18A1D42A468F584F}" {} + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SupplyCache.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SupplyCache.et.meta new file mode 100644 index 0000000..3ecec02 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SupplyCache.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{40986810D0B1F4AE}Prefabs/ERR/SupplyCache.et" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SupplySite.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SupplySite.et new file mode 100644 index 0000000..118178f --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SupplySite.et @@ -0,0 +1,6 @@ +GenericEntity { + components { + ERR_LocationComponent "{8E7CFEA92C1811F0}" { m_Kind 4 } + RplComponent "{98A4A31435A9CA04}" { Streamable Disabled } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SupplySite.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SupplySite.et.meta new file mode 100644 index 0000000..f511bfd --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Prefabs/ERR/SupplySite.et.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{7C3D16C17C24D351}Prefabs/ERR/SupplySite.et" + Configurations { + ResourceClass PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Actions.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Actions.c new file mode 100644 index 0000000..57e4d2f --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Actions.c @@ -0,0 +1,74 @@ +class ERR_UnlockPrisonAction : ScriptedUserAction +{ + override bool CanBePerformedScript(IEntity user) + { + ERR_GameMode mode = ERR_GameMode.Get(); + SetCannotPerformReason(string.Empty); + if (!mode) { SetCannotPerformReason("Mission is not ready"); return false; } + if (mode.Phase() != ERR_Phase.PRISON) { SetCannotPerformReason("Prison lock is not available in this mission phase"); return false; } + if (!ERR_Actors.CanFight(user)) { SetCannotPerformReason("You must be alive and conscious"); return false; } + return true; + } + override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode || !mode.UnlockPrison(pUserEntity)) return; + BaseDoorComponent door = BaseDoorComponent.Cast(pOwnerEntity.FindComponent(BaseDoorComponent)); + if (door) door.UseDoorAction(pUserEntity); + } +} + +class ERR_PrisonDoorAction : SCR_DoorUserAction +{ + // Native AI calls PerformAction directly, bypassing the UI availability query. + // Recheck the same permission here; preserve vanilla execution/broadcasting + // on both server and clients once the replicated prison phase is unlocked. + override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) + { + if (!CanBePerformedScript(pUserEntity)) return; + super.PerformAction(pOwnerEntity, pUserEntity); + } + + override bool CanBePerformedScript(IEntity user) + { + ERR_GameMode mode = ERR_GameMode.Get(); + SetCannotPerformReason(string.Empty); + if (!mode) { SetCannotPerformReason("Mission is not ready"); return false; } + if (mode.Phase() <= ERR_Phase.PRISON) + { + SetCannotPerformReason("Pick the prison lock before opening the gate"); + return false; + } + // Vanilla owns any obstruction/door-specific reason after unlocking. + return super.CanBePerformedScript(user); + } +} + +class ERR_TuneRadioAction : ScriptedUserAction +{ + override bool CanBePerformedScript(IEntity user) + { + ERR_GameMode mode = ERR_GameMode.Get(); + ERR_LocationComponent location = ERR_LocationComponent.Cast(GetOwner().FindComponent(ERR_LocationComponent)); + SetCannotPerformReason(string.Empty); + if (!mode) { SetCannotPerformReason("Mission is not ready"); return false; } + if (mode.Phase() != ERR_Phase.RADIO_SEARCH) + { + string reason = "Radio is not available in this mission phase"; + if (mode.Phase() == ERR_Phase.PRISON) reason = "Escape the prison first"; + if (mode.Phase() == ERR_Phase.RADIO_DEFENCE) reason = "Transmission is already in progress; defend the radio"; + if (mode.Phase() == ERR_Phase.EXTRACTION) reason = "Transmission is complete; reach the extraction helicopter"; + SetCannotPerformReason(reason); + return false; + } + if (!location) { SetCannotPerformReason("Radio location is unavailable"); return false; } + if (location.Knowledge() != 2) { SetCannotPerformReason("Identify this radio through recovered intel or close reconnaissance first"); return false; } + if (!ERR_Actors.CanFight(user)) { SetCannotPerformReason("You must be alive and conscious"); return false; } + return true; + } + override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode) mode.TuneRadio(pUserEntity, ERR_LocationComponent.Cast(pOwnerEntity.FindComponent(ERR_LocationComponent))); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Actors.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Actors.c new file mode 100644 index 0000000..4a58ce1 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Actors.c @@ -0,0 +1,81 @@ +class ERR_Actors +{ + static bool Alive(IEntity actor) + { + if (!actor) return false; + DamageManagerComponent damage = DamageManagerComponent.Cast(actor.FindComponent(DamageManagerComponent)); + return damage && !damage.IsDestroyed(); + } + + static bool CanFight(IEntity actor) + { + if (!Alive(actor)) return false; + CharacterControllerComponent controller = CharacterControllerComponent.Cast(actor.FindComponent(CharacterControllerComponent)); + return controller && !controller.IsUnconscious(); + } + + static SCR_AIGroup Group(IEntity actor) + { + if (!actor) return null; + AIControlComponent control = AIControlComponent.Cast(actor.FindComponent(AIControlComponent)); + if (!control || !control.GetAIAgent()) return null; + return SCR_AIGroup.Cast(control.GetAIAgent().GetParentGroup()); + } + + static bool Player(IEntity actor) + { + return actor && GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(actor) > 0; + } + + static IEntity Spawn(ResourceName prefab, vector position, vector angles = "0 0 0") + { + if (!Replication.IsServer() || prefab.IsEmpty()) return null; + Resource resource = Resource.Load(prefab); + if (!resource || !resource.IsValid()) return null; + EntitySpawnParams params = new EntitySpawnParams(); + params.TransformMode = ETransformMode.WORLD; + Math3D.AnglesToMatrix(angles, params.Transform); + params.Transform[3] = position; + return GetGame().SpawnEntityPrefab(resource, GetGame().GetWorld(), params); + } + + static void DeleteSpawned(IEntity entity) + { + if (!Replication.IsServer() || !entity || Player(entity)) return; + SCR_AIGroup group = SCR_AIGroup.Cast(entity); + if (group) + { + // Never remove a group that has acquired a player since mission creation. + if (group.GetPlayerCount(true) > 0) return; + group.DespawnMembers(); + } + SCR_EntityHelper.DeleteEntityAndChildren(entity); + } + + static vector Ground(vector position) + { + position[1] = GetGame().GetWorld().GetSurfaceY(position[0], position[2]) + 0.1; + return position; + } + + static void Players(out array players, bool conscious = false) + { + players.Clear(); + array ids = {}; + GetGame().GetPlayerManager().GetPlayers(ids); + foreach (int id : ids) + { + IEntity actor = GetGame().GetPlayerManager().GetPlayerControlledEntity(id); + if (Alive(actor) && (!conscious || CanFight(actor))) players.Insert(actor); + } + } +} + +// One server-owned implementation is installed by the AI addon. +class ERR_CommandService +{ + void Tick(float now) {} + void Stop() {} + void RegisterGroup(SCR_AIGroup group) {} + void UnregisterGroup(SCR_AIGroup group) {} +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_AdminService.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_AdminService.c new file mode 100644 index 0000000..da57255 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_AdminService.c @@ -0,0 +1,111 @@ +// Transport-independent administration. Only the owning controller supplies +// authorization, derived on the server from its authenticated player ID. +class ERR_CommandArguments +{ + static string CoreSetting(string section, string option) + { + if (section == "mission" && option == "radio") return "radioDefenceSeconds"; + if (section == "intel" && option == "reveal") return "intelRevealChancePercent"; + return ""; + } + static bool Integer(string text, out int value) + { + if (text.IsEmpty() || text.Length() > 6) return false; + for (int i = 0; i < text.Length(); i++) + if ("0123456789".IndexOf(text.Substring(i, 1)) < 0) return false; + value = text.ToInt(); + return true; + } +} +class ERR_AdminService +{ + protected string Setting(string section, string option) + { + return ERR_CommandArguments.CoreSetting(section, option); + } + protected bool Extension(ERR_GameMode mode, string arguments, array replies) { return false; } + protected bool TimeCommand(ERR_GameMode mode, array parts, array replies) + { + if (parts.Count() < 2 || parts[0] != "mission" || (parts[1] != "time" && parts[1] != "speed")) return false; + string key = "startTimeMinutes"; + if (parts[1] == "speed") key = "timeMultiplier"; + if (parts.Count() == 3 && parts[2] == "show") + { + if (mode.Time()) replies.Insert(mode.Time().Status()); + replies.Insert("Next round: " + ERR_TimeService.Clock(mode.Settings().Get("startTimeMinutes")) + ", " + mode.Settings().Get("timeMultiplier").ToString() + "x progression."); + return true; + } + int value; + bool valid; + if (parts.Count() == 4 && parts[2] == "set") + { + if (key == "startTimeMinutes") valid = ERR_TimeService.ParseClock(parts[3], value); + else valid = ERR_CommandArguments.Integer(parts[3], value); + } + if (valid && mode.Settings().Set(key, value)) + replies.Insert("Saved for next round: " + ERR_TimeService.Clock(mode.Settings().Get("startTimeMinutes")) + ", " + mode.Settings().Get("timeMultiplier").ToString() + "x progression. Current round clock unchanged."); + else replies.Insert("Invalid time or settings could not be saved. Use mission time set HH:MM (00:00-23:59) or mission speed set N (1-24). Previous setting retained."); + return true; + } + protected string SettingHelp(string key) + { + if (key == "intelRevealChancePercent") + return "Use /esc intel reveal set N (0-100). This is the chance that a first document identifies its location exactly; otherwise it gives a rough location. A second document for that location always identifies it. Changes affect newly recovered documents immediately; known locations and spent documents remain unchanged."; + return ""; + } + protected void SettingCommand(ERR_Settings settings, string key, array parts, array replies) + { + if (parts.Count() == 3 && parts[2] == "show") { replies.Insert(key + "=" + settings.Get(key).ToString()); return; } + string help = SettingHelp(key); + if (parts.Count() == 3 && parts[2] == "help" && !help.IsEmpty()) { replies.Insert(help); return; } + int value; + if (parts.Count() == 4 && parts[2] == "set" && ERR_CommandArguments.Integer(parts[3], value) && settings.Set(key, value)) + replies.Insert(key + "=" + value.ToString() + " saved"); + else + { + string failure = "Invalid value or settings could not be saved; previous setting retained."; + if (!help.IsEmpty()) failure += " " + help; + replies.Insert(failure); + } + } + protected string Help() + { + return "/esc status | settings | mission abandon | mission radio show|set N | mission date show|set YYYY-MM-DD|authored | mission weather show|set authored|clear|overcast|rain | mission time show|set HH:MM | mission speed show|set N | intel reveal show|set N|help | spectate next|previous"; + } + void Execute(ERR_GameMode mode, bool authorized, string arguments, array replies) + { + replies.Clear(); + if (!Replication.IsServer() || !mode) return; + if (!authorized) { replies.Insert("Administrator access required."); return; } + if (arguments.Length() > 160) { replies.Insert("Command is too long."); return; } + arguments = arguments.Trim(); arguments.ToLower(); + if (arguments == "status") { replies.Insert(mode.Status()); Extension(mode, arguments, replies); return; } + if (arguments == "mission abandon") + { + if (mode.AbandonRound()) replies.Insert("Round abandoned. The normal defeat and restart sequence has begun."); + else replies.Insert("Only an active round can be abandoned."); + return; + } + if (!mode.Settings()) { replies.Insert("Mission settings are not ready."); return; } + if (arguments == "settings") + { + foreach (string key : ERR_Settings.Keys()) replies.Insert(key + "=" + mode.Settings().Get(key).ToString()); + return; + } + if (Extension(mode, arguments, replies)) return; + array parts = {}; + arguments.Split(" ", parts, true); + if (ERR_EnvironmentCommands.Execute(mode.Settings(), mode.Environment(), parts, replies)) return; + if (TimeCommand(mode, parts, replies)) return; + if (parts.Count() == 3 || parts.Count() == 4) + { + string key = Setting(parts[0], parts[1]); + if (!key.IsEmpty()) + { + SettingCommand(mode.Settings(), key, parts, replies); + return; + } + } + replies.Insert(Help()); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c new file mode 100644 index 0000000..f3703aa --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c @@ -0,0 +1,82 @@ +// Conservative fallback for a sleeping, engine-off Mi8 whose native simulation +// has not yet populated contact flags. Reads physical support; never wakes it. +class ERR_CasualtyGroundSupport +{ + static bool SupportHit(float fraction, float normalY, bool selfHit, bool dynamicHit) + { + return fraction >= 0 && fraction < 1 && normalY >= 0.85 && !selfHit && !dynamicHit; + } + static bool BelongsTo(IEntity entity, IEntity root) + { + while (entity) + { + if (entity == root) return true; + entity = entity.GetParent(); + } + return false; + } + static bool WheelCenter(Vehicle aircraft, string bone, out vector center, bool diagnostics = false) + { + if (!aircraft) return false; + if (aircraft.GetBoneIndex(bone) == -1) + { + if (diagnostics) Print("ERR GEAR PIVOT MISSING: " + bone); + return false; + } + vector identity[4]; Math3D.MatrixIdentity4(identity); + PointInfo pivot = new PointInfo(); + pivot.Set(aircraft, bone, identity); + vector world[4]; pivot.GetWorldTransform(world); + center = world[3]; + if (diagnostics) PrintFormat("ERR GEAR PIVOT: bone=%1 node=%2 center=%3", bone, pivot.GetNodeId(), center); + return pivot.GetNodeId() != -1; + } + static bool WheelSupported(Vehicle aircraft, vector center, float radius, bool diagnostics = false) + { + vector bottom = center - Vector(0, radius, 0); + TraceParam trace = new TraceParam(); + trace.Start = bottom + "0 0.10 0"; + trace.End = bottom - "0 0.12 0"; + trace.Flags = TraceFlags.WORLD | TraceFlags.ENTS; + trace.LayerMask = TRACE_LAYER_CAMERA; + trace.Exclude = aircraft; + float fraction = aircraft.GetWorld().TraceMove(trace, null); + bool selfHit = trace.TraceEnt && BelongsTo(trace.TraceEnt, aircraft); + bool dynamicHit; + if (trace.TraceEnt) + { + Physics surface = trace.TraceEnt.GetPhysics(); + // Unknown/entity-only support and moving actors/vehicles are not parking. + dynamicHit = !surface || surface.IsDynamic(); + } + bool supported = SupportHit(fraction, trace.TraceNorm[1], selfHit, dynamicHit); + if (diagnostics) + { + vector contact = vector.Lerp(trace.Start, trace.End, fraction); + float terrainY = aircraft.GetWorld().GetSurfaceY(bottom[0], bottom[2]); + PrintFormat("ERR GEAR TERRAIN: bottom=%1 terrainY=%2 tireTerrainGap=%3", bottom, terrainY, bottom[1] - terrainY); + PrintFormat("ERR GEAR SUPPORT: center=%1 radius=%2 bottom=%3 fraction=%4 normal=%5 self=%6 dynamic=%7 supported=%8 gap=%9", center, radius, bottom, fraction, trace.TraceNorm, selfHit, dynamicHit, supported, bottom[1] - contact[1]); + } + return supported; + } + static bool Parked(Vehicle aircraft, bool diagnostics = false) + { + if (!aircraft || !aircraft.GetPrefabData() || !aircraft.GetPrefabData().GetPrefabName().Contains("/Mi8MT/")) return false; + Physics physics = aircraft.GetPhysics(); + HelicopterControllerComponent controller = HelicopterControllerComponent.Cast(aircraft.FindComponent(HelicopterControllerComponent)); + if (!physics || !controller || !controller.GetSimulation()) return false; + if (diagnostics) PrintFormat("ERR PARKED SUPPORT: physicsAwake=%1 engineOn=%2 nativeContact=%3", physics.IsActive(), controller.GetSimulation().EngineIsOn(), controller.GetSimulation().HasAnyGroundContact()); + if (physics.IsActive() || controller.GetSimulation().EngineIsOn()) return false; + vector front, left, right; + if (!WheelCenter(aircraft, "v_wheel_F", front, diagnostics) || !WheelCenter(aircraft, "v_wheel_bL", left, diagnostics) || !WheelCenter(aircraft, "v_wheel_bR", right, diagnostics)) return false; + // Fail closed if native pivot resolution collapses to an owner origin or + // otherwise cannot represent the authored three-point landing footprint. + if (vector.DistanceXZ(front, left) < 1 || vector.DistanceXZ(front, right) < 1 || vector.DistanceXZ(left, right) < 1) return false; + // Radii come from installed Mi8_base.et's authored landing-gear configuration. + // Every wheel needs a short, upward-facing static collision directly below. + bool a = WheelSupported(aircraft, front, 0.30, diagnostics); + bool b = WheelSupported(aircraft, left, 0.45, diagnostics); + bool c = WheelSupported(aircraft, right, 0.45, diagnostics); + return a && b && c; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c new file mode 100644 index 0000000..a732a63 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c @@ -0,0 +1,48 @@ +// Round-owned server service; only the aircraft reference is replicated for action visibility. +modded class ERR_GameMode +{ + protected ref ERR_CasualtyLoadingService m_ERRCasualtyLoading; + [RplProp()] + protected RplId m_ERRCasualtyAircraftId = RplId.Invalid(); + ERR_CasualtyLoadingService CasualtyLoading() { return m_ERRCasualtyLoading; } + Vehicle CasualtyLoadingAircraft() + { + if (Replication.IsServer()) return ExtractionVehicle(); + RplComponent component = RplComponent.Cast(Replication.FindItem(m_ERRCasualtyAircraftId)); + if (!component) return null; + return Vehicle.Cast(component.GetEntity()); + } + protected void ERR_UpdateCasualtyAircraft(float now) + { + Vehicle aircraft = ExtractionVehicle(); + if (!aircraft) + { + if (m_ERRCasualtyAircraftId != RplId.Invalid()) { m_ERRCasualtyAircraftId = RplId.Invalid(); Replication.BumpMe(); } + return; + } + RplComponent component = RplComponent.Cast(aircraft.FindComponent(RplComponent)); + if (!component || m_ERRCasualtyAircraftId == component.Id()) return; + m_ERRCasualtyAircraftId = component.Id(); + Replication.BumpMe(); + } + protected void ERR_StopCasualtyLoading() + { + if (m_ERRCasualtyLoading) + { + Players().OnChanged().Remove(m_ERRCasualtyLoading.RosterChanged); + OnTick().Remove(m_ERRCasualtyLoading.Tick); + m_ERRCasualtyLoading.Stop(); + } + OnTick().Remove(ERR_UpdateCasualtyAircraft); + } + protected override void EOnInit(IEntity owner) + { + super.EOnInit(owner); + if (!Replication.IsServer() || SCR_Global.IsEditMode()) return; + m_ERRCasualtyLoading = new ERR_CasualtyLoadingService(this); + OnTick().Insert(ERR_UpdateCasualtyAircraft); + OnTick().Insert(m_ERRCasualtyLoading.Tick); + Players().OnChanged().Insert(m_ERRCasualtyLoading.RosterChanged); + OnStop().Insert(ERR_StopCasualtyLoading); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c new file mode 100644 index 0000000..c6fa983 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c @@ -0,0 +1,75 @@ +// Only successor service methods initiate this controller-owned handshake. +// No caller-supplied entity/seat RPC can ask the server to load another player. +modded class SCR_PlayerController +{ + protected RplId m_ERRPreparedLoadMode = RplId.Invalid(); + protected int m_ERRPreparedLoadNonce; + protected int m_ERRPreparedLoadClock; + protected int m_ERRLastLoadNonce; + + void ERR_PrepareCasualtyLoad(RplId modeId, int nonce) + { + if (!Replication.IsServer()) return; + if (this == GetGame().GetPlayerController()) ERR_PrepareCasualtyLoadOwner(modeId, nonce); + else Rpc(ERR_PrepareCasualtyLoadOwner, modeId, nonce); + } + [RplRpc(RplChannel.Reliable, RplRcver.Owner)] + protected void ERR_PrepareCasualtyLoadOwner(RplId modeId, int nonce) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (this != GetGame().GetPlayerController() || !mode || !mode.Active() || mode.Phase() != ERR_Phase.EXTRACTION || ERR_CasualtyLoadingRules.EntityId(mode) != modeId || !ERR_CasualtyLoadingRules.GroundSettled(GetControlledEntity())) return; + if (m_ERRPreparedLoadMode == modeId && nonce <= m_ERRLastLoadNonce) return; + if (nonce <= 0) return; + m_ERRPreparedLoadMode = modeId; + m_ERRPreparedLoadNonce = nonce; + m_ERRLastLoadNonce = nonce; + m_ERRPreparedLoadClock = System.GetTickCount(); + if (Replication.IsServer()) ERR_CasualtyLoadReady(modeId, nonce); + else Rpc(ERR_CasualtyLoadReady, modeId, nonce); + } + [RplRpc(RplChannel.Reliable, RplRcver.Server)] + protected void ERR_CasualtyLoadReady(RplId modeId, int nonce) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!Replication.IsServer() || !mode || ERR_CasualtyLoadingRules.EntityId(mode) != modeId || !mode.CasualtyLoading()) return; + mode.CasualtyLoading().OwnerReady(this, nonce); + } + void ERR_CommitCasualtyLoad(RplId modeId, int nonce, RplId callerId, RplId actorId, RplId vehicleId, RplId ownerId, int slotId) + { + if (!Replication.IsServer()) return; + if (this == GetGame().GetPlayerController()) ERR_CommitCasualtyLoadOwner(modeId, nonce, callerId, actorId, vehicleId, ownerId, slotId); + else Rpc(ERR_CommitCasualtyLoadOwner, modeId, nonce, callerId, actorId, vehicleId, ownerId, slotId); + } + [RplRpc(RplChannel.Reliable, RplRcver.Owner)] + protected void ERR_CommitCasualtyLoadOwner(RplId modeId, int nonce, RplId callerId, RplId actorId, RplId vehicleId, RplId ownerId, int slotId) + { + bool lease = this == GetGame().GetPlayerController() && m_ERRPreparedLoadMode == modeId && m_ERRPreparedLoadNonce == nonce && ERR_CasualtyLoadingRules.Within(m_ERRPreparedLoadClock, System.GetTickCount(), 3000); + if (m_ERRPreparedLoadMode == modeId && m_ERRPreparedLoadNonce == nonce) m_ERRPreparedLoadNonce = 0; + // Consume the local lease before the native call so duplicates cannot act. + bool accepted; + ERR_GameMode mode = ERR_GameMode.Get(); + IEntity actor = GetControlledEntity(); + IEntity caller = ERR_CasualtyLoadingRules.Entity(callerId); + Vehicle vehicle = Vehicle.Cast(ERR_CasualtyLoadingRules.Entity(vehicleId)); + IEntity owner = ERR_CasualtyLoadingRules.Entity(ownerId); + if (lease && mode && ERR_CasualtyLoadingRules.EntityId(mode) == modeId && ERR_CasualtyLoadingRules.EntityId(actor) == actorId && vehicle == mode.CasualtyLoadingAircraft() && ERR_CasualtyLoadingRules.Nearby(mode, caller, actor) && owner) + { + BaseCompartmentManagerComponent manager = BaseCompartmentManagerComponent.Cast(owner.FindComponent(BaseCompartmentManagerComponent)); + SCR_CompartmentAccessComponent access = SCR_CompartmentAccessComponent.Cast(actor.FindComponent(SCR_CompartmentAccessComponent)); + BaseCompartmentSlot seat; + if (manager) seat = manager.FindCompartment(slotId); + if (access && ERR_CasualtyLoadingRules.TransportBench(seat, vehicle) && seat.GetOwner() == owner && !seat.GetOccupant() && seat.IsCompartmentAccessible() && !seat.IsGetInLockedFor(actor) && (!seat.IsReserved() || seat.IsReservedBy(actor))) + accepted = access.GetInVehicle(owner, seat, true, -1, ECloseDoorAfterActions.INVALID, false); + } + // Missing replicated entities or rejected native entry fail once; never retry. + if (Replication.IsServer()) ERR_CasualtyLoadResult(modeId, nonce, accepted); + else Rpc(ERR_CasualtyLoadResult, modeId, nonce, accepted); + } + [RplRpc(RplChannel.Reliable, RplRcver.Server)] + protected void ERR_CasualtyLoadResult(RplId modeId, int nonce, bool accepted) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!Replication.IsServer() || !mode || ERR_CasualtyLoadingRules.EntityId(mode) != modeId || !mode.CasualtyLoading()) return; + mode.CasualtyLoading().OwnerResult(this, nonce, accepted); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c new file mode 100644 index 0000000..5b5091a --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c @@ -0,0 +1,331 @@ +// First release supports only the registered Mi8 extraction aircraft's physical +// child transport benches. Nothing changes health, ownership, or seat classes. +class ERR_CasualtyLoadingRules +{ + static int RoundAction(int phase) + { + if (phase == ERR_Phase.PREPARING) return 0; + if (ERR_MissionRules.Terminal(phase)) return 2; + return 1; + } + static bool ObserveTicket(bool committed, bool physical, bool authorized) + { + return physical && (committed || authorized); + } + static bool Within(int started, int now, int limit) { return now >= started && now - started < limit; } + static bool SettledFor(int started, int observed, int now) + { + return started >= 0 && now >= started && now - started >= 5000 && Within(observed, now, 2000); + } + static bool Ranges(float callerToCasualty, float callerToAircraft, float casualtyToAircraft) + { + return callerToCasualty >= 0 && callerToCasualty <= 3 && callerToAircraft >= 0 && callerToAircraft <= 12 && casualtyToAircraft >= 0 && casualtyToAircraft <= 12; + } + static bool AircraftMotion(bool groundContact, float up, float speed, float angularSpeed) + { + return groundContact && up >= 0.85 && speed >= 0 && speed <= 0.5 && angularSpeed >= 0 && angularSpeed <= 0.1; + } + static RplId EntityId(IEntity entity) + { + if (!entity) return RplId.Invalid(); + RplComponent component = RplComponent.Cast(entity.FindComponent(RplComponent)); + if (!component) return RplId.Invalid(); + return component.Id(); + } + static IEntity Entity(RplId id) + { + if (id == RplId.Invalid()) return null; + RplComponent component = RplComponent.Cast(Replication.FindItem(id)); + if (!component) return null; + return component.GetEntity(); + } + static bool Down(IEntity actor) + { + if (!ERR_Actors.Alive(actor)) return false; + CharacterControllerComponent controller = CharacterControllerComponent.Cast(actor.FindComponent(CharacterControllerComponent)); + return controller && controller.GetLifeState() == ECharacterLifeState.INCAPACITATED; + } + static bool GroundSettled(IEntity actor) + { + if (!Down(actor) || CompartmentAccessComponent.GetVehicleIn(actor)) return false; + CharacterAnimationComponent animation = CharacterAnimationComponent.Cast(actor.FindComponent(CharacterAnimationComponent)); + SCR_CompartmentAccessComponent access = SCR_CompartmentAccessComponent.Cast(actor.FindComponent(SCR_CompartmentAccessComponent)); + Physics physics = actor.GetPhysics(); + return animation && !animation.PhysicsIsFalling() && physics && physics.GetVelocity().Length() <= 0.5 && access && !access.IsGettingIn() && !access.IsGettingOut(); + } + static bool AircraftReady(Vehicle aircraft) + { + if (!ERR_Actors.Alive(aircraft)) return false; + HelicopterControllerComponent controller = HelicopterControllerComponent.Cast(aircraft.FindComponent(HelicopterControllerComponent)); + Physics physics = aircraft.GetPhysics(); + if (!controller || !controller.GetSimulation() || !physics) return false; + vector transform[4]; aircraft.GetWorldTransform(transform); + if (!AircraftMotion(true, transform[1][1], physics.GetVelocity().Length(), physics.GetAngularVelocity().Length())) return false; + if (controller.GetSimulation().HasAnyGroundContact()) return true; + return ERR_CasualtyGroundSupport.Parked(aircraft); + } + static bool LineOfSight(IEntity caller, IEntity casualty) + { + ChimeraCharacter rescuer = ChimeraCharacter.Cast(caller); + ChimeraCharacter patient = ChimeraCharacter.Cast(casualty); + if (!rescuer || !patient || !GetGame()) return false; + TraceParam trace = new TraceParam(); + trace.Start = rescuer.AimingPosition(); + trace.End = patient.AimingPosition(); + trace.Flags = TraceFlags.WORLD | TraceFlags.ENTS; + trace.LayerMask = TRACE_LAYER_CAMERA; + trace.Exclude = caller; + if (GetGame().GetWorld().TraceMove(trace, null) >= 1) return true; + // Hitting the intended body's clothing/attachment is still sight of that body. + IEntity hit = trace.TraceEnt; + while (hit) + { + if (hit == casualty) return true; + hit = hit.GetParent(); + } + return false; + } + static bool Nearby(ERR_GameMode mode, IEntity caller, IEntity casualty) + { + if (!mode || !mode.Active() || mode.Phase() != ERR_Phase.EXTRACTION || !caller || caller == casualty) return false; + CharacterControllerComponent rescuer = CharacterControllerComponent.Cast(caller.FindComponent(CharacterControllerComponent)); + if (!ERR_Actors.CanFight(caller) || !rescuer || rescuer.GetLifeState() != ECharacterLifeState.ALIVE || !GroundSettled(casualty) || CompartmentAccessComponent.GetVehicleIn(caller)) return false; + Vehicle aircraft = mode.CasualtyLoadingAircraft(); + if (!aircraft || !Ranges(vector.Distance(caller.GetOrigin(), casualty.GetOrigin()), vector.Distance(caller.GetOrigin(), aircraft.GetOrigin()), vector.Distance(casualty.GetOrigin(), aircraft.GetOrigin())) || !AircraftReady(aircraft)) return false; + Faction faction = mode.PlayerFaction(); + return faction && SCR_FactionManager.SGetFaction(caller) == faction && SCR_FactionManager.SGetFaction(casualty) == faction && LineOfSight(caller, casualty); + } + static bool TransportBench(BaseCompartmentSlot seat, Vehicle aircraft) + { + if (!seat || !aircraft || seat.GetType() != ECompartmentType.CARGO || SCR_PatientCompartmentSlot.Cast(seat)) return false; + IEntity owner = seat.GetOwner(); + if (!owner || owner == aircraft || !owner.GetPrefabData() || !owner.GetPrefabData().GetPrefabName().Contains("VehPart_MI8_seats")) return false; + while (owner) + { + if (owner == aircraft) return true; + owner = owner.GetParent(); + } + return false; + } +} +class ERR_CasualtySettling +{ + IEntity Actor; + UUID Account; + int Connection; + int Since; + int Observed; +} +class ERR_CasualtyLoadTicket +{ + IEntity Caller; + IEntity Casualty; + Vehicle Aircraft; + BaseCompartmentSlot Seat; + UUID CallerAccount; + UUID CasualtyAccount; + int CallerConnection; + int CasualtyConnection; + int Nonce; + int Started; + int CommittedAt; + bool Committed; + bool OwnerReported; +} +class ERR_CasualtyLoadingService +{ + protected ERR_GameMode m_Mode; + protected bool m_Stopped; + protected int m_NextNonce; + protected bool m_MaintenanceQueued; + protected ref array m_Settling = {}; + protected ref array m_Pending = {}; + protected ref ScriptInvoker m_OnResolved = new ScriptInvoker(); + void ERR_CasualtyLoadingService(ERR_GameMode mode) { m_Mode = mode; } + ScriptInvoker OnResolved() { return m_OnResolved; } // (IEntity casualty, bool physicallyLoaded) + int PendingCount() { return m_Pending.Count(); } + protected ERR_PlayerLife CurrentLife(IEntity actor) + { + if (!m_Mode || !m_Mode.Players()) return null; + return m_Mode.Players().CurrentActor(actor); + } + protected bool SameLife(IEntity actor, UUID account, int connection) + { + ERR_PlayerLife life = CurrentLife(actor); + return life && life.AccountId == account && life.ConnectionId == connection; + } + protected bool Settled(IEntity actor, int now) + { + foreach (ERR_CasualtySettling sample : m_Settling) + if (sample.Actor == actor && SameLife(actor, sample.Account, sample.Connection)) return ERR_CasualtyLoadingRules.GroundSettled(actor) && ERR_CasualtyLoadingRules.SettledFor(sample.Since, sample.Observed, now); + return false; + } + protected void Observe(int now) + { + for (int index = m_Settling.Count() - 1; index >= 0; index--) + { + ERR_CasualtySettling sample = m_Settling[index]; + if (!SameLife(sample.Actor, sample.Account, sample.Connection) || !ERR_CasualtyLoadingRules.GroundSettled(sample.Actor) || !ERR_CasualtyLoadingRules.Within(sample.Observed, now, 2000)) m_Settling.Remove(index); + else sample.Observed = now; + } + array lives = {}; m_Mode.Players().Participants(lives); + foreach (ERR_PlayerLife life : lives) + { + if (!CurrentLife(life.Actor) || !ERR_CasualtyLoadingRules.GroundSettled(life.Actor)) continue; + bool found; + foreach (ERR_CasualtySettling tracked : m_Settling) if (tracked.Actor == life.Actor) { found = true; break; } + if (found) continue; + ERR_CasualtySettling added = new ERR_CasualtySettling(); + added.Actor = life.Actor; added.Account = life.AccountId; added.Connection = life.ConnectionId; added.Since = now; added.Observed = now; + m_Settling.Insert(added); + } + } + protected bool PendingActor(IEntity caller, IEntity casualty) + { + foreach (ERR_CasualtyLoadTicket pending : m_Pending) + if (pending.Caller == caller || pending.Casualty == casualty) return true; + return false; + } + protected BaseCompartmentSlot AvailableSeat(IEntity casualty, Vehicle aircraft) + { + array seats = {}; m_Mode.Extraction().Seats(seats); + foreach (BaseCompartmentSlot seat : seats) + { + if (!ERR_CasualtyLoadingRules.TransportBench(seat, aircraft) || seat.GetOccupant() || seat.IsReserved() || !seat.IsCompartmentAccessible() || seat.IsGetInLockedFor(casualty)) continue; + bool pendingSeat; + foreach (ERR_CasualtyLoadTicket pending : m_Pending) if (pending.Seat == seat) { pendingSeat = true; break; } + if (!pendingSeat) return seat; + } + return null; + } + bool CanLoad(IEntity caller, IEntity casualty) + { + if (!Replication.IsServer() || m_Stopped || !ERR_CasualtyLoadingRules.Nearby(m_Mode, caller, casualty)) return false; + if (!CurrentLife(caller) || !CurrentLife(casualty) || !Settled(casualty, System.GetTickCount()) || PendingActor(caller, casualty)) return false; + return AvailableSeat(casualty, m_Mode.ExtractionVehicle()) != null; + } + bool Begin(IEntity caller, IEntity casualty) + { + if (!CanLoad(caller, casualty) || m_NextNonce >= 2147483646) return false; + ERR_PlayerLife callerLife = CurrentLife(caller); + ERR_PlayerLife casualtyLife = CurrentLife(casualty); + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(casualtyLife.ConnectionId)); + if (!controller || ERR_CasualtyLoadingRules.EntityId(m_Mode) == RplId.Invalid() || ERR_CasualtyLoadingRules.EntityId(caller) == RplId.Invalid() || ERR_CasualtyLoadingRules.EntityId(casualty) == RplId.Invalid() || ERR_CasualtyLoadingRules.EntityId(m_Mode.ExtractionVehicle()) == RplId.Invalid()) return false; + ERR_CasualtyLoadTicket ticket = new ERR_CasualtyLoadTicket(); + ticket.Caller = caller; ticket.Casualty = casualty; ticket.Aircraft = m_Mode.ExtractionVehicle(); + ticket.Seat = AvailableSeat(casualty, ticket.Aircraft); + if (!ticket.Seat || ERR_CasualtyLoadingRules.EntityId(ticket.Seat.GetOwner()) == RplId.Invalid()) return false; + ticket.CallerAccount = callerLife.AccountId; ticket.CasualtyAccount = casualtyLife.AccountId; + ticket.CallerConnection = callerLife.ConnectionId; ticket.CasualtyConnection = casualtyLife.ConnectionId; + ticket.Started = System.GetTickCount(); ticket.Nonce = ++m_NextNonce; + m_Pending.Insert(ticket); + ticket.Seat.SetReserved(casualty); + if (!ticket.Seat.IsReservedBy(casualty)) { Resolve(ticket, false); return false; } + ScheduleMaintenance(); + // Preparation never moves the actor. Its owner starts a local real-time lease. + controller.ERR_PrepareCasualtyLoad(ERR_CasualtyLoadingRules.EntityId(m_Mode), ticket.Nonce); + return true; + } + protected ERR_CasualtyLoadTicket Ticket(SCR_PlayerController controller, int nonce) + { + if (!controller || !GetGame() || !GetGame().GetPlayerManager() || GetGame().GetPlayerManager().GetPlayerController(controller.GetPlayerId()) != controller) return null; + foreach (ERR_CasualtyLoadTicket ticket : m_Pending) + if (ticket.Nonce == nonce && ticket.CasualtyConnection == controller.GetPlayerId() && ticket.Casualty == controller.GetControlledEntity()) return ticket; + return null; + } + void OwnerReady(SCR_PlayerController controller, int nonce) + { + if (!Replication.IsServer() || m_Stopped) return; + ERR_CasualtyLoadTicket ticket = Ticket(controller, nonce); + if (!ticket || ticket.Committed) return; + int now = System.GetTickCount(); + if (!ValidTicket(ticket) || !ERR_CasualtyLoadingRules.Within(ticket.Started, now, 5000) || !Settled(ticket.Casualty, now) || !ERR_CasualtyLoadingRules.Nearby(m_Mode, ticket.Caller, ticket.Casualty) || ticket.Seat.GetOccupant() || !ticket.Seat.IsCompartmentAccessible() || ticket.Seat.IsGetInLockedFor(ticket.Casualty) || !ticket.Seat.IsReservedBy(ticket.Casualty)) { Resolve(ticket, false); return; } + ticket.Committed = true; ticket.CommittedAt = now; + // Final authority/physical validation is the commit boundary. No retries. + controller.ERR_CommitCasualtyLoad(ERR_CasualtyLoadingRules.EntityId(m_Mode), nonce, ERR_CasualtyLoadingRules.EntityId(ticket.Caller), ERR_CasualtyLoadingRules.EntityId(ticket.Casualty), ERR_CasualtyLoadingRules.EntityId(ticket.Aircraft), ERR_CasualtyLoadingRules.EntityId(ticket.Seat.GetOwner()), ticket.Seat.GetCompartmentSlotID()); + } + void OwnerResult(SCR_PlayerController controller, int nonce, bool accepted) + { + if (!Replication.IsServer() || m_Stopped) return; + ERR_CasualtyLoadTicket ticket = Ticket(controller, nonce); + if (!ticket || !ticket.Committed || ticket.OwnerReported) return; + ticket.OwnerReported = true; + if (!accepted) Print("Rereintroduced [casualty]: owner declined loading; observing physical outcome until expiry."); + // Neither positive nor negative client acknowledgements release a reserved + // seat while an authorized owner command could still be in flight. + } + protected bool PhysicalTicket(ERR_CasualtyLoadTicket ticket) + { + // Death cannot revoke an in-flight commit. Keep the vacant seat reserved + // while the captured body exists; its owner may still see the prior state. + return m_Mode && m_Mode.Active() && m_Mode.Phase() == ERR_Phase.EXTRACTION && ticket.Aircraft == m_Mode.ExtractionVehicle() && ERR_Actors.Alive(ticket.Aircraft) && ticket.Casualty != null && ERR_CasualtyLoadingRules.TransportBench(ticket.Seat, ticket.Aircraft); + } + protected bool ValidTicket(ERR_CasualtyLoadTicket ticket) + { + return m_Mode && m_Mode.Active() && m_Mode.Phase() == ERR_Phase.EXTRACTION && ticket.Aircraft == m_Mode.ExtractionVehicle() && ERR_Actors.Alive(ticket.Aircraft) && ERR_Actors.Alive(ticket.Casualty) && SameLife(ticket.Caller, ticket.CallerAccount, ticket.CallerConnection) && SameLife(ticket.Casualty, ticket.CasualtyAccount, ticket.CasualtyConnection) && ERR_CasualtyLoadingRules.TransportBench(ticket.Seat, ticket.Aircraft); + } + protected void Resolve(ERR_CasualtyLoadTicket ticket, bool success) + { + int index = m_Pending.Find(ticket); if (index < 0) return; + m_Pending.Remove(index); + if (ticket.Seat && ticket.Casualty && ticket.Seat.IsReservedBy(ticket.Casualty)) ticket.Seat.SetReserved(null); + if (m_Pending.IsEmpty()) CancelMaintenance(); + m_OnResolved.Invoke(ticket.Casualty, success); + } + void Tick(float worldNow) + { + if (!Replication.IsServer() || m_Stopped || !m_Mode) return; + int roundAction = ERR_CasualtyLoadingRules.RoundAction(m_Mode.Phase()); + if (roundAction == 0) return; + if (roundAction == 2) { Stop(); return; } + int now = System.GetTickCount(); + Observe(now); + MaintainPending(); + } + protected void ScheduleMaintenance() + { + if (m_MaintenanceQueued || m_Stopped || m_Pending.IsEmpty() || !GetGame()) return; + // Only ticket observation runs independently of player population. No owner + // request is retried and neither local nor server leases are refreshed. + m_MaintenanceQueued = true; + GetGame().GetCallqueue().CallLater(MaintainPending, 250, true); + } + protected void CancelMaintenance() + { + if (!m_MaintenanceQueued) return; + m_MaintenanceQueued = false; + if (GetGame()) GetGame().GetCallqueue().Remove(MaintainPending); + } + protected void MaintainPending() + { + if (!Replication.IsServer() || m_Stopped) { CancelMaintenance(); return; } + if (!m_Mode || ERR_MissionRules.Terminal(m_Mode.Phase())) { Stop(); return; } + if (m_Pending.IsEmpty()) { CancelMaintenance(); return; } + int now = System.GetTickCount(); + array snapshot = {}; foreach (ERR_CasualtyLoadTicket item : m_Pending) snapshot.Insert(item); + foreach (ERR_CasualtyLoadTicket ticket : snapshot) + { + if (m_Stopped) return; + // Commit authorizes one move of the captured body; a later caller/target + // disconnect cannot revoke that command or release its seat prematurely. + if (!ERR_CasualtyLoadingRules.ObserveTicket(ticket.Committed, PhysicalTicket(ticket), ValidTicket(ticket))) { Resolve(ticket, false); continue; } + bool aboard = CompartmentAccessComponent.GetVehicleIn(ticket.Casualty) == ticket.Aircraft && ticket.Seat.GetOccupant() == ticket.Casualty; + if (aboard && ticket.Committed) { Resolve(ticket, ERR_Actors.Alive(ticket.Casualty)); continue; } + if (ticket.Committed) + { + // Owner's prepare-to-commit lease is only 3s; this 8s observation budget + // leaves room for replication. Timeouts do not issue compensating teleports. + if (!ERR_CasualtyLoadingRules.Within(ticket.CommittedAt, now, 8000)) Resolve(ticket, false); + } + else if (!ERR_CasualtyLoadingRules.Within(ticket.Started, now, 5000) || !ERR_CasualtyLoadingRules.Nearby(m_Mode, ticket.Caller, ticket.Casualty)) Resolve(ticket, false); + } + } + void RosterChanged(int connection) { if (GetGame()) Tick(GetGame().GetWorld().GetWorldTime()); } + void Stop() + { + if (!Replication.IsServer() || m_Stopped) return; + m_Stopped = true; m_Settling.Clear(); + CancelMaintenance(); + while (!m_Pending.IsEmpty()) Resolve(m_Pending[m_Pending.Count() - 1], false); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c new file mode 100644 index 0000000..18344bd --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c @@ -0,0 +1,119 @@ +// A first clue identifies a stable search square, not the exact objective. +// Stable grid centers prevent repeated updates from triangulating the site. +class ERR_DiscoveryMapRules +{ + static int Coordinate(float coordinate, int knowledge) + { + if (knowledge >= 2) return Math.Round(coordinate); + return Math.Floor(coordinate / 500.0) * 500 + 250; + } +} + +// Discovery markers are authored objective information, not player annotations. +// Native local insertion overwrites owner ID before OnCreateMarker; clear it at +// that boundary so native edit/drag cannot move a discovered objective. +class ERR_DiscoveryMarker : SCR_MapMarkerBase +{ + void ERR_DiscoveryMarker() { SetCanBeRemovedByOwner(false); } + void SetDiscoveryPosition(vector position, int knowledge) + { + SetWorldPos(ERR_DiscoveryMapRules.Coordinate(position[0], knowledge), ERR_DiscoveryMapRules.Coordinate(position[2], knowledge)); + } + override void OnCreateMarker(bool skipProfanityFilter = false) + { + SetMarkerOwnerID(-1); + // Text is scenario-authored, never user input. Avoid delayed UGC callbacks + // overwriting a newer discovery label after the location becomes identified. + super.OnCreateMarker(true); + } + override void OnDelete() + { + SCR_MapEntity.GetOnMapClose().Remove(OnMapClosed); + SCR_MapEntity.GetOnLayerChanged().Remove(OnMapLayerChanged); + super.OnDelete(); + m_wRoot = null; + m_MarkerWidgetComp = null; + } + override void SetCustomText(string text) + { + super.SetCustomText(text); + // Native SetCustomText updates data only; an already-open map needs its + // existing widget updated too. Closed maps use the saved text on creation. + SCR_MapMarkerWidgetComponent widget = GetMarkerComponent(); + if (GetRootWidget() && widget) widget.SetText(text, true); + } +} + +// Vanilla local deletion removes only its active list. A culled local objective +// must also leave the disabled list or map movement can resurrect it later. +modded class SCR_MapMarkerManagerComponent +{ + void ERR_RemoveDiscoveryMarker(ERR_DiscoveryMarker marker) + { + if (!marker || marker.GetMarkerID() != -1) return; + m_aStaticMarkers.RemoveItem(marker); + m_aDisabledMarkers.RemoveItem(marker); + marker.OnDelete(); + } +} + +// Read replicated discovery locally. A server-wide marker list never leaks +// locations which have not been recovered through gameplay. +modded class ERR_LocationComponent +{ + protected ref ERR_DiscoveryMarker m_ERRMarker; + protected int m_ERRShown; + protected string m_ERRShownLabel; + + protected override void EOnInit(IEntity owner) + { + super.EOnInit(owner); + if (RplSession.Mode() != RplMode.Dedicated && !SCR_Global.IsEditMode()) + GetGame().GetCallqueue().CallLater(ERR_UpdateMarker, 1500, true); + } + protected void ERR_UpdateMarker() + { + if (!GetGame().GetPlayerController() || Knowledge() <= 0 || (Knowledge() == m_ERRShown && Label() == m_ERRShownLabel)) return; + SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance(); + if (!manager || !manager.GetMarkerConfig()) return; + string label = "Search area (500 m square)"; + if (Knowledge() == 2) + { + if (!Label().IsEmpty()) label = Label(); + else if (Kind() == ERR_LocationKind.RADIO) label = "Radio station"; + else if (Kind() == ERR_LocationKind.EXTRACTION) label = "Initial helicopter pickup site"; + else if (Kind() == ERR_LocationKind.DEPOT) label = "Supply cache"; + else if (Kind() == ERR_LocationKind.PRISON) label = "Prison"; + else label = Id(); + } + if (!m_ERRMarker) + { + m_ERRMarker = new ERR_DiscoveryMarker(); + m_ERRMarker.SetType(SCR_EMapMarkerType.PLACED_CUSTOM); + m_ERRMarker.SetDiscoveryPosition(Position(), Knowledge()); + m_ERRMarker.SetMarkerConfigID(0); + m_ERRMarker.SetCustomText(label); + manager.InsertStaticMarker(m_ERRMarker, true); + } + m_ERRMarker.SetDiscoveryPosition(Position(), Knowledge()); + m_ERRMarker.SetCustomText(label); + // Reactivate a previously culled rough marker if the exact point moves + // into the open map's view. Native update performs normal visibility checks. + SCR_MapEntity mapEntity = SCR_MapEntity.GetMapInstance(); + if (mapEntity && mapEntity.IsOpen()) manager.SetStaticMarkerDisabled(m_ERRMarker, false); + m_ERRShown = Knowledge(); + m_ERRShownLabel = Label(); + } + protected override void OnDelete(IEntity owner) + { + if (GetGame()) GetGame().GetCallqueue().Remove(ERR_UpdateMarker); + SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance(); + if (m_ERRMarker) + { + if (manager) manager.ERR_RemoveDiscoveryMarker(m_ERRMarker); + else m_ERRMarker.OnDelete(); + } + m_ERRMarker = null; + super.OnDelete(owner); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c new file mode 100644 index 0000000..d513413 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c @@ -0,0 +1,64 @@ +// Base mission discovery: recovering physical documents works without companions. +// The Intel addon optionally assigns extra documents to enemy inventories. +class ERR_DiscoveryService +{ + protected ERR_GameMode m_Mode; + protected ref set m_Spent = new set(); + void ERR_DiscoveryService(ERR_GameMode mode) { m_Mode = mode; } + static void Folders(InventoryStorageManagerComponent inventory, out array folders) + { + folders.Clear(); + SCR_PrefabNamePredicate predicate = new SCR_PrefabNamePredicate(); + predicate.prefabName = ERR_Resources.IntelFolder(); + array intel = {}; + inventory.FindItems(intel, predicate, EStoragePurpose.PURPOSE_ANY); + foreach (IEntity folder : intel) + if (folder && !folders.Contains(folder)) folders.Insert(folder); + array objectives = {}; + predicate.prefabName = ERR_Resources.ObjectiveDocument(); + inventory.FindItems(objectives, predicate, EStoragePurpose.PURPOSE_ANY); + foreach (IEntity objective : objectives) + if (objective && !folders.Contains(objective)) folders.Insert(objective); + } + + void Tick(float now) + { + if (!Replication.IsServer()) return; + array players = {}; + ERR_Actors.Players(players); + foreach (IEntity player : players) Recover(player); + } + protected void Recover(IEntity player) + { + if (!Replication.IsServer() || !m_Mode || !m_Mode.Players() || !m_Mode.Players().CurrentActor(player) || !ERR_Actors.Alive(player)) return; + if (!m_Mode.PlayerFaction() || SCR_FactionManager.SGetFaction(player) != m_Mode.PlayerFaction()) return; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(player.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) return; + array folders = {}; + Folders(inventory, folders); + foreach (IEntity folder : folders) + { + if (!folder || m_Spent.Contains(folder) || m_Spent.Count() >= 4096) continue; + array locations = {}; + m_Mode.Locations(locations); + array eligible = {}; + ERR_DocumentComponent document = ERR_DocumentComponent.Cast(folder.FindComponent(ERR_DocumentComponent)); + foreach (ERR_LocationComponent location : locations) + { + if (!location || location.Knowledge() >= 2) continue; + if (document) + { + if (location.Id() == document.TargetId()) eligible.Insert(location); + } + else if (location.Kind() != ERR_LocationKind.PRISON && location.Kind() != ERR_LocationKind.EXTRACTION) eligible.Insert(location); + } + if (eligible.IsEmpty()) continue; + ERR_LocationComponent chosen = eligible.GetRandomElement(); + if (!chosen.Discover(Math.RandomInt(0, 100), m_Mode.Settings().Get("intelRevealChancePercent"))) continue; + m_Spent.Insert(folder); + PrintFormat("Rereintroduced [intel]: player %1 recovered folder; location=%2 knowledge=%3", GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(player), chosen.Id(), chosen.Knowledge()); + } + } + + void Stop() { m_Spent.Clear(); } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c new file mode 100644 index 0000000..4572814 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c @@ -0,0 +1,8 @@ +[ComponentEditorProps(category: "Rereintroduced", description: "Physical document identifying one authored objective")] +class ERR_DocumentComponentClass : ScriptComponentClass {} +class ERR_DocumentComponent : ScriptComponent +{ + protected string m_TargetId; + void SetTarget(string id) { if (Replication.IsServer()) m_TargetId = id; } + string TargetId() { return m_TargetId; } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c new file mode 100644 index 0000000..440a7b9 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c @@ -0,0 +1,164 @@ +// The server applies optional date/weather choices once at round preparation. +// Zero values preserve the world's authored environment and existing defaults. +class ERR_EnvironmentService +{ + protected TimeAndWeatherManagerEntity m_Manager; + protected bool m_Started; + protected bool m_Stopped; + protected int m_DateCode; + protected int m_Profile; + + static string Pad2(int value) + { + if (value < 10) return "0" + value.ToString(); + return value.ToString(); + } + static string Date(int code) + { + if (code == 0) return "authored"; + if (!ERR_Settings.Valid("startDateCode", code)) return "unavailable"; + int year = 1900 + code / 10000; + int month = (code % 10000) / 100; + int day = code % 100; + return year.ToString() + "-" + Pad2(month) + "-" + Pad2(day); + } + static bool ParseDate(string text, out int code) + { + if (text == "authored") { code = 0; return true; } + if (text.Length() != 10 || text.Substring(4, 1) != "-" || text.Substring(7, 1) != "-") return false; + int year, month, day; + if (!ERR_CommandArguments.Integer(text.Substring(0, 4), year) || !ERR_CommandArguments.Integer(text.Substring(5, 2), month) || !ERR_CommandArguments.Integer(text.Substring(8, 2), day)) return false; + if (year < 1900 || year > 2050 || month < 1 || month > 12 || day < 1 || day > 31) return false; + int parsed = (year - 1900) * 10000 + month * 100 + day; + if (!ERR_Settings.Valid("startDateCode", parsed)) return false; + code = parsed; + return true; + } + static string ProfileName(int profile) + { + if (profile == 0) return "authored"; + if (profile == 1) return "clear"; + if (profile == 2) return "overcast"; + if (profile == 3) return "rain"; + return "unavailable"; + } + static string WeatherStateName(int profile) + { + if (profile == 1) return "Clear"; + if (profile == 2) return "Overcast"; + if (profile == 3) return "Rainy"; + return ""; + } + static bool ParseProfile(string text, out int profile) + { + if (text == "authored") { profile = 0; return true; } + if (text == "clear") { profile = 1; return true; } + if (text == "overcast") { profile = 2; return true; } + if (text == "rain" || text == "rainy") { profile = 3; return true; } + return false; + } + static bool HasWeatherState(TimeAndWeatherManagerEntity manager, string name) + { + if (!manager || name.IsEmpty()) return false; + array states = {}; + manager.GetWeatherStatesList(states); + foreach (WeatherState state : states) + if (state && state.GetStateName() == name) return true; + return false; + } + bool Start(ERR_GameMode mode) + { + if (!Replication.IsServer() || !mode || !mode.Settings()) return false; + ChimeraWorld world = ChimeraWorld.CastFrom(mode.GetWorld()); + if (!world) return false; + return StartOn(world.GetTimeAndWeatherManager(), mode.Settings().Get("startDateCode"), mode.Settings().Get("weatherProfile")); + } + protected bool StartOn(TimeAndWeatherManagerEntity manager, int dateCode, int profile) + { + if (!Replication.IsServer() || m_Stopped) return false; + if (m_Started) return true; + if (!manager || !ERR_Settings.Valid("startDateCode", dateCode) || !ERR_Settings.Valid("weatherProfile", profile)) return false; + int year = 1900 + dateCode / 10000; + int month = (dateCode % 10000) / 100; + int day = dateCode % 100; + if (dateCode != 0 && !manager.CheckValidDate(year, month, day)) return false; + string weather = WeatherStateName(profile); + BaseWeatherStateTransitionManager transitions = manager.GetTransitionManager(); + if (profile != 0 && (!transitions || !manager.GetCurrentWeatherState() || !HasWeatherState(manager, weather))) return false; + int previousYear, previousMonth, previousDay; + manager.GetDate(previousYear, previousMonth, previousDay); + if (dateCode != 0 && !manager.SetDate(year, month, day, true)) return false; + if (profile != 0) + { + string previousWeather = manager.GetCurrentWeatherState().GetStateName(); + bool previousLooping = manager.IsWeatherLooping(); + // Use the native replicated weather route, never local editor previews. + // Loop the selected family; native variants/wind still follow vanilla rules. + manager.ForceWeatherTo(true, weather, 0, 24); + WeatherState current = manager.GetCurrentWeatherState(); + WeatherState next = transitions.GetNextState(); + if (!manager.IsWeatherLooping() || ((!current || current.GetStateName() != weather) && (!next || next.GetStateName() != weather))) + { + manager.ForceWeatherTo(previousLooping, previousWeather, 0, 24); + if (dateCode != 0) manager.SetDate(previousYear, previousMonth, previousDay, true); + return false; + } + } + m_Manager = manager; + m_DateCode = dateCode; + m_Profile = profile; + m_Started = true; + PrintFormat("Rereintroduced [environment]: date=%1 weather=%2", Date(dateCode), ProfileName(profile)); + return true; + } + bool Started() { return m_Started && !m_Stopped; } + int DateCode() { return m_DateCode; } + int Profile() { return m_Profile; } + int CurrentDateCode() + { + if (!Started() || !m_Manager) return -1; + return (m_Manager.GetYear() - 1900) * 10000 + m_Manager.GetMonth() * 100 + m_Manager.GetDay(); + } + string CurrentWeather() + { + if (!Started() || !m_Manager) return "unavailable"; + WeatherState weather = m_Manager.GetCurrentWeatherState(); + if (!weather) return "unavailable"; + return weather.GetStateName(); + } + string Status() + { + if (!Started()) return "Environment not started."; + return "Current date " + Date(CurrentDateCode()) + ", weather " + CurrentWeather() + " (round profile " + ProfileName(m_Profile) + ")."; + } + void Stop() { m_Stopped = true; m_Manager = null; } +} + +// Called after the server-owned admin authorization gate. Saving cannot change +// the active service; accepted changes are consumed by the next mission instance. +class ERR_EnvironmentCommands +{ + static bool Execute(ERR_Settings settings, ERR_EnvironmentService environment, array parts, array replies) + { + if (!Replication.IsServer() || !settings || parts.Count() < 2 || parts[0] != "mission" || (parts[1] != "date" && parts[1] != "weather")) return false; + if (parts.Count() == 3 && parts[2] == "show") + { + if (environment) replies.Insert(environment.Status()); + replies.Insert("Next round: date " + ERR_EnvironmentService.Date(settings.Get("startDateCode")) + ", weather " + ERR_EnvironmentService.ProfileName(settings.Get("weatherProfile")) + "."); + return true; + } + int value; + bool valid; + string key = "startDateCode"; + if (parts[1] == "weather") key = "weatherProfile"; + if (parts.Count() == 4 && parts[2] == "set") + { + if (key == "startDateCode") valid = ERR_EnvironmentService.ParseDate(parts[3], value); + else valid = ERR_EnvironmentService.ParseProfile(parts[3], value); + } + if (valid && settings.Set(key, value)) + replies.Insert("Saved for next round: date " + ERR_EnvironmentService.Date(settings.Get("startDateCode")) + ", weather " + ERR_EnvironmentService.ProfileName(settings.Get("weatherProfile")) + ". Current round unchanged."); + else replies.Insert("Invalid environment or settings could not be saved. Use mission date set YYYY-MM-DD (1900-2050) or authored; mission weather set authored|clear|overcast|rain. Previous setting retained."); + return true; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c new file mode 100644 index 0000000..3dedc73 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c @@ -0,0 +1,72 @@ +[BaseContainerProps()] +class ERR_EscapeGameOverScreenInfo : SCR_BaseGameOverScreenInfo +{ + protected ERR_PersonalEscapeResult PersonalResult(int playerId) + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + if (!controller || controller.GetPlayerId() != playerId) return ERR_PersonalEscapeResult.UNKNOWN; + return controller.ERR_EscapeResult(); + } + override string GetTitle(int playerId, array otherPlayerIds) + { + string title = "The helicopter escaped"; + if (PersonalResult(playerId) == ERR_PersonalEscapeResult.ESCAPED) title = "You escaped Everon"; + #ifdef WORKBENCH + PrintFormat("ERR RESULT UI: player=%1 title=%2", playerId, title); + #endif + return title; + } + override string GetDebriefing(int playerId, array otherPlayerIds) + { + ERR_PersonalEscapeResult result = PersonalResult(playerId); + if (result == ERR_PersonalEscapeResult.ESCAPED) + return "You crossed the extraction boundary aboard the helicopter."; + if (result == ERR_PersonalEscapeResult.MISSED) return "You did not escape with the helicopter."; + return "Your personal escape result is not available."; + } +} + +// End data and the controller replicate independently. Refresh an already-open +// native result screen when the identity-derived controller result arrives. +modded class SCR_GameOverScreenContentUIComponent +{ + protected bool m_ERREscapeContent; + override void InitContent(SCR_GameOverScreenUIContentData endScreenUIContent) + { + SCR_PlayerController.ERR_OnEscapeResultChanged().Remove(ERR_RefreshEscapeContent); + super.InitContent(endScreenUIContent); + m_ERREscapeContent = ERR_EscapeGameOverScreenInfo.Cast(endScreenUIContent.m_GameOverInfo) != null; + if (!m_ERREscapeContent) return; + SCR_PlayerController.ERR_OnEscapeResultChanged().Insert(ERR_RefreshEscapeContent); + ERR_RefreshEscapeContent(); + } + protected void ERR_RefreshEscapeContent() + { + if (!m_ERREscapeContent || !m_wRoot) return; + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + int playerId = -1; + if (controller) playerId = controller.GetPlayerId(); + ERR_EscapeGameOverScreenInfo info = new ERR_EscapeGameOverScreenInfo(); + TextWidget title = TextWidget.Cast(m_wRoot.FindAnyWidget(m_sTileName)); + TextWidget debrief = TextWidget.Cast(m_wRoot.FindAnyWidget(m_sDebriefingName)); + if (title) title.SetText(info.GetTitle(playerId, null)); + if (debrief) debrief.SetText(info.GetDebriefing(playerId, null)); + } + override void HandlerDeattached(Widget w) + { + SCR_PlayerController.ERR_OnEscapeResultChanged().Remove(ERR_RefreshEscapeContent); + m_ERREscapeContent = false; + super.HandlerDeattached(w); + } +} + +[BaseContainerProps()] +class ERR_FailureGameOverScreenInfo : SCR_BaseGameOverScreenInfo +{ + override string GetDebriefing(int playerId, array otherPlayerIds) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode && !mode.EndReason().IsEmpty()) return mode.EndReason(); + return "No surviving prisoners can complete the escape, or the extraction helicopter has been lost."; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c new file mode 100644 index 0000000..5d70758 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c @@ -0,0 +1,112 @@ +// Initial preparation only. A newly spawned vehicle may start asleep above its +// landing gear contact plane. Wake once, then observe native gravity/contact; +// never correct its transform, apply an impulse, or replenish its supplies. +class ERR_ExtractionPlacement +{ + protected ERR_GameMode m_Mode; + protected Vehicle m_Aircraft; + protected bool m_Stopped; + protected int m_WakeCount; + protected float m_Deadline; + protected float m_StableSince = -1; + protected float m_LastObservation = -1; + protected float m_NextDiagnostic; + protected ERR_PrepareResult m_Result = ERR_PrepareResult.PENDING; + protected string m_Failure; + void ERR_ExtractionPlacement(ERR_GameMode mode, Vehicle aircraft) + { + m_Mode = mode; m_Aircraft = aircraft; + m_Deadline = GetGame().GetWorld().GetWorldTime() + 30000; + } + static bool CanWake(bool initialized, int count, float now, float deadline) + { + return initialized && count == 0 && now < deadline; + } + static bool Fresh(float previous, float now) + { + return previous >= 0 && now >= previous && now - previous <= 1500; + } + static bool QualificationAllowed(bool previouslyReady, float now, float deadline) + { + return previouslyReady || now < deadline; + } + static bool Stable(float since, float previous, float now) + { + return since >= 0 && previous >= since && now >= previous && now - previous <= 1500 && now - since >= 1000; + } + int WakeCount() { return m_WakeCount; } + bool Ready() { return !m_Stopped && m_Result == ERR_PrepareResult.READY; } + string FailureReason() { return m_Failure; } + void Stop() { m_Stopped = true; } + protected ERR_PrepareResult Fail(string reason) + { + m_Failure = reason; m_Result = ERR_PrepareResult.FAILED; + Print("Rereintroduced [extraction placement]: " + reason, LogLevel.ERROR); + return m_Result; + } + protected void Diagnostic(bool ready) + { + if (!m_Aircraft) return; + Physics physics = m_Aircraft.GetPhysics(); + HelicopterControllerComponent controller = HelicopterControllerComponent.Cast(m_Aircraft.FindComponent(HelicopterControllerComponent)); + vector entity[4]; m_Aircraft.GetWorldTransform(entity); + PrintFormat("ERR EXTRACTION PLACEMENT: wakes=%1 alive=%2 ready=%3 origin=%4 up=%5", m_WakeCount, ERR_Actors.Alive(m_Aircraft), ready, entity[3], entity[1][1]); + if (physics) PrintFormat("ERR EXTRACTION PHYSICS: dynamic=%1 awake=%2 speed=%3 angularSpeed=%4", physics.IsDynamic(), physics.IsActive(), physics.GetVelocity().Length(), physics.GetAngularVelocity().Length()); + if (controller && controller.GetSimulation()) + { + vector nativeTransform[4]; controller.GetSimulation().GetWorldTransform(nativeTransform); + PrintFormat("ERR EXTRACTION NATIVE: valid=%1 contact=%2 engine=%3 origin=%4 up=%5 entityDifference=%6", controller.GetSimulation().IsValid(), controller.GetSimulation().HasAnyGroundContact(), controller.GetSimulation().EngineIsOn(), nativeTransform[3], nativeTransform[1][1], vector.Distance(nativeTransform[3], entity[3])); + } + // Diagnostics read every wheel even while physics is awake. The strict parked + // fallback itself still requires sleep and never alters the vehicle. + vector front, left, right; + if (ERR_CasualtyGroundSupport.WheelCenter(m_Aircraft, "v_wheel_F", front, true)) ERR_CasualtyGroundSupport.WheelSupported(m_Aircraft, front, 0.30, true); + if (ERR_CasualtyGroundSupport.WheelCenter(m_Aircraft, "v_wheel_bL", left, true)) ERR_CasualtyGroundSupport.WheelSupported(m_Aircraft, left, 0.45, true); + if (ERR_CasualtyGroundSupport.WheelCenter(m_Aircraft, "v_wheel_bR", right, true)) ERR_CasualtyGroundSupport.WheelSupported(m_Aircraft, right, 0.45, true); + } + ERR_PrepareResult Poll(float now) + { + if (m_Stopped || m_Result == ERR_PrepareResult.FAILED) return ERR_PrepareResult.FAILED; + if (!Replication.IsServer() || !m_Mode || m_Mode.Phase() != ERR_Phase.PREPARING || m_Mode.ExtractionVehicle() != m_Aircraft) return Fail("initial aircraft ownership/phase changed"); + if (!ERR_Actors.Alive(m_Aircraft) || !m_Aircraft.GetPrefabData() || !m_Aircraft.GetPrefabData().GetPrefabName().Contains("/Mi8MT/")) return Fail("registered initial Mi8 is missing, destroyed or unsupported"); + Physics physics = m_Aircraft.GetPhysics(); + HelicopterControllerComponent controller = HelicopterControllerComponent.Cast(m_Aircraft.FindComponent(HelicopterControllerComponent)); + bool initialized = physics && physics.IsDynamic() && controller && controller.GetSimulation() && controller.GetSimulation().IsValid(); + if (CanWake(initialized, m_WakeCount, now, m_Deadline)) + { + // Production preparation owns the empty registered aircraft. The count is + // latched BEFORE the native call, preventing repeated wakes on any callback. + m_WakeCount = 1; + physics.SetActive(ActiveState.ACTIVE); + m_LastObservation = now; + Diagnostic(false); + m_NextDiagnostic = now + 1000; + return ERR_PrepareResult.PENDING; // never accept in the mutation frame + } + FuelManagerComponent fuel = FuelManagerComponent.Cast(m_Aircraft.FindComponent(FuelManagerComponent)); + bool ready = initialized && m_WakeCount == 1 && fuel && fuel.HasFuel() && ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft); + if (now >= m_NextDiagnostic) + { + Diagnostic(ready); + PrintFormat("ERR EXTRACTION FUEL: manager=%1 hasFuel=%2", fuel != null, fuel && fuel.HasFuel()); + m_NextDiagnostic = now + 1000; + } + if (!ready || !Fresh(m_LastObservation, now)) m_StableSince = -1; + if (ready) + { + if (m_StableSince < 0) m_StableSince = now; + if (Stable(m_StableSince, m_LastObservation, now)) + { + if (!QualificationAllowed(m_Result == ERR_PrepareResult.READY, now, m_Deadline)) return Fail("initial aircraft stable qualification missed the 30-second preparation deadline"); + if (m_Result != ERR_PrepareResult.READY) Print("Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake"); + m_Result = ERR_PrepareResult.READY; + m_LastObservation = now; + return m_Result; + } + } + m_Result = ERR_PrepareResult.PENDING; + m_LastObservation = now; + if (now >= m_Deadline) return Fail("initial aircraft did not become alive, fueled and physically supported/stable within 30 seconds; no replacement or repositioning requested"); + return m_Result; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ExtractionService.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ExtractionService.c new file mode 100644 index 0000000..e9a9082 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ExtractionService.c @@ -0,0 +1,101 @@ +enum ERR_ExtractionState { WAITING, ESCAPED, LOST } + +// Mission progression consumes the result; this service never spawns a vehicle. +class ERR_ExtractionService +{ + static const int REQUIRED_SEATS = 12; + protected ref ERR_PlayerRoster m_Roster; + protected Vehicle m_Vehicle; + protected bool m_Assigned; + protected bool m_Begun; + protected bool m_Stopped; + protected vector m_Center; + protected float m_Radius; + protected ERR_ExtractionState m_State; + protected ref set m_Escapees = new set(); + protected int m_ParticipantCount; + protected ref ScriptInvoker m_OnResolved = new ScriptInvoker(); + + void ERR_ExtractionService(ERR_PlayerRoster roster) { m_Roster = roster; } + Vehicle VehicleEntity() { return m_Vehicle; } + ERR_ExtractionState State() { return m_State; } + ScriptInvoker OnResolved() { return m_OnResolved; } + int EscapedCount() { return m_Escapees.Count(); } + int LeftBehindCount() { return m_ParticipantCount - m_Escapees.Count(); } + bool DidEscape(UUID identity) { return m_Escapees.Contains(identity); } + + bool Assign(Vehicle vehicle) + { + if (!Replication.IsServer() || m_Assigned || m_Stopped || !ERR_Actors.Alive(vehicle)) return false; + m_Vehicle = vehicle; + m_Assigned = true; + return true; + } + int Seats(out array seats) + { + seats.Clear(); + if (!m_Vehicle) return 0; + BaseCompartmentManagerComponent manager = BaseCompartmentManagerComponent.Cast(m_Vehicle.FindComponent(BaseCompartmentManagerComponent)); + if (!manager) return 0; + array all = {}; + manager.GetCompartments(all); + foreach (BaseCompartmentSlot slot : all) + { + if (!slot) continue; + ECompartmentType type = SCR_CompartmentAccessComponent.GetCompartmentType(slot); + if (type == ECompartmentType.PILOT || type == ECompartmentType.CARGO) seats.Insert(slot); + } + return seats.Count(); + } + bool Ready() + { + if (!m_Assigned || !ERR_Actors.Alive(m_Vehicle) || !m_Vehicle.FindComponent(HelicopterControllerComponent)) return false; + array seats = {}; + if (Seats(seats) < REQUIRED_SEATS) return false; + foreach (BaseCompartmentSlot slot : seats) + if (SCR_CompartmentAccessComponent.GetCompartmentType(slot) == ECompartmentType.PILOT) return true; + return false; + } + bool Begin(vector center, float radius) + { + if (!Replication.IsServer() || m_Begun || m_Stopped || !m_Roster || radius <= 0 || !Ready()) return false; + m_Center = center; + m_Radius = radius; + m_Begun = true; + return true; + } + void Tick(ERR_Phase phase) + { + if (!Replication.IsServer() || !m_Begun || m_Stopped || m_State != ERR_ExtractionState.WAITING) return; + if (phase < ERR_Phase.PRISON || ERR_MissionRules.Terminal(phase)) return; + if (!ERR_Actors.Alive(m_Vehicle)) { Resolve(ERR_ExtractionState.LOST); return; } + if (phase != ERR_Phase.EXTRACTION || vector.DistanceXZ(m_Vehicle.GetOrigin(), m_Center) <= m_Radius) return; + array lives = {}; + m_Roster.Participants(lives); + foreach (ERR_PlayerLife life : lives) + { + if (!ERR_Actors.Alive(life.Actor) || CompartmentAccessComponent.GetVehicleIn(life.Actor) != m_Vehicle) continue; + // Reserved disconnected characters and unconscious passengers remain alive. + // A recycled connection ID is never an identity for the escape snapshot. + m_Escapees.Insert(life.AccountId); + } + if (m_Escapees.IsEmpty()) return; + m_ParticipantCount = lives.Count(); + Resolve(ERR_ExtractionState.ESCAPED); + } + protected void Resolve(ERR_ExtractionState result) + { + m_State = result; + m_OnResolved.Invoke(result); + } + void ConnectedWinners(out array winners) + { + winners.Clear(); + if (m_State != ERR_ExtractionState.ESCAPED || !m_Roster) return; + array lives = {}; + m_Roster.Participants(lives); + foreach (ERR_PlayerLife life : lives) + if (life.Connected && m_Roster.Get(life.ConnectionId) == life && m_Escapees.Contains(life.AccountId)) winners.Insert(life.ConnectionId); + } + void Stop() { m_Stopped = true; } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c new file mode 100644 index 0000000..d2c8e9b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c @@ -0,0 +1,42 @@ +// One authored faction/asset contract, supplied by the game mode resource. +[BaseContainerProps()] +class ERR_FactionCatalog +{ + [Attribute()] string PlayerFactionKey; + [Attribute()] string EnemyFactionKey; + [Attribute("", UIWidgets.ResourceNamePicker, "Unarmed prisoner character", "et")] + ResourceName PrisonerPrefab; + [Attribute("", UIWidgets.ResourceNamePicker, "Initial physical guard squad", "et")] + ResourceName GuardGroupPrefab; + [Attribute("", UIWidgets.ResourceNamePicker, "Extraction helicopter", "et")] + ResourceName ExtractionPrefab; + + bool Valid() + { + return !PlayerFactionKey.IsEmpty() && !EnemyFactionKey.IsEmpty() && PlayerFactionKey != EnemyFactionKey && !PrisonerPrefab.IsEmpty() && !GuardGroupPrefab.IsEmpty() && !ExtractionPrefab.IsEmpty(); + } + Faction PlayerFaction() + { + if (!GetGame().GetFactionManager()) return null; + return GetGame().GetFactionManager().GetFactionByKey(PlayerFactionKey); + } + Faction EnemyFaction() + { + if (!GetGame().GetFactionManager()) return null; + return GetGame().GetFactionManager().GetFactionByKey(EnemyFactionKey); + } + bool WorldReady() + { + if (!Valid()) return false; + Faction player = PlayerFaction(); + Faction enemy = EnemyFaction(); + if (!player || !enemy || !player.IsFactionEnemy(enemy) || !enemy.IsFactionEnemy(player)) return false; + array required = {PrisonerPrefab, GuardGroupPrefab, ExtractionPrefab}; + foreach (ResourceName prefab : required) + { + Resource resource = Resource.Load(prefab); + if (!resource || !resource.IsValid()) return false; + } + return true; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_GameMode.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_GameMode.c new file mode 100644 index 0000000..9eee930 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_GameMode.c @@ -0,0 +1,427 @@ +class ERR_GameModeClass : SCR_BaseGameModeClass {} +class ERR_GameMode : SCR_BaseGameMode +{ + [RplProp(), Attribute("6090 0 7160", UIWidgets.Coords, "Prison position; configured from authored scenario")] + protected vector m_PrisonPosition; + [Attribute("6090 0 7160", UIWidgets.Coords, "Centre of extraction boundary")] + protected vector m_EscapeCenter; + [RplProp(), Attribute("9000", UIWidgets.EditBox, "Helicopter must cross this radius to escape")] + protected float m_EscapeRadius; + [RplProp()] + protected ERR_Phase m_Phase; + [Attribute("{BE50B97B8E2B36E6}Configs/ERR/VanillaFactions.conf", UIWidgets.ResourceNamePicker, "Faction and asset catalog", "conf")] + protected ResourceName m_FactionDefinition; + [RplProp()] + protected string m_PreparationError; + protected ref ERR_FactionCatalog m_Factions; + protected ref ERR_Settings m_Settings; + protected ref ERR_TimeService m_Time = new ERR_TimeService(); + protected ref ERR_EnvironmentService m_Environment = new ERR_EnvironmentService(); + protected ref ERR_DiscoveryService m_Discovery; + protected ref ERR_Objectives m_Objectives; + protected ref ERR_PlayerRoster m_Roster = new ERR_PlayerRoster(); + protected ref ERR_AdminService m_Admin = new ERR_AdminService(); + protected ref ERR_CommandService m_Command; + protected ref array m_Locations = {}; + protected ref array m_OwnedEntities = {}; + protected ref ERR_ExtractionService m_Extraction; + [RplProp()] + protected string m_EndReason; + protected ref ERR_RadioDefenceService m_RadioDefence; + [RplProp()] + protected ERR_RadioFeedback m_RadioFeedback; + protected ref ERR_RecoveryService m_Recovery; + protected ref ERR_PrisonEscapeService m_PrisonEscape; + [RplProp()] + protected string m_RecoveryStatus; + protected bool m_StartedPlayers; + protected bool m_Stopped; + protected float m_NoSurvivorsSince = -1; + protected ref ScriptInvoker m_OnPhaseChanged = new ScriptInvoker(); + protected ref ScriptInvoker m_OnTick = new ScriptInvoker(); + protected ref ScriptInvoker m_OnStop = new ScriptInvoker(); + protected ref ScriptInvoker m_OnLocationDiscovered = new ScriptInvoker(); + protected ref ScriptInvoker m_OnGroup = new ScriptInvoker(); + + static ERR_GameMode Get() + { + if (!GetGame()) return null; + return ERR_GameMode.Cast(GetGame().GetGameMode()); + } + ERR_Phase Phase() { return m_Phase; } + ERR_PlayerRoster Players() { return m_Roster; } + ERR_AdminService Admin() { return m_Admin; } + ERR_Settings Settings() { return m_Settings; } + ERR_TimeService Time() { return m_Time; } + ERR_EnvironmentService Environment() { return m_Environment; } + ERR_RadioDefenceService RadioDefence() { return m_RadioDefence; } + ERR_RecoveryService Recovery() { return m_Recovery; } + ERR_PrisonEscapeService PrisonEscape() { return m_PrisonEscape; } + string RecoveryStatus() { return m_RecoveryStatus; } + ERR_CommandService Command() { return m_Command; } + ERR_Objectives Objectives() { return m_Objectives; } + ERR_ExtractionService Extraction() { return m_Extraction; } + string EndReason() { return m_EndReason; } + Vehicle ExtractionVehicle() + { + if (!m_Extraction) return null; + return m_Extraction.VehicleEntity(); + } + float EscapeRadius() { return m_EscapeRadius; } + ERR_RadioFeedback RadioFeedback() { return m_RadioFeedback; } + // Called only from existing authority transition/tick paths; no extra timer. + protected bool RefreshRadioFeedback() + { + if (!Replication.IsServer()) return false; + bool defending = m_Phase == ERR_Phase.RADIO_DEFENCE && m_RadioDefence != null && m_RadioDefence.State() == ERR_RadioDefenceState.DEFENDING; + bool occupied = defending && m_RadioDefence.Occupied(); + ERR_RadioFeedback next = ERR_RadioFeedbackRules.Next(m_RadioFeedback, defending, occupied); + if (next == m_RadioFeedback) return false; + m_RadioFeedback = next; + return true; + } + bool DefenceOccupied() { return m_RadioDefence && m_RadioDefence.Occupied(); } + int DefenceSecondsRemaining() + { + if (!m_RadioDefence) return 0; + return m_RadioDefence.SecondsRemaining(GetWorld().GetWorldTime()); + } + ScriptInvoker OnPhaseChanged() { return m_OnPhaseChanged; } + ScriptInvoker OnTick() { return m_OnTick; } + ScriptInvoker OnStop() { return m_OnStop; } + ScriptInvoker OnGroup() { return m_OnGroup; } + ScriptInvoker OnLocationDiscovered() { return m_OnLocationDiscovered; } + void LocationDiscovered(ERR_LocationComponent location, int previous, int current) + { + if (!Replication.IsServer() || !m_Locations.Contains(location) || current <= previous) return; + m_OnLocationDiscovered.Invoke(location, previous, current); + } + ERR_FactionCatalog Factions() { return m_Factions; } + Faction PlayerFaction() + { + if (!m_Factions) return null; + return m_Factions.PlayerFaction(); + } + Faction EnemyFaction() + { + if (!m_Factions) return null; + return m_Factions.EnemyFaction(); + } + string PreparationError() { return m_PreparationError; } + string Status() + { + if (!m_PreparationError.IsEmpty()) return "Mission startup failed: " + m_PreparationError; + if (!m_EndReason.IsEmpty()) return m_EndReason; + if (m_Phase == ERR_Phase.PREPARING) return "Preparing mission sites and physical supplies."; + string phase; + if (m_Phase == ERR_Phase.PRISON) phase = "Escape the prison"; + else if (m_Phase == ERR_Phase.RADIO_SEARCH) phase = "Locate the radio station"; + else if (m_Phase == ERR_Phase.RADIO_DEFENCE) phase = "Defend the radio transmission"; + else if (m_Phase == ERR_Phase.EXTRACTION) phase = "Helicopter extraction"; + else if (m_Phase == ERR_Phase.VICTORY) phase = "Escape complete"; + else phase = "Mission lost"; + if (!m_RecoveryStatus.IsEmpty()) phase += " " + m_RecoveryStatus; + return phase; + } + protected void RecoveryChanged(string message) + { + if (!Replication.IsServer() || m_RecoveryStatus == message) return; + m_RecoveryStatus = message; + Replication.BumpMe(); + } + bool AbandonRound() + { + if (!Replication.IsServer() || !Active() || m_Stopped || !m_PreparationError.IsEmpty()) return false; + if (!ERR_MissionRules.CanTransition(m_Phase, ERR_Phase.DEFEAT)) return false; + m_EndReason = "An administrator abandoned this round."; + return Transition(ERR_Phase.DEFEAT); + } + protected void FailPreparation(string detail) + { + if (!Replication.IsServer() || m_Phase != ERR_Phase.PREPARING || !m_PreparationError.IsEmpty()) return; + m_PreparationError = detail; + Replication.BumpMe(); + Print("Rereintroduced: scenario preparation failed; spawning remains disabled: " + detail, LogLevel.ERROR); + StopServices(); + ERR_SiteService sites = Sites(); + if (sites) sites.Rollback(); + for (int i = m_OwnedEntities.Count() - 1; i >= 0; i--) ERR_Actors.DeleteSpawned(m_OwnedEntities[i]); + m_OwnedEntities.Clear(); + } + vector PrisonPosition() { return ERR_Actors.Ground(m_PrisonPosition); } + bool Active() { return m_Phase >= ERR_Phase.PRISON && !ERR_MissionRules.Terminal(m_Phase); } + protected ERR_CommandService CreateCommandService() { return null; } + + void ConfigureStart(vector position) + { + if (!Replication.IsServer() || m_Phase != ERR_Phase.PREPARING) return; + m_PrisonPosition = position; + m_EscapeCenter = position; + Replication.BumpMe(); + } + ERR_SiteService Sites() + { + ERR_ScenarioComponent scenario = ERR_ScenarioComponent.Cast(FindComponent(ERR_ScenarioComponent)); + if (!scenario) return null; + return scenario.Sites(); + } + void RegisterLocation(ERR_LocationComponent location) + { + if (!location || location.Id().IsEmpty() || m_Locations.Contains(location)) return; + foreach (ERR_LocationComponent existing : m_Locations) + { + if (existing.Id() == location.Id()) + { + Print("Rereintroduced: duplicate location ID " + location.Id(), LogLevel.ERROR); + return; + } + } + m_Locations.Insert(location); + } + bool HasLocation(ERR_LocationComponent location) { return location && m_Locations.Contains(location); } + void UnregisterLocation(ERR_LocationComponent location) { m_Locations.RemoveItem(location); } + void Locations(out array locations) { locations.Copy(m_Locations); } + void Own(IEntity entity) { if (entity && !m_OwnedEntities.Contains(entity)) m_OwnedEntities.Insert(entity); } + bool SetExtractionVehicle(Vehicle vehicle) + { + return Replication.IsServer() && m_Phase == ERR_Phase.PREPARING && m_Extraction && m_Extraction.Assign(vehicle); + } + void PublishEscapeResults(bool reset = false) + { + if (!Replication.IsServer()) return; + array connected = {}; + GetGame().GetPlayerManager().GetPlayers(connected); + foreach (int id : connected) + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(id)); + if (!controller) continue; + if (reset) controller.ERR_ResetEscapeResult(); + else controller.ERR_PublishEscapeResult(m_Roster, m_Extraction); + } + } + void RegisterGroup(SCR_AIGroup group) + { + if (!Replication.IsServer() || !group) return; + Own(group); + if (m_Command) m_Command.RegisterGroup(group); + m_OnGroup.Invoke(group); + } + + bool Transition(ERR_Phase phase) + { + if (!Replication.IsServer() || !m_PreparationError.IsEmpty() || !ERR_MissionRules.CanTransition(m_Phase, phase)) return false; + ERR_Phase previous = m_Phase; + m_Phase = phase; + RefreshRadioFeedback(); + if (ERR_MissionRules.Terminal(phase)) PublishEscapeResults(); + Replication.BumpMe(); + PrintFormat("Rereintroduced [mission]: phase %1 -> %2", previous, phase); + m_OnPhaseChanged.Invoke(previous, phase); + if (ERR_MissionRules.Terminal(phase)) + { + StopServices(); + array winners = {}; + if (phase == ERR_Phase.VICTORY && m_Extraction) m_Extraction.ConnectedWinners(winners); + EGameOverTypes reason = EGameOverTypes.LOOSE; + if (phase == ERR_Phase.VICTORY) reason = EGameOverTypes.VICTORY; + EndGameMode(SCR_GameModeEndData.Create(reason, winners)); + } + return true; + } + + bool UnlockPrison(IEntity player) + { + if (!Replication.IsServer() || !m_Roster || !m_Roster.CurrentActor(player) || !ERR_Actors.CanFight(player)) return false; + if (!PlayerFaction() || SCR_FactionManager.SGetFaction(player) != PlayerFaction()) return false; + if (vector.DistanceXZ(player.GetOrigin(), PrisonPosition()) > 15) return false; + return m_Phase == ERR_Phase.PRISON && Transition(ERR_Phase.RADIO_SEARCH); + } + + bool TuneRadio(IEntity player, ERR_LocationComponent location) + { + return m_RadioDefence && m_RadioDefence.Begin(player, location); + } + protected void RadioStarted(ERR_LocationComponent location) + { + if (!Replication.IsServer() || !m_RadioDefence || location != m_RadioDefence.Location()) return; + if (!Transition(ERR_Phase.RADIO_DEFENCE)) m_RadioDefence.Stop(); + } + protected void RadioCompleted(ERR_LocationComponent location) + { + if (!Replication.IsServer() || m_Phase != ERR_Phase.RADIO_DEFENCE || !m_RadioDefence || m_RadioDefence.State() != ERR_RadioDefenceState.COMPLETED || location != m_RadioDefence.Location()) return; + foreach (ERR_LocationComponent candidate : m_Locations) + if (candidate.Kind() == ERR_LocationKind.EXTRACTION) candidate.Discover(0, 100); + Transition(ERR_Phase.EXTRACTION); + } + + void PlayerSpawned(int id, IEntity actor) + { + if (!Replication.IsServer() || !actor || ERR_MissionRules.Terminal(m_Phase)) return; + m_Roster.Spawned(id, actor); + m_StartedPlayers = true; + m_NoSurvivorsSince = -1; + } + + protected string SettingsPath() { return ERR_Settings.PATH; } + + protected override void EOnInit(IEntity owner) + { + super.EOnInit(owner); + if (SCR_Global.IsEditMode()) return; + m_Factions = ERR_FactionCatalog.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab(m_FactionDefinition)); + if (!System.IsConsoleApp()) GetGame().GetCallqueue().CallLater(BindLocalObserver, 250, true); + if (!Replication.IsServer()) return; + m_Settings = new ERR_Settings(SettingsPath()); + OnStop().Insert(m_Environment.Stop); + m_Recovery = new ERR_RecoveryService(this); + m_Recovery.OnChanged().Insert(RecoveryChanged); + OnStop().Insert(m_Recovery.Stop); + m_RadioDefence = new ERR_RadioDefenceService(this); + m_RadioDefence.OnStarted().Insert(RadioStarted); + m_RadioDefence.OnCompleted().Insert(RadioCompleted); + OnPhaseChanged().Insert(m_RadioDefence.PhaseChanged); + OnStop().Insert(m_RadioDefence.Stop); + m_Extraction = new ERR_ExtractionService(m_Roster); + PublishEscapeResults(true); + m_Extraction.OnResolved().Insert(ExtractionResolved); + OnStop().Insert(m_Extraction.Stop); + m_PrisonEscape = new ERR_PrisonEscapeService(this); + OnPhaseChanged().Insert(m_PrisonEscape.PhaseChanged); + OnTick().Insert(m_PrisonEscape.Tick); + OnStop().Insert(m_PrisonEscape.Stop); + m_Roster.OnChanged().Insert(m_PrisonEscape.RosterChanged); + m_Discovery = new ERR_DiscoveryService(this); + OnTick().Insert(m_Discovery.Tick); + OnStop().Insert(m_Discovery.Stop); + m_Objectives = new ERR_Objectives(this); + OnPhaseChanged().Insert(m_Objectives.PhaseChanged); + OnTick().Insert(m_Objectives.Tick); + OnStop().Insert(m_Objectives.Stop); + m_Command = CreateCommandService(); + GetGame().GetCallqueue().CallLater(ServerTick, 1000, true); + GetGame().GetCallqueue().CallLater(StartScenario, 1500, false); + } + + protected void BindLocalObserver() + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + if (!controller) return; + controller.ERR_StartObserverMonitor(); + GetGame().GetCallqueue().Remove(BindLocalObserver); + } + + protected void StartScenario() + { + if (m_Phase != ERR_Phase.PREPARING || !m_PreparationError.IsEmpty()) return; + if (!m_Factions || !m_Factions.WorldReady()) { FailPreparation("The configured player and enemy factions or required assets are missing, invalid or not hostile."); return; } + // Scenario content is created through a separate authoring component. + ERR_ScenarioComponent scenario = ERR_ScenarioComponent.Cast(FindComponent(ERR_ScenarioComponent)); + ERR_PrepareResult prepared = ERR_PrepareResult.FAILED; + if (scenario) prepared = scenario.Prepare(); + if (prepared == ERR_PrepareResult.PENDING) + { + GetGame().GetCallqueue().CallLater(StartScenario, 250, false); + return; + } + if (prepared == ERR_PrepareResult.FAILED) + { + string detail = "Scenario component is missing."; + if (scenario) detail = scenario.FailureReason(); + FailPreparation(detail); + return; + } + if (!m_Extraction || !m_Extraction.Begin(m_EscapeCenter, m_EscapeRadius)) + { + FailPreparation("The extraction vehicle must be a helicopter with a pilot position and at least twelve pilot/passenger seats, with a valid escape boundary."); + return; + } + if (!m_Environment.Start(this)) { FailPreparation("The selected date or vanilla weather profile could not be initialized."); return; } + if (!m_Time.Start(this)) { FailPreparation("The world clock could not be initialized."); return; } + Transition(ERR_Phase.PRISON); + } + + protected void ExtractionResolved(ERR_ExtractionState result) + { + if (!Replication.IsServer() || !Active()) return; + if (result == ERR_ExtractionState.LOST) + { + m_EndReason = "The extraction helicopter was lost. No replacement is available."; + Transition(ERR_Phase.DEFEAT); + } + else if (result == ERR_ExtractionState.ESCAPED) + { + m_EndReason = string.Format("Escape complete: %1 escaped; %2 did not escape.", m_Extraction.EscapedCount(), m_Extraction.LeftBehindCount()); + Transition(ERR_Phase.VICTORY); + } + } + + protected void ServerTick() + { + if (!Replication.IsServer() || !Active()) return; + float now = GetWorld().GetWorldTime(); + m_Extraction.Tick(m_Phase); + if (!Active()) return; + m_RadioDefence.Tick(now); + if (RefreshRadioFeedback()) Replication.BumpMe(); + m_Recovery.Tick(); + if (!Active()) return; + if (GetGame().GetPlayerManager().GetPlayerCount() == 0) + { + m_NoSurvivorsSince = -1; + return; + } + if (m_StartedPlayers && !m_Roster.HasSurvivor()) + { + if (m_NoSurvivorsSince < 0) m_NoSurvivorsSince = now; + if (now - m_NoSurvivorsSince >= 30000) + { + m_EndReason = "No surviving prisoners remain."; + Transition(ERR_Phase.DEFEAT); + return; + } + } + else m_NoSurvivorsSince = -1; + array connected = {}; + GetGame().GetPlayerManager().GetPlayers(connected); + foreach (int id : connected) + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(id)); + if (controller) controller.ERR_UpdateObserverServer(); + } + if (m_Command) m_Command.Tick(now); + m_OnTick.Invoke(now); + } + + protected void StopServices() + { + if (m_Stopped) return; + m_Stopped = true; + GetGame().GetCallqueue().Remove(ServerTick); + if (m_Command) m_Command.Stop(); + m_OnStop.Invoke(); + if (Replication.IsServer()) + { + array connected = {}; + GetGame().GetPlayerManager().GetPlayers(connected); + foreach (int id : connected) + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(id)); + if (controller) controller.ERR_SetObserver(ERR_ObserverReason.NONE); + } + foreach (IEntity entity : m_OwnedEntities) + if (SCR_AIGroup.Cast(entity)) ERR_Actors.DeleteSpawned(entity); + } + } + + void ~ERR_GameMode() + { + if (GetGame()) + { + GetGame().GetCallqueue().Remove(StartScenario); + GetGame().GetCallqueue().Remove(BindLocalObserver); + StopServices(); + } + m_Locations.Clear(); + m_OwnedEntities.Clear(); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c new file mode 100644 index 0000000..5ec5d04 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c @@ -0,0 +1,12 @@ +// Initial preparation only. A READY site service never consults this rule again. +class ERR_InitialGuardRules +{ + static float TimeoutMilliseconds() { return 90000; } + static ERR_PrepareResult State(int requested, int physical, int conscious, bool queueComplete, bool expired) + { + if (requested <= 0 || physical > requested || conscious > physical || conscious < 0 || physical < 0) return ERR_PrepareResult.FAILED; + if (expired) return ERR_PrepareResult.FAILED; + if (physical == requested && conscious == requested && queueComplete) return ERR_PrepareResult.READY; + return ERR_PrepareResult.PENDING; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Inventory.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Inventory.c new file mode 100644 index 0000000..844ad95 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Inventory.c @@ -0,0 +1,19 @@ +// GetItems may enumerate the same physical entity through multiple storages. +// Identity is the entity reference, never its prefab: distinct rounds still count. +class ERR_Inventory +{ + static int AppendUnique(InventoryStorageManagerComponent inventory, notnull array items) + { + if (!inventory) return items.Count(); + array raw = {}; + inventory.GetItems(raw); + foreach (IEntity item : raw) + if (item && !items.Contains(item)) items.Insert(item); + return items.Count(); + } + static int Items(InventoryStorageManagerComponent inventory, out array items) + { + items.Clear(); + return AppendUnique(inventory, items); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c new file mode 100644 index 0000000..6868b2d --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ItemStationTeardown.c @@ -0,0 +1,62 @@ +// A previously initialized off-world medical kit can outlive its weak catalog. +// Runtime/startup validation remains vanilla. Only owned teardown bypasses the +// unrelated initialization gate; no catalog is kept alive or fabricated. +class ERR_ItemStationTeardownRules +{ + static bool Recover(bool initialized, bool scoped, bool offWorld, bool catalogPresent, bool editMode) + { + return initialized && scoped && offWorld && !catalogPresent && !editMode; + } +} + +modded class SCR_ResupplyMedicalGadgetSupportStationComponent +{ + protected bool m_ERRTeardownScope; + protected bool m_ERRTeardownInitializing; + protected bool m_ERRTeardownInitialized; + protected bool m_ERRTeardownDone; + protected SCR_ResourceComponent m_ERRTeardownResource; + + protected bool ERR_KnownOffWorldKit(IEntity owner) + { + if (!GetGame() || !owner || owner.GetWorld() == GetGame().GetWorld() || !owner.GetPrefabData()) return false; + ResourceName prefab = owner.GetPrefabData().GetPrefabName(); + return prefab == "{AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et" || prefab == "{21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et"; + } + + protected override void DelayedInit(IEntity owner) + { + m_ERRTeardownInitializing = ERR_GameMode.Get() && ERR_KnownOffWorldKit(owner); + super.DelayedInit(owner); + m_ERRTeardownInitializing = false; + } + + protected override void AddRemoveOnDamageStateChanged(IEntity owner, bool subscribe) + { + super.AddRemoveOnDamageStateChanged(owner, subscribe); + // Vanilla reaches this only after the complete virtual InitValidSetup passed. + if (!subscribe || !m_ERRTeardownInitializing) return; + m_ERRTeardownScope = true; + m_ERRTeardownInitialized = true; + if (m_ResourceConsumer || m_ResourceGenerator) m_ERRTeardownResource = GetResourceComponent(); + } + + override void OnDelete(IEntity owner) + { + bool offWorld = owner && (!GetGame() || owner.GetWorld() != GetGame().GetWorld()); + if (!ERR_ItemStationTeardownRules.Recover(m_ERRTeardownInitialized, m_ERRTeardownScope, offWorld, m_EntityCatalogManager != null, SCR_Global.IsEditMode())) + { + super.OnDelete(owner); + return; + } + if (m_ERRTeardownDone) return; + m_ERRTeardownDone = true; + if (GetGame()) GetGame().GetCallqueue().Remove(DelayedInit); + AddRemoveOnDamageStateChanged(owner, false); + // These exact stations reject UsesRange at initialization and were never + // registered with the range manager. Native resource subscription is separate + // from range, and still needs removing when its component remains alive. + if (m_ERRTeardownResource) m_ERRTeardownResource.TEMP_GetOnInteractorReplicated().Remove(TEMP_OnInteractorReplicated); + m_ERRTeardownResource = null; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c new file mode 100644 index 0000000..c997b3f --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c @@ -0,0 +1,23 @@ +// Attach only to a successor-owned prisoner prefab, with a native action duration. +class ERR_LoadCasualtyAction : ScriptedUserAction +{ + override bool CanBeShownScript(IEntity user) + { + return ERR_CasualtyLoadingRules.Nearby(ERR_GameMode.Get(), user, GetOwner()); + } + override bool CanBePerformedScript(IEntity user) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!ERR_CasualtyLoadingRules.Nearby(mode, user, GetOwner())) return false; + // Clients do not own the authoritative roster. Server always checks again. + if (!Replication.IsServer()) return true; + return mode.CasualtyLoading() && mode.CasualtyLoading().CanLoad(user, GetOwner()); + } + override bool HasLocalEffectOnlyScript() { return false; } + override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) + { + if (!Replication.IsServer() || pOwnerEntity != GetOwner()) return; + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode && mode.CasualtyLoading()) mode.CasualtyLoading().Begin(pUserEntity, pOwnerEntity); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c new file mode 100644 index 0000000..55bd09f --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c @@ -0,0 +1,107 @@ +// A round-local roster identity is not a Bohemia/platform identity. Only the +// real native admission callback may select it for the sole offline controller. +class ERR_LocalAdmissionRules +{ + static bool Context(bool server, int sessionMode, int count, bool connected, bool sameLocal, bool sameManager, int connection, int controllerId) + { + return server && sessionMode == RplMode.None && count == 1 && connected && sameLocal && sameManager && connection > 0 && controllerId == connection; + } +} +class ERR_LocalAdmission +{ + protected ERR_GameMode m_Mode; + protected SCR_PlayerController m_Controller; + protected int m_Connection; + protected UUID m_Key; + protected bool m_Selected; + protected bool m_OfflineMode; + protected bool m_LocalKey; + protected bool m_Failed; + protected bool m_Stopped; + protected bool m_RefusalLogged; + void ERR_LocalAdmission(ERR_GameMode mode) { m_Mode = mode; m_OfflineMode = RplSession.Mode() == RplMode.None; } + bool OfflineMode() { return m_OfflineMode; } + bool Selected() { return m_Selected; } + bool LocalKey() { return m_LocalKey; } + protected bool Context(ERR_GameMode mode, int connection, SCR_PlayerController controller) + { + if (!GetGame()) return false; + PlayerManager manager = GetGame().GetPlayerManager(); + bool ownedMode = mode && mode == m_Mode && mode == ERR_GameMode.Get(); + int count = -1; + bool connected, sameManager; + if (manager) + { + count = manager.GetPlayerCount(); + connected = manager.IsPlayerConnected(connection); + sameManager = controller && manager.GetPlayerController(connection) == controller; + } + bool sameLocal = controller && controller == GetGame().GetPlayerController(); + int controllerId; + if (controller) controllerId = controller.GetPlayerId(); + bool valid = ownedMode && manager && controller && ERR_LocalAdmissionRules.Context(Replication.IsServer(), RplSession.Mode(), count, connected, sameLocal, sameManager, connection, controllerId); + if (!valid && !m_RefusalLogged) + { + string project; + if (System.GetCLIParam("errOrdinaryScenario", project) && (project == "core" || project == "chat")) + { + m_RefusalLogged = true; + PrintFormat("ERR ORDINARY LOCAL CONTEXT: server=%1 sessionMode=%2 count=%3 connected=%4 sameLocal=%5 sameManager=%6 positiveMatchingId=%7 ownedMode=%8 controllerPresent=%9", Replication.IsServer(), RplSession.Mode(), count, connected, sameLocal, sameManager, connection > 0 && controllerId == connection, ownedMode, controller != null); + } + } + return valid; + } + UUID Resolve(ERR_GameMode mode, int connection, SCR_PlayerController controller, UUID nativeIdentity) + { + // This helper is inert for modes created as Listen/Dedicated, even after Stop. + if (!m_OfflineMode) return nativeIdentity; + if (m_Failed || m_Stopped) return UUID.NULL_UUID; + if (m_Selected) + { + // A late backend value or name change never grants another local life. + if (mode != m_Mode || connection != m_Connection || controller != m_Controller || !Validate()) { m_Failed = true; return UUID.NULL_UUID; } + return m_Key; + } + if (!Context(mode, connection, controller)) { m_Failed = true; return UUID.NULL_UUID; } + m_Controller = controller; m_Connection = connection; m_Key = nativeIdentity; + m_Selected = true; + if (m_Key.IsNull()) { m_Key = UUID.GenV4(); m_LocalKey = true; } + if (m_Key.IsNull()) { m_Failed = true; return UUID.NULL_UUID; } + if (m_LocalKey) Print("Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged."); + return m_Key; + } + bool Validate() + { + if (!m_OfflineMode) return true; + if (m_Failed || m_Stopped) return false; + if (!m_Selected) return true; + if (!Context(m_Mode, m_Connection, m_Controller)) m_Failed = true; + return !m_Failed; + } + bool Disconnected(int connection) + { + if (!m_Selected || m_Stopped || connection != m_Connection) return false; + m_Failed = true; + return true; + } + void Stop() + { + m_Stopped = true; + m_Controller = null; + m_Key = UUID.NULL_UUID; + // Keep selection/failure latched: this object cannot admit a replacement. + } +} + +modded class ERR_GameMode +{ + void ERR_FailLocalAdmission() + { + if (!Replication.IsServer()) return; + string reason = "The offline player context changed. Start a new scenario to establish a fresh session."; + if (Phase() == ERR_Phase.PREPARING) { FailPreparation(reason); return; } + if (!Active()) return; + m_EndReason = reason; + Transition(ERR_Phase.DEFEAT); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Location.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Location.c new file mode 100644 index 0000000..bff1193 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Location.c @@ -0,0 +1,69 @@ +enum ERR_LocationKind { PRISON, RADIO, EXTRACTION, OUTPOST, DEPOT } + +[ComponentEditorProps(category: "Rereintroduced", description: "Server-owned location with replicated discovery state")] +class ERR_LocationComponentClass : ScriptComponentClass {} +class ERR_LocationComponent : ScriptComponent +{ + [RplProp(onRplName: "IdentityChanged"), Attribute("", UIWidgets.EditBox, "Stable scenario location ID")] + protected string m_Id; + [RplProp()] + protected string m_Label; + [RplProp(), Attribute("0", UIWidgets.ComboBox, "Location kind", enums: ParamEnumArray.FromEnum(ERR_LocationKind))] + protected ERR_LocationKind m_Kind; + [RplProp()] + protected int m_Knowledge; + + string Id() { return m_Id; } + string Label() { return m_Label; } + ERR_LocationKind Kind() { return m_Kind; } + int Knowledge() { return m_Knowledge; } + vector Position() { return GetOwner().GetOrigin(); } + + bool Configure(string id, ERR_LocationKind kind, string label = "") + { + if (!Replication.IsServer() || id.IsEmpty()) return false; + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode || mode.Phase() != ERR_Phase.PREPARING) return false; + mode.UnregisterLocation(this); + m_Id = id; + m_Label = label; + m_Kind = kind; + mode.RegisterLocation(this); + Replication.BumpMe(); + return true; + } + protected void IdentityChanged() + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode) return; + mode.UnregisterLocation(this); + mode.RegisterLocation(this); + } + bool Discover(int roll, int chance) + { + if (!Replication.IsServer() || m_Knowledge >= 2) return false; + int previous = m_Knowledge; + m_Knowledge = ERR_MissionRules.Discovery(m_Knowledge, roll, chance); + Replication.BumpMe(); + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode) mode.LocationDiscovered(this, previous, m_Knowledge); + return true; + } + + override void OnPostInit(IEntity owner) + { + super.OnPostInit(owner); + if (!SCR_Global.IsEditMode()) SetEventMask(owner, EntityEvent.INIT); + } + protected override void EOnInit(IEntity owner) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode) mode.RegisterLocation(this); + } + protected override void OnDelete(IEntity owner) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode) mode.UnregisterLocation(this); + super.OnDelete(owner); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_MissionRules.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_MissionRules.c new file mode 100644 index 0000000..1a2b2f7 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_MissionRules.c @@ -0,0 +1,46 @@ +enum ERR_Phase +{ + PREPARING, + PRISON, + RADIO_SEARCH, + RADIO_DEFENCE, + EXTRACTION, + VICTORY, + DEFEAT +} + +// Pure mission policy. Entity queries and authority checks belong to the owner. +class ERR_MissionRules +{ + static bool Terminal(int phase) + { + return phase == ERR_Phase.VICTORY || phase == ERR_Phase.DEFEAT; + } + + static bool CanTransition(int from, int to) + { + if (Terminal(from) || from == to) return false; + if (to == ERR_Phase.DEFEAT) return from >= ERR_Phase.PRISON && from <= ERR_Phase.EXTRACTION; + if (from == ERR_Phase.PREPARING) return to == ERR_Phase.PRISON; + if (from == ERR_Phase.PRISON) return to == ERR_Phase.RADIO_SEARCH; + if (from == ERR_Phase.RADIO_SEARCH) return to == ERR_Phase.RADIO_DEFENCE; + if (from == ERR_Phase.RADIO_DEFENCE) return to == ERR_Phase.EXTRACTION; + return from == ERR_Phase.EXTRACTION && to == ERR_Phase.VICTORY; + } + + static bool DefenceComplete(float now, float since, float duration, bool occupied) + { + return occupied && since >= 0 && duration > 0 && now >= since && now - since >= duration; + } + + static bool ContactFresh(float observed, float now) + { + return observed >= 0 && now >= observed && now - observed <= 120000; + } + + static int Discovery(int knowledge, int roll, int identifyPercent) + { + if (knowledge >= 1 || roll < identifyPercent) return 2; + return 1; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c new file mode 100644 index 0000000..c17a68d --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c @@ -0,0 +1,76 @@ +#ifdef WORKBENCH +// Test adapter exercises the production setting handler with a disposable file. +// Actual mode.Admin below still tests its server authorization and alias dispatch. +class ERR_NativeAdminSettingsAdapter : ERR_AdminService +{ + void Probe(ERR_Settings settings, string arguments, array replies) + { + replies.Clear(); + arguments = arguments.Trim(); arguments.ToLower(); + array parts = {}; + arguments.Split(" ", parts, true); + if (parts.Count() != 3 && parts.Count() != 4) return; + string key = Setting(parts[0], parts[1]); + if (!key.IsEmpty()) SettingCommand(settings, key, parts, replies); + } +} + +class ERR_NativeAdminSettingsProbe +{ + protected static bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: admin settings " + detail); return true; } + Print("ERR SMOKE FAIL: admin settings " + detail, LogLevel.ERROR); + return false; + } + protected static bool Storage(string path) + { + ERR_Settings settings = new ERR_Settings(path); + ERR_NativeAdminSettingsAdapter adapter = new ERR_NativeAdminSettingsAdapter(); + array replies = {}; + map initial = new map(); + foreach (string key : ERR_Settings.Keys()) initial.Set(key, settings.Get(key)); + array values = {0, 100, 15}; + foreach (int value : values) + { + adapter.Probe(settings, " INTEL REVEAL SET " + value.ToString() + " ", replies); + if (!Check(replies.Count() == 1 && replies[0] == "intelRevealChancePercent=" + value.ToString() + " saved" && settings.Get("intelRevealChancePercent") == value, "authorized setting handler accepts normalized value " + value.ToString())) return false; + ERR_Settings reloaded = new ERR_Settings(path); + if (!Check(reloaded.Get("intelRevealChancePercent") == value, "discovery probability survives native JSON reload")) return false; + foreach (string key, int original : initial) + if (key != "intelRevealChancePercent" && !Check(reloaded.Get(key) == original, "unrelated setting preserved: " + key)) return false; + } + array invalid = {"-1", "101", "1.5", "100junk", "999999"}; + foreach (string argument : invalid) + { + adapter.Probe(settings, "intel reveal set " + argument, replies); + ERR_Settings reloaded = new ERR_Settings(path); + if (!Check(replies.Count() == 1 && replies[0].Contains("Invalid") && replies[0].Contains("0-100") && settings.Get("intelRevealChancePercent") == 15 && reloaded.Get("intelRevealChancePercent") == 15, "invalid input preserves live and stored value: " + argument)) return false; + } + adapter.Probe(settings, "intel reveal help", replies); + if (!Check(replies.Count() == 1 && replies[0].Contains("second document") && replies[0].Contains("newly recovered") && replies[0].Contains("remain unchanged"), "help explains exact versus rough discovery and apply timing")) return false; + adapter.Probe(settings, "mission radio show", replies); + return Check(replies.Count() == 1 && replies[0] == "radioDefenceSeconds=" + initial.Get("radioDefenceSeconds").ToString(), "existing radio alias and response remain intact"); + } + static bool Run(ERR_GameMode mode) + { + if (!Check(Replication.IsServer() && mode && mode.Admin() && mode.Settings(), "native Core command service and settings ready")) return false; + int original = mode.Settings().Get("intelRevealChancePercent"); + array replies = {}; + mode.Admin().Execute(mode, false, "intel reveal set 100", replies); + if (!Check(replies.Count() == 1 && replies[0] == "Administrator access required." && mode.Settings().Get("intelRevealChancePercent") == original, "actual unauthorized command cannot mutate discovery")) return false; + mode.Admin().Execute(mode, true, " INTEL REVEAL SHOW ", replies); + if (!Check(replies.Count() == 1 && replies[0] == "intelRevealChancePercent=" + original.ToString(), "actual Core alias dispatches without Chat")) return false; + mode.Admin().Execute(mode, true, "intel reveal set 101", replies); + if (!Check(replies.Count() == 1 && replies[0].Contains("0-100") && mode.Settings().Get("intelRevealChancePercent") == original, "actual dispatch rejects out-of-range value with guidance")) return false; + mode.Admin().Execute(mode, true, "intel reveal help", replies); + if (!Check(replies.Count() == 1 && replies[0].Contains("second document"), "actual Core help describes physical document progression")) return false; + string path = "$profile:erri-native-admin-settings-probe.json"; + if (!Check(!FileIO.FileExists(path) && !FileIO.FileExists(path + ".bak") && !FileIO.FileExists(path + ".tmp"), "disposable fixture filenames are unused")) return false; + bool result = Storage(path); + FileIO.DeleteFile(path); FileIO.DeleteFile(path + ".bak"); FileIO.DeleteFile(path + ".tmp"); + if (!result) return false; + return Check(mode.Settings().Get("intelRevealChancePercent") == original && !FileIO.FileExists(path) && !FileIO.FileExists(path + ".bak") && !FileIO.FileExists(path + ".tmp"), "fixture removed its files and never changed actual mission settings"); + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c new file mode 100644 index 0000000..8b16858 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c @@ -0,0 +1,851 @@ +// Explicit local engine fixture, excluded from game/server builds. +#ifdef WORKBENCH +modded class ERR_GameMode +{ + protected ref ERR_NativeEnvironmentRestartProbe m_ERRBaseEnvironmentRestartProbe; + protected override string SettingsPath() + { + string enabled, outcome; + if (System.GetCLIParam("errBaseSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "environment-restart") + { + m_ERRBaseEnvironmentRestartProbe = new ERR_NativeEnvironmentRestartProbe(this); + return ERR_NativeEnvironmentRestartProbe.PATH; + } + return super.SettingsPath(); + } + + protected ref ERR_NativeCasualtyServiceProbe m_ERRCasualtyServiceProbe; + protected ref ERR_NativePrisonerProbe m_ERRPrisonerProbe; + protected ref ERR_NativeGuardCancelProbe m_ERRGuardCancelProbe; + protected ref ERR_NativeLocalAdmissionProbe m_ERRLocalAdmissionProbe; + protected ref ERR_NativePoweredFlightProbe m_ERRPoweredFlightProbe; + protected ref ERR_NativePrisonBreachProbe m_ERRPrisonBreachProbe; + protected ref ERR_NativeItemStationTeardownProbe m_ERRItemStationTeardownProbe; + protected ref ERR_NativeObjectiveLossProbe m_ERRObjectiveLossProbe; + protected ref ERR_NativeMedicalProbe m_ERRBaseMedicalProbe; + protected ref ERR_NativeCasualtyLoadProbe m_ERRCasualtyLoadProbe; + protected ref ERR_NativeEnvironmentProbe m_ERRBaseEnvironmentProbe; + protected bool m_ERRCatalogChecked; + protected bool m_ERRDiscoveryMapChecked; + protected ref ERR_NativePatrolProbe m_ERRPatrolEast; + protected ref ERR_NativePatrolProbe m_ERRPatrolWest; + protected int m_ERRBaseStep; + protected bool m_ERRObjectiveCloseChecked; + protected bool m_ERRStartupFailure; + protected bool m_ERRCacheLoss; + protected string m_ERRExtractionCase; + protected ref ERR_NativeExtractionProbe m_ERRExtractionProbe; + protected ref ERR_NativeTransportProbe m_ERRTransportProbe; + protected ref ERR_NativeLifecycleProbe m_ERRLifecycleProbe; + protected ref ERR_NativeRecoveryProbe m_ERRRecoveryProbe; + protected ref ERR_NativeRadioDefenceProbe m_ERRBaseRadioProbe; + protected string m_ERRActiveCacheId = "everon-supply-1"; + protected int m_ERRMedicalDiscoveries; + protected IEntity m_ERRSightBlocker; + protected float m_ERRBaseDeadline; + protected float m_ERRBaseWait; + protected IEntity m_ERRBasePlayer; + protected ERR_LocationComponent m_ERRBaseRadio; + protected ref array m_ERRBaseDocuments = {}; + + protected override void EOnInit(IEntity owner) + { + super.EOnInit(owner); + string enabled; + if (SCR_Global.IsEditMode() || !Replication.IsServer() || !System.GetCLIParam("errBaseSmoke", enabled) || enabled != "1") return; + ERR_NativeObjectiveProbe.BeginRound(); + ERR_NativeProgressionIdentityProbe.BeginRound(); + string outcome; + m_ERRStartupFailure = System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "startup-failure"; + m_ERRExtractionCase = outcome; + if (outcome == "extraction-startup-failure" && m_Factions) m_Factions.ExtractionPrefab = "{259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et"; + if (outcome == "extraction-boundary-failure") m_EscapeRadius = 0; + m_ERRCacheLoss = outcome == "cache-loss"; + if (m_ERRCacheLoss) m_ERRActiveCacheId = "everon-supply-2"; + OnLocationDiscovered().Insert(ERR_BaseDiscovered); + OnStop().Insert(ERR_NativeObjectiveProbe.Stop); + OnStop().Insert(ERR_StopRadioProbe); + OnStop().Insert(ERR_StopHealthProbes); + if (m_ERRStartupFailure && m_Factions) m_Factions.EnemyFactionKey = m_Factions.PlayerFactionKey; + m_ERRBaseDeadline = GetWorld().GetWorldTime() + 210000; + if (outcome == "patrols") m_ERRBaseDeadline = GetWorld().GetWorldTime() + 330000; + OnPhaseChanged().Insert(ERR_BaseResult); + GetGame().GetCallqueue().CallLater(ERR_BaseTick, 500, true); + Print("ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance"); + } + protected bool ERR_BaseCheck(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: base " + detail); return true; } + ERR_NativeObjectiveProbe.Stop(); + ERR_StopRadioProbe(); + ERR_StopHealthProbes(); + Print("ERR SMOKE FAIL: base " + detail, LogLevel.ERROR); + GetGame().GetCallqueue().Remove(ERR_BaseTick); + return false; + } + protected void ERR_StopHealthProbes() + { + ERR_NativeDiscoveryMapProbe.Stop(); + ERR_NativeProgressionIdentityProbe.Stop(); + if (m_ERRPatrolEast) m_ERRPatrolEast.Stop(); + if (m_ERRPatrolWest) m_ERRPatrolWest.Stop(); + if (m_ERRBaseEnvironmentRestartProbe) m_ERRBaseEnvironmentRestartProbe.Stop(); + if (m_ERRBaseEnvironmentProbe) m_ERRBaseEnvironmentProbe.Stop(); + if (m_ERRPrisonerProbe) m_ERRPrisonerProbe.Stop(); + if (m_ERRGuardCancelProbe) m_ERRGuardCancelProbe.Stop(); + if (m_ERRLocalAdmissionProbe) m_ERRLocalAdmissionProbe.Stop(); + if (m_ERRPoweredFlightProbe) m_ERRPoweredFlightProbe.Stop(); + if (m_ERRPrisonBreachProbe) m_ERRPrisonBreachProbe.Stop(); + if (m_ERRItemStationTeardownProbe) m_ERRItemStationTeardownProbe.Stop(); + if (m_ERRCasualtyServiceProbe) m_ERRCasualtyServiceProbe.Stop(); + if (m_ERRObjectiveLossProbe) m_ERRObjectiveLossProbe.Stop(); + if (m_ERRBaseMedicalProbe) m_ERRBaseMedicalProbe.Stop(); + if (m_ERRCasualtyLoadProbe) m_ERRCasualtyLoadProbe.Cleanup(); + if (m_ERRRecoveryProbe) m_ERRRecoveryProbe.Stop(); + } + protected void ERR_StopRadioProbe() { if (m_ERRBaseRadioProbe) m_ERRBaseRadioProbe.Stop(); } + protected void ERR_BaseMove(vector position) + { + vector transform[4]; + m_ERRBasePlayer.GetWorldTransform(transform); + transform[3] = ERR_Actors.Ground(position); + ChimeraCharacter.Cast(m_ERRBasePlayer).Teleport(transform); + } + protected ERR_UnlockPrisonAction ERR_BaseLock(IEntity entity) + { + BaseActionsManagerComponent manager = BaseActionsManagerComponent.Cast(entity.FindComponent(BaseActionsManagerComponent)); + if (manager) + { + array actions = {}; + manager.GetActionsList(actions); + foreach (BaseUserAction action : actions) + { + ERR_UnlockPrisonAction lock = ERR_UnlockPrisonAction.Cast(action); + if (lock) return lock; + } + } + IEntity child = entity.GetChildren(); + while (child) + { + ERR_UnlockPrisonAction lock = ERR_BaseLock(child); + if (lock) return lock; + child = child.GetSibling(); + } + return null; + } + protected bool ERR_BaseCover() + { + int count; + foreach (IEntity entity : m_OwnedEntities) + { + if (!entity || !entity.GetPrefabData() || entity.GetPrefabData().GetPrefabName() != "{4B6AC1D8701C35A1}Prefabs/ERR/FieldCover.et") continue; + vector transform[4]; + entity.GetWorldTransform(transform); + vector up = transform[1]; + if (!ERR_BaseCheck(up[1] > 0.99, "outpost barrier is upright")) return false; + vector low, high; + entity.GetWorldBounds(low, high); + vector center = (low + high) * 0.5; + vector across = "0 0 2"; + if (high[0] - low[0] < high[2] - low[2]) across = "2 0 0"; + TraceParam trace = new TraceParam(); + trace.Start = center + across; + trace.End = center - across; + trace.Flags = TraceFlags.ENTS; + trace.LayerMask = TRACE_LAYER_CAMERA; + float fraction = GetWorld().TraceMove(trace, null); + PrintFormat("ERR COVER GEOMETRY: low=%1 high=%2 trace=%3", low, high, fraction); + if (!ERR_BaseCheck(fraction < 1 && trace.TraceEnt == entity, "outpost barrier has physical collision")) return false; + count++; + } + return ERR_BaseCheck(count == 3, "exactly three authored outpost barriers exist"); + } + protected void ERR_BaseDiscovered(ERR_LocationComponent location, int previous, int current) + { + if (location.Id() == "everon-medical-1" && previous == 0 && current == 2) m_ERRMedicalDiscoveries++; + } + protected void ERR_BaseResult(ERR_Phase previous, ERR_Phase current) + { + if (!ERR_MissionRules.Terminal(current)) return; + GetGame().GetCallqueue().Remove(ERR_BaseTick); + if (m_ERRExtractionCase == "station-teardown") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 2002, "native station teardown fixture finished before explicit reset")) return; + ERR_StopHealthProbes(); + Print("ERR SMOKE COMPLETE: isolated off-world station catalog-expiry injection and native callback teardown; not restart reproduction"); + return; + } + if (m_ERRExtractionCase == "prison-breach") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1902, "native destroyed-gate crossing finished before explicit reset")) return; + ERR_StopHealthProbes(); + Print("ERR SMOKE COMPLETE: actual gate destruction and sampled prison crossing; repositioned fixture, not walking or multiplayer"); + return; + } + if (m_ERRExtractionCase == "powered-flight" || m_ERRExtractionCase == "powered-translate") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1802, "native powered-flight fixture finished before explicit test reset")) return; + ERR_StopHealthProbes(); + if (m_ERRExtractionCase == "powered-translate") + Print("ERR SMOKE COMPLETE: native powered takeoff, bounded four-metre translation, target hold, contact landing and engine-off; isolated mechanism fixture reset"); + else Print("ERR SMOKE COMPLETE: native pilot-input powered takeoff, hover, contact landing and shutdown; isolated mechanism fixture reset"); + return; + } + if (m_ERRExtractionCase == "local-admission") + { + // Completion is emitted by the calling tick after synchronous teardown and + // its post-transition invariants; a terminal event alone is insufficient. + ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1700, "local admission fixture received its production fail-closed transition"); + return; + } + if (m_ERRExtractionCase == "early-helicopter-loss") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 201 && Players().HasSurvivor() && Extraction().State() == ERR_ExtractionState.LOST, "lost helicopter ends prison phase despite a living prisoner")) return; + ERR_FailureGameOverScreenInfo result = new ERR_FailureGameOverScreenInfo(); + if (!ERR_BaseCheck(EndReason().Contains("helicopter was lost") && result.GetDebriefing(0, null) == EndReason(), "early loss has a specific replicated and debriefing reason")) return; + Print("ERR SMOKE COMPLETE: early extraction vehicle loss"); + return; + } + if (m_ERRExtractionCase == "casualty-service") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1402, "casualty service fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native casualty service with helper-only identity adapter; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "radio-document-loss" || m_ERRExtractionCase == "radio-document-loss-partial") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1302, "radio document-loss fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native " + m_ERRExtractionCase + "; reset requested by fixture"); + return; + } + + if (m_ERRExtractionCase == "guard-cancel") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1502, "guard cancellation fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native guard-cancel; reset requested by fixture"); + return; + } + + if (m_ERRExtractionCase == "prisoner-kit") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 702, "prisoner-kit fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native prisoner-kit; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "medical") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 602, "medical fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native medical; reset requested by fixture"); + return; + } + if ((m_ERRExtractionCase == "casualty-load" || m_ERRExtractionCase == "casualty-direct" || m_ERRExtractionCase == "casualty-bench" || m_ERRExtractionCase == "casualty-remove")) + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 802, "casualty-load fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native " + m_ERRExtractionCase + "; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "environment-restart") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1202, "environment restart round finished before explicit test reset")) return; + PrintFormat("ERR SMOKE COMPLETE: environment restart round %1; reset requested by fixture", m_ERRBaseEnvironmentRestartProbe.Round()); + return; + } + if (m_ERRExtractionCase == "environment") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1002, "environment fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native environment; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "patrols") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1102, "both patrol routes finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native finite patrol routes and cleanup; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "recovery") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 502 && EndReason().Contains("administrator abandoned"), "explicit authorized abandonment uses normal defeat result")) return; + if (!ERR_BaseCheck(!RecoveryStatus().IsEmpty() && !AbandonRound(), "terminal event observes active warning and rejects repeated abandonment")) return; + Print("ERR SMOKE COMPLETE: recovery status and explicit administrator abandonment"); + return; + } + if (m_ERRExtractionCase == "objective-ui") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 902, "objective UI fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native objective UI close, reopen and deleted-task cleanup; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "lifecycle") + { + if (!ERR_BaseCheck(m_ERRBaseStep == 402, "lifecycle fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: native lifecycle admission guards; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "transport-loss") + { + if (!ERR_BaseCheck(m_ERRBaseStep == 302, "transport fixture finished before explicit test reset")) return; + Print("ERR SMOKE COMPLETE: finite native ground transport; reset requested by fixture"); + return; + } + if (m_ERRExtractionCase == "extraction-capacity") + { + if (!ERR_BaseCheck(m_ERRBaseStep == 202, "capacity fixture finished before its explicit test reset")) return; + Print("ERR SMOKE COMPLETE: physical capacity and isolated extraction results; reset requested by fixture"); + return; + } + if (!ERR_BaseCheck(current == ERR_Phase.VICTORY && m_ERRBaseStep == 5, "escape and restart reached without companion services")) return; + Print("ERR SMOKE COMPLETE: core-only escape"); + } + protected void ERR_BaseTick() + { + float now = GetWorld().GetWorldTime(); + if (ERR_NativeProgressionIdentityProbe.Failed()) { ERR_BaseCheck(false, "native progression identity rejection fixture"); return; } + if (now > m_ERRBaseDeadline) { ERR_BaseCheck(false, "timeout at " + m_ERRBaseStep.ToString()); return; } + if (m_ERRExtractionCase == "extraction-startup-failure" || m_ERRExtractionCase == "extraction-boundary-failure") + { + if (PreparationError().IsEmpty()) return; + if (!ERR_BaseCheck(Phase() == ERR_Phase.PREPARING && !Active() && m_Stopped, "invalid extraction setup never starts gameplay")) return; + array players = {}; + ERR_Actors.Players(players); + if (!ERR_BaseCheck(players.IsEmpty() && Sites() && Sites().Count() == 0 && m_OwnedEntities.IsEmpty() && !ExtractionVehicle(), "late startup failure rolls back all authored stock, scenery, groups and vehicle")) return; + if (!ERR_BaseCheck(PreparationError().Contains("twelve") && !Transition(ERR_Phase.PRISON), "invalid extraction retains actionable diagnosis and blocks progression")) return; + GetGame().GetCallqueue().Remove(ERR_BaseTick); + Print("ERR SMOKE COMPLETE: expected late extraction startup failure"); + return; + } + if (m_ERRStartupFailure) + { + if (PreparationError().IsEmpty()) return; + if (!ERR_BaseCheck(Phase() == ERR_Phase.PREPARING && !Active() && m_Stopped, "invalid faction setup stops services without starting the mission")) return; + array players = {}; + ERR_Actors.Players(players); + if (!ERR_BaseCheck(players.IsEmpty() && !Sites() && m_OwnedEntities.IsEmpty(), "failed setup spawns no players, sites or supplies")) return; + array replies = {}; + Admin().Execute(this, true, "status", replies); + if (!ERR_BaseCheck(replies.Count() == 1 && replies[0].Contains("configured player and enemy factions"), "administrator receives retained startup failure cause")) return; + if (!ERR_BaseCheck(!Transition(ERR_Phase.PRISON) && !Transition(ERR_Phase.EXTRACTION), "failed preparation cannot be advanced into gameplay")) return; + GetGame().GetCallqueue().Remove(ERR_BaseTick); + Print("ERR SMOKE COMPLETE: expected startup-failure"); + return; + } + if (m_ERRBaseStep == 2000) + { + int result = m_ERRItemStationTeardownProbe.Tick(now); + if (result < 0) { ERR_BaseCheck(false, "native isolated station teardown fixture"); return; } + if (result == 1) { m_ERRBaseStep = 2002; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 1900) + { + int result = m_ERRPrisonBreachProbe.Tick(now); + if (result < 0) { ERR_BaseCheck(false, "native destroyed-gate progression fixture"); return; } + if (result == 1) { m_ERRBaseStep = 1902; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 1800) + { + int result = m_ERRPoweredFlightProbe.Tick(now); + if (result < 0) { ERR_BaseCheck(false, "native powered-flight feasibility fixture"); return; } + if (result == 1) { m_ERRBaseStep = 1802; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 1700) + { + int result = m_ERRLocalAdmissionProbe.Tick(now); + if (result < 0) { ERR_StopHealthProbes(); GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) + { + m_ERRBaseStep = 1702; + GetGame().GetCallqueue().Remove(ERR_BaseTick); + Print("ERR SMOKE COMPLETE: native local admission callback replay and fail-closed method injection; not multiplayer evidence"); + } + return; + } + if (m_ERRBaseStep == 1400) + { + int result = m_ERRCasualtyServiceProbe.Tick(now); + if (result < 0) { ERR_BaseCheck(false, "casualty service fixture failed"); return; } + if (result == 1) { m_ERRBaseStep = 1402; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 1300) + { + int result = m_ERRObjectiveLossProbe.Tick(now); + if (result < 0) { ERR_StopHealthProbes(); GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 1302; Transition(ERR_Phase.DEFEAT); } + return; + } + + if (m_ERRBaseStep == 1500) + { + int result = m_ERRGuardCancelProbe.Tick(now); + if (result < 0) { ERR_StopHealthProbes(); GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 1502; Transition(ERR_Phase.DEFEAT); } + return; + } + + if (m_ERRBaseStep == 700) + { + int result = m_ERRPrisonerProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 702; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 600) + { + int result = m_ERRBaseMedicalProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 602; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 800) + { + int result = m_ERRCasualtyLoadProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 802; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 1200) + { + int result = m_ERRBaseEnvironmentRestartProbe.Tick(now); + if (result < 0) { ERR_BaseCheck(false, "environment restart fixture failed"); return; } + if (result == 1) { m_ERRBaseStep = 1202; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 1000) + { + int result = m_ERRBaseEnvironmentProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 1002; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 1100) + { + int east = m_ERRPatrolEast.Tick(now); + int west = m_ERRPatrolWest.Tick(now); + if (east < 0 || west < 0) { ERR_StopHealthProbes(); GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (east == 1 && west == 1) + { + if (!ERR_NativePatrolProbe.StopChecks(this)) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + m_ERRBaseStep = 1102; Transition(ERR_Phase.DEFEAT); + } + return; + } + if (m_ERRBaseStep == 500) + { + int result = m_ERRRecoveryProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) + { + m_ERRBaseStep = 502; + array replies = {}; + Admin().Execute(this, true, "mission abandon", replies); + ERR_BaseCheck(Phase() == ERR_Phase.DEFEAT && replies.Count() == 1 && replies[0].Contains("Round abandoned") && RecoveryStatus().IsEmpty() && Recovery().Conscious() == 0 && Recovery().Incapacitated() == 0, "administrator command returns accepted outcome after recovery cleanup"); + } + return; + } + if (m_ERRBaseStep == 400) + { + int result = m_ERRLifecycleProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 402; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 300) + { + int result = m_ERRTransportProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 302; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 200) + { + int result = m_ERRExtractionProbe.Tick(now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 202; Transition(ERR_Phase.DEFEAT); } + return; + } + if (m_ERRBaseStep == 901) + { + int result = ERR_NativeObjectiveProbe.TickCloseReopen(this, now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) + { + if (m_ERRExtractionCase == "objective-ui") + { + if (!ERR_NativeObjectiveProbe.BeginDeletedTaskClose(this, now)) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + m_ERRBaseStep = 903; + } + else { m_ERRObjectiveCloseChecked = true; m_ERRBaseStep = 0; } + } + return; + } + if (m_ERRBaseStep == 903) + { + int result = ERR_NativeObjectiveProbe.TickDeletedTaskClose(this, now); + if (result < 0) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 1) { m_ERRBaseStep = 902; Transition(ERR_Phase.DEFEAT); } + return; + } + if (now < m_ERRBaseWait) return; + if (m_ERRBaseStep == 0) + { + array players = {}; + ERR_Actors.Players(players, true); + if (players.Count() != 1 || Phase() != ERR_Phase.PRISON) return; + m_ERRBasePlayer = players[0]; + if (!m_ERRCatalogChecked) + { + if (!ERR_NativeFactionCatalogProbe.Run(this)) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + m_ERRCatalogChecked = true; + } + if (!m_ERRDiscoveryMapChecked) + { + if (!ERR_NativeDiscoveryMapProbe.Run()) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + m_ERRDiscoveryMapChecked = true; + } + if (m_ERRExtractionCase == "station-teardown") + { + m_ERRItemStationTeardownProbe = new ERR_NativeItemStationTeardownProbe(); + m_ERRBaseStep = 2000; + return; + } + if (m_ERRExtractionCase == "prison-breach") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRPrisonBreachProbe = new ERR_NativePrisonBreachProbe(this, m_ERRBasePlayer); + m_ERRBaseStep = 1900; + return; + } + if (m_ERRExtractionCase == "powered-flight" || m_ERRExtractionCase == "powered-translate") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRPoweredFlightProbe = new ERR_NativePoweredFlightProbe(this); + string autohoverMode; + if (System.GetCLIParam("errFlightAutohover", autohoverMode) && autohoverMode == "1") + if (!ERR_BaseCheck(m_ERRPoweredFlightProbe.SetAutohoverMode(true), "owned native autohover experiment selected before allocation")) return; + m_ERRBaseDeadline = now + 250000; + m_ERRBaseStep = 1800; + return; + } + if (m_ERRExtractionCase == "local-admission") + { + m_ERRLocalAdmissionProbe = new ERR_NativeLocalAdmissionProbe(this); + m_ERRBaseStep = 1700; + return; + } + if (m_ERRExtractionCase == "casualty-service") + { + m_ERRCasualtyServiceProbe = new ERR_NativeCasualtyServiceProbe(this); + m_ERRBaseStep = 1400; + return; + } + if (m_ERRExtractionCase == "radio-document-loss" || m_ERRExtractionCase == "radio-document-loss-partial") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRObjectiveLossProbe = new ERR_NativeObjectiveLossProbe(this, m_ERRBasePlayer, m_ERRExtractionCase == "radio-document-loss-partial"); + m_ERRBaseStep = 1300; + return; + } + + if (m_ERRExtractionCase == "guard-cancel") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRGuardCancelProbe = new ERR_NativeGuardCancelProbe(this); + m_ERRBaseStep = 1500; + return; + } + + if (m_ERRExtractionCase == "prisoner-kit") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRPrisonerProbe = new ERR_NativePrisonerProbe(this, m_ERRBasePlayer); + m_ERRBaseStep = 700; + return; + } + if (m_ERRExtractionCase == "medical") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRBaseMedicalProbe = new ERR_NativeMedicalProbe(this); + m_ERRBaseStep = 600; + return; + } + if ((m_ERRExtractionCase == "casualty-load" || m_ERRExtractionCase == "casualty-direct" || m_ERRExtractionCase == "casualty-bench" || m_ERRExtractionCase == "casualty-remove")) + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + if (m_ERRExtractionCase == "casualty-remove") m_ERRCasualtyLoadProbe = new ERR_NativeCasualtyRemoveProbe(this); + else m_ERRCasualtyLoadProbe = new ERR_NativeCasualtyLoadProbe(this, m_ERRExtractionCase != "casualty-load", m_ERRExtractionCase == "casualty-bench"); + m_ERRBaseStep = 800; + return; + } + if (m_ERRExtractionCase == "environment-restart") + { + if (!ERR_BaseCheck(m_ERRBaseEnvironmentRestartProbe != null, "environment restart selected isolated settings before mode initialization")) return; + m_ERRBaseStep = 1200; + return; + } + if (m_ERRExtractionCase == "environment") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRBaseEnvironmentProbe = new ERR_NativeEnvironmentProbe(this); + m_ERRBaseStep = 1000; + return; + } + if (m_ERRExtractionCase == "patrols") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRPatrolEast = new ERR_NativePatrolProbe(this, "everon-outpost-1"); + m_ERRPatrolWest = new ERR_NativePatrolProbe(this, "everon-supply-2"); + m_ERRBaseStep = 1100; + return; + } + if (m_ERRExtractionCase == "recovery") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRRecoveryProbe = new ERR_NativeRecoveryProbe(this, m_ERRBasePlayer); + m_ERRBaseStep = 500; + return; + } + if (m_ERRExtractionCase == "lifecycle") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRLifecycleProbe = new ERR_NativeLifecycleProbe(this, m_ERRBasePlayer); + m_ERRBaseStep = 400; + return; + } + if (m_ERRExtractionCase == "transport-survey") + { + ERR_NativeTransportSurvey.Run(this); + GetGame().GetCallqueue().Remove(ERR_BaseTick); + return; + } + if (m_ERRExtractionCase == "transport-loss") + { + m_ERRTransportProbe = new ERR_NativeTransportProbe(this); + m_ERRBaseStep = 300; + return; + } + if (m_ERRExtractionCase == "early-helicopter-loss") + { + if (!ERR_BaseCheck(Extraction().Ready() && Players().HasSurvivor(), "ready helicopter and living prisoner before deliberate loss")) return; + m_ERRBaseStep = 201; + ERR_Actors.DeleteSpawned(ExtractionVehicle()); + return; + } + if (m_ERRExtractionCase == "extraction-capacity") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRExtractionProbe = new ERR_NativeExtractionProbe(this); + m_ERRBaseStep = 200; + return; + } + string survey; + if (System.GetCLIParam("errSmokeOutcome", survey) && survey == "site-survey") + { + ERR_NativeSiteSurvey probe = new ERR_NativeSiteSurvey(); + probe.Run(); + GetGame().GetCallqueue().Remove(ERR_BaseTick); + return; + } + if (!m_ERRObjectiveCloseChecked) + { + if (!ERR_NativeObjectiveProbe.BeginCloseReopen(this, now)) { GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + m_ERRBaseStep = 901; + return; + } + if (!ERR_NativeAdminSettingsProbe.Run(this) || !ERR_NativeDefinitionProbe.Run() || !ERR_NativeContractsProbe.Run(this, m_ERRBasePlayer) || !ERR_BaseCover() || !ERR_NativeTimeProbe.Run(this)) return; + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + if (!ERR_BaseCheck(Objectives() && Objectives().Current() && Objectives().Current().GetTaskName() == "Escape the prison", "native prison objective exists")) return; + if (!ERR_NativeObjectiveProbe.Observe(this)) return; + ERR_SiteRuntime cache = Sites().Find(m_ERRActiveCacheId); + if (!ERR_BaseCheck(Sites().Count() == 7 && cache && cache.Container && vector.DistanceXZ(cache.Container.GetOrigin(), PrisonPosition()) > 100, "authored supply cache is a separate scavenging location")) return; + array stock = {}; + ERR_Inventory.Items(InventoryStorageManagerComponent.Cast(cache.Container.FindComponent(InventoryStorageManagerComponent)), stock); + PrintFormat("ERR BASE STOCK: cache items=%1", stock.Count()); + int expectedStock; + foreach (ERR_SiteStock entry : cache.Definition.Stock) expectedStock += entry.Count; + if (!ERR_BaseCheck(stock.Count() >= expectedStock, "cache holds finite physical equipment and objective documents")) return; + if (!ERR_BaseCheck(Command() == null, "no companion HQ or support controller loaded")) return; + if (!ERR_BaseCheck(vector.DistanceXZ(m_ERRBasePlayer.GetOrigin(), PrisonPosition()) < 5, "prisoner spawned in authored prison")) return; + foreach (ERR_LocationComponent location : m_Locations) + if (location.Kind() == ERR_LocationKind.RADIO) m_ERRBaseRadio = location; + ERR_UnlockPrisonAction lock; + foreach (IEntity entity : m_OwnedEntities) + { + if (!entity) continue; + if (!lock) lock = ERR_BaseLock(entity); + } + foreach (IEntity item : stock) + if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == ERR_Resources.ObjectiveDocument()) m_ERRBaseDocuments.Insert(item); + if (m_ERRCacheLoss) + { + ERR_Actors.DeleteSpawned(Sites().Find("everon-supply-1").Container); + if (!ERR_BaseCheck(!Sites().Find("everon-supply-1").Container, "primary cache lost before any clues are recovered")) return; + } + if (!ERR_BaseCheck(lock && m_ERRBaseRadio && m_ERRBaseDocuments.Count() == 2 && ERR_Actors.Alive(ExtractionVehicle()), "gate, clues, radio and helicopter created by core")) return; + if (!ERR_NativeProgressionIdentityProbe.Begin(this, m_ERRBasePlayer)) { ERR_BaseCheck(false, "native progression identity gate baseline"); return; } + ERR_BaseMove(lock.GetOwner().GetOrigin() + "1 0 1"); + lock.PerformAction(lock.GetOwner(), m_ERRBasePlayer); + if (!ERR_BaseCheck(Phase() == ERR_Phase.RADIO_SEARCH, "gate action begins escape")) return; + if (!ERR_BaseCheck(m_Settings.Set("radioDefenceSeconds", 30), "test defence duration accepted")) return; + SCR_Task prisonTask = SCR_TaskSystem.GetTaskFromTaskID(ERR_Objectives.Id(ERR_Phase.PRISON), false); + if (!ERR_BaseCheck(prisonTask && prisonTask.GetTaskState() == SCR_ETaskState.COMPLETED, "previous native objective completes on phase change")) return; + if (!ERR_BaseCheck(Objectives().Current().GetTaskUIVisibility() == SCR_ETaskUIVisibility.LIST_ONLY, "search objective does not expose a hidden site")) return; + if (!ERR_NativeObjectiveProbe.Observe(this)) return; + if (!ERR_BaseCheck(Sites().Find("everon-supply-1").Location.Knowledge() == 2 && Sites().Find("everon-supply-2").Location.Knowledge() == 2, "both named supply routes revealed after escape")) return; + ERR_SiteRuntime medical = Sites().Find("everon-medical-1"); + if (!ERR_BaseCheck(medical.Location.Knowledge() == 0 && Sites().Find("everon-outpost-1").Location.Knowledge() == 0, "optional sites remain hidden until approached")) return; + ERR_BaseMove(medical.Location.Position() + "0 0 8"); + CharacterControllerComponent.Cast(m_ERRBasePlayer.FindComponent(CharacterControllerComponent)).SetUnconscious(true); + m_ERRBaseStep = 10; + m_ERRBaseWait = now + 6000; + } + else if (m_ERRBaseStep == 10) + { + ERR_SiteRuntime medical = Sites().Find("everon-medical-1"); + if (!ERR_BaseCheck(medical.Location.Knowledge() == 0 && !Sites().CanObserve(m_ERRBasePlayer, medical), "unconscious player cannot discover optional sites")) return; + CharacterControllerComponent.Cast(m_ERRBasePlayer.FindComponent(CharacterControllerComponent)).SetUnconscious(false); + ERR_BaseMove(medical.Location.Position() + "0 0 65"); + m_ERRBaseStep = 11; + m_ERRBaseWait = now + 6000; + } + else if (m_ERRBaseStep == 11) + { + ERR_SiteRuntime medical = Sites().Find("everon-medical-1"); + if (!ERR_BaseCheck(medical.Location.Knowledge() == 0 && !Sites().CanObserve(m_ERRBasePlayer, medical), "distant player cannot discover optional sites")) return; + ERR_BaseMove(medical.Location.Position() + "0 0 8"); + m_ERRSightBlocker = ERR_Actors.Spawn("{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et", ERR_Actors.Ground(medical.Location.Position() + "-1.5 0 4")); + if (!ERR_BaseCheck(m_ERRSightBlocker != null, "isolated visibility obstacle created")) return; + Own(m_ERRSightBlocker); + vector low, high; + m_ERRSightBlocker.GetWorldBounds(low, high); + PrintFormat("ERR VISIBILITY OBSTACLE: low=%1 high=%2 observer=%3 target=%4", low, high, m_ERRBasePlayer.GetOrigin(), medical.Location.Position()); + m_ERRBaseStep = 115; + m_ERRBaseWait = now + 6000; + } + else if (m_ERRBaseStep == 115) + { + ERR_SiteRuntime medical = Sites().Find("everon-medical-1"); + if (!ERR_BaseCheck(medical.Location.Knowledge() == 0 && !Sites().CanObserve(m_ERRBasePlayer, medical), "physical wall prevents nearby site discovery")) return; + ERR_Actors.DeleteSpawned(m_ERRSightBlocker); + m_ERRBaseStep = 12; + m_ERRBaseWait = now + 6000; + } + else if (m_ERRBaseStep == 12) + { + ERR_SiteRuntime medical = Sites().Find("everon-medical-1"); + if (!ERR_BaseCheck(medical.Location.Knowledge() == 2 && medical.Location.Label() == "Medical stash" && m_ERRMedicalDiscoveries == 1, "conscious nearby player visually discovers named medical stash once")) return; + if (!ERR_BaseCheck(!Sites().CanObserve(m_ERRBasePlayer, Sites().Find("everon-radio-1")), "distant medical-site discovery does not reveal the radio")) return; + m_ERRBaseStep = 1; + } + else if (m_ERRBaseStep == 1 || m_ERRBaseStep == 2) + { + ERR_BaseMove(Sites().Find(m_ERRActiveCacheId).Container.GetOrigin() + "0 0 2"); + SCR_InventoryStorageManagerComponent inventory = SCR_InventoryStorageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(SCR_InventoryStorageManagerComponent)); + InventoryStorageManagerComponent source = InventoryStorageManagerComponent.Cast(Sites().Find(m_ERRActiveCacheId).Container.FindComponent(InventoryStorageManagerComponent)); + BaseInventoryStorageComponent destination = inventory.FindStorageForItem(m_ERRBaseDocuments[m_ERRBaseStep - 1]); + if (!ERR_BaseCheck(destination && source.TryMoveItemToStorage(m_ERRBaseDocuments[m_ERRBaseStep - 1], destination), "physical clue recovered")) return; + m_ERRBaseStep++; + m_ERRBaseWait = now + 2500; + } + else if (m_ERRBaseStep == 3) + { + if (!ERR_BaseCheck(Objectives().Current().GetTaskDescription().Contains("The radio station is identified on your map. Reach"), "objective guidance reacts to discovered radio")) return; + if (!ERR_NativeObjectiveProbe.Observe(this)) return; + ERR_SiteRuntime cache = Sites().Find(m_ERRActiveCacheId); + array stock = {}; + ERR_Inventory.Items(InventoryStorageManagerComponent.Cast(cache.Container.FindComponent(InventoryStorageManagerComponent)), stock); + foreach (IEntity item : stock) if (item) SCR_EntityHelper.DeleteEntityAndChildren(item); + if (!ERR_BaseCheck(m_ERRMedicalDiscoveries == 1, "discovery ticks do not repeat the location event")) return; + if (m_ERRCacheLoss && !ERR_BaseCheck(!Sites().Find("everon-supply-1").Container, "lost primary cache stays absent while alternate documents identify the radio")) return; + if (!ERR_BaseCheck(ERR_NativeProgressionIdentityProbe.DocumentPassed(), "actual held-document rejection and restored recovery were exercised this round")) return; + if (!ERR_BaseCheck(m_ERRBaseRadio.Knowledge() == 2, "documents identify radio without Intel addon")) return; + ERR_BaseMove(m_ERRBaseRadio.Position() + "2 0 0"); + m_ERRBaseStep = 30; + m_ERRBaseWait = now + 1000; + } + else if (m_ERRBaseStep == 30) + { + m_ERRBaseRadioProbe = new ERR_NativeRadioDefenceProbe(this, m_ERRBasePlayer, m_ERRBaseRadio); + m_ERRBaseStep = 301; + } + else if (m_ERRBaseStep == 301) + { + int result = m_ERRBaseRadioProbe.Tick(now); + if (result < 0) { ERR_StopRadioProbe(); GetGame().GetCallqueue().Remove(ERR_BaseTick); return; } + if (result == 0) return; + if (!ERR_BaseCheck(RadioFeedback() == ERR_RadioFeedback.INACTIVE, "radio feedback remains inactive before tuning")) return; + if (!ERR_BaseCheck(TuneRadio(m_ERRBasePlayer, m_ERRBaseRadio), "identified radio accepts transmission")) return; + if (!ERR_BaseCheck(RadioFeedback() == ERR_RadioFeedback.WAITING && ERR_ObjectiveText.Description(this, false).Contains("Waiting for"), "radio feedback publishes waiting before first occupancy sample")) return; + m_ERRBaseStep = 31; + m_ERRBaseWait = now + 5000; + } + else if (m_ERRBaseStep == 31) + { + ERR_SiteRuntime cache = Sites().Find(m_ERRActiveCacheId); + array stock = {}; + ERR_Inventory.Items(InventoryStorageManagerComponent.Cast(cache.Container.FindComponent(InventoryStorageManagerComponent)), stock); + if (!ERR_BaseCheck(stock.IsEmpty() && Sites().Prepare() == ERR_PrepareResult.READY, "depleted stock stays empty when preparation is queried again")) return; + ERR_Actors.DeleteSpawned(cache.Container); + if (!ERR_BaseCheck(DefenceOccupied() && DefenceSecondsRemaining() > 0 && DefenceSecondsRemaining() < 30 && Objectives().Current().GetTaskDescription().Contains("seconds remaining"), "native objective reports advancing radio progress")) return; + if (!ERR_BaseCheck(RadioFeedback() == ERR_RadioFeedback.TRANSMITTING && ERR_ObjectiveText.Description(this, false).Contains("Transmission in progress"), "radio guide reports transmitting without querying a countdown")) return; + if (!ERR_NativeObjectiveProbe.Observe(this)) return; + CharacterControllerComponent.Cast(m_ERRBasePlayer.FindComponent(CharacterControllerComponent)).SetUnconscious(true); + m_ERRBaseStep = 310; + m_ERRBaseWait = now + 35000; + } + else if (m_ERRBaseStep == 310) + { + CharacterControllerComponent controller = CharacterControllerComponent.Cast(m_ERRBasePlayer.FindComponent(CharacterControllerComponent)); + if (!ERR_BaseCheck(controller.IsUnconscious() && ERR_Actors.Alive(m_ERRBasePlayer) && Players().HasSurvivor() && Phase() == ERR_Phase.RADIO_DEFENCE, "unconscious survivor does not trigger defeat after the full grace period")) return; + if (!ERR_BaseCheck(!DefenceOccupied() && DefenceSecondsRemaining() == 30, "unconscious radio defender cannot advance transmission")) return; + if (!ERR_BaseCheck(RadioFeedback() == ERR_RadioFeedback.INTERRUPTED && ERR_ObjectiveText.Description(this, false).Contains("Progress has reset"), "radio guide reports interruption after unconsciousness")) return; + SCR_PlayerController playerController = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + if (!ERR_BaseCheck(playerController.GetControlledEntity() == m_ERRBasePlayer && playerController.ERR_ObserverState() == ERR_ObserverReason.NONE && !playerController.ERR_HasObserverCamera(), "unconscious player retains their body and camera")) return; + controller.SetUnconscious(false); + m_ERRBaseStep = 311; + m_ERRBaseWait = now + 6000; + } + else if (m_ERRBaseStep == 311) + { + if (!ERR_BaseCheck(ERR_Actors.CanFight(m_ERRBasePlayer) && DefenceOccupied() && DefenceSecondsRemaining() < 30, "regaining consciousness resumes transmission from zero")) return; + if (!ERR_BaseCheck(RadioFeedback() == ERR_RadioFeedback.TRANSMITTING && ERR_ObjectiveText.Description(this, false).Contains("Transmission in progress"), "radio guide returns to transmitting after recovery")) return; + int playerId = GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(m_ERRBasePlayer); + if (!ERR_BaseCheck(!Players().CanEnter(playerId, Phase()), "regaining consciousness does not grant another life")) return; + ERR_BaseMove(m_ERRBaseRadio.Position() + "90 0 0"); + m_ERRBaseStep = 32; + m_ERRBaseWait = now + 2500; + } + else if (m_ERRBaseStep == 32) + { + if (!ERR_BaseCheck(!Sites().Find(m_ERRActiveCacheId).Container, "lost supply cache is not replaced")) return; + if (!ERR_BaseCheck(!DefenceOccupied() && DefenceSecondsRemaining() == 30 && Objectives().Current().GetTaskDescription().Contains("interrupted"), "objective reports interruption and reset")) return; + if (!ERR_BaseCheck(RadioFeedback() == ERR_RadioFeedback.INTERRUPTED && ERR_ObjectiveText.Description(this, false).Contains("Return a conscious survivor"), "radio guide reports interruption after leaving the area")) return; + if (!ERR_NativeObjectiveProbe.Observe(this)) return; + ERR_BaseMove(m_ERRBaseRadio.Position() + "2 0 0"); + m_ERRBaseStep = 4; + m_ERRBaseWait = now + 33000; + } + else if (m_ERRBaseStep == 4) + { + if (!ERR_BaseCheck(Phase() == ERR_Phase.EXTRACTION, "radio defence reveals extraction") || !ERR_NativeTimeProbe.VerifyProgression(this)) return; + if (!ERR_BaseCheck(RadioFeedback() == ERR_RadioFeedback.INACTIVE, "radio feedback clears after completion")) return; + if (!ERR_NativeObjectiveProbe.Observe(this)) return; + CompartmentAccessComponent access = CompartmentAccessComponent.Cast(m_ERRBasePlayer.FindComponent(CompartmentAccessComponent)); + BaseCompartmentSlot slot = access.FindFreeCompartment(ExtractionVehicle(), ECompartmentType.PILOT); + if (!ERR_BaseCheck(slot && access.GetInVehicle(ExtractionVehicle(), slot, true, -1, ECloseDoorAfterActions.INVALID, false), "player physically boards extraction helicopter")) return; + m_ERRBaseStep = 5; + m_ERRBaseWait = now + 3000; + } + else if (m_ERRBaseStep == 5) + { + if (!ERR_BaseCheck(CompartmentAccessComponent.GetVehicleIn(m_ERRBasePlayer) == ExtractionVehicle(), "extraction requires real occupancy")) return; + vector transform[4]; + ExtractionVehicle().GetWorldTransform(transform); + transform[3] = m_EscapeCenter + Vector(m_EscapeRadius + 100, 150, 0); + ExtractionVehicle().SetWorldTransform(transform); + m_ERRBaseWait = now + 4000; + } + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c new file mode 100644 index 0000000..5320e4c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c @@ -0,0 +1,80 @@ +#ifdef WORKBENCH +// Positive check observes production initial placement; the fixture never wakes +// the mission helicopter. Negative transforms +// and velocity are applied only to an independent, disposable empty aircraft. +class ERR_NativeCasualtyGroundProbe +{ + protected ERR_GameMode m_Mode; + protected Vehicle m_Negative; + protected float m_Wait; + protected float m_Deadline; + protected int m_Step; + protected bool m_Stopped; + void ERR_NativeCasualtyGroundProbe(ERR_GameMode mode) { m_Mode = mode; } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + ERR_Actors.DeleteSpawned(m_Negative); m_Negative = null; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: casualty ground " + detail); return true; } + Print("ERR SMOKE FAIL: casualty ground " + detail, LogLevel.ERROR); Stop(); return false; + } + int Tick(float now) + { + if (m_Stopped) return -1; + if (m_Deadline > 0 && now > m_Deadline) { Check(false, "bounded ground-support probe deadline"); return -1; } + if (now < m_Wait) return 0; + if (m_Step == 0) + { + Vehicle parked = m_Mode.ExtractionVehicle(); + ERR_SiteService sites = m_Mode.Sites(); + ERR_ExtractionPlacement placement; + if (sites) placement = sites.ExtractionPlacement(); + if (!Check(placement && placement.Ready() && placement.WakeCount() == 1, "production initial placement completed with exactly one wake before player spawn")) return -1; + bool support = ERR_CasualtyGroundSupport.Parked(parked, true); + HelicopterControllerComponent controller = HelicopterControllerComponent.Cast(parked.FindComponent(HelicopterControllerComponent)); + bool nativeContact = controller && controller.GetSimulation() && controller.GetSimulation().HasAnyGroundContact(); + if (!Check((nativeContact || support) && ERR_CasualtyLoadingRules.AircraftReady(parked), "naturally settled mission aircraft has native landing contact or three strict wheel supports")) return -1; + vector raised = parked.GetOrigin() + "0 20 0"; + m_Negative = Vehicle.Cast(ERR_Actors.Spawn(m_Mode.Factions().ExtractionPrefab, raised)); + if (!Check(m_Negative != null, "separate empty airborne aircraft created for rejection checks")) return -1; + m_Mode.Own(m_Negative); + DamageManagerComponent damage = DamageManagerComponent.Cast(m_Negative.FindComponent(DamageManagerComponent)); + if (!Check(damage != null, "negative aircraft damage manager available")) return -1; + damage.EnableDamageHandling(false); + m_Deadline = now + 10000; m_Wait = now + 500; m_Step = 1; return 0; + } + if (m_Step == 1) + { + vector position = m_Negative.GetOrigin(); + float height = position[1] - GetGame().GetWorld().GetSurfaceY(position[0], position[2]); + bool support = ERR_CasualtyGroundSupport.Parked(m_Negative, true); + PrintFormat("ERR GROUND NEGATIVE: raisedPosition=%1 terrainClearance=%2", position, height); + if (!Check(ERR_Actors.Alive(m_Negative) && height > 5 && !support && !ERR_CasualtyLoadingRules.AircraftReady(m_Negative), "living aircraft above terrain is rejected even if stationary or sleeping")) return -1; + vector tilted[4]; Math3D.AnglesToMatrix("0 0 90", tilted); tilted[3] = position; + m_Negative.SetWorldTransform(tilted); + m_Wait = now + 500; m_Step = 2; return 0; + } + if (m_Step == 2) + { + vector actual[4]; m_Negative.GetWorldTransform(actual); + Physics physics = m_Negative.GetPhysics(); + if (!Check(physics != null, "negative aircraft has actual native physics")) return -1; + PrintFormat("ERR GROUND NEGATIVE: tiltedUp=%1 position=%2", actual[1][1], actual[3]); + if (!Check(ERR_Actors.Alive(m_Negative) && actual[1][1] < 0.85 && !ERR_CasualtyLoadingRules.AircraftMotion(true, actual[1][1], 0, 0) && !ERR_CasualtyLoadingRules.AircraftReady(m_Negative), "actual tilted aircraft is rejected independently by upright policy")) return -1; + // Read back an actual native velocity on the disposable clone. No mission + // aircraft activation, simulation state, engine or velocity is changed. + physics.SetVelocity("2 0 0"); + float speed = physics.GetVelocity().Length(); + PrintFormat("ERR GROUND NEGATIVE: nativeSpeed=%1", speed); + if (!Check(speed > 0.5 && !ERR_CasualtyLoadingRules.AircraftMotion(true, 1, speed, 0) && !ERR_CasualtyLoadingRules.AircraftReady(m_Negative), "actual native velocity is rejected independently by movement policy")) return -1; + if (!Check(ERR_Actors.Alive(m_Mode.ExtractionVehicle()) && ERR_CasualtyLoadingRules.AircraftReady(m_Mode.ExtractionVehicle()), "mission aircraft remains untouched and eligible after negative checks")) return -1; + Stop(); return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c new file mode 100644 index 0000000..11882a2 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c @@ -0,0 +1,255 @@ +#ifdef WORKBENCH +// Native mechanism experiment, NOT proof of an available player load/drag action. +// Caller must explicitly opt in and tick this independently of medical fixtures. +class ERR_NativeCasualtyLoadProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Caller; + protected IEntity m_Casualty; + protected Vehicle m_Vehicle; + protected SCR_CompartmentAccessComponent m_Access; + protected SCR_CharacterDamageManagerComponent m_Damage; + protected BaseCompartmentSlot m_Seat; + protected vector m_CallerTransform[4]; + protected vector m_GroundPosition; + protected bool m_CallerMoved; + protected bool m_Direct; + protected bool m_Bench; + protected float m_DownSettledAt; + protected float m_NextDiagnostic; + protected int m_Entered; + protected int m_Left; + protected int m_Step; + protected float m_Deadline; + protected float m_Wait; + + void ERR_NativeCasualtyLoadProbe(ERR_GameMode mode, bool direct = false, bool bench = false) { m_Mode = mode; m_Direct = direct; m_Bench = bench; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: casualty-load " + detail); return true; } + Print("ERR SMOKE FAIL: casualty-load " + detail, LogLevel.ERROR); + Cleanup(); + return false; + } + void Cleanup() + { + if (m_Access) + { + if (m_Access.GetOnCompartmentEntered(false)) m_Access.GetOnCompartmentEntered(false).Remove(Entered); + if (m_Access.GetOnCompartmentLeft(false)) m_Access.GetOnCompartmentLeft(false).Remove(Left); + } + // Restore only the same living local body, never a replacement/reconnected actor. + PlayerController controller = GetGame().GetPlayerController(); + if (m_CallerMoved && m_Caller && controller && controller.GetControlledEntity() == m_Caller && ERR_Actors.Alive(m_Caller) && !CompartmentAccessComponent.GetVehicleIn(m_Caller)) + ChimeraCharacter.Cast(m_Caller).Teleport(m_CallerTransform); + m_CallerMoved = false; + ERR_Actors.DeleteSpawned(m_Casualty); + m_Casualty = null; + } + protected void Entered(IEntity target, BaseCompartmentManagerComponent manager, int managerId, int slotId, bool move) + { + m_Entered++; + PrintFormat("ERR CASUALTY ENTER EVENT: manager=%1 slot=%2 move=%3 targetRoot=%4 count=%5", managerId, slotId, move, target == m_Vehicle, m_Entered); + } + protected void Left(IEntity target, BaseCompartmentManagerComponent manager, int managerId, int slotId, bool move) + { + m_Left++; + PrintFormat("ERR CASUALTY EXIT EVENT: manager=%1 slot=%2 move=%3 targetRoot=%4 count=%5", managerId, slotId, move, target == m_Vehicle, m_Left); + } + protected bool BelongsToAircraft(IEntity entity) + { + while (entity) + { + if (entity == m_Vehicle) return true; + entity = entity.GetParent(); + } + return false; + } + protected BaseCompartmentSlot FindTransportBench() + { + array seats = {}; + m_Mode.Extraction().Seats(seats); + foreach (BaseCompartmentSlot seat : seats) + { + if (!seat || seat.GetType() != ECompartmentType.CARGO || SCR_PatientCompartmentSlot.Cast(seat)) continue; + IEntity owner = seat.GetOwner(); + if (!owner || owner == m_Vehicle || !BelongsToAircraft(owner) || !owner.GetPrefabData()) continue; + ResourceName prefab = owner.GetPrefabData().GetPrefabName(); + // These installed Mi8 seat-part prefabs own the real transport benches. + // No compartment class, animation, accessibility or health setting is changed. + if (!prefab.Contains("VehPart_MI8_seats")) continue; + if (!seat.IsCompartmentAccessible() || seat.IsGetInLockedFor(m_Casualty) || seat.GetOccupant()) continue; + return seat; + } + return null; + } + protected void Trace(string stage) + { + if (!m_Casualty || !m_Access) return; + CharacterControllerComponent controller = CharacterControllerComponent.Cast(m_Casualty.FindComponent(CharacterControllerComponent)); + CharacterAnimationComponent animation = CharacterAnimationComponent.Cast(m_Casualty.FindComponent(CharacterAnimationComponent)); + if (controller && animation) + PrintFormat("ERR CASUALTY STATE: stage=%1 life=%2 ragdoll=%3 falling=%4 physicsLinked=%5 gettingIn=%6 gettingOut=%7", stage, controller.GetLifeState(), animation.IsRagdollActive(), animation.PhysicsIsFalling(), animation.PhysicsIsLinked(), m_Access.IsGettingIn(), m_Access.IsGettingOut()); + if (m_Seat) + { + IEntity owner = m_Seat.GetOwner(); + string prefab; + if (owner && owner.GetPrefabData()) prefab = owner.GetPrefabData().GetPrefabName(); + PrintFormat("ERR CASUALTY SEAT: stage=%1 name=%2 ownerPrefab=%3 rootOwner=%4 hierarchyValid=%5 slotId=%6 managerId=%7", stage, m_Seat.GetCompartmentUniqueName(), prefab, owner == m_Vehicle, BelongsToAircraft(owner), m_Seat.GetCompartmentSlotID(), m_Seat.GetCompartmentMgrID()); + PrintFormat("ERR CASUALTY OCCUPANCY: stage=%1 inCompartment=%2 actualSlot=%3 targetOccupant=%4 vehicleRoot=%5 enterEvents=%6 exitEvents=%7", stage, m_Access.IsInCompartment(), m_Access.GetCompartment() == m_Seat, m_Seat.GetOccupant() == m_Casualty, CompartmentAccessComponent.GetVehicleIn(m_Casualty) == m_Vehicle, m_Entered, m_Left); + } + } + protected bool DownOnGround() + { + CharacterControllerComponent controller = CharacterControllerComponent.Cast(m_Casualty.FindComponent(CharacterControllerComponent)); + return ERR_Actors.Alive(m_Casualty) && controller && controller.GetLifeState() == ECharacterLifeState.INCAPACITATED && !CompartmentAccessComponent.GetVehicleIn(m_Casualty); + } + protected bool IncapacitateGroundCasualty() + { + if (!Check(m_Damage && ERR_Actors.Alive(m_Casualty), "living fixture casualty has native damage manager before incapacitation")) return false; + HitZone resilience = m_Damage.GetResilienceHitZone(); + if (!Check(resilience != null, "fixture casualty has actual native resilience hit zone")) return false; + float beforeResilience = resilience.GetHealth(); + bool damageWasEnabled = m_Damage.IsDamageHandlingEnabled(); + // ForceUnconsciousness uses HandleDamage(TRUE), which damage protection can + // suppress. Permit only this synchronous operation, then restore the flag + // before any assertion/cleanup path. Never restore health or life state. + m_Damage.EnableDamageHandling(true); + m_Damage.ForceUnconsciousness(); + float afterResilience = resilience.GetHealth(); + m_Damage.EnableDamageHandling(damageWasEnabled); + PrintFormat("ERR CASUALTY INCAPACITATION: resilienceBefore=%1 resilienceAfter=%2 damageOriginallyEnabled=%3 restored=%4", beforeResilience, afterResilience, damageWasEnabled, m_Damage.IsDamageHandlingEnabled() == damageWasEnabled); + return Check(afterResilience < beforeResilience && ERR_Actors.Alive(m_Casualty) && m_Damage.IsDamageHandlingEnabled() == damageWasEnabled, "single native incapacitation reduces actual resilience, preserves life and restores damage-protection flag"); + } + protected bool BeginExit() + { + // Native unloading is a separate mechanism check, not a user-action claim. + vector exitTransform[4]; + m_Casualty.GetWorldTransform(exitTransform); + exitTransform[3] = m_GroundPosition; + return Check(m_Access.GetOutVehicle_NoDoor(exitTransform, true, false), "unconscious cargo occupant accepts native ground exit"); + } + protected bool ExitSettled() + { + return ERR_Actors.Alive(m_Casualty) && vector.Distance(m_Casualty.GetOrigin(), m_GroundPosition) < 4 && m_Seat.IsCompartmentAccessible(); + } + protected vector ExpectedExit() { return m_GroundPosition; } + protected string ExitResultDetail() { return "unloaded survivor on ground and seat accessible"; } + // now is world milliseconds, matching the other native probes. Returns -1/0/1. + int Tick(float now) + { + if (now < m_Wait) return 0; + if (m_Step == 0) + { + PlayerController controller = GetGame().GetPlayerController(); + if (!Check(Replication.IsServer() && controller && m_Mode, "server and local real caller available")) return -1; + m_Caller = controller.GetControlledEntity(); + m_Vehicle = m_Mode.ExtractionVehicle(); + if (!Check(ERR_Actors.CanFight(m_Caller) && !CompartmentAccessComponent.GetVehicleIn(m_Caller) && ERR_Actors.Alive(m_Vehicle), "caller on foot and authored helicopter intact")) return -1; + m_GroundPosition = ERR_Actors.Ground(m_Vehicle.GetOrigin() + "6 0 6"); + m_Casualty = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, m_GroundPosition); + if (!Check(m_Casualty != null, "independent casualty spawned on ground")) return -1; + m_Mode.Own(m_Casualty); + m_Access = SCR_CompartmentAccessComponent.Cast(m_Casualty.FindComponent(SCR_CompartmentAccessComponent)); + m_Damage = SCR_CharacterDamageManagerComponent.Cast(m_Casualty.FindComponent(SCR_CharacterDamageManagerComponent)); + if (!Check(m_Access && m_Damage, "native casualty components present")) return -1; + m_Access.GetOnCompartmentEntered().Insert(Entered); + m_Access.GetOnCompartmentLeft().Insert(Left); + m_Caller.GetWorldTransform(m_CallerTransform); + vector helperTransform[4]; + m_Caller.GetWorldTransform(helperTransform); + helperTransform[3] = ERR_Actors.Ground(m_GroundPosition + "2 0 0"); + ChimeraCharacter.Cast(m_Caller).Teleport(helperTransform); + m_CallerMoved = true; + m_Step = 1; + m_Wait = now + 1000; + return 0; + } + if (m_Step == 1) + { + if (!IncapacitateGroundCasualty()) return -1; + m_Deadline = now + 8000; + m_Step = 2; + return 0; + } + if (m_Step == 2) + { + if (!DownOnGround()) + { + if (now >= m_Deadline) { Check(false, "native health-driven ground incapacitation before boarding deadline"); return -1; } + return 0; + } + if (m_Bench) + { + if (m_DownSettledAt == 0) + { + m_DownSettledAt = now + 5000; + m_Deadline = now + 13000; + Trace("incapacitated; begin five-second bench settling interval"); + return 0; + } + if (now < m_DownSettledAt) return 0; + } + PrintFormat("ERR CASUALTY POSITIONS: caller=%1 casualty=%2 helicopter=%3", m_Caller.GetOrigin(), m_Casualty.GetOrigin(), m_Vehicle.GetOrigin()); + if (!Check(ERR_Actors.CanFight(m_Caller) && vector.Distance(m_Caller.GetOrigin(), m_Casualty.GetOrigin()) < 4, "conscious real caller physically beside ground casualty")) return -1; + if (m_Bench) m_Seat = FindTransportBench(); + else m_Seat = m_Access.FindFreeAndAccessibleCompartment(m_Vehicle, ECompartmentType.CARGO); + if (!Check(m_Seat && !SCR_PatientCompartmentSlot.Cast(m_Seat) && !m_Seat.GetOccupant(), "ordinary free cargo seat selected without patient-seat substitution")) return -1; + if (m_Bench) Print("ERR CASUALTY BENCH SOURCE: VehPart_MI8_seats_base.et sha256=1b9a2e55a9a1cb884886488b6e170f437b6c1a615b584449819b96a6c78ad973"); + Trace("before selected boarding request"); + PrintFormat("ERR CASUALTY LOAD: CanGetInVehicle=%1 state=%2 targetType=%3", m_Access.CanGetInVehicle(m_Seat.GetOwner()), CharacterControllerComponent.Cast(m_Casualty.FindComponent(CharacterControllerComponent)).GetLifeState(), m_Seat.GetType()); + // Exactly the public server-to-owner primitive used by vanilla ambulance loading. + bool accepted; + if (m_Direct) accepted = m_Access.GetInVehicle(m_Seat.GetOwner(), m_Seat, true, -1, ECloseDoorAfterActions.INVALID, false); + else accepted = m_Access.MoveInVehicle(m_Vehicle, ECompartmentType.CARGO, false, m_Seat); + PrintFormat("ERR CASUALTY MECHANISM: direct=%1 bench=%2 accepted=%3", m_Direct, m_Bench, accepted); + Trace("immediately after selected boarding request"); + m_NextDiagnostic = now + 1000; + if (!Check(accepted, "selected loading request accepted while already unconscious")) return -1; + m_Deadline = now + 8000; + m_Step = 3; + return 0; + } + if (m_Step == 3) + { + if (now >= m_NextDiagnostic) { Trace("awaiting physical occupancy"); m_NextDiagnostic = now + 1000; } + if (CompartmentAccessComponent.GetVehicleIn(m_Casualty) != m_Vehicle || m_Seat.GetOccupant() != m_Casualty) + { + if (now >= m_Deadline) { Check(false, "physical cargo occupancy after selected mechanism before deadline"); return -1; } + return 0; + } + if (!Check(ERR_Actors.Alive(m_Casualty) && !ERR_Actors.CanFight(m_Casualty), "living unconscious ground casualty now physically aboard")) return -1; + if (!Check(!m_Access.MoveInVehicle(m_Vehicle, ECompartmentType.CARGO, false, m_Seat), "occupied target seat rejects repeated request")) return -1; + ERR_PlayerRoster roster = new ERR_PlayerRoster(); + UUID account = "00e77200-0000-0000-0000-000000000201"; + if (!Check(roster.Bind(10201, account), "isolated casualty identity registered")) return -1; + roster.Spawned(10201, m_Casualty); + ERR_ExtractionService service = new ERR_ExtractionService(roster); + if (!Check(service.Assign(m_Vehicle) && service.Begin(m_Vehicle.GetOrigin() + "100 0 0", 50), "isolated boundary service initialized without moving mission helicopter")) return -1; + service.Tick(ERR_Phase.EXTRACTION); + if (!Check(service.DidEscape(account) && service.EscapedCount() == 1, "loaded unconscious identity satisfies physical extraction rule")) return -1; + if (!BeginExit()) return -1; + m_Deadline = now + 8000; + m_Step = 4; + return 0; + } + if (m_Step == 4) + { + if (now >= m_NextDiagnostic) { Trace("awaiting ground exit"); m_NextDiagnostic = now + 1000; } + if (CompartmentAccessComponent.GetVehicleIn(m_Casualty) || m_Seat.GetOccupant()) + { + if (now >= m_Deadline) { Check(false, "native exit clears physical vehicle and seat before deadline"); return -1; } + return 0; + } + bool settled = ExitSettled(); + if (!settled && now < m_Deadline) return 0; + PrintFormat("ERR CASUALTY EXIT POSITION: actual=%1 requested=%2 alive=%3 accessible=%4", m_Casualty.GetOrigin(), ExpectedExit(), ERR_Actors.Alive(m_Casualty), m_Seat.IsCompartmentAccessible()); + if (!Check(settled, ExitResultDetail())) return -1; + Cleanup(); + m_Step = 5; + return 1; + } + return 1; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c new file mode 100644 index 0000000..2b25c41 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c @@ -0,0 +1,160 @@ +#ifdef WORKBENCH +// Opt-in completion-boundary test of the REAL inherited stock remove action. +// It does not simulate held input, replace the action, or prove remote ownership. +class ERR_NativeCasualtyRemoveProbe : ERR_NativeCasualtyLoadProbe +{ + protected SCR_RemoveCasualtyUserAction m_Remove; + protected UserActionContext m_Context; + protected int m_SavedDoor; + protected int m_SelectedDoor; + protected bool m_DoorChanged; + protected bool m_PendingAction; + protected bool m_TestBodyProtected; + protected bool m_RemoveStopped; + protected bool m_RemoveComplete; + protected vector m_AuthoredExit; + protected vector m_SeatedPosition; + protected vector m_HelperPosition; + protected float m_RemoveDeadline; + protected float m_RemoveDiagnostic; + void ERR_NativeCasualtyRemoveProbe(ERR_GameMode mode, bool direct = false, bool bench = false) + { + m_Mode = mode; m_Direct = true; m_Bench = true; + } + override void Cleanup() + { + if (m_Remove && m_DoorChanged) m_Remove.SetCompartmentDoorInfoIndex(m_SavedDoor); + m_DoorChanged = false; m_PendingAction = false; m_RemoveStopped = true; + super.Cleanup(); + } + protected void FindAction(IEntity entity) + { + if (!entity || m_Remove) return; + BaseActionsManagerComponent manager = BaseActionsManagerComponent.Cast(entity.FindComponent(BaseActionsManagerComponent)); + if (manager) + { + array actions = {}; manager.GetActionsList(actions); + foreach (BaseUserAction action : actions) + { + SCR_RemoveCasualtyUserAction remove = SCR_RemoveCasualtyUserAction.Cast(action); + if (remove && remove.GetCompartmentSlot() == m_Seat && remove.GetContextIndex("door_l01_door") >= 0) + { + m_Remove = remove; return; + } + } + } + for (IEntity child = entity.GetChildren(); child; child = child.GetSibling()) FindAction(child); + } + protected void FindContext(IEntity entity) + { + if (!entity || m_Context) return; + BaseActionsManagerComponent manager = BaseActionsManagerComponent.Cast(entity.FindComponent(BaseActionsManagerComponent)); + if (manager) + { + UserActionContext context = manager.GetContext("door_l01_door"); + if (context) + { + array actions = {}; context.GetActionsList(actions); + if (actions.Contains(m_Remove)) { m_Context = context; return; } + } + } + for (IEntity child = entity.GetChildren(); child; child = child.GetSibling()) FindContext(child); + } + protected CompartmentDoorInfo ResolveDoor() + { + BaseCompartmentManagerComponent manager = m_Seat.GetManager(); + if (!manager) return null; + CompartmentDoorInfo info = manager.GetDoorInfo(m_SelectedDoor); + if (info) return info; + CompartmentDoorReference doorReference = manager.GetDoorReference(m_SelectedDoor); + if (!doorReference) return null; + BaseCompartmentManagerComponent referenced = doorReference.GetReferencedDoorCompartmentManager(); + int referencedIndex = doorReference.GetAnimDoorIndex(); + PrintFormat("ERR CASUALTY REMOVE DOOR REFERENCE: selected=%1 referencedIndex=%2 manager=%3", m_SelectedDoor, referencedIndex, referenced != null); + if (!referenced || referencedIndex < 0) return null; + return referenced.GetDoorInfo(referencedIndex); + } + protected override bool BeginExit() + { + FindAction(m_Vehicle); + if (!Check(m_Remove && BelongsToAircraft(m_Remove.GetOwner()) && m_Remove.GetActionDuration() == 1 && !m_Remove.HasLocalEffectOnly(), "stock bench RemoveCasualty action exists, duration one second, nonlocal effect")) return false; + FindContext(m_Vehicle); + if (!Check(m_Context && m_Context.GetContextName() == "door_l01_door", "actual exterior context contains selected stock seat action")) return false; + // Same native point-to-door selection used by SCR_CompartmentUserAction. + // Explicit cached index substitutes only for selecting a UI context, not input. + m_SelectedDoor = m_Seat.PickDoorIndexForPoint(m_Context.GetOrigin()); + if (!Check(m_SelectedDoor >= 0, "actual action context resolves a relevant native compartment door")) return false; + CompartmentDoorInfo door = ResolveDoor(); + if (!Check(door && door.GetExitTeleportPointInfo(), "selected native door exposes its authored teleport exit")) return false; + vector exitTransform[4]; door.GetExitTeleportPointInfo().GetWorldTransform(exitTransform); + m_AuthoredExit = exitTransform[3]; m_SeatedPosition = m_Casualty.GetOrigin(); + if (!Check(vector.Distance(m_AuthoredExit, m_Vehicle.GetOrigin()) < 15, "authored exit resolves beside this physical helicopter")) return false; + m_SavedDoor = m_Remove.GetCompartmentDoorInfoIndex(); + m_Remove.SetCompartmentDoorInfoIndex(m_SelectedDoor); m_DoorChanged = true; + vector outside = m_Context.GetOrigin() - m_Vehicle.GetOrigin(); outside[1] = 0; + if (!Check(outside.Length() > 0.1, "exterior context has a distinct outward direction")) return false; + outside.Normalize(); + m_HelperPosition = ERR_Actors.Ground(m_Context.GetOrigin() + outside * 0.75); + vector helper[4]; m_Caller.GetWorldTransform(helper); helper[3] = m_HelperPosition; + ChimeraCharacter.Cast(m_Caller).Teleport(helper); + PrintFormat("ERR CASUALTY REMOVE SETUP: action=%1 context=%2 door=%3 contextOrigin=%4 exit=%5 seatedOrigin=%6 helperRequested=%7", m_Remove.GetActionID(), m_Context.GetContextName(), m_SelectedDoor, m_Context.GetOrigin(), m_AuthoredExit, m_SeatedPosition, m_HelperPosition); + m_PendingAction = true; + m_Wait = GetGame().GetWorld().GetWorldTime() + 1000; + return true; + } + static bool SafeExit(float horizontalDistance, float terrainClearance) + { + return horizontalDistance >= 0 && horizontalDistance <= 1.25 && terrainClearance >= -0.25 && terrainClearance <= 1.5; + } + protected override vector ExpectedExit() { return m_AuthoredExit; } + protected override string ExitResultDetail() { return "stock removal leaves a living incapacitated body beside authored door exit, outside compartment, on terrain, and seat accessible"; } + protected override bool ExitSettled() + { + if (!m_Casualty || !m_Access || !m_Seat) return false; + vector actual = m_Casualty.GetOrigin(); + float height = actual[1] - GetGame().GetWorld().GetSurfaceY(actual[0], actual[2]); + CharacterAnimationComponent animation = CharacterAnimationComponent.Cast(m_Casualty.FindComponent(CharacterAnimationComponent)); + bool safe = DownOnGround() && !m_Access.IsGettingOut() && !m_Access.IsInCompartment() && !m_Seat.GetOccupant() && m_Seat.IsCompartmentAccessible() && animation && !animation.PhysicsIsFalling() && SafeExit(vector.DistanceXZ(actual, m_AuthoredExit), height); + float now = GetGame().GetWorld().GetWorldTime(); + if (now >= m_RemoveDiagnostic || safe) + { + PrintFormat("ERR CASUALTY REMOVE POSITION: actual=%1 aiming=%2 authored=%3 seated=%4 horizontalError=%5 terrainClearance=%6 safe=%7", actual, ChimeraCharacter.Cast(m_Casualty).AimingPosition(), m_AuthoredExit, m_SeatedPosition, vector.DistanceXZ(actual, m_AuthoredExit), height, safe); + Trace("stock door removal observation"); m_RemoveDiagnostic = now + 1000; + } + return safe; + } + override int Tick(float now) + { + if (m_RemoveComplete) return 1; + if (m_RemoveStopped) return -1; + if (m_RemoveDeadline == 0) + { + if (!Check(m_Mode && ERR_CasualtyLoadingRules.AircraftReady(m_Mode.ExtractionVehicle()), "production mission helicopter is physically grounded and stable before fixture")) return -1; + m_RemoveDeadline = now + 45000; + } + if (now > m_RemoveDeadline) { Check(false, "bounded 45-second stock removal fixture deadline"); return -1; } + if (m_Step == 4 && m_PendingAction) + { + if (now < m_Wait) return 0; + if (!Check(ERR_Actors.CanFight(m_Caller) && !CompartmentAccessComponent.GetVehicleIn(m_Caller) && vector.Distance(m_Caller.GetOrigin(), m_HelperPosition) < 1.5, "real conscious rescuer settled outside selected native door")) return -1; + bool shown = m_Remove.CanBeShown(m_Caller); + bool permitted = m_Remove.CanBePerformed(m_Caller); + PrintFormat("ERR CASUALTY REMOVE ACTION: shown=%1 performedAllowed=%2 reason=%3 cachedDoor=%4 caller=%5", shown, permitted, m_Remove.GetCannotPerformReason(), m_Remove.GetCompartmentDoorInfoIndex(), m_Caller.GetOrigin()); + if (!Check(shown && permitted && m_Seat.GetOccupant() == m_Casualty && m_Remove.GetCompartmentDoorInfoIndex() == m_SelectedDoor, "stock native action visibility and permission accept actual rescuer and occupied casualty bench")) return -1; + m_PendingAction = false; // exactly one completion invocation, no native retry + m_Remove.PerformAction(m_Remove.GetOwner(), m_Caller); + Print("ERR CASUALTY REMOVE: invoked existing stock action completion once; held input and network dispatch not exercised"); + m_Deadline = now + 8000; + } + int result = super.Tick(now); + if (!m_TestBodyProtected && m_Casualty && m_Damage) + { + // Only the fixture-owned casualty is protected from nearby initial guards. + // ForceUnconsciousness still uses its actual native health/life transition. + m_Damage.EnableDamageHandling(false); m_TestBodyProtected = true; + } + if (result == 1) m_RemoveComplete = true; + return result; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c new file mode 100644 index 0000000..289f381 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c @@ -0,0 +1,293 @@ +#ifdef WORKBENCH +// Only the helper's membership is synthetic. The casualty keeps its real native +// player controller/account/body and exercises the ordinary owner handshake. +class ERR_NativeCasualtyHelperAdapter : ERR_CasualtyLoadingService +{ + protected ref ERR_PlayerLife m_HelperLife; + protected bool m_HelperEnabled; + void ERR_NativeCasualtyHelperAdapter(ERR_GameMode mode) { m_Mode = mode; } + void Helper(IEntity actor) + { + m_HelperLife = new ERR_PlayerLife(); + m_HelperLife.Actor = actor; m_HelperLife.Connected = true; m_HelperLife.UsedLife = true; + m_HelperLife.ConnectionId = 15401; + m_HelperLife.AccountId = "00e77200-0000-0000-0000-000000001401"; + } + void EnableHelper() { m_HelperEnabled = true; } + bool StrictParticipant(IEntity actor) { return super.CurrentLife(actor) != null; } + bool StoppedForProbe() { return m_Stopped; } + protected override ERR_PlayerLife CurrentLife(IEntity actor) + { + if (m_HelperEnabled && m_HelperLife && actor && actor == m_HelperLife.Actor) return m_HelperLife; + return super.CurrentLife(actor); + } +} +class ERR_NativeCasualtyServiceProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Player; + protected IEntity m_Helper; + protected IEntity m_Blocker; + protected Vehicle m_Aircraft; + protected ERR_LoadCasualtyAction m_Action; + protected ref ERR_NativeCasualtyHelperAdapter m_Service; + protected ref ERR_NativeCasualtyGroundProbe m_GroundProbe; + protected bool m_GroundChecked; + protected ref array m_Reserved = {}; + protected BaseCompartmentSlot m_LoadedSeat; + protected float m_Deadline; + protected float m_Wait; + protected float m_PositionDeadline; + protected float m_NextDiagnostic; + protected vector m_RequestedPlayer; + protected vector m_RequestedHelper; + protected bool m_PlayerDamageSnapshot; + protected bool m_PlayerDamageOriginallyEnabled; + protected int m_SettleStart; + protected int m_Step; + protected int m_Resolutions; + protected bool m_Loaded; + protected bool m_Observing; + protected bool m_Stopped; + void ERR_NativeCasualtyServiceProbe(ERR_GameMode mode) { m_Mode = mode; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: casualty service " + detail); return true; } + Print("ERR SMOKE FAIL: casualty service " + detail, LogLevel.ERROR); + Stop(); return false; + } + protected void Resolved(IEntity actor, bool loaded) + { + m_Resolutions++; + m_Loaded = actor == m_Player && loaded; + } + protected void ReleaseFixtureReservations() + { + foreach (BaseCompartmentSlot seat : m_Reserved) + if (seat && m_Helper && seat.IsReservedBy(m_Helper)) seat.SetReserved(null); + m_Reserved.Clear(); + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_GroundProbe) m_GroundProbe.Stop(); + if (m_Service) { m_Service.Stop(); m_Service.OnResolved().Remove(Resolved); } + if (m_Mode) m_Mode.ERR_UseCasualtyFixture(null); + ReleaseFixtureReservations(); + // Restore the original damage-handling flag only on this exact still-owned + // living player body. This never restores health or changes another actor. + if (m_PlayerDamageSnapshot && GetGame() && GetGame().GetPlayerController() && GetGame().GetPlayerController().GetControlledEntity() == m_Player && ERR_Actors.Alive(m_Player)) + { + DamageManagerComponent damage = DamageManagerComponent.Cast(m_Player.FindComponent(DamageManagerComponent)); + if (damage) damage.EnableDamageHandling(m_PlayerDamageOriginallyEnabled); + } + m_PlayerDamageSnapshot = false; + ERR_Actors.DeleteSpawned(m_Blocker); m_Blocker = null; + ERR_Actors.DeleteSpawned(m_Helper); m_Helper = null; + // This opt-in case ends by ordinary round reset. Never restore arbitrary + // health, force recovery, teleport the seated player, or delete its body. + } + protected ERR_LoadCasualtyAction FindAction() + { + BaseActionsManagerComponent manager = BaseActionsManagerComponent.Cast(m_Player.FindComponent(BaseActionsManagerComponent)); + if (!manager) return null; + array actions = {}; manager.GetActionsList(actions); + bool medical; + ERR_LoadCasualtyAction load; + foreach (BaseUserAction action : actions) + { + if (SCR_BandageUserAction.Cast(action)) medical = true; + ERR_LoadCasualtyAction candidate = ERR_LoadCasualtyAction.Cast(action); + if (candidate) load = candidate; + } + if (!Check(medical, "successor prisoner retains inherited native medicine actions")) return null; + return load; + } + protected void Diagnose() + { + if (!m_Player || !m_Helper || !m_Aircraft || !m_Service) return; + HelicopterControllerComponent aircraftController = HelicopterControllerComponent.Cast(m_Aircraft.FindComponent(HelicopterControllerComponent)); + Physics physics = m_Aircraft.GetPhysics(); + bool groundContact; + bool simulationAvailable; + float speed = -1; + float angularSpeed = -1; + if (aircraftController && aircraftController.GetSimulation()) + { + simulationAvailable = true; + groundContact = aircraftController.GetSimulation().HasAnyGroundContact(); + } + if (physics) { speed = physics.GetVelocity().Length(); angularSpeed = physics.GetAngularVelocity().Length(); } + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + PrintFormat("ERR CASUALTY AIRCRAFT READINESS: alive=%1 controller=%2 simulation=%3 physics=%4 groundContact=%5 up=%6 speed=%7 angularSpeed=%8 position=%9", ERR_Actors.Alive(m_Aircraft), aircraftController != null, simulationAvailable, physics != null, groundContact, transform[1][1], speed, angularSpeed, m_Aircraft.GetOrigin()); + CharacterControllerComponent playerController = CharacterControllerComponent.Cast(m_Player.FindComponent(CharacterControllerComponent)); + CharacterControllerComponent helperController = CharacterControllerComponent.Cast(m_Helper.FindComponent(CharacterControllerComponent)); + int playerLife = -1; + int helperLife = -1; + if (playerController) playerLife = playerController.GetLifeState(); + if (helperController) helperLife = helperController.GetLifeState(); + PrintFormat("ERR CASUALTY ACTOR READINESS: playerAlive=%1 playerConscious=%2 playerLife=%3 helperAlive=%4 helperConscious=%5 helperLife=%6 pairRange=%7 playerAircraftRange=%8 helperAircraftRange=%9", ERR_Actors.Alive(m_Player), ERR_Actors.CanFight(m_Player), playerLife, ERR_Actors.Alive(m_Helper), ERR_Actors.CanFight(m_Helper), helperLife, vector.Distance(m_Player.GetOrigin(), m_Helper.GetOrigin()), vector.Distance(m_Player.GetOrigin(), m_Aircraft.GetOrigin()), vector.Distance(m_Helper.GetOrigin(), m_Aircraft.GetOrigin())); + PrintFormat("ERR CASUALTY POSITION READINESS: playerRequested=%1 playerActual=%2 playerError=%3 helperRequested=%4 helperActual=%5 helperError=%6", m_RequestedPlayer, m_Player.GetOrigin(), vector.Distance(m_RequestedPlayer, m_Player.GetOrigin()), m_RequestedHelper, m_Helper.GetOrigin(), vector.Distance(m_RequestedHelper, m_Helper.GetOrigin())); + ERR_CasualtyGroundSupport.Parked(m_Aircraft, true); + PrintFormat("ERR CASUALTY SERVICE STATE: step=%1 player=%2 helper=%3 groundedTarget=%4 aircraftReady=%5 sight=%6 pending=%7 resolutions=%8 loaded=%9", m_Step, m_Player.GetOrigin(), m_Helper.GetOrigin(), ERR_CasualtyLoadingRules.GroundSettled(m_Player), ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft), ERR_CasualtyLoadingRules.LineOfSight(m_Helper, m_Player), m_Service.PendingCount(), m_Resolutions, m_Loaded); + } + int Tick(float now) + { + if (m_Stopped) return -1; + if (m_Deadline > 0 && now > m_Deadline) { if (m_Player && m_Helper && m_Service) Diagnose(); Check(false, "bounded native fixture deadline"); return -1; } + if (m_Service && m_Observing) m_Service.Tick(now); + if (now < m_Wait) return 0; + if (m_Step == 0) + { + PlayerController controller = GetGame().GetPlayerController(); + if (!Check(Replication.IsServer() && controller && m_Mode.Phase() == ERR_Phase.PRISON, "explicit local server fixture starts with real prisoner")) return -1; + m_Player = controller.GetControlledEntity(); m_Aircraft = m_Mode.ExtractionVehicle(); + if (!Check(ERR_Actors.CanFight(m_Player) && m_Aircraft && !CompartmentAccessComponent.GetVehicleIn(m_Player), "real controlled casualty starts conscious on foot")) return -1; + m_Action = FindAction(); + if (!Check(m_Action && m_Action.GetOwner() == m_Player && m_Action.GetActionDuration() == 5 && !m_Action.HasLocalEffectOnly(), "real successor prisoner owns five-second server action")) return -1; + DamageManagerComponent playerDamage = DamageManagerComponent.Cast(m_Player.FindComponent(DamageManagerComponent)); + if (!Check(playerDamage != null, "fixture player damage manager available")) return -1; + m_PlayerDamageOriginallyEnabled = playerDamage.IsDamageHandlingEnabled(); + m_PlayerDamageSnapshot = true; + playerDamage.EnableDamageHandling(false); + m_RequestedPlayer = ERR_Actors.Ground(m_Aircraft.GetOrigin() + "6 0 6"); + m_RequestedHelper = ERR_Actors.Ground(m_RequestedPlayer + "0 0 2"); + m_Helper = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, m_RequestedHelper); + if (!Check(m_Helper != null, "separate physical helper spawned")) return -1; + m_Mode.Own(m_Helper); + DamageManagerComponent helperDamage = DamageManagerComponent.Cast(m_Helper.FindComponent(DamageManagerComponent)); + if (!Check(helperDamage != null, "fixture helper damage manager available")) return -1; + helperDamage.EnableDamageHandling(false); + vector transform[4]; m_Player.GetWorldTransform(transform); transform[3] = m_RequestedPlayer; + ChimeraCharacter.Cast(m_Player).Teleport(transform); + m_Service = new ERR_NativeCasualtyHelperAdapter(m_Mode); m_Service.Helper(m_Helper); + m_Service.OnResolved().Insert(Resolved); + if (!Check(m_Service.StrictParticipant(m_Player) && !m_Service.StrictParticipant(m_Helper), "actual target passes strict native membership; synthetic helper does not")) return -1; + if (!Check(!m_Mode.CasualtyLoading().Begin(m_Helper, m_Player) && !m_Service.Begin(m_Helper, m_Player), "production and unadapted sample reject out-of-phase helper request")) return -1; + // Deliberate fixture phase setup, not evidence of a completed radio objective. + if (!Check(m_Mode.Transition(ERR_Phase.RADIO_SEARCH) && m_Mode.Transition(ERR_Phase.RADIO_DEFENCE) && m_Mode.Transition(ERR_Phase.EXTRACTION), "fixture enters extraction through explicit legal phase transitions")) return -1; + m_Deadline = now + 45000; + m_PositionDeadline = now + 10000; + m_NextDiagnostic = now; + m_Wait = now + 500; m_Step = 1; return 0; + } + if (m_Step == 1) + { + if (now >= m_NextDiagnostic) { Diagnose(); m_NextDiagnostic = now + 1000; } + bool actorsReady = ERR_Actors.CanFight(m_Player) && ERR_Actors.CanFight(m_Helper) && vector.Distance(m_RequestedPlayer, m_Player.GetOrigin()) <= 1.5 && vector.Distance(m_RequestedHelper, m_Helper.GetOrigin()) <= 1.5 && vector.Distance(m_Player.GetOrigin(), m_Helper.GetOrigin()) <= 3; + bool aircraftReady = ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft); + if ((!actorsReady || !aircraftReady) && now < m_PositionDeadline) return 0; + if (!Check(actorsReady, "actual living conscious actors reached requested nearby ground positions before deadline")) return -1; + if (!Check(aircraftReady, "actual aircraft satisfies unchanged production grounded-motion safety before deadline")) return -1; + if (!m_GroundChecked) + { + if (!m_GroundProbe) m_GroundProbe = new ERR_NativeCasualtyGroundProbe(m_Mode); + int groundResult = m_GroundProbe.Tick(now); + if (groundResult < 0) { Check(false, "native ground-support qualification failed"); return -1; } + if (groundResult == 0) return 0; + m_GroundChecked = true; + } + if (!Check(!m_Service.Begin(m_Helper, m_Player), "conscious target is rejected before native incapacitation")) return -1; + SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_Player.FindComponent(SCR_CharacterDamageManagerComponent)); + if (!Check(damage != null, "real casualty has native health manager")) return -1; + HitZone resilience = damage.GetResilienceHitZone(); + if (!Check(resilience && damage.GetPermitUnconsciousness(), "native resilience and unconsciousness policy available")) return -1; + float beforeResilience = resilience.GetHealth(); + // Protection must not swallow the fixture's own true-damage request. Keep + // this synchronous interval limited to that one native health operation. + damage.EnableDamageHandling(true); + damage.ForceUnconsciousness(); + float afterResilience = resilience.GetHealth(); + damage.EnableDamageHandling(false); + PrintFormat("ERR CASUALTY INCAPACITATION: resilienceBefore=%1 resilienceAfter=%2", beforeResilience, afterResilience); + if (!Check(afterResilience < beforeResilience && ERR_Actors.Alive(m_Player), "single native resilience damage applied before restoring fixture protection")) return -1; + m_Step = 2; m_Wait = now + 500; return 0; + } + if (m_Step == 2) + { + if (!ERR_CasualtyLoadingRules.GroundSettled(m_Player)) + { + if (now >= m_NextDiagnostic) { Diagnose(); m_NextDiagnostic = now + 1000; } + return 0; + } + if (!Check(ERR_CasualtyLoadingRules.Nearby(m_Mode, m_Helper, m_Player), "actual incapacitated target is settled with clear line of sight")) return -1; + if (!Check(!m_Mode.CasualtyLoading().CanLoad(m_Helper, m_Player) && !m_Service.Begin(m_Helper, m_Player) && m_Service.PendingCount() == 0, "strict production authorization rejects nonparticipant helper even in valid physical state")) return -1; + m_Service.EnableHelper(); + if (!Check(m_Mode.ERR_UseCasualtyFixture(m_Service), "explicit fixture installs helper-only membership adapter")) return -1; + m_Observing = true; m_Service.Tick(now); m_SettleStart = System.GetTickCount(); + if (!Check(!m_Service.CanLoad(m_Helper, m_Player), "new observation cannot bypass five-second settling window")) return -1; + m_Step = 3; return 0; + } + if (m_Step == 3) + { + if (System.GetTickCount() - m_SettleStart < 5500) return 0; + Diagnose(); + if (!Check(m_Service.CanLoad(m_Helper, m_Player), "settled real casualty is eligible with only helper membership adapted")) return -1; + array seats = {}; m_Mode.Extraction().Seats(seats); + foreach (BaseCompartmentSlot seat : seats) + { + if (!ERR_CasualtyLoadingRules.TransportBench(seat, m_Aircraft) || seat.GetOccupant() || seat.IsReserved()) continue; + seat.SetReserved(m_Helper); m_Reserved.Insert(seat); + } + if (!Check(!m_Reserved.IsEmpty() && !m_Service.CanLoad(m_Helper, m_Player) && !m_Service.Begin(m_Helper, m_Player), "native external reservations prevent loading when all child benches are reserved")) return -1; + ReleaseFixtureReservations(); + vector middle = (ChimeraCharacter.Cast(m_Helper).AimingPosition() + ChimeraCharacter.Cast(m_Player).AimingPosition()) * 0.5; + m_Blocker = ERR_Actors.Spawn("{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et", middle); + if (!Check(m_Blocker != null, "successor-owned physical line-of-sight obstacle spawned")) return -1; + m_Mode.Own(m_Blocker); + vector low, high; m_Blocker.GetWorldBounds(low, high); + vector wall[4]; m_Blocker.GetWorldTransform(wall); wall[3] = wall[3] + middle - (low + high) * 0.5; + m_Blocker.SetWorldTransform(wall); + m_Step = 4; m_Wait = now + 500; return 0; + } + if (m_Step == 4) + { + if (!Check(!ERR_CasualtyLoadingRules.LineOfSight(m_Helper, m_Player) && !m_Service.CanLoad(m_Helper, m_Player) && !m_Service.Begin(m_Helper, m_Player) && m_Service.PendingCount() == 0, "physical wall blocks completion-time rescue authorization")) return -1; + ERR_Actors.DeleteSpawned(m_Blocker); m_Blocker = null; + m_Step = 5; m_Wait = now + 500; return 0; + } + if (m_Step == 5) + { + if (!Check(m_Action.CanBePerformedScript(m_Helper) && m_Service.PendingCount() == 0, "real action becomes performable after obstruction removal")) return -1; + // Invoke the real completion boundary. This does not simulate holding input + // for five seconds or claim a second authenticated network player. + m_Action.PerformAction(m_Player, m_Helper); + if (!Check(m_Service.PendingCount() == 1 && m_Resolutions == 0, "real owner handshake commits one pending physical load")) return -1; + array seats = {}; m_Mode.Extraction().Seats(seats); + foreach (BaseCompartmentSlot seat : seats) + if (ERR_CasualtyLoadingRules.TransportBench(seat, m_Aircraft) && seat.IsReservedBy(m_Player)) m_LoadedSeat = seat; + if (!Check(m_LoadedSeat != null, "service reserves the actual selected child bench for the casualty")) return -1; + m_Action.PerformAction(m_Player, m_Helper); + if (!Check(m_Service.PendingCount() == 1 && m_Resolutions == 0, "duplicate completion cannot issue a second ticket")) return -1; + m_Step = 6; return 0; + } + if (m_Step == 6) + { + if (m_Service.PendingCount() > 0) return 0; + Diagnose(); + if (!Check(m_Loaded && m_Resolutions == 1 && ERR_Actors.Alive(m_Player) && ERR_CasualtyLoadingRules.Down(m_Player) && CompartmentAccessComponent.GetVehicleIn(m_Player) == m_Aircraft && m_LoadedSeat.GetOccupant() == m_Player, "production owner handshake physically loads real living incapacitated player exactly once")) return -1; + if (!Check(!m_LoadedSeat.IsReserved() && m_Service.StrictParticipant(m_Player), "successful loading releases reservation and preserves actual player identity")) return -1; + m_Service.Stop(); m_Service.Stop(); m_Service.Tick(now); + if (!Check(m_Service.StoppedForProbe() && m_Service.PendingCount() == 0 && m_Resolutions == 1 && !m_Service.Begin(m_Helper, m_Player), "Stop is latched, idempotent and cannot repeat completion or restart loading")) return -1; + Stop(); return 1; + } + return 0; + } +} +modded class ERR_GameMode +{ + protected ref ERR_NativeCasualtyHelperAdapter m_ERRNativeCasualtyAdapter; + bool ERR_UseCasualtyFixture(ERR_NativeCasualtyHelperAdapter service) + { + string enabled, outcome; + if (!Replication.IsServer() || !System.GetCLIParam("errBaseSmoke", enabled) || enabled != "1" || !System.GetCLIParam("errSmokeOutcome", outcome) || outcome != "casualty-service") return false; + m_ERRNativeCasualtyAdapter = service; return true; + } + override ERR_CasualtyLoadingService CasualtyLoading() + { + if (m_ERRNativeCasualtyAdapter) return m_ERRNativeCasualtyAdapter; + return super.CasualtyLoading(); + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c new file mode 100644 index 0000000..14e03c1 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c @@ -0,0 +1,52 @@ +#ifdef WORKBENCH +// Exercises native service dispatch, not remote RPC ownership or rendered UI. +class ERR_NativeContractsProbe +{ + protected static bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: base contracts " + detail); return true; } + Print("ERR SMOKE FAIL: base contracts " + detail, LogLevel.ERROR); + return false; + } + static bool Run(ERR_GameMode mode, IEntity player) + { + if (!Check(mode.Factions() && mode.Factions().WorldReady() && mode.PreparationError().IsEmpty(), "catalog resolves hostile vanilla factions and successful preparation")) return false; + if (!Check(SCR_FactionManager.SGetFaction(player) == mode.PlayerFaction() && player.GetPrefabData().GetPrefabName() == mode.Factions().PrisonerPrefab, "physical prisoner matches injected faction and resource")) return false; + ERR_SiteRuntime site = mode.Sites().Find("everon-supply-1"); + if (!Check(site && site.Group && site.Group.GetFaction() == mode.EnemyFaction() && site.Group.GetPrefabData().GetPrefabName() == mode.Factions().GuardGroupPrefab, "physical guard squad comes from injected catalog")) return false; + ERR_FactionCatalog isolated = ERR_FactionCatalog.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab("{BE50B97B8E2B36E6}Configs/ERR/VanillaFactions.conf")); + if (!isolated) return false; + string enemyKey = isolated.EnemyFactionKey; + isolated.EnemyFactionKey = isolated.PlayerFactionKey; + if (!Check(!isolated.Valid() && !isolated.WorldReady(), "same-side factions rejected")) return false; + isolated.EnemyFactionKey = "ERR_MISSING_FACTION"; + if (!Check(!isolated.WorldReady(), "unknown world faction rejected")) return false; + isolated.EnemyFactionKey = enemyKey; + ResourceName prisoner = isolated.PrisonerPrefab; + isolated.PrisonerPrefab = ""; + if (!Check(!isolated.Valid(), "missing prisoner resource rejected")) return false; + isolated.PrisonerPrefab = prisoner; + if (!Check(isolated.WorldReady(), "isolated catalog restored without mutating live configuration")) return false; + + array replies = {}; + int original = mode.Settings().Get("radioDefenceSeconds"); + mode.Admin().Execute(mode, false, "mission radio set 60", replies); + if (!Check(mode.Settings().Get("radioDefenceSeconds") == original && replies.Count() == 1 && replies[0] == "Administrator access required.", "unauthorized settings request rejected")) return false; + mode.Admin().Execute(mode, true, "mission radio set 60junk", replies); + if (!Check(mode.Settings().Get("radioDefenceSeconds") == original && replies[0].Contains("Invalid"), "partially numeric input rejected without mutation")) return false; + mode.Admin().Execute(mode, true, "mission radio set 0", replies); + if (!Check(mode.Settings().Get("radioDefenceSeconds") == original && replies[0].Contains("Invalid"), "out-of-range duration rejected without mutation")) return false; + mode.Admin().Execute(mode, true, " MISSION RADIO SET 60 ", replies); + if (!Check(mode.Settings().Get("radioDefenceSeconds") == 60 && replies[0] == "radioDefenceSeconds=60 saved", "normalized base command saves validated duration")) return false; + mode.Admin().Execute(mode, true, "mission radio show", replies); + if (!Check(replies.Count() == 1 && replies[0] == "radioDefenceSeconds=60", "base command reads saved duration")) return false; + mode.Admin().Execute(mode, true, "settings", replies); + if (!Check(replies.Count() == ERR_Settings.Keys().Count(), "base settings listing available")) return false; + mode.Admin().Execute(mode, true, "status", replies); + if (!Check(!replies.IsEmpty() && replies[0] == "Escape the prison", "base mission status available before companions")) return false; + mode.Admin().Execute(mode, true, "mission radio set " + original.ToString(), replies); + if (!Check(mode.Settings().Get("radioDefenceSeconds") == original, "test setting restored")) return false; + return true; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c new file mode 100644 index 0000000..8afc5ff --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c @@ -0,0 +1,60 @@ +#ifdef WORKBENCH +class ERR_NativeDefinitionProbe +{ + protected static bool Check(bool condition, string name) + { + if (condition) { Print("ERR SMOKE PASS: definition " + name); return true; } + Print("ERR SMOKE FAIL: definition " + name, LogLevel.ERROR); + return false; + } + static bool Run() + { + ERR_ScenarioDefinition definition = ERR_ScenarioDefinition.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab("{BC310DC0CD27F523}Configs/ERR/EveronSites.conf")); + if (!Check(definition && definition.Valid(), "authored configuration resolves")) return false; + ERR_SiteDefinition cache = definition.Find("everon-supply-1"); + if (!cache) return false; + cache.Id = "everon-prison-1"; + if (!Check(!definition.Valid(), "duplicate site identity rejected")) return false; + cache.Id = "everon-supply-1"; + ERR_SiteStock documents = cache.Stock[3]; + documents.TargetId = "missing-radio"; + if (!Check(!definition.Valid(), "dangling document target rejected")) return false; + documents.TargetId = "everon-prison-1"; + if (!Check(!definition.Valid(), "non-radio document target rejected")) return false; + documents.TargetId = "everon-radio-1"; + documents.Count = 1; + if (!Check(!definition.Valid(), "insufficient guaranteed radio clues rejected")) return false; + documents.Count = 65; + if (!Check(!definition.Valid(), "unbounded stock rejected")) return false; + documents.Count = 2; + cache.RevealOnEscape = false; + if (!Check(!definition.Valid(), "unguaranteed clue route rejected")) return false; + cache.RevealOnEscape = true; + ERR_SiteDefinition alternate = definition.Find("everon-supply-2"); + vector alternatePosition = alternate.Position; + alternate.Position = cache.Position + "10 0 0"; + if (!Check(!definition.Valid(), "radio sources sharing one footprint rejected")) return false; + alternate.Position = alternatePosition; + string label = alternate.Label; + alternate.Label = ""; + if (!Check(!definition.Valid(), "unnamed location rejected")) return false; + alternate.Label = label; + ERR_SiteDefinition radio = definition.Find("everon-radio-1"); + float radioRadius = radio.DiscoverRadius; + radio.DiscoverRadius = 9; + if (!Check(!definition.Valid(), "radio identification beyond eight metres rejected")) return false; + radio.DiscoverRadius = 8; + if (!Check(definition.Valid(), "close physical radio identification allowed")) return false; + radio.DiscoverRadius = radioRadius; + radio.RevealOnEscape = true; + if (!Check(!definition.Valid(), "escape cannot reveal the radio directly")) return false; + radio.RevealOnEscape = false; + ERR_SiteProp prop = definition.Find("everon-outpost-1").Props[0]; + vector offset = prop.Offset; + prop.Offset = "100 0 0"; + if (!Check(!definition.Valid(), "unbounded scenery offset rejected")) return false; + prop.Offset = offset; + return Check(definition.Valid(), "valid configuration restored after isolated mutations"); + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c new file mode 100644 index 0000000..67e07d4 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c @@ -0,0 +1,160 @@ +#ifdef WORKBENCH +// Opt-in hidden native-widget comparison; no discovery, inventory or mission +// state is changed, and no map menu or player input is fabricated. +// Separate owned subclasses preserve the vanilla base RPC serializer identity. +// Their small widget adapters are repeated to compare the unchanged native +// setter against the real successor subclass without modding a replicated type. +class ERR_NativePlainMapMarker : SCR_MapMarkerBase +{ + bool ERR_ProbeAttachMapWidget() + { + ERR_ProbeDetachMapWidget(); + SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance(); + if (!manager || !manager.GetMarkerConfig()) return false; + m_ConfigEntry = manager.GetMarkerConfig().GetMarkerEntryConfigByType(GetType()); + if (!m_ConfigEntry) return false; + m_wRoot = GetGame().GetWorkspace().CreateWidgets(m_ConfigEntry.GetMarkerLayout()); + if (!m_wRoot) return false; + m_wRoot.SetVisible(false); + m_MarkerWidgetComp = SCR_MapMarkerWidgetComponent.Cast(m_wRoot.FindHandler(SCR_MapMarkerWidgetComponent)); + if (!m_MarkerWidgetComp) return false; + m_MarkerWidgetComp.SetMarkerObject(this); + m_ConfigEntry.InitClientSettings(this, m_MarkerWidgetComp, true); + return m_wRoot.FindAnyWidget("MarkerText") != null; + } + string ERR_ProbeMapText() + { + if (!m_wRoot) return ""; + TextWidget text = TextWidget.Cast(m_wRoot.FindAnyWidget("MarkerText")); + if (!text) return ""; + return text.GetText(); + } + void ERR_ProbeDetachMapWidget() + { + // Remove only this probe object's native subscriptions/widgets. + SCR_MapEntity.GetOnMapClose().Remove(OnMapClosed); + SCR_MapEntity.GetOnLayerChanged().Remove(OnMapLayerChanged); + if (m_wRoot) m_wRoot.RemoveFromHierarchy(); + m_wRoot = null; + m_MarkerWidgetComp = null; + } +} +class ERR_NativeObjectiveMapMarker : ERR_DiscoveryMarker +{ + bool ERR_ProbeAttachMapWidget() + { + ERR_ProbeDetachMapWidget(); + SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance(); + if (!manager || !manager.GetMarkerConfig()) return false; + m_ConfigEntry = manager.GetMarkerConfig().GetMarkerEntryConfigByType(GetType()); + if (!m_ConfigEntry) return false; + m_wRoot = GetGame().GetWorkspace().CreateWidgets(m_ConfigEntry.GetMarkerLayout()); + if (!m_wRoot) return false; + m_wRoot.SetVisible(false); + m_MarkerWidgetComp = SCR_MapMarkerWidgetComponent.Cast(m_wRoot.FindHandler(SCR_MapMarkerWidgetComponent)); + if (!m_MarkerWidgetComp) return false; + m_MarkerWidgetComp.SetMarkerObject(this); + m_ConfigEntry.InitClientSettings(this, m_MarkerWidgetComp, true); + return m_wRoot.FindAnyWidget("MarkerText") != null; + } + string ERR_ProbeMapText() + { + if (!m_wRoot) return ""; + TextWidget text = TextWidget.Cast(m_wRoot.FindAnyWidget("MarkerText")); + if (!text) return ""; + return text.GetText(); + } + void ERR_ProbeDetachMapWidget() + { + // Remove only this probe object's native subscriptions/widgets. + SCR_MapEntity.GetOnMapClose().Remove(OnMapClosed); + SCR_MapEntity.GetOnLayerChanged().Remove(OnMapLayerChanged); + if (m_wRoot) m_wRoot.RemoveFromHierarchy(); + m_wRoot = null; + m_MarkerWidgetComp = null; + } +} +modded class SCR_MapMarkerManagerComponent +{ + bool ERR_ProbeRetainsDiscoveryMarker(ERR_DiscoveryMarker marker) + { + return m_aStaticMarkers.Contains(marker) || m_aDisabledMarkers.Contains(marker); + } +} +class ERR_NativeDiscoveryMapProbe +{ + protected static ref ERR_NativePlainMapMarker s_Plain; + protected static ref ERR_NativeObjectiveMapMarker s_Objective; + static void Stop() + { + SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance(); + if (s_Plain) + { + s_Plain.ERR_ProbeDetachMapWidget(); + if (manager) manager.RemoveStaticMarker(s_Plain); + } + if (s_Objective) + { + s_Objective.ERR_ProbeDetachMapWidget(); + if (manager) manager.ERR_RemoveDiscoveryMarker(s_Objective); + } + s_Plain = null; + s_Objective = null; + } + protected static bool Check(bool success, string detail) + { + if (success) { Print("ERR SMOKE PASS: discovery map " + detail); return true; } + Print("ERR SMOKE FAIL: discovery map " + detail, LogLevel.ERROR); + Stop(); + return false; + } + // Invoke once after ordinary fixture admission and native map manager init. + static bool Run() + { + Stop(); + SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance(); + if (!Check(manager && manager.GetMarkerConfig() && GetGame().GetPlayerController(), "native local controller and marker manager available")) return false; + int originalCount = manager.GetStaticMarkers().Count(); + s_Plain = new ERR_NativePlainMapMarker(); + s_Plain.SetType(SCR_EMapMarkerType.PLACED_CUSTOM); + s_Plain.SetMarkerConfigID(0); + s_Plain.SetCustomText("Unknown location"); + manager.InsertStaticMarker(s_Plain, true); + if (!Check(s_Plain.ERR_ProbeAttachMapWidget() && s_Plain.ERR_ProbeMapText() == "Unknown location", "native baseline label rendered in actual hidden marker layout")) return false; + s_Plain.SetCustomText("Radio station"); + if (!Check(s_Plain.GetCustomText() == "Radio station" && s_Plain.ERR_ProbeMapText() == "Unknown location", "native data-only setter reproduces stale already-open label")) return false; + if (!Check(s_Plain.CanBeRemovedByOwner() && SCR_MapMarkersUI.IsOwnedMarker(s_Plain), "plain local marker exposes native delete/edit/drag eligibility")) return false; + + s_Objective = new ERR_NativeObjectiveMapMarker(); + s_Objective.SetType(SCR_EMapMarkerType.PLACED_CUSTOM); + s_Objective.SetMarkerConfigID(0); + s_Objective.SetCustomText("Unknown location"); + manager.InsertStaticMarker(s_Objective, true); + if (!Check(s_Objective.GetMarkerOwnerID() == -1 && !SCR_MapMarkersUI.IsOwnedMarker(s_Objective) && !s_Objective.CanBeRemovedByOwner(), "local insertion retains objective identity and disables native edit/drag/delete eligibility")) return false; + if (!Check(s_Objective.ERR_ProbeAttachMapWidget() && s_Objective.ERR_ProbeMapText() == "Unknown location", "objective first label rendered through actual native layout")) return false; + int coordinates[2]; + s_Objective.SetDiscoveryPosition("6123.25 0 7345.75", 1); + s_Objective.GetWorldPos(coordinates); + if (!Check(coordinates[0] == 6250 && coordinates[1] == 7250, "first clue stores only stable 500m search-square center")) return false; + s_Objective.SetDiscoveryPosition("6123.25 0 7345.75", 2); + s_Objective.GetWorldPos(coordinates); + if (!Check(coordinates[0] == 6123 && coordinates[1] == 7346, "identification moves same native marker to exact rounded coordinates")) return false; + Widget originalWidget = s_Objective.GetRootWidget(); + s_Objective.SetCustomText("Radio station"); + if (!Check(s_Objective.GetRootWidget() == originalWidget && s_Objective.ERR_ProbeMapText() == "Radio station", "identification refreshes existing native widget without recreating marker")) return false; + if (!Check(manager.GetStaticMarkers().Count() == originalCount + 2, "label change creates no additional marker")) return false; + s_Objective.ERR_ProbeDetachMapWidget(); + s_Objective.SetCustomText("Initial helicopter pickup site"); + if (!Check(!s_Objective.GetRootWidget() && s_Objective.GetCustomText() == "Initial helicopter pickup site", "closed widget accepts data-only update safely")) return false; + if (!Check(s_Objective.ERR_ProbeAttachMapWidget() && s_Objective.ERR_ProbeMapText() == "Initial helicopter pickup site", "new native widget renders latest saved label")) return false; + manager.SetStaticMarkerDisabled(s_Objective, true); + if (!Check(manager.ERR_ProbeRetainsDiscoveryMarker(s_Objective) && !manager.GetStaticMarkers().Contains(s_Objective), "native culling retains objective only in disabled list")) return false; + manager.ERR_RemoveDiscoveryMarker(s_Objective); + if (!Check(!manager.ERR_ProbeRetainsDiscoveryMarker(s_Objective) && !s_Objective.GetRootWidget(), "deleting culled objective removes both memberships and its widget")) return false; + manager.ERR_RemoveDiscoveryMarker(s_Objective); + if (!Check(!manager.ERR_ProbeRetainsDiscoveryMarker(s_Objective), "duplicate owned cleanup cannot reactivate objective")) return false; + Stop(); + return Check(manager.GetStaticMarkers().Count() == originalCount, "owned probe widgets and markers removed; mission markers preserved"); + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c new file mode 100644 index 0000000..95df39b --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c @@ -0,0 +1,163 @@ +#ifdef WORKBENCH +class ERR_NativeEnvironmentSample : ERR_EnvironmentService +{ + bool Apply(TimeAndWeatherManagerEntity manager, int dateCode, int profile) { return StartOn(manager, dateCode, profile); } +} +// Explicit isolated environment smoke outcome. It temporarily changes the private +// native world, restores date/weather family/looping, then requests a round reset. +class ERR_NativeEnvironmentProbe +{ + protected ERR_GameMode m_Mode; + protected TimeAndWeatherManagerEntity m_Manager; + protected ref ERR_NativeEnvironmentSample m_Sample; + protected ref ERR_Settings m_TestSettings; + protected bool m_Snapshot; + protected bool m_Restored; + protected bool m_Stopped; + protected bool m_OwnsSettings; + protected bool m_RestoreDateAccepted; + protected int m_Year; + protected int m_Month; + protected int m_Day; + protected string m_Weather; + protected bool m_Looping; + protected float m_Clock; + protected float m_DayDuration; + protected bool m_DayAdvances; + protected float m_Wait; + protected float m_Deadline; + protected int m_Step; + protected int m_Result; + void ERR_NativeEnvironmentProbe(ERR_GameMode mode) { m_Mode = mode; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: environment " + detail); return true; } + Print("ERR SMOKE FAIL: environment " + detail, LogLevel.ERROR); + m_Result = -1; + Stop(); + return false; + } + protected string CurrentWeather() + { + if (!m_Manager || !m_Manager.GetCurrentWeatherState()) return ""; + return m_Manager.GetCurrentWeatherState().GetStateName(); + } + protected void Restore() + { + if (!m_Snapshot || m_Restored || !m_Manager) return; + m_Restored = true; + if (m_Sample) m_Sample.Stop(); + m_RestoreDateAccepted = m_Manager.SetDate(m_Year, m_Month, m_Day, true); + m_Manager.ForceWeatherTo(m_Looping, m_Weather, 0, 24); + } + void Stop() + { + if (m_Stopped) return; + Restore(); + m_Stopped = true; + if (m_OwnsSettings) + { + string path = "$profile:erri-native-environment-probe.json"; + FileIO.DeleteFile(path); FileIO.DeleteFile(path + ".bak"); FileIO.DeleteFile(path + ".tmp"); + m_OwnsSettings = false; + } + } + protected bool SettingsChecks() + { + string path = "$profile:erri-native-environment-probe.json"; + if (!Check(!FileIO.FileExists(path) && !FileIO.FileExists(path + ".bak") && !FileIO.FileExists(path + ".tmp"), "environment fixture filenames are unused")) return false; + m_OwnsSettings = true; + JsonSaveContext json = new JsonSaveContext(); + json.EnableTypeDiscriminator(false); + foreach (string key : ERR_Settings.Keys()) + if (key != "startDateCode" && key != "weatherProfile") json.WriteValue(key, m_Mode.Settings().Get(key)); + if (!Check(json.SaveToFile(path), "owned legacy settings fixture written")) return false; + m_TestSettings = new ERR_Settings(path); + JsonLoadContext unchanged = new JsonLoadContext(); + if (!Check(m_TestSettings.Get("startDateCode") == 0 && m_TestSettings.Get("weatherProfile") == 0 && unchanged.LoadFromFile(path) && !unchanged.DoesKeyExist("startDateCode") && !unchanged.DoesKeyExist("weatherProfile"), "missing environment settings preserve authored defaults without rewriting legacy file")) return false; + if (!Check(m_TestSettings.Set("startDateCode", 1501231) && m_TestSettings.Set("weatherProfile", 2), "date and weather persist in owned fixture settings")) return false; + ERR_Settings reloaded = new ERR_Settings(path); + if (!Check(reloaded.Get("startDateCode") == 1501231 && reloaded.Get("weatherProfile") == 2 && reloaded.Get("radioDefenceSeconds") == m_Mode.Settings().Get("radioDefenceSeconds"), "odd maximum date code round-trips exactly and old settings survive")) return false; + if (!Check(!m_TestSettings.Set("startDateCode", 229) && !m_TestSettings.Set("weatherProfile", 4), "non-leap-century date and unknown profile cannot be saved")) return false; + int originalDate = m_Mode.Settings().Get("startDateCode"); + int originalProfile = m_Mode.Settings().Get("weatherProfile"); + array replies = {}; + m_Mode.Admin().Execute(m_Mode, false, "mission weather set rain", replies); + if (!Check(replies.Count() == 1 && replies[0].Contains("Administrator") && m_Mode.Settings().Get("startDateCode") == originalDate && m_Mode.Settings().Get("weatherProfile") == originalProfile, "unauthorized environment command preserves real settings")) return false; + replies.Clear(); + ERR_EnvironmentCommands.Execute(m_TestSettings, m_Mode.Environment(), {"mission", "date", "set", "2000-02-29"}, replies); + if (!Check(m_TestSettings.Get("startDateCode") == 1000229 && replies.Count() == 1 && replies[0].Contains("next round"), "natural leap-date command saves only next-round settings")) return false; + replies.Clear(); + ERR_EnvironmentCommands.Execute(m_TestSettings, m_Mode.Environment(), {"mission", "weather", "set", "clear"}, replies); + if (!Check(m_TestSettings.Get("weatherProfile") == 1 && replies.Count() == 1 && replies[0].Contains("Current round unchanged"), "named weather command saves only next-round settings")) return false; + replies.Clear(); + ERR_EnvironmentCommands.Execute(m_TestSettings, m_Mode.Environment(), {"mission", "date", "set", "1900-00-00"}, replies); + if (!Check(m_TestSettings.Get("startDateCode") == 1000229 && replies[0].Contains("Invalid"), "zero month/day cannot masquerade as authored date")) return false; + return true; + } + int Tick(float now) + { + if (m_Result != 0) return m_Result; + if (m_Stopped) return -1; + if (!Replication.IsServer() || !m_Mode || !m_Mode.Active()) { Check(false, "requires active server authority"); return -1; } + if (m_Deadline > 0 && now > m_Deadline) { Check(false, "native environment request timed out"); return -1; } + if (now < m_Wait) return 0; + if (m_Step == 0) + { + ChimeraWorld world = ChimeraWorld.CastFrom(m_Mode.GetWorld()); + if (world) m_Manager = world.GetTimeAndWeatherManager(); + if (!Check(m_Manager && m_Manager.GetCurrentWeatherState() && m_Mode.Environment().Started(), "native environment manager and round service available")) return -1; + m_Manager.GetDate(m_Year, m_Month, m_Day); + m_Weather = CurrentWeather(); m_Looping = m_Manager.IsWeatherLooping(); + m_Clock = m_Manager.GetTimeOfTheDay(); m_DayDuration = m_Manager.GetDayDuration(); m_DayAdvances = m_Manager.GetIsDayAutoAdvanced(); + m_Snapshot = true; + m_Deadline = now + 15000; + if (!SettingsChecks()) return -1; + if (!Check(CurrentWeather() == m_Weather && m_Manager.GetYear() == m_Year && m_Manager.GetMonth() == m_Month && m_Manager.GetDay() == m_Day, "saving fixture environment settings does not mutate native world")) return -1; + for (int profile = 1; profile <= 3; profile++) + if (!Check(ERR_EnvironmentService.HasWeatherState(m_Manager, ERR_EnvironmentService.WeatherStateName(profile)), "selected vanilla weather family exists: " + ERR_EnvironmentService.ProfileName(profile))) return -1; + m_Sample = new ERR_NativeEnvironmentSample(); + if (!Check(!m_Sample.Apply(m_Manager, 229, 1) && !m_Sample.Apply(m_Manager, 1000229, 4) && !m_Sample.Started(), "invalid date/profile rejected before native changes")) return -1; + if (!Check(m_Sample.Apply(m_Manager, 890601, 1), "clear profile and specific date requested once")) return -1; + m_Step = 1; m_Wait = now + 500; + return 0; + } + if (m_Step == 1) + { + if (!Check(CurrentWeather() == "Clear" && m_Manager.IsWeatherLooping() && m_Manager.GetYear() == 1989 && m_Manager.GetMonth() == 6 && m_Manager.GetDay() == 1, "native clear weather and requested date applied after frame")) return -1; + if (!Check(m_Sample.Apply(m_Manager, 1000229, 3) && m_Sample.DateCode() == 890601 && m_Sample.Profile() == 1 && CurrentWeather() == "Clear", "repeated start cannot apply another date or profile")) return -1; + m_Sample.Stop(); + if (!Check(!m_Sample.Apply(m_Manager, 1000229, 3), "stopped environment cannot restart")) return -1; + m_Sample = new ERR_NativeEnvironmentSample(); + if (!Check(m_Sample.Apply(m_Manager, 1000229, 2), "overcast and leap date requested on fresh service")) return -1; + m_Step = 2; m_Wait = now + 500; + return 0; + } + if (m_Step == 2) + { + if (!Check(CurrentWeather() == "Overcast" && m_Manager.GetYear() == 2000 && m_Manager.GetMonth() == 2 && m_Manager.GetDay() == 29, "native overcast and leap date accepted")) return -1; + m_Sample.Stop(); m_Sample = new ERR_NativeEnvironmentSample(); + if (!Check(m_Sample.Apply(m_Manager, 0, 3), "rain profile preserves authored/current date when date override is disabled")) return -1; + m_Step = 3; m_Wait = now + 500; + return 0; + } + if (m_Step == 3) + { + if (!Check(CurrentWeather() == "Rainy" && m_Manager.GetYear() == 2000 && m_Manager.GetMonth() == 2 && m_Manager.GetDay() == 29, "native rainy family applied without changing date")) return -1; + float clockAdvance = m_Manager.GetTimeOfTheDay() - m_Clock; + if (clockAdvance < 0) clockAdvance += 24; + if (!Check(m_Manager.GetDayDuration() == m_DayDuration && m_Manager.GetIsDayAutoAdvanced() == m_DayAdvances && clockAdvance < 0.1, "environment does not reset clock or progression")) return -1; + Restore(); + m_Step = 4; m_Wait = now + 500; + return 0; + } + if (m_Step == 4) + { + if (!Check(m_RestoreDateAccepted && m_Manager.GetYear() == m_Year && m_Manager.GetMonth() == m_Month && m_Manager.GetDay() == m_Day && CurrentWeather() == m_Weather && m_Manager.IsWeatherLooping() == m_Looping, "fixture restores original native date, weather family and looping")) return -1; + m_Result = 1; Stop(); + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c new file mode 100644 index 0000000..0046a03 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c @@ -0,0 +1,118 @@ +#ifdef WORKBENCH +// Only environment-restart opts into this fixed private path. The runner must +// refuse all preexisting fixture files and require exactly two real rounds. +class ERR_NativeEnvironmentRestartProbe +{ + static const string PATH = "$profile:erri-environment-restart.json"; + static const string MARKER = "$profile:erri-environment-restart-round.json"; + protected ERR_GameMode m_Mode; + protected TimeAndWeatherManagerEntity m_Manager; + protected bool m_Failed; + protected bool m_Stopped; + protected bool m_Complete; + protected int m_Round = 1; + protected int m_InitialDate; + protected string m_InitialWeather; + protected bool m_InitialLoop; + protected float m_Wait; + protected float m_Hour; + protected float m_Duration; + + void ERR_NativeEnvironmentRestartProbe(ERR_GameMode mode) + { + m_Mode = mode; + ChimeraWorld world = ChimeraWorld.CastFrom(mode.GetWorld()); + if (world) m_Manager = world.GetTimeAndWeatherManager(); + if (!Check(m_Manager && m_Manager.GetCurrentWeatherState(), "world environment exists before production settings and service initialization")) return; + m_InitialDate = DateCode(); + m_InitialWeather = Weather(); + m_InitialLoop = m_Manager.IsWeatherLooping(); + if (FileIO.FileExists(MARKER)) + { + JsonLoadContext marker = new JsonLoadContext(); + int stage; + if (!Check(marker.LoadFromFile(MARKER) && marker.ReadValue("completedRound", stage) && stage == 1 && FileIO.FileExists(PATH), "second instance sees first round's completed marker and saved settings")) return; + m_Round = 2; + } + else + { + if (!Check(!FileIO.FileExists(PATH) && !FileIO.FileExists(PATH + ".bak") && !FileIO.FileExists(PATH + ".tmp"), "first instance owns previously unused fixture settings paths")) return; + } + PrintFormat("ERR ENVIRONMENT RESTART INSTANCE: round=%1 authoredDate=%2 authoredWeather=%3", m_Round, m_InitialDate, m_InitialWeather); + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: environment restart " + detail); return true; } + m_Failed = true; + Print("ERR SMOKE FAIL: environment restart " + detail, LogLevel.ERROR); + return false; + } + protected int DateCode() { return (m_Manager.GetYear() - 1900) * 10000 + m_Manager.GetMonth() * 100 + m_Manager.GetDay(); } + protected string Weather() + { + WeatherState state = m_Manager.GetCurrentWeatherState(); + if (!state) return "unavailable"; + return state.GetStateName(); + } + int Round() { return m_Round; } + void Stop() { m_Stopped = true; } + int Tick(float now) + { + if (m_Failed || m_Stopped) return -1; + if (m_Complete) return 1; + if (m_Wait == 0) + { + if (!Check(m_Mode.Environment().Started() && m_Mode.Time().Started(), "production round services started")) return -1; + if (!Check(m_Mode.Settings().Get("startTimeMinutes") == 840 && m_Mode.Settings().Get("timeMultiplier") == 1 && m_Mode.Time().StartMinutes() == 840 && m_Mode.Time().Multiplier() == 1, "both rounds retain original clock defaults and active progression settings")) return -1; + m_Hour = m_Manager.GetTimeOfTheDay(); + m_Duration = m_Manager.GetDayDuration(); + if (m_Round == 1) + { + if (!Check(m_Mode.Settings().Get("startDateCode") == 0 && m_Mode.Settings().Get("weatherProfile") == 0 && m_Mode.Environment().DateCode() == 0 && m_Mode.Environment().Profile() == 0, "first instance uses authored environment defaults")) return -1; + if (!Check(DateCode() == m_InitialDate && Weather() == m_InitialWeather && m_Manager.IsWeatherLooping() == m_InitialLoop, "default production startup preserves authored date and weather")) return -1; + array replies = {}; + if (!Check(ERR_EnvironmentCommands.Execute(m_Mode.Settings(), m_Mode.Environment(), {"mission", "date", "set", "2000-02-29"}, replies), "production date command handled")) return -1; + if (!Check(ERR_EnvironmentCommands.Execute(m_Mode.Settings(), m_Mode.Environment(), {"mission", "weather", "set", "overcast"}, replies), "production weather command handled")) return -1; + if (!Check(replies.Count() == 2 && replies[0].Contains("Saved for next round") && replies[1].Contains("Saved for next round"), "both commands report durable next-round saves")) return -1; + // This is the actual mode's settings owner, not a detached sample service. + ERR_Settings disk = new ERR_Settings(PATH); + if (!Check(disk.Get("startDateCode") == 1000229 && disk.Get("weatherProfile") == 2 && disk.Get("radioDefenceSeconds") == 180 && disk.Get("timeMultiplier") == 1, "production saves persist environment and preserve unrelated defaults")) return -1; + } + else + { + if (!Check(m_Mode.Settings().Get("startDateCode") == 1000229 && m_Mode.Settings().Get("weatherProfile") == 2 && m_Mode.Environment().DateCode() == 1000229 && m_Mode.Environment().Profile() == 2, "second real mode loads saved date and weather into production services")) return -1; + } + m_Wait = now + 2500; + return 0; + } + if (now < m_Wait) return 0; + if (!Check(m_Mode.Settings().Get("startDateCode") == 1000229 && m_Mode.Settings().Get("weatherProfile") == 2, "saved next-round settings remain intact")) return -1; + if (m_Round == 1) + { + if (!Check(m_Mode.Environment().DateCode() == 0 && m_Mode.Environment().Profile() == 0 && DateCode() == m_InitialDate && Weather() == m_InitialWeather && m_Manager.IsWeatherLooping() == m_InitialLoop, "saving real mode settings leaves current environment unchanged across native ticks")) return -1; + } + else if (!Check(DateCode() == 1000229 && Weather() == "Overcast" && m_Manager.IsWeatherLooping(), "second round applies exact leap date and selected native weather family")) return -1; + float advance = m_Manager.GetTimeOfTheDay() - m_Hour; + if (advance < 0) advance += 24; + if (!Check(advance > 0 && advance < 0.02 && m_Manager.GetIsDayAutoAdvanced() && m_Duration == ERR_TimeService.DayDuration(1) && m_Manager.GetDayDuration() == m_Duration, "native clock continues advancing without an environment-induced reset or rate change")) return -1; + if (m_Round == 1) + { + JsonSaveContext marker = new JsonSaveContext(); + marker.EnableTypeDiscriminator(false); + marker.WriteValue("completedRound", 1); + if (!Check(marker.SaveToFile(MARKER), "first completed round leaves restart handoff marker")) return -1; + } + else + { + if (FileIO.FileExists(PATH)) FileIO.DeleteFile(PATH); + if (FileIO.FileExists(PATH + ".bak")) FileIO.DeleteFile(PATH + ".bak"); + if (FileIO.FileExists(PATH + ".tmp")) FileIO.DeleteFile(PATH + ".tmp"); + if (FileIO.FileExists(MARKER)) FileIO.DeleteFile(MARKER); + if (!Check(!FileIO.FileExists(PATH) && !FileIO.FileExists(PATH + ".bak") && !FileIO.FileExists(PATH + ".tmp") && !FileIO.FileExists(MARKER), "successful second round removes only fixture settings and marker files")) return -1; + } + m_Complete = true; + return 1; + } +} + +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c new file mode 100644 index 0000000..f962fc5 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c @@ -0,0 +1,172 @@ +#ifdef WORKBENCH +// Real vehicle/character compartments with an isolated synthetic identity roster. +// This is not twelve network clients, manual boarding, medical treatment or flight. +class ERR_NativeExtractionProbe +{ + protected ERR_GameMode m_Mode; + protected Vehicle m_Vehicle; + protected ref ERR_PlayerRoster m_Roster = new ERR_PlayerRoster(); + protected ref ERR_ExtractionService m_All; + protected ref ERR_ExtractionService m_Partial; + protected ref array m_Actors = {}; + protected ref array m_Accounts = {}; + protected ref array m_Seats = {}; + protected vector m_Original[4]; + protected int m_Step; + protected int m_Boarding; + protected int m_Resolutions; + protected float m_Wait; + protected UUID m_NewAccount = "00e77200-0000-0000-0000-000000000099"; + + void ERR_NativeExtractionProbe(ERR_GameMode mode) { m_Mode = mode; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: extraction " + detail); return true; } + Print("ERR SMOKE FAIL: extraction " + detail, LogLevel.ERROR); + return false; + } + protected void Resolved(ERR_ExtractionState state) { m_Resolutions++; } + protected IEntity Character(int index) + { + IEntity actor = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, ERR_Actors.Ground(m_Original[3] + Vector(20 + index * 2, 0, 15))); + if (!actor) return null; + m_Mode.Own(actor); + m_Actors.Insert(actor); + DamageManagerComponent.Cast(actor.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + return actor; + } + protected void MoveHelicopter(bool outside) + { + vector transform[4]; + m_Vehicle.GetWorldTransform(transform); + transform[3] = m_Original[3]; + if (outside) transform[3] = m_Original[3] + "650 150 0"; + m_Vehicle.SetWorldTransform(transform); + } + int Tick(float now) + { + if (now < m_Wait) return 0; + if (m_Step == 0) + { + if (!ERR_NativeTimeProbe.Run(m_Mode)) return -1; + m_Vehicle = m_Mode.ExtractionVehicle(); + if (!Check(m_Vehicle && m_Mode.Extraction().Ready(), "authored transport is ready for twelve prisoners")) return -1; + int count = m_Mode.Extraction().Seats(m_Seats); + PrintFormat("ERR EXTRACTION CAPACITY: usable pilot/passenger positions=%1", count); + if (!Check(count >= 12 && !m_Mode.SetExtractionVehicle(m_Vehicle), "running mission cannot rebind its extraction vehicle")) return -1; + m_Vehicle.GetWorldTransform(m_Original); + DamageManagerComponent.Cast(m_Vehicle.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + for (int i = 0; i < 12; i++) + { + IEntity actor = Character(i); + UUID account = "00e77200-0000-0000-0000-" + (i + 1).ToString(12, true); + if (!Check(actor && m_Roster.Bind(10001 + i, account), "isolated participant created")) return -1; + m_Accounts.Insert(account); + m_Roster.Spawned(10001 + i, actor); + } + m_All = new ERR_ExtractionService(m_Roster); + if (!Check(m_All.Assign(m_Vehicle) && !m_All.Begin(m_Original[3], 0) && m_All.Begin(m_Original[3], 500), "invalid boundary rejected without preventing a valid service start")) return -1; + if (!Check(!m_All.Assign(m_Vehicle) && !m_All.Begin(m_Original[3], 500), "duplicate binding and start rejected")) return -1; + m_All.OnResolved().Insert(Resolved); + m_Step = 1; + m_Wait = now + 1000; + return 0; + } + if (m_Step == 1) + { + CompartmentAccessComponent access = CompartmentAccessComponent.Cast(m_Actors[m_Boarding].FindComponent(CompartmentAccessComponent)); + if (!Check(access && access.GetInVehicle(m_Vehicle, m_Seats[m_Boarding], true, -1, ECloseDoorAfterActions.INVALID, false), "native boarding request accepted")) return -1; + m_Boarding++; + m_Wait = now + 500; + if (m_Boarding == 12) { m_Step = 2; m_Wait = now + 3000; } + return 0; + } + if (m_Step == 2) + { + for (int i = 0; i < 12; i++) + if (!Check(CompartmentAccessComponent.GetVehicleIn(m_Actors[i]) == m_Vehicle && m_Seats[i].GetOccupant() == m_Actors[i], "participant occupies a distinct physical seat")) return -1; + m_All.Tick(ERR_Phase.EXTRACTION); + if (!Check(m_All.State() == ERR_ExtractionState.WAITING && m_All.EscapedCount() == 0, "boarding inside boundary does not win")) return -1; + MoveHelicopter(true); + m_Step = 3; + m_Wait = now + 2500; + return 0; + } + if (m_Step == 3) + { + m_All.Tick(ERR_Phase.RADIO_SEARCH); + if (!Check(m_All.State() == ERR_ExtractionState.WAITING, "leaving before extraction phase does not win")) return -1; + m_All.Tick(ERR_Phase.EXTRACTION); + array winners = {}; + m_All.ConnectedWinners(winners); + if (!Check(m_All.EscapedCount() == 12 && m_All.LeftBehindCount() == 0 && winners.Count() == 12 && m_Resolutions == 1, "all twelve physical occupants escape exactly once")) return -1; + m_All.Tick(ERR_Phase.EXTRACTION); + if (!Check(m_Resolutions == 1 && !m_All.Assign(m_Vehicle), "resolved extraction neither repeats nor replaces its vehicle")) return -1; + MoveHelicopter(false); + m_Step = 4; + m_Wait = now + 2500; + return 0; + } + if (m_Step == 4) + { + SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_Actors[0].FindComponent(SCR_CharacterDamageManagerComponent)); + damage.EnableDamageHandling(true); + damage.Kill(Instigator.CreateInstigator(m_Actors[0])); + vector exitTransform[4]; + m_Actors[1].GetWorldTransform(exitTransform); + exitTransform[3] = ERR_Actors.Ground(m_Original[3] + "30 0 0"); + CompartmentAccessComponent access = CompartmentAccessComponent.Cast(m_Actors[1].FindComponent(CompartmentAccessComponent)); + if (!Check(access.GetOutVehicle_NoDoor(exitTransform, false, false), "one survivor leaves the helicopter")) return -1; + CharacterControllerComponent.Cast(m_Actors[2].FindComponent(CharacterControllerComponent)).SetUnconscious(true); + m_Roster.Disconnect(10004); + IEntity newcomer = Character(12); + if (!Check(newcomer && m_Roster.Bind(10004, m_NewAccount), "departed connection ID reused by a distinct account")) return -1; + m_Roster.Spawned(10004, newcomer); + m_Partial = new ERR_ExtractionService(m_Roster); + if (!Check(m_Partial.Assign(m_Vehicle) && m_Partial.Begin(m_Original[3], 500), "isolated partial escape case starts")) return -1; + m_Step = 5; + m_Wait = now + 3000; + return 0; + } + if (m_Step == 5) + { + if (!Check(!ERR_Actors.Alive(m_Actors[0]) && !CompartmentAccessComponent.GetVehicleIn(m_Actors[1]), "dead occupant and left-behind survivor are physically distinct cases")) return -1; + if (!Check(ERR_Actors.Alive(m_Actors[2]) && !ERR_Actors.CanFight(m_Actors[2]) && CompartmentAccessComponent.GetVehicleIn(m_Actors[2]) == m_Vehicle, "unconscious passenger remains physically aboard")) return -1; + MoveHelicopter(true); + m_Step = 6; + m_Wait = now + 2500; + return 0; + } + if (m_Step == 6) + { + m_Partial.Tick(ERR_Phase.EXTRACTION); + array winners = {}; + m_Partial.ConnectedWinners(winners); + if (!Check(m_Partial.EscapedCount() == 10 && m_Partial.LeftBehindCount() == 3 && winners.Count() == 9, "partial escape counts only living aboard participants")) return -1; + if (!Check(m_Partial.DidEscape(m_Accounts[2]) && m_Partial.DidEscape(m_Accounts[3]) && !m_Partial.DidEscape(m_Accounts[0]) && !m_Partial.DidEscape(m_Accounts[1]) && !m_Partial.DidEscape(m_NewAccount), "unconscious and reserved occupants escape; dead and absent people do not")) return -1; + if (!Check(winners.Contains(10003) && !winners.Contains(10004), "recycled connection ID does not inherit another account's win")) return -1; + if (!Check(m_Roster.Bind(10040, m_Accounts[3]), "escaped reserved account can rebind to a new connection")) return -1; + m_Partial.ConnectedWinners(winners); + if (!Check(winners.Count() == 10 && winners.Contains(10040) && !winners.Contains(10004), "result follows escaped identity after rebinding")) return -1; + m_Partial.Tick(ERR_Phase.EXTRACTION); + if (!Check(m_Partial.EscapedCount() == 10 && m_Partial.LeftBehindCount() == 3, "terminal result snapshot remains stable")) return -1; + ERR_PlayerRoster emptyRoster = new ERR_PlayerRoster(); + ERR_ExtractionService empty = new ERR_ExtractionService(emptyRoster); + if (!Check(empty.Assign(m_Vehicle) && empty.Begin(m_Original[3], 500), "empty-roster control starts")) return -1; + empty.Tick(ERR_Phase.EXTRACTION); + if (!Check(empty.State() == ERR_ExtractionState.WAITING, "unregistered occupants cannot win the mission")) return -1; + ERR_ExtractionService stopped = new ERR_ExtractionService(m_Roster); + if (!Check(stopped.Assign(m_Vehicle) && stopped.Begin(m_Original[3], 500), "stopped-service control starts")) return -1; + stopped.Stop(); + stopped.Tick(ERR_Phase.EXTRACTION); + if (!Check(stopped.State() == ERR_ExtractionState.WAITING, "stopped extraction cannot resolve")) return -1; + if (!ERR_NativeResultProbe.Run(m_Partial, m_Accounts[3], m_Accounts[0]) || !ERR_NativeTimeProbe.VerifyProgression(m_Mode)) return -1; + MoveHelicopter(false); + for (int i = m_Actors.Count() - 1; i >= 0; i--) ERR_Actors.DeleteSpawned(m_Actors[i]); + m_Step = 7; + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c new file mode 100644 index 0000000..05161d5 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c @@ -0,0 +1,75 @@ +#ifdef WORKBENCH +// Read-only native assertions. Run after site preparation and faction init, +// before destructive vehicle fixtures. Does not load legacy full faction configs. +class ERR_NativeFactionCatalogProbe +{ + protected static ResourceName UAZ() { return "{259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et"; } + protected static ResourceName Mi8() { return "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et"; } + protected static bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: faction-catalog " + detail); return true; } + Print("ERR SMOKE FAIL: faction-catalog " + detail, LogLevel.ERROR); + return false; + } + protected static bool Catalogs(SCR_Faction faction) + { + array catalogs = {}; + if (!Check(faction.GetAllFactionEntityCatalogs(catalogs) == 6, faction.GetFactionKey() + " retains all six catalog types")) return false; + SCR_EntityCatalog vehicles = faction.GetFactionEntityCatalogOfType(EEntityCatalogType.VEHICLE); + array entries = {}; + if (!Check(vehicles && vehicles.GetEntityList(entries) == 2, faction.GetFactionKey() + " has exactly two supported vehicle entries")) return false; + bool uaz, mi8; + foreach (SCR_EntityCatalogEntry entry : entries) + { + if (!Check(entry != null, "vehicle entry exists")) return false; + ResourceName prefab = entry.GetPrefab(); + PrintFormat("ERR FACTION VEHICLE: faction=%1 prefab=%2", faction.GetFactionKey(), prefab); + if (prefab == UAZ()) uaz = true; + else if (prefab == Mi8()) mi8 = true; + else return Check(false, "unexpected vehicle catalog entry " + prefab); + } + if (!Check(uaz && mi8 && vehicles.GetEntryWithPrefab(UAZ()) && vehicles.GetEntryWithPrefab(Mi8()), "catalog lookup resolves both unique mission vehicles")) return false; + array retained = {EEntityCatalogType.CHARACTER, EEntityCatalogType.GROUP, EEntityCatalogType.WEAPONS_TRIPOD, EEntityCatalogType.ITEM, EEntityCatalogType.SUPPLY_CONTAINER_ITEM}; + foreach (EEntityCatalogType kind : retained) + { + SCR_EntityCatalog catalog = faction.GetFactionEntityCatalogOfType(kind); + if (!Check(catalog != null, faction.GetFactionKey() + " non-vehicle catalog exists " + typename.EnumToString(EEntityCatalogType, kind))) return false; + catalog.GetEntityList(entries); + PrintFormat("ERR FACTION RETAINED: faction=%1 type=%2 entries=%3", faction.GetFactionKey(), typename.EnumToString(EEntityCatalogType, kind), entries.Count()); + // Installed US/USSR supply-container catalogs are intentionally empty. + if (kind != EEntityCatalogType.SUPPLY_CONTAINER_ITEM && !Check(!entries.IsEmpty(), "retained native content catalog is initialized and nonempty")) return false; + } + return true; + } + protected static bool Items(SCR_Faction faction, ResourceName dressing, ResourceName saline, ResourceName radio) + { + SCR_EntityCatalog items = faction.GetFactionEntityCatalogOfType(EEntityCatalogType.ITEM); + return Check(items && items.GetEntryWithPrefab(dressing) && items.GetEntryWithPrefab(saline) && items.GetEntryWithPrefab(radio), faction.GetFactionKey() + " native dressing saline and backpack radio remain catalogued"); + } + static bool Run(ERR_GameMode mode) + { + if (!Check(Replication.IsServer() && mode && mode.Active(), "active authority available")) return false; + FactionManager manager = GetGame().GetFactionManager(); + if (!Check(manager != null, "native faction manager exists")) return false; + SCR_Faction us = SCR_Faction.Cast(manager.GetFactionByKey("US")); + SCR_Faction ussr = SCR_Faction.Cast(manager.GetFactionByKey("USSR")); + if (!Check(us && ussr && mode.PlayerFaction() == us && mode.EnemyFaction() == ussr, "mission retains US and USSR faction identities")) return false; + if (!Check(us.IsFactionEnemy(ussr) && ussr.IsFactionEnemy(us) && !us.IsFactionEnemy(us) && !ussr.IsFactionEnemy(ussr), "mutual enemy and same-faction relations preserved")) return false; + if (!Check(us.GetFactionRadioEncryptionKey() == "chickenNuggets" && ussr.GetFactionRadioEncryptionKey() == "coldBorscht" && us.GetFactionRadioFrequency() == 48000 && ussr.GetFactionRadioFrequency() == 42000, "native radio encryption and frequencies preserved")) return false; + if (!Check(us.GetCallsignInfo() && ussr.GetCallsignInfo(), "native faction callsign configurations resolve")) return false; + if (!Catalogs(us) || !Catalogs(ussr)) return false; + if (!Items(us, "{A81F501D3EF6F38E}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_US_01.et", "{00E36F41CA310E2A}Prefabs/Items/Medicine/SalineBag_01/SalineBag_US_01.et", "{9B6B61BB3FE3DFB0}Prefabs/Items/Equipment/Radios/Radio_ANPRC77.et")) return false; + if (!Items(ussr, "{C3F1FA1E2EC2B345}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et", "{527D7C5D2E476BDC}Prefabs/Items/Medicine/SalineBag_01/SalineBag_USSR_01.et", "{54C68E438DD34265}Prefabs/Items/Equipment/Radios/Radio_R107M.et")) return false; + SCR_EntityCatalogManagerComponent catalogManager = SCR_EntityCatalogManagerComponent.GetInstance(); + if (!Check(catalogManager && catalogManager.GetFactionEntityCatalogOfType(EEntityCatalogType.VEHICLE, "US") && catalogManager.GetFactionEntityCatalogOfType(EEntityCatalogType.ITEM, "USSR"), "global catalog manager retains faction vehicle and inventory access")) return false; + ERR_SiteRuntime depot = mode.Sites().Find("everon-supply-2"); + Vehicle helicopter = mode.ExtractionVehicle(); + if (!Check(depot && depot.Transport && ERR_Actors.Alive(depot.Transport) && depot.Transport.GetPrefabData().GetPrefabName() == UAZ(), "physical finite depot vehicle is supported UAZ")) return false; + if (!Check(helicopter && ERR_Actors.Alive(helicopter) && helicopter.GetPrefabData().GetPrefabName() == Mi8() && helicopter.FindComponent(HelicopterControllerComponent), "physical extraction aircraft is supported Mi8")) return false; + array seats = {}; + if (!Check(mode.Extraction().Seats(seats) >= 12, "physical aircraft still has required capacity")) return false; + Print("ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim"); + return true; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c new file mode 100644 index 0000000..44d0141 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeFlightFootprint.c @@ -0,0 +1,141 @@ +#ifdef WORKBENCH +// Test-only horizontal envelope, independent of aircraft yaw/pitch/roll. +// All distances are around the native physics origin, not the rotor centre. +class ERR_FlightFootprintRules +{ + static float CylinderSphere(float originDistance, float radius, float thickness) + { + // Triangle inequality deliberately overbounds the one-sided rotor cylinder. + return originDistance + radius + thickness; + } + static bool Fits(float radius, float initialDrift, float initialHeight) + { + if (!(radius > 0 && radius < 32 && initialDrift >= 0 && initialDrift < 32)) return false; + if (!(initialHeight >= -3 && initialHeight <= 5)) return false; + return radius + initialDrift + 8 + 1 <= 40 && radius + initialHeight + 18 + 1 <= 60; + } +} + +class ERR_NativeFlightFootprint +{ + static const int MAX_ENTITIES = 256; + static const int MAX_DEPTH = 16; + static const int MAX_HITZONES = 512; + protected static bool Refuse(string reason) + { + Print("ERR POWERED FOOTPRINT: refused " + reason); + return false; + } + protected static bool PointRadius(vector point, vector origin, inout float radius) + { + float distance = vector.Distance(point, origin); + if (!(distance >= 0 && distance < 1000)) return false; + radius = Math.Max(radius, distance); + return true; + } + static bool Measure(Vehicle aircraft, VehicleHelicopterSimulation simulation, vector pad, out vector origin, out float radius) + { + radius = 0; + if (!aircraft || !simulation || !simulation.IsValid() || !aircraft.GetPrefabData()) return Refuse("missing initialized native airframe"); + if (aircraft.GetPrefabData().GetPrefabName() != "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et") return Refuse("different airframe resource"); + // Model bounds and damage pivots are world-space. The simulation getter + // exposes internal physics space (identity at the airport in 100422), so + // use this same physical aircraft's actual entity world transform. + vector worldTransform[4]; aircraft.GetWorldTransform(worldTransform); + origin = worldTransform[3]; + for (int axis = 0; axis < 3; axis++) + if (!(Math.AbsFloat(worldTransform[axis].Length() - 1) < 0.001)) return Refuse("non-unit native entity world basis"); + + array entities = {aircraft}; + array depths = {0}; + array seenZones = {}; + int meshes, mainSweeps, tailSweeps; + float modelRadius, damageRadius, simulationRadius; + for (int index = 0; index < entities.Count(); index++) + { + IEntity entity = entities[index]; + if (!entity) return Refuse("hierarchy changed during measurement"); + if (entity.GetVObject()) + { + vector mins, maxs; entity.GetWorldBounds(mins, maxs); + for (int dimension = 0; dimension < 3; dimension++) + if (!(mins[dimension] <= maxs[dimension])) return Refuse("invalid model bounds"); + // A sphere around every corner encloses the complete world AABB. Its radius + // remains conservative under any rigid orientation of the whole aircraft. + for (int x = 0; x < 2; x++) + for (int y = 0; y < 2; y++) + for (int z = 0; z < 2; z++) + { + vector corner = mins; + if (x == 1) corner[0] = maxs[0]; + if (y == 1) corner[1] = maxs[1]; + if (z == 1) corner[2] = maxs[2]; + if (!PointRadius(corner, origin, modelRadius)) return Refuse("non-finite or excessive model bounds"); + } + meshes++; + } + HitZoneContainerComponent container = HitZoneContainerComponent.Cast(entity.FindComponent(HitZoneContainerComponent)); + if (container) + { + int count = container.CountAllHitZones(); + if (count < 0 || count + seenZones.Count() > MAX_HITZONES) return Refuse("hitzone traversal bound"); + array zones = {}; + if (container.GetAllHitZones(zones) != count || zones.Count() != count) return Refuse("hitzones changed during measurement"); + foreach (HitZone zone : zones) + { + if (!zone || seenZones.Contains(zone)) continue; + seenZones.Insert(zone); + SCR_RotorHitZone rotorZone = SCR_RotorHitZone.Cast(zone); + if (!rotorZone || rotorZone.GetRotorRadius() <= 0) continue; // transmission zones have no sweep + int rotorIndex = rotorZone.GetRotorIndex(); + float expectedRadius, thickness; + if (rotorIndex == 0) { expectedRadius = 12; thickness = 1.5; mainSweeps++; } + else if (rotorIndex == 1) { expectedRadius = 2.3; thickness = 0.75; tailSweeps++; } + else return Refuse("unknown rotor sweep index"); + // Stock thickness is protected with no getter. Scope to the exact prefab + // and verify its public sweep radius against the audited stock constants. + if (!(Math.AbsFloat(rotorZone.GetRotorRadius() - expectedRadius) < 0.001)) return Refuse("stock damage sweep radius changed"); + PointInfo point = rotorZone.GetPointInfo(); + if (!point) return Refuse("missing actual rotor sweep pivot"); + vector rotorWorld[4]; point.GetWorldTransform(rotorWorld); + // Frobenius norm bounds the transform's maximum stretch even with scale + // or shear; do not assume the PointInfo basis is orthonormal. + float scaleSquared = 0; + for (int basis = 0; basis < 3; basis++) scaleSquared += vector.Dot(rotorWorld[basis], rotorWorld[basis]); + float scale = Math.Sqrt(scaleSquared); + if (!(scale > 0 && scale < 4)) return Refuse("invalid damage sweep basis"); + float distance = vector.Distance(origin, rotorWorld[3]); + float sweepBound = ERR_FlightFootprintRules.CylinderSphere(distance, expectedRadius * scale, thickness * scale); + if (!(sweepBound > 0 && sweepBound < 1000)) return Refuse("invalid damage sweep extent"); + damageRadius = Math.Max(damageRadius, sweepBound); + PrintFormat("ERR POWERED FOOTPRINT ROTOR: index=%1 pivot=%2 damageRadius=%3 thickness=%4 scale=%5 sphereBound=%6", rotorIndex, rotorWorld[3], expectedRadius, thickness, scale, sweepBound); + } + } + IEntity child = entity.GetChildren(); + while (child) + { + if (entities.Count() >= MAX_ENTITIES || depths[index] >= MAX_DEPTH || entities.Contains(child)) return Refuse("entity/depth/cycle traversal bound"); + entities.Insert(child); depths.Insert(depths[index] + 1); + child = child.GetSibling(); + } + } + if (meshes == 0 || mainSweeps != 1 || tailSweeps != 1) return Refuse("complete model and both actual damage sweeps required"); + if (simulation.RotorCount() != 2) return Refuse("stock simulation rotor count changed"); + for (int rotor = 0; rotor < 2; rotor++) + { + vector localRotor[4]; simulation.RotorGetTransform(rotor, localRotor); + float physicalRadius = simulation.RotorGetRadius(rotor); + float physicalBound = localRotor[3].Length() + physicalRadius; + if (!(physicalRadius > 0 && physicalBound > 0 && physicalBound < 1000)) return Refuse("invalid native simulation rotor extent"); + simulationRadius = Math.Max(simulationRadius, physicalBound); + PrintFormat("ERR POWERED FOOTPRINT PHYSICS ROTOR: index=%1 localPivot=%2 radius=%3 sphereBound=%4", rotor, localRotor[3], physicalRadius, physicalBound); + } + radius = Math.Max(modelRadius, Math.Max(damageRadius, simulationRadius)); + float initialDrift = vector.DistanceXZ(origin, pad); + float initialHeight = origin[1] - pad[1]; + PrintFormat("ERR POWERED FOOTPRINT: entities=%1 meshes=%2 zones=%3 modelSphere=%4 damageSphere=%5 simulationSphere=%6 completeSphere=%7 initialDrift=%8 initialHeight=%9", entities.Count(), meshes, seenZones.Count(), modelRadius, damageRadius, simulationRadius, radius, initialDrift, initialHeight); + if (!ERR_FlightFootprintRules.Fits(radius, initialDrift, initialHeight)) return Refuse("measured footprint plus initial placement,8m drift and1m margin exceeds40m corridor or60m ceiling"); + return true; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c new file mode 100644 index 0000000..b480393 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c @@ -0,0 +1,106 @@ +#ifdef WORKBENCH +// Optional observations only. Never writes pilot controls, signals or settings. +modded class ERR_NativePoweredFlightProbe +{ + protected bool m_ERRInputDiagChecked; + protected bool m_ERRInputDiagEnabled; + protected int m_ERRInputDiagSamples; + protected int m_ERRWrittenSequence; + protected int m_ERRAppliedSequence; + protected int m_ERRApplyCallbacks; + protected float m_ERRWrittenAt; + protected float m_ERRAppliedAt; + protected float m_ERRWrittenCollective; + protected float m_ERRAppliedCollective; + protected float m_ERRWrittenThrottle; + protected float m_ERRAppliedThrottle; + // Vector elements are cyclic-forward, cyclic-aside, anti-torque, respectively. + protected vector m_ERRWrittenCyclic; + protected vector m_ERRAppliedCyclic; + + protected bool ERR_InputDiagActive() + { + if (!m_ERRInputDiagChecked) + { + string enabled; + m_ERRInputDiagEnabled = System.GetCLIParam("errFlightInputDiag", enabled) && enabled == "1"; + m_ERRInputDiagChecked = true; + } + if (!m_ERRInputDiagEnabled || !m_Bound || m_Stopped || !m_Input) return false; + return PoweredAuthority(); + } + + override void PreparePilotActions(CharacterControllerComponent controller, IEntity owner, ActionManager am, float dt) + { + int before = m_ControlUpdates; + super.PreparePilotActions(controller, owner, am, dt); + if (m_ControlUpdates == before || controller != m_Character || owner != m_Pilot || !ERR_InputDiagActive()) return; + m_ERRWrittenSequence = m_ControlUpdates; + m_ERRWrittenAt = GetGame().GetWorld().GetWorldTime(); + // These are actual owned virtual-action values, not native consumption. + m_ERRWrittenCollective = am.GetActionValue("HelicopterCollectiveIncrease") - am.GetActionValue("HelicopterCollectiveDecrease"); + float forward = am.GetActionValue("HelicopterCyclicForward") - am.GetActionValue("HelicopterCyclicBack"); + float aside = am.GetActionValue("HelicopterCyclicRight") - am.GetActionValue("HelicopterCyclicLeft"); + float torque = am.GetActionValue("HelicopterAntiTorqueRight") - am.GetActionValue("HelicopterAntiTorqueLeft"); + m_ERRWrittenCyclic = Vector(forward, aside, torque); + m_ERRWrittenThrottle = m_Input.GetVehicleThrottle(); // observation only in action mode + } + + override void ApplyPilot(CharacterControllerComponent controller, IEntity owner, float dt) + { + // Snapshot native context before this callback's owned final writes. + ERR_ObserveAppliedFlightInput(controller, owner); + int before = m_ControlUpdates; + super.ApplyPilot(controller, owner, dt); + if (m_ControlUpdates == before || controller != m_Character || owner != m_Pilot || !ERR_InputDiagActive()) return; + m_ERRWrittenSequence = m_ControlUpdates; + m_ERRWrittenAt = GetGame().GetWorld().GetWorldTime(); + m_ERRWrittenCollective = m_Input.GetVehicleCollective(); + m_ERRWrittenThrottle = m_Input.GetVehicleThrottle(); + m_ERRWrittenCyclic = Vector(m_Input.GetVehicleCyclicForward(), m_Input.GetVehicleCyclicAside(), m_Input.GetVehicleAntiTorque()); + } + + void ERR_ObserveAppliedFlightInput(CharacterControllerComponent controller, IEntity owner) + { + if (controller != m_Character || owner != m_Pilot || !ERR_InputDiagActive()) return; + m_ERRApplyCallbacks++; + m_ERRAppliedSequence = m_ERRWrittenSequence; + m_ERRAppliedAt = GetGame().GetWorld().GetWorldTime(); + m_ERRAppliedCollective = m_Input.GetVehicleCollective(); + m_ERRAppliedThrottle = m_Input.GetVehicleThrottle(); + m_ERRAppliedCyclic = Vector(m_Input.GetVehicleCyclicForward(), m_Input.GetVehicleCyclicAside(), m_Input.GetVehicleAntiTorque()); + } + + protected string ERR_ExistingRotorSignal(SignalsManagerComponent signals, string name) + { + if (!signals) return "no-manager"; + int index = signals.FindSignal(name); + if (index < 0) return "missing"; + return string.Format("%1", signals.GetSignalValue(index)); + } + + protected override void Diagnostic(float now) + { + bool due = m_Simulation && m_Aircraft && now >= m_NextLog; + super.Diagnostic(now); + // The existing diagnostic gate is two seconds. Cap at120 batches as well, + // and never call native getters for an unowned or player-claimed fixture. + if (!due || m_ERRInputDiagSamples >= 120 || !ERR_InputDiagActive()) return; + m_ERRInputDiagSamples++; + float writtenAge = -1; + float appliedAge = -1; + if (m_ERRWrittenSequence > 0) writtenAge = now - m_ERRWrittenAt; + if (m_ERRApplyCallbacks > 0) appliedAge = now - m_ERRAppliedAt; + PrintFormat("ERR POWERED INPUT OBSERVATION: sample=%1 writtenSequence=%2 applyCallbacks=%3 beforeWriteSequence=%4 writtenAgeMs=%5 beforeWriteAgeMs=%6", m_ERRInputDiagSamples, m_ERRWrittenSequence, m_ERRApplyCallbacks, m_ERRAppliedSequence, writtenAge, appliedAge); + PrintFormat("ERR POWERED INPUT STAGES: writtenCollective=%1 beforeWriteCollective=%2 writtenFRA=%3 beforeWriteFRA=%4 writtenThrottle=%5 beforeWriteThrottle=%6", m_ERRWrittenCollective, m_ERRAppliedCollective, m_ERRWrittenCyclic, m_ERRAppliedCyclic, m_ERRWrittenThrottle, m_ERRAppliedThrottle); + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + string collective = ERR_ExistingRotorSignal(signals, "MainRotorCollective"); + string forward = ERR_ExistingRotorSignal(signals, "MainRotorCyclicForward"); + string aside = ERR_ExistingRotorSignal(signals, "MainRotorCyclicAside"); + string tail = ERR_ExistingRotorSignal(signals, "TailRotorCollective"); + bool autohover = m_Controller.GetAutohoverEnabled(); + int mode = m_Controller.GetCollectiveMode(); + PrintFormat("ERR POWERED ROTOR SIGNALS: collective=%1 cyclicForward=%2 cyclicAside=%3 tailCollective=%4 autohover=%5 collectiveMode=%6", collective, forward, aside, tail, autohover, mode); + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c new file mode 100644 index 0000000..9892230 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c @@ -0,0 +1,247 @@ +#ifdef WORKBENCH +// Native queue length is not exposed: SCR_AIGroup.GetSpawnQueueSize() is a +// compatibility stub returning zero. Observe dispatch on explicitly tagged +// disposable groups instead; every engine call still reaches unchanged super. +class ERR_NativeGuardDispatchTrace +{ + static int Total; +} +modded class SCR_AIGroup +{ + protected bool m_ERRGuardCancelTracked; + protected int m_ERRGuardCancelDispatches; + protected int m_ERRGuardCancelInitCalls; + protected int m_ERRGuardCancelRequestCalls; + void ERR_TrackGuardCancel() + { + m_ERRGuardCancelTracked = true; + PrintFormat("ERR GUARD CANCEL TRACK: group=%1 initCalls=%2 requests=%3 agents=%4 spawnImmediately=%5 slots=%6 lifecycle=%7", this, m_ERRGuardCancelInitCalls, m_ERRGuardCancelRequestCalls, GetAgentsCount(), GetSpawnImmediately(), m_aUnitPrefabSlots.Count(), GetLifecyclePolicy()); + } + override void EOnInit(IEntity owner) + { + m_ERRGuardCancelInitCalls++; + if (m_ERRGuardCancelTracked) PrintFormat("ERR GUARD CANCEL LATE INIT: group=%1 initCalls=%2", this, m_ERRGuardCancelInitCalls); + super.EOnInit(owner); + } + override void RequestSpawn(int slotsWanted = -1, float observerRange = 0) + { + m_ERRGuardCancelRequestCalls++; + if (m_ERRGuardCancelTracked) PrintFormat("ERR GUARD CANCEL REQUEST: group=%1 request=%2 wanted=%3 range=%4 slots=%5", this, m_ERRGuardCancelRequestCalls, slotsWanted, observerRange, m_aUnitPrefabSlots.Count()); + super.RequestSpawn(slotsWanted, observerRange); + } + int ERR_GuardCancelDispatches() { return m_ERRGuardCancelDispatches; } + // EOnInit assigns the cached utility before requesting members. The ignore- + // spawning branch instead invokes all-members init immediately; exclude it. + bool ERR_GuardCancelPendingInit() { return GetGroupUtilityComponent() && !m_bOnInitInvoked; } + override bool ExpandOneMember() + { + if (m_ERRGuardCancelTracked) + { + m_ERRGuardCancelDispatches++; + ERR_NativeGuardDispatchTrace.Total++; + PrintFormat("ERR GUARD CANCEL DISPATCH: group=%1 dispatch=%2 agents=%3 slots=%4 complete=%5", this, m_ERRGuardCancelDispatches, GetAgentsCount(), m_aUnitPrefabSlots.Count(), IsExpandComplete()); + } + return super.ExpandOneMember(); + } +} + +// Assemble only the owned-group portion of PENDING preparation. No authored +// mission sites, stock, waypoints or live mission service are cloned or changed. +class ERR_NativeGuardCancelOwner : ERR_SiteService +{ + protected int m_Cancellations; + void ERR_NativeGuardCancelOwner(ERR_GameMode mode) { m_Mode = mode; } + int Cancellations() { return m_Cancellations; } + protected override void CancelInitialGuardRequests() + { + m_Cancellations++; + PrintFormat("ERR GUARD CANCEL OWNER: pendingState=%1 calls=%2 ownedSites=%3", m_State, m_Cancellations, m_Sites.Count()); + super.CancelInitialGuardRequests(); + foreach (ERR_SiteRuntime site : m_Sites) + if (site.Group) PrintFormat("ERR GUARD CANCEL RETIRED: site=%1 group=%2 slots=%3 spawnImmediately=%4 agents=%5 complete=%6", site.Definition.Id, site.Group, site.Group.m_aUnitPrefabSlots.Count(), site.Group.GetSpawnImmediately(), site.Group.GetAgentsCount(), site.Group.IsExpandComplete()); + } + bool Attach(SCR_AIGroup group, string label) + { + if (!group || m_Begun) return false; + m_Begun = true; + ERR_SiteRuntime site = new ERR_SiteRuntime(); + site.Definition = new ERR_SiteDefinition(); + site.Definition.Id = label; + site.Definition.Guarded = true; + site.Group = group; + if (group.m_aUnitPrefabSlots) site.InitialGuardCount = group.m_aUnitPrefabSlots.Count(); + m_Sites.Insert(site); + m_Entities.Insert(group); + return site.InitialGuardCount == 6 && group.GetSpawnImmediately(); + } +} + +class ERR_NativeGuardCancelProbe +{ + protected ERR_GameMode m_Mode; + protected ref ERR_NativeGuardCancelOwner m_EmptyOwner; + protected ref ERR_NativeGuardCancelOwner m_PartialOwner; + protected ref ERR_NativeGuardCancelOwner m_ControlOwner; + protected SCR_AIGroup m_Empty; + protected SCR_AIGroup m_Partial; + protected SCR_AIGroup m_Control; + protected ref array m_PartialMembers = {}; + protected ref array m_DeletedMembers = {}; + protected ref array m_MainGroups = {}; + protected int m_PartialDispatches; + protected int m_TotalBeforeDelete; + protected int m_Step; + protected float m_Deadline; + protected float m_ObserveUntil; + protected bool m_RolledBack; + void ERR_NativeGuardCancelProbe(ERR_GameMode mode) { m_Mode = mode; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: guard-cancel " + detail); return true; } + Print("ERR SMOKE FAIL: guard-cancel " + detail, LogLevel.ERROR); + Stop(); + return false; + } + protected int Members(SCR_AIGroup group, out array members) + { + members.Clear(); + if (!group) return 0; + array agents = {}; + group.GetAgents(agents); + foreach (AIAgent agent : agents) + { + if (!agent) continue; + IEntity actor = agent.GetControlledEntity(); + if (actor && !members.Contains(actor)) members.Insert(actor); + } + return members.Count(); + } + protected SCR_AIGroup NewGroup(vector offset) + { + ERR_SiteRuntime outpost = m_Mode.Sites().Find("everon-outpost-1"); + if (!outpost || !outpost.Group) return null; + SCR_AIGroup group = SCR_AIGroup.Cast(ERR_Actors.Spawn(m_Mode.Factions().GuardGroupPrefab, ERR_Actors.Ground(outpost.Group.GetOrigin() + offset))); + if (group) group.ERR_TrackGuardCancel(); + return group; + } + protected bool OriginalSitesIntact() + { + if (!m_Mode.Sites() || m_Mode.Sites().Prepare() != ERR_PrepareResult.READY) return false; + array locations = {}; + m_Mode.Locations(locations); + array groups = {}; + foreach (ERR_LocationComponent location : locations) + { + ERR_SiteRuntime site = m_Mode.Sites().Find(location.Id()); + if (site && site.Group) groups.Insert(site.Group); + } + if (groups.Count() != m_MainGroups.Count()) return false; + foreach (SCR_AIGroup group : m_MainGroups) + if (!group || !groups.Contains(group)) return false; + return true; + } + protected bool CancelledStable() + { + array emptyMembers = {}; + array partialMembers = {}; + if (!m_Empty || Members(m_Empty, emptyMembers) != 0 || m_Empty.ERR_GuardCancelDispatches() != 0) return false; + if (!m_Partial || Members(m_Partial, partialMembers) != m_PartialMembers.Count() || m_Partial.ERR_GuardCancelDispatches() != m_PartialDispatches) return false; + foreach (IEntity actor : m_PartialMembers) + if (!actor || !partialMembers.Contains(actor)) return false; + return true; + } + void Stop() + { + // Each owner rolls back at most once. ERR_Actors.DeleteSpawned retains its + // stock active-player protection; no player is assigned to these groups. + if (m_RolledBack) return; + m_RolledBack = true; + if (m_EmptyOwner) m_EmptyOwner.Rollback(); + if (m_PartialOwner) m_PartialOwner.Rollback(); + if (m_ControlOwner) m_ControlOwner.Rollback(); + } + int Tick(float now) + { + if (m_Deadline == 0) m_Deadline = now + 90000; + if (now > m_Deadline || !m_Mode.Active()) { Check(false, "bounded fixture deadline or active mission lost"); return -1; } + if (m_Step == 0) + { + array locations = {}; + m_Mode.Locations(locations); + foreach (ERR_LocationComponent location : locations) + { + ERR_SiteRuntime site = m_Mode.Sites().Find(location.Id()); + if (site && site.Group) m_MainGroups.Insert(site.Group); + } + ERR_NativeGuardDispatchTrace.Total = 0; + m_EmptyOwner = new ERR_NativeGuardCancelOwner(m_Mode); + m_PartialOwner = new ERR_NativeGuardCancelOwner(m_Mode); + m_ControlOwner = new ERR_NativeGuardCancelOwner(m_Mode); + m_Empty = NewGroup("50 0 60"); + if (!Check(m_EmptyOwner.Attach(m_Empty, "guard-cancel-empty"), "empty case owns one six-slot automatic native group")) return -1; + array initial = {}; + if (!Check(m_Empty.ERR_GuardCancelPendingInit() && Members(m_Empty, initial) == 0 && m_Empty.ERR_GuardCancelDispatches() == 0 && !m_Empty.IsExpandComplete(), "empty case is cancelled before its first native member dispatch")) return -1; + m_EmptyOwner.Stop(); + m_EmptyOwner.Stop(); + if (!Check(m_EmptyOwner.Cancellations() == 1 && !m_Empty.GetSpawnImmediately() && m_Empty.m_aUnitPrefabSlots.IsEmpty(), "empty cancellation retires only this instance's spawn intent once")) return -1; + if (!Check(m_Empty && m_EmptyOwner.Owns(m_Empty) && m_EmptyOwner.Prepare() == ERR_PrepareResult.FAILED && !m_Mode.Sites().Owns(m_Empty), "repeated actual preparation stop retains only the disposable empty group for observation")) return -1; + m_Partial = NewGroup("-50 0 60"); + if (!Check(m_PartialOwner.Attach(m_Partial, "guard-cancel-partial"), "partial case owns a separate six-slot automatic native group")) return -1; + m_Control = NewGroup("0 0 100"); + if (!Check(m_ControlOwner.Attach(m_Control, "guard-cancel-control"), "uncancelled six-slot control uses the same native queue")) return -1; + m_Step = 1; + return 0; + } + if (m_Step == 1) + { + array emptyMembers = {}; + if (!m_Empty || Members(m_Empty, emptyMembers) != 0 || m_Empty.ERR_GuardCancelDispatches() != 0) + { Check(false, "empty group received late dispatch or members after cancellation"); return -1; } + if (!m_Partial || !m_Control) { Check(false, "disposable observation group disappeared before cancellation"); return -1; } + if (Members(m_Partial, m_PartialMembers) == 0) return 0; + if (!Check(m_PartialMembers.Count() < 6 && !m_Partial.IsExpandComplete() && m_Partial.ERR_GuardCancelDispatches() > 0, "native queue produced a real partial squad before cancellation")) return -1; + // The fixture tick runs after native dispatch returns, so the queue has + // finished re-enqueuing this partial fill. Do not purge from inside AddAgent. + m_PartialOwner.Stop(); + m_PartialOwner.Stop(); + if (!Check(m_PartialOwner.Cancellations() == 1 && !m_Partial.GetSpawnImmediately() && m_Partial.m_aUnitPrefabSlots.IsEmpty(), "partial cancellation retires future spawn intent without deleting present actors")) return -1; + m_PartialDispatches = m_Partial.ERR_GuardCancelDispatches(); + if (!Check(m_PartialOwner.Prepare() == ERR_PrepareResult.FAILED && m_PartialOwner.Owns(m_Partial), "partial preparation stops idempotently while existing members remain")) return -1; + PrintFormat("ERR GUARD CANCEL: partialMembers=%1 dispatches=%2 observationSeconds=15", m_PartialMembers.Count(), m_PartialDispatches); + m_ObserveUntil = now + 15000; + m_Step = 2; + return 0; + } + if (m_Step == 2) + { + if (!CancelledStable()) { Check(false, "cancelled groups changed member identity/count or received another native dispatch"); return -1; } + array controlMembers = {}; + int controlCount = Members(m_Control, controlMembers); + if (!m_Control || controlCount > 6) { Check(false, "uncancelled control vanished or exceeded its requested size"); return -1; } + if (now < m_ObserveUntil || controlCount != 6 || !m_Control.IsExpandComplete()) return 0; + if (!Check(m_Control.ERR_GuardCancelDispatches() >= 6 && m_Control.m_aUnitPrefabSlots.Count() == 6 && m_Control.GetSpawnImmediately(), "uncancelled native control reached six while cancelled groups stayed unchanged for at least fifteen seconds")) return -1; + if (!Check(OriginalSitesIntact(), "original mission site groups and ready service remain intact")) return -1; + foreach (IEntity partialMember : m_PartialMembers) m_DeletedMembers.Insert(partialMember); + foreach (IEntity controlMember : controlMembers) m_DeletedMembers.Insert(controlMember); + foreach (IEntity actor : m_DeletedMembers) + if (!Check(!ERR_Actors.Player(actor), "rollback target is a disposable non-player character")) return -1; + m_TotalBeforeDelete = ERR_NativeGuardDispatchTrace.Total; + Stop(); + m_ObserveUntil = now + 6000; + m_Step = 3; + return 0; + } + if (m_Step == 3) + { + if (ERR_NativeGuardDispatchTrace.Total != m_TotalBeforeDelete) { Check(false, "native dispatch occurred after rollback"); return -1; } + if (now < m_ObserveUntil) return 0; + if (!Check(!m_Empty && !m_Partial && !m_Control, "each disposable group was deleted once by its real owner rollback")) return -1; + foreach (IEntity deleted : m_DeletedMembers) + if (!Check(!deleted, "each physical partial/control member is actually deleted after rollback")) return -1; + if (!Check(OriginalSitesIntact(), "original mission groups remain intact after rollback and six-second observation")) return -1; + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c new file mode 100644 index 0000000..ce6dd60 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c @@ -0,0 +1,162 @@ +#ifdef WORKBENCH +// Opt-in fault injection on a fixture-owned stock kit in a private preview world. +// Calls the actual teardown boundary while the native callback sources still +// exist, so an unsubscribe failure remains observable before entity destruction. +modded class SCR_ResupplyMedicalGadgetSupportStationComponent +{ + protected bool m_ERRTeardownProbeWatch; + protected int m_ERRTeardownProbeResourceCalls; + protected int m_ERRTeardownProbeDamageCalls; + protected int m_ERRTeardownProbeInitCalls; + + protected override void DelayedInit(IEntity owner) + { + if (m_ERRTeardownProbeWatch) m_ERRTeardownProbeInitCalls++; + super.DelayedInit(owner); + } + protected override void TEMP_OnInteractorReplicated() + { + if (m_ERRTeardownProbeWatch) m_ERRTeardownProbeResourceCalls++; + super.TEMP_OnInteractorReplicated(); + } + protected override void OnDamageStateChanged(EDamageState damageState) + { + if (m_ERRTeardownProbeWatch) m_ERRTeardownProbeDamageCalls++; + super.OnDamageStateChanged(damageState); + } + bool ERR_TeardownProbeInitialize() + { + // Preview worlds need not process normal world events. Execute the unchanged + // native initialization routine once if EOnInit has not already done so. + if (!m_ERRTeardownInitialized) + { + GetGame().GetCallqueue().Remove(DelayedInit); + DelayedInit(GetOwner()); + } + return m_ERRTeardownInitialized && m_ERRTeardownScope && m_EntityCatalogManager && !UsesRange(); + } + SCR_ResourceComponent ERR_TeardownProbeResource() { return m_ERRTeardownResource; } + void ERR_TeardownProbeWatch() { m_ERRTeardownProbeWatch = true; } + int ERR_TeardownProbeResourceCalls() { return m_ERRTeardownProbeResourceCalls; } + int ERR_TeardownProbeDamageCalls() { return m_ERRTeardownProbeDamageCalls; } + int ERR_TeardownProbeInitCalls() { return m_ERRTeardownProbeInitCalls; } + bool ERR_TeardownProbeDone() { return m_ERRTeardownDone; } + void ERR_TeardownProbeExpireAndDelete() + { + // Fault injection only: do not mutate/delete the global manager or any + // existing preview/cache entity. Nothing calls InitValidSetup with this null. + m_EntityCatalogManager = null; + GetGame().GetCallqueue().CallLater(DelayedInit, 100, false, GetOwner()); + OnDelete(GetOwner()); + OnDelete(GetOwner()); + } +} + +class ERR_NativeItemStationTeardownProbe +{ + protected ref SharedItemRef m_WorldRef; + protected BaseWorld m_World; + protected IEntity m_Kit; + protected SCR_ResupplyMedicalGadgetSupportStationComponent m_Station; + protected SCR_ResourceComponent m_Resource; + protected SCR_DamageManagerComponent m_Damage; + protected SCR_HitZone m_HitZone; + protected SCR_EntityCatalogManagerComponent m_OriginalCatalog; + protected int m_Index; + protected int m_Step; + protected int m_Result; + protected bool m_Stopped; + protected int m_ExpectedDamageCalls; + protected float m_Wait; + protected float m_Deadline; + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: station teardown " + detail); return true; } + Print("ERR SMOKE FAIL: station teardown " + detail, LogLevel.ERROR); + m_Result = -1; + Stop(); + return false; + } + void Stop() + { + m_Stopped = true; + ReleaseKit(); + } + protected void ReleaseKit() + { + // All objects belong to this fixture, never a resource or preview cache. + m_Station = null; + m_Resource = null; + m_Damage = null; + m_HitZone = null; + if (m_Kit) delete m_Kit; + m_Kit = null; + m_World = null; + m_WorldRef = null; + } + protected void EmitNativeCallbacks() + { + m_Resource.TEMP_GetOnInteractorReplicated().Invoke(); + if (m_Damage) m_Damage.GetOnDamageStateChanged().Invoke(m_Damage.GetState()); + if (m_HitZone) m_HitZone.GetOnDamageStateChanged().Invoke(m_HitZone); + } + int Tick(float now) + { + if (m_Result != 0) return m_Result; + if (m_Stopped) return -1; + if (m_Deadline == 0) m_Deadline = now + 10000; + if (now >= m_Deadline) { Check(false, "bounded fixture deadline"); return -1; } + if (now < m_Wait) return 0; + if (m_Step == 0) + { + if (!Check(Replication.IsServer() && ERR_GameMode.Get() && SCR_EntityCatalogManagerComponent.GetInstance(), "successor server and real global catalog available")) return -1; + m_OriginalCatalog = SCR_EntityCatalogManagerComponent.GetInstance(); + m_WorldRef = BaseWorld.CreateWorld("Preview", "ERRStationTeardownProbe"); + if (m_WorldRef) m_World = m_WorldRef.GetRef(); + if (!Check(m_World && m_World != GetGame().GetWorld(), "owns an independent off-world preview world")) return -1; + ResourceName prefab = "{AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et"; + if (m_Index == 1) prefab = "{21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et"; + Resource resource = Resource.Load(prefab); + if (!Check(resource && resource.IsValid(), "stock kit resource resolves")) return -1; + m_Kit = GetGame().SpawnEntityPrefab(resource, m_World); + if (!Check(m_Kit != null, "isolated stock kit spawned")) return -1; + m_Wait = now + 500; + m_Step = 1; + return 0; + } + if (m_Step == 1) + { + m_Station = SCR_ResupplyMedicalGadgetSupportStationComponent.Cast(m_Kit.FindComponent(SCR_ResupplyMedicalGadgetSupportStationComponent)); + if (!Check(m_Station && m_Station.ERR_TeardownProbeInitialize(), "actual native initialization completed with valid catalog and no range registration")) return -1; + m_Resource = m_Station.ERR_TeardownProbeResource(); + if (!Check(m_Resource != null, "actual subscribed native resource component captured")) return -1; + m_Damage = SCR_DamageManagerComponent.Cast(m_Kit.FindComponent(SCR_DamageManagerComponent)); + HitZoneContainerComponent hitZones = HitZoneContainerComponent.Cast(m_Kit.FindComponent(HitZoneContainerComponent)); + if (hitZones) m_HitZone = SCR_HitZone.Cast(hitZones.GetDefaultHitZone()); + m_ExpectedDamageCalls = 0; + if (m_Damage) m_ExpectedDamageCalls++; + if (m_HitZone) m_ExpectedDamageCalls++; + PrintFormat("ERR STATION TEARDOWN PROBE: kit=%1 nativeDamageSources=%2 resourcePresent=%3", m_Index, m_ExpectedDamageCalls, m_Resource != null); + m_Station.ERR_TeardownProbeWatch(); + EmitNativeCallbacks(); + if (!Check(m_Station.ERR_TeardownProbeResourceCalls() == 1 && m_Station.ERR_TeardownProbeDamageCalls() == m_ExpectedDamageCalls, "native invokers reach initialized station exactly once per installed source")) return -1; + m_Station.ERR_TeardownProbeExpireAndDelete(); + if (!Check(m_Station.ERR_TeardownProbeDone(), "expired cached catalog takes production cleanup exactly once")) return -1; + EmitNativeCallbacks(); + if (!Check(m_Station.ERR_TeardownProbeResourceCalls() == 1 && m_Station.ERR_TeardownProbeDamageCalls() == m_ExpectedDamageCalls, "resource and installed damage sources no longer invoke detached station")) return -1; + m_Wait = now + 500; + m_Step = 2; + return 0; + } + if (!Check(m_Station.ERR_TeardownProbeInitCalls() == 0, "queued native initialization did not run after teardown")) return -1; + EmitNativeCallbacks(); + if (!Check(m_Station.ERR_TeardownProbeResourceCalls() == 1 && m_Station.ERR_TeardownProbeDamageCalls() == m_ExpectedDamageCalls, "no late callbacks after 500 ms")) return -1; + if (!Check(m_OriginalCatalog && SCR_EntityCatalogManagerComponent.GetInstance() == m_OriginalCatalog, "same global catalog remains alive and unchanged by fault injection")) return -1; + ReleaseKit(); + m_Index++; + if (m_Index < 2) { m_Step = 0; return 0; } + m_Result = 1; + return 1; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c new file mode 100644 index 0000000..7cacb39 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c @@ -0,0 +1,190 @@ +#ifdef WORKBENCH +[BaseContainerProps(category: "Respawn")] +modded class ERR_SpawnLogic +{ + // Test-only ownership setup. This does not change a life record, start a real + // spawn request, replace a controller's actor or bypass production finalization. + bool ERR_TestPendingActor(SCR_SpawnRequestComponent request, SCR_SpawnData data, IEntity actor) + { + if (!Replication.IsServer() || !request || !data || !actor || ERR_Actors.Player(actor)) return false; + int id = request.GetPlayerId(); + if (m_Pending.Contains(id) || !m_Identities.Contains(id)) return false; + ERR_SpawnTicket ticket = new ERR_SpawnTicket(); + ticket.ConnectionId = id; ticket.AccountId = m_Identities.Get(id); + ticket.Mode = ERR_GameMode.Get(); + ticket.Controller = SCR_PlayerController.Cast(request.GetPlayerController()); + ticket.Request = request; ticket.Data = data; ticket.Actor = actor; + m_SpawnTickets.Insert(ticket); + m_Pending.Insert(id); + m_AuthorizedPositions.Set(id, data.GetPosition()); + return true; + } + void ERR_TestClearAdmission(int playerId) { CancelAdmission(playerId, ERR_ObserverReason.NONE); } + bool ERR_TestDelayedLossPreservesAdmission(int playerId, SCR_PlayerController controller) + { + ObserveAfterLoss(playerId, m_Identities.Get(playerId), controller); + return m_Pending.Contains(playerId) && m_AuthorizedPositions.Contains(playerId); + } + bool ERR_TestHasAdmission(int playerId) + { + if (m_Pending.Contains(playerId) || m_AuthorizedPositions.Contains(playerId)) return true; + foreach (ERR_SpawnTicket ticket : m_SpawnTickets) + if (ticket.ConnectionId == playerId) return true; + return false; + } +} + +class ERR_NativeLifecycleProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Player; + protected IEntity m_Blocker; + protected IEntity m_Preload; + protected IEntity m_Cancelled; + protected IEntity m_Drift; + protected SCR_PlayerController m_Controller; + protected SCR_FreeSpawnRequestComponent m_Request; + protected SCR_FreeSpawnHandlerComponent m_Handler; + protected ERR_SpawnLogic m_Logic; + protected ref SCR_FreeSpawnData m_Data; + protected ref ERR_SpawnPlacement m_Placement = new ERR_SpawnPlacement(); + protected vector m_Position; + protected int m_Step; + protected float m_Wait; + void ERR_NativeLifecycleProbe(ERR_GameMode mode, IEntity player) { m_Mode = mode; m_Player = player; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: lifecycle " + detail); return true; } + Print("ERR SMOKE FAIL: lifecycle " + detail, LogLevel.ERROR); + return false; + } + protected IEntity Actor(vector position) + { + IEntity actor = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, position); + if (actor) + { + m_Mode.Own(actor); + DamageManagerComponent.Cast(actor.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + } + return actor; + } + protected bool Rules() + { + UUID account = "00e77300-0000-0000-0000-000000000001"; + UUID other = "00e77300-0000-0000-0000-000000000002"; + for (int phase = ERR_Phase.PREPARING; phase <= ERR_Phase.DEFEAT; phase++) + { + bool permitted = phase >= ERR_Phase.PRISON && phase <= ERR_Phase.RADIO_DEFENCE; + if (!Check(ERR_SpawnFinalizationRules.Allows(phase, true, false, account, account, true, true, true) == permitted, "finalization phase matrix " + phase.ToString())) return false; + } + if (!Check(!ERR_SpawnFinalizationRules.Allows(ERR_Phase.PRISON, true, true, account, account, true, true, true), "spent life cannot finalize a delayed admission")) return false; + if (!Check(!ERR_SpawnFinalizationRules.Allows(ERR_Phase.PRISON, false, false, account, account, true, true, true), "disconnected account cannot finalize")) return false; + if (!Check(!ERR_SpawnFinalizationRules.Allows(ERR_Phase.PRISON, true, false, account, other, true, true, true), "recycled connection identity cannot inherit a pending admission")) return false; + if (!Check(!ERR_SpawnFinalizationRules.Allows(ERR_Phase.PRISON, true, false, account, account, false, true, true), "changed controller rejects stale admission")) return false; + if (!Check(!ERR_SpawnFinalizationRules.Allows(ERR_Phase.PRISON, true, false, account, account, true, false, true), "changed request rejects stale admission")) return false; + if (!Check(!ERR_SpawnFinalizationRules.Allows(ERR_Phase.PRISON, true, false, account, account, true, true, false), "existing controlled actor cannot be replaced by delayed admission")) return false; + return Check(ERR_SpawnFinalizationRules.PositionClose("0.3 0.2 0", "0 0 0") && !ERR_SpawnFinalizationRules.PositionClose("0 2 0", "0 0 0") && !ERR_SpawnFinalizationRules.PositionClose("0.7 0 0", "0 0 0"), "native settling tolerance rejects horizontal and vertical preload drift"); + } + protected bool Finalization() + { + m_Controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + m_Request = SCR_FreeSpawnRequestComponent.Cast(m_Controller.FindComponent(SCR_FreeSpawnRequestComponent)); + if (m_Request) m_Handler = SCR_FreeSpawnHandlerComponent.Cast(m_Request.GetHandlerComponent()); + SCR_RespawnSystemComponent system = SCR_RespawnSystemComponent.GetInstance(); + m_Logic = ERR_SpawnLogic.Cast(system.GetSpawnLogic()); + if (!Check(m_Request && m_Handler && m_Logic, "real local free-spawn request, handler and admission logic exist")) return false; + int id = m_Controller.GetPlayerId(); + ERR_PlayerLife life = m_Mode.Players().Get(id); + if (!Check(life && life.UsedLife && life.Actor == m_Player && m_Controller.GetControlledEntity() == m_Player && !m_Logic.ERR_TestHasAdmission(id), "real prisoner has a spent life and no pending admission")) return false; + m_Preload = Actor(m_Position); + m_Data = new SCR_FreeSpawnData(m_Mode.Factions().PrisonerPrefab, m_Position); + if (!Check(m_Preload && m_Logic.ERR_TestPendingActor(m_Request, m_Data, m_Preload), "isolated unpossessed actor receives an explicit test-owned admission ticket")) return false; + SCR_FreeSpawnData different = new SCR_FreeSpawnData(m_Mode.Factions().PrisonerPrefab, m_Position); + if (!Check(m_Handler.FinalizeRequest_S(m_Request, different, m_Preload) == SCR_ESpawnResult.SPAWN_NOT_ALLOWED && ERR_Actors.Alive(m_Preload), "different request payload cannot claim or delete the owned actor")) return false; + return Check(m_Handler.FinalizeRequest_S(m_Request, m_Data, m_Preload) == SCR_ESpawnResult.SPAWN_NOT_ALLOWED, "native finalization refuses the spent-life preload"); + } + int Tick(float now) + { + if (now < m_Wait) return 0; + if (m_Step == 0) + { + if (!Rules()) return -1; + map reservations = new map(); + vector first, second; + if (!Check(m_Placement.Prison(m_Mode.PrisonPosition(), reservations, first), "native prison has a clear candidate")) return -1; + reservations.Set(1, first); + if (!Check(m_Placement.Prison(m_Mode.PrisonPosition(), reservations, second) && vector.DistanceXZ(first, second) >= 1.2, "IDs one and thirteen receive distinct reserved slots")) return -1; + reservations.Set(13, second); + vector position; + int count = 2; + while (count < 16 && m_Placement.Prison(m_Mode.PrisonPosition(), reservations, position)) + { + reservations.Set(100 + count, position); + count++; + } + PrintFormat("ERR SPAWN CAPACITY: remaining clear prison positions=%1 plus current controlled prisoner", count); + if (!Check(count >= 11 && !m_Placement.Prison(m_Mode.PrisonPosition(), reservations, position), "occupied and pending slots exhaust a bounded grid without overlap or outside fallback")) return -1; + vector prison = m_Mode.PrisonPosition(); + foreach (int id, vector reserved : reservations) + if (!Check(Math.AbsFloat(reserved[0] - prison[0]) <= 4.6 && Math.AbsFloat(reserved[2] - prison[2]) <= 4.6, "candidate remains inside authored prison")) return -1; + reservations.Remove(1); + if (!Check(m_Placement.Prison(m_Mode.PrisonPosition(), reservations, position) && vector.DistanceXZ(position, first) < 0.1, "released pending reservation becomes available again")) return -1; + m_Position = first; + m_Blocker = Actor(first); + if (!Check(m_Blocker != null, "uncontrolled physical body created at a previously clear slot")) return -1; + m_Step = 1; m_Wait = now + 1000; + return 0; + } + if (m_Step == 1) + { + map empty = new map(); + if (!Check(!m_Placement.Clear(m_Position, empty), "native character body blocks a slot even without a connected player ID")) return -1; + ERR_Actors.DeleteSpawned(m_Blocker); + m_Step = 2; m_Wait = now + 1000; + return 0; + } + if (m_Step == 2) + { + if (!Finalization()) return -1; + m_Step = 3; m_Wait = now + 1000; + return 0; + } + if (m_Step == 3) + { + int id = m_Controller.GetPlayerId(); + ERR_PlayerLife life = m_Mode.Players().Get(id); + if (!Check(!m_Preload, "refused native preload was deleted after lifecycle processing")) return -1; + m_Logic.ERR_TestClearAdmission(id); + if (!Check(!m_Logic.ERR_TestHasAdmission(id) && life.UsedLife && life.Actor == m_Player && m_Controller.GetControlledEntity() == m_Player, "refusal releases reservations without changing life or controlled actor")) return -1; + if (!Check(m_Handler.FinalizeRequest_S(m_Request, m_Data, m_Player) == SCR_ESpawnResult.SPAWN_NOT_ALLOWED && ERR_Actors.Alive(m_Player), "unticketed repeated callback cannot delete or replace the controlled prisoner")) return -1; + m_Cancelled = Actor(m_Position); + if (!Check(m_Cancelled && m_Logic.ERR_TestPendingActor(m_Request, m_Data, m_Cancelled), "second isolated pending actor prepared for cancellation")) return -1; + if (!Check(m_Logic.ERR_TestDelayedLossPreservesAdmission(id, m_Controller) && m_Controller.ERR_ObserverState() == ERR_ObserverReason.NONE, "delayed loss callback preserves reacquired living controller and admission metadata")) return -1; + m_Logic.ERR_TestClearAdmission(id); + m_Step = 4; m_Wait = now + 1000; + return 0; + } + if (m_Step == 4) + { + int id = m_Controller.GetPlayerId(); + ERR_PlayerLife life = m_Mode.Players().Get(id); + if (!Check(!m_Cancelled && !m_Logic.ERR_TestHasAdmission(id) && life.UsedLife && life.Actor == m_Player, "pending-request cancellation cleans its actor and never grants another life")) return -1; + m_Drift = Actor(m_Position); + if (!Check(m_Drift != null, "physical actor created for vertical drift check")) return -1; + vector transform[4]; m_Drift.GetWorldTransform(transform); + transform[3] = m_Position + "0 10 0"; + ChimeraCharacter.Cast(m_Drift).Teleport(transform); + m_Step = 5; m_Wait = now + 750; + return 0; + } + if (m_Step == 5) + { + if (!Check(!ERR_SpawnFinalizationRules.PositionClose(m_Drift.GetOrigin(), m_Position), "actual vertically displaced character fails finalization position tolerance after native movement")) return -1; + ERR_Actors.DeleteSpawned(m_Drift); + m_Step = 6; + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c new file mode 100644 index 0000000..20ae4a7 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c @@ -0,0 +1,129 @@ +#ifdef WORKBENCH +[BaseContainerProps(category: "Respawn")] +modded class ERR_SpawnLogic +{ + ERR_LocalAdmission ERR_LocalProbeHelper() + { + if (!ERR_NativeLocalAdmissionProbe.Enabled()) return null; + return m_LocalAdmission; + } + bool ERR_LocalProbeIdle(int connection) + { + return ERR_NativeLocalAdmissionProbe.Enabled() && !m_Attempts.Contains(connection) && !m_Retries.Contains(connection) && !m_Pending.Contains(connection) && !m_AuthorizedPositions.Contains(connection) && m_SpawnTickets.IsEmpty(); + } + bool ERR_LocalProbeClosed() + { + return ERR_NativeLocalAdmissionProbe.Enabled() && m_AdmissionsStopped && m_LocalAdmissionFailed; + } + bool ERR_LocalProbeRefuseController(int connection) + { + if (!ERR_NativeLocalAdmissionProbe.Enabled() || !m_LocalAdmission || !m_LocalAdmission.OfflineMode() || !m_LocalAdmission.Selected() || !m_Identities.Contains(connection)) return false; + // Deliberately invalid METHOD ARGUMENT, not a fabricated native disconnect or + // replacement controller. The real controller and backend remain untouched. + UUID rejected = m_LocalAdmission.Resolve(ERR_GameMode.Get(), connection, null, m_Identities.Get(connection)); + if (!rejected.IsNull()) return false; + return !CheckLocalAdmissionContext(); + } +} + +class ERR_NativeLocalAdmissionProbe +{ + protected ERR_GameMode m_Mode; + protected SCR_PlayerController m_Controller; + protected IEntity m_Actor; + protected ERR_SpawnLogic m_Logic; + protected ERR_LocalAdmission m_Helper; + protected ERR_PlayerLife m_Life; + protected UUID m_Key; + protected int m_Connection; + protected int m_Participants; + protected int m_Changes; + protected int m_Step; + protected float m_Deadline; + protected float m_Wait; + protected bool m_Listening; + protected bool m_Stopped; + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errBaseSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "local-admission"; + } + void ERR_NativeLocalAdmissionProbe(ERR_GameMode mode) + { + m_Mode = mode; m_Deadline = GetGame().GetWorld().GetWorldTime() + 15000; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: local admission " + detail); return true; } + Print("ERR SMOKE FAIL: local admission " + detail, LogLevel.ERROR); Stop(); return false; + } + protected void Changed(int connection) { m_Changes++; } + protected int Participants() + { + array lives = {}; m_Mode.Players().Participants(lives); return lives.Count(); + } + protected bool Unchanged() + { + return m_Controller && m_Actor && m_Life && m_Mode.Players().Get(m_Connection) == m_Life && m_Mode.Players().CurrentActor(m_Actor) == m_Life && m_Life.AccountId == m_Key && m_Life.Connected && m_Life.UsedLife && m_Life.Actor == m_Actor && m_Controller.GetControlledEntity() == m_Actor && GetGame().GetPlayerManager().GetPlayerController(m_Connection) == m_Controller && Participants() == m_Participants && !m_Mode.Players().CanEnter(m_Connection, ERR_Phase.PRISON) && m_Logic.ERR_LocalProbeIdle(m_Connection); + } + protected bool DisposableHelpers() + { + ERR_LocalAdmission disconnected = new ERR_LocalAdmission(m_Mode); + if (!Check(disconnected.Resolve(m_Mode, m_Connection, m_Controller, m_Key) == m_Key && disconnected.Validate() && !disconnected.LocalKey(), "disposable helper accepts actual sole native controller using existing round key")) return false; + // Opaque alternative input only: no backend read/write, roster bind or login. + UUID alternative = "00e77500-0000-0000-0000-000000000001"; + if (!Check(disconnected.Resolve(m_Mode, m_Connection, m_Controller, alternative) == m_Key && disconnected.Resolve(m_Mode, m_Connection, m_Controller, UUID.NULL_UUID) == m_Key, "late opaque identity input and null input retain the selected key")) return false; + if (!Check(!disconnected.Disconnected(m_Connection + 1) && disconnected.Validate(), "unrelated disconnect argument does not close helper")) return false; + if (!Check(disconnected.Disconnected(m_Connection) && !disconnected.Validate() && disconnected.Resolve(m_Mode, m_Connection, m_Controller, m_Key).IsNull(), "matching disconnect argument latches disposable helper closed")) return false; + disconnected.Stop(); + if (!Check(!disconnected.Validate() && disconnected.Resolve(m_Mode, m_Connection, m_Controller, m_Key).IsNull(), "stopped disposable helper cannot reopen with the genuine controller")) return false; + ERR_LocalAdmission invalid = new ERR_LocalAdmission(m_Mode); + if (!Check(invalid.Resolve(m_Mode, m_Connection, null, m_Key).IsNull() && invalid.Resolve(m_Mode, m_Connection, m_Controller, m_Key).IsNull() && !invalid.Selected(), "invalid controller argument before selection fails closed without selecting another life")) return false; + invalid.Stop(); + Print("ERR LOCAL ADMISSION LIMIT: disposable method-argument fault injection; no native disconnect or replacement occurred; Listen/Dedicated pass-through remains source-policy coverage, not multiplayer evidence"); + return true; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_Listening && m_Mode) m_Mode.Players().OnChanged().Remove(Changed); + m_Listening = false; + } + int Tick(float now) + { + if (m_Stopped) return -1; + if (!Enabled() || now > m_Deadline) { Check(false, "explicit enabled fixture completes within fifteen seconds"); return -1; } + if (now < m_Wait) return 0; + if (m_Step == 0) + { + m_Controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + SCR_RespawnSystemComponent respawn = SCR_RespawnSystemComponent.GetInstance(); + if (respawn) m_Logic = ERR_SpawnLogic.Cast(respawn.GetSpawnLogic()); + if (!Check(RplSession.Mode() == RplMode.None && m_Controller && m_Logic && GetGame().GetPlayerManager().GetPlayerCount() == 1, "actual standalone session has one native local controller and successor spawn logic")) return -1; + m_Connection = m_Controller.GetPlayerId(); m_Actor = m_Controller.GetControlledEntity(); + m_Life = m_Mode.Players().Get(m_Connection); m_Helper = m_Logic.ERR_LocalProbeHelper(); + if (!Check(m_Actor && m_Life && m_Helper && m_Helper.OfflineMode() && m_Helper.Selected() && m_Helper.Validate(), "real native admission already created the local controlled prisoner and selected helper")) return -1; + m_Key = m_Life.AccountId; m_Participants = Participants(); + if (!Check(!m_Key.IsNull() && Unchanged(), "existing prisoner has one spent life and no pending spawn metadata")) return -1; + if (!DisposableHelpers()) return -1; + m_Mode.Players().OnChanged().Insert(Changed); m_Listening = true; + Print("ERR LOCAL ADMISSION REPLAY: invoking existing callback twice for already admitted real controller; this does not represent new native authentication/audits"); + m_Logic.OnPlayerAuditSuccess_S(m_Connection); + m_Logic.OnPlayerAuditSuccess_S(m_Connection); + if (!Check(Unchanged() && m_Changes == 0, "replayed callbacks preserve exact roster object, used life, key, actor and no roster-change event")) return -1; + m_Step = 1; m_Wait = now + 1500; return 0; + } + if (m_Step == 1) + { + if (!Check(Unchanged() && m_Changes == 0 && m_Helper.Validate(), "native update interval after replay creates no replacement actor, life or pending request")) return -1; + if (!Check(m_Logic.ERR_LocalProbeRefuseController(m_Connection), "live helper rejects invalid controller argument through production context guard")) return -1; + // The guard has synchronously entered the real terminal transition and + // stopped services. No second callback, login, UUID or actor is introduced. + if (!Check(m_Mode.Phase() == ERR_Phase.DEFEAT && m_Mode.EndReason().Contains("offline player context changed") && m_Logic.ERR_LocalProbeClosed() && !m_Helper.Validate() && Unchanged(), "production failure closes admission and ends round while preserving original used life and controlled actor")) return -1; + Stop(); m_Step = 2; return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c new file mode 100644 index 0000000..373b6b8 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c @@ -0,0 +1,225 @@ +#ifdef WORKBENCH +// Opt-in native medical-effects fixture. Treatment enters at the real item's +// completion boundary; manual user actions/animations and remote clients are not +// simulated. Only fixture-owned characters are injured or deleted. +class ERR_NativeMedicalProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Casualty; + protected IEntity m_Healer; + protected IEntity m_Dressing; + protected IEntity m_Saline; + protected IEntity m_SpareSaline; + protected SCR_CharacterDamageManagerComponent m_Damage; + protected CharacterControllerComponent m_Controller; + protected SCR_CharacterBloodHitZone m_Blood; + protected SCR_SalineStorageComponent m_SalineStorage; + protected SCR_InventoryStorageManagerComponent m_Inventory; + protected ref array m_Owned = {}; + protected int m_Step; + protected int m_Result; + protected bool m_Stopped; + protected bool m_Recovered; + protected float m_Wait; + protected float m_Deadline; + protected float m_InfusionStarted; + protected float m_SeedBlood; + protected float m_PreInfusionBlood; + protected float m_RegenSpeed; + protected float m_NextDiagnostic; + + void ERR_NativeMedicalProbe(ERR_GameMode mode) { m_Mode = mode; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: medical " + detail); return true; } + Print("ERR SMOKE FAIL: medical " + detail, LogLevel.ERROR); + Trace("failure"); + m_Result = -1; + Stop(); + return false; + } + protected IEntity Spawn(ResourceName prefab, vector position) + { + IEntity entity = ERR_Actors.Spawn(prefab, ERR_Actors.Ground(position)); + if (entity) { m_Owned.Insert(entity); m_Mode.Own(entity); } + return entity; + } + protected int SalineEffects() + { + if (!m_Damage) return 0; + array effects = {}; + m_Damage.GetPersistentEffects(effects); + int count; + foreach (SCR_PersistentDamageEffect effect : effects) + if (SCR_SalineDamageEffect.Cast(effect)) count++; + return count; + } + protected int AttachedBags() + { + if (!m_SalineStorage) return 0; + array items = {}; + m_SalineStorage.GetAll(items); + return items.Count(); + } + protected void Trace(string stage) + { + if (!m_Blood || !m_Controller || !m_Damage) return; + PrintFormat("ERR MEDICAL STATE: stage=%1 blood=%2 bloodState=%3 unconscious=%4 bleeding=%5 salineEffects=%6 attachedBags=%7", stage, m_Blood.GetHealth(), m_Blood.GetDamageState(), m_Controller.IsUnconscious(), m_Damage.IsBleeding(), SalineEffects(), AttachedBags()); + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + // Items first, then characters; native scheduled saline deletion is null-safe. + for (int i = m_Owned.Count() - 1; i >= 0; i--) ERR_Actors.DeleteSpawned(m_Owned[i]); + m_Owned.Clear(); + m_Casualty = null; + m_Healer = null; + m_Dressing = null; + m_Saline = null; + m_SpareSaline = null; + m_Damage = null; + m_Controller = null; + m_Blood = null; + m_SalineStorage = null; + m_Inventory = null; + } + int Tick(float now) + { + if (m_Result != 0) return m_Result; + if (m_Stopped) return -1; + if (!Replication.IsServer() || !m_Mode || !m_Mode.Active()) + { + Check(false, "fixture requires the active authority"); + return -1; + } + if (m_Deadline > 0 && now > m_Deadline) + { + Check(false, "native medical state timed out at step " + m_Step.ToString()); + return -1; + } + if (now < m_Wait) return 0; + if (m_Step == 0) + { + // Keep fixture actors separate from the real prisoner spawn. + vector anchor = m_Mode.PrisonPosition() + "100 0 100"; + m_Casualty = Spawn(m_Mode.Factions().PrisonerPrefab, anchor); + m_Healer = Spawn(m_Mode.Factions().PrisonerPrefab, anchor + "3 0 0"); + m_Dressing = Spawn("{C3F1FA1E2EC2B345}Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et", anchor + "4 0 0"); + m_Saline = Spawn("{527D7C5D2E476BDC}Prefabs/Items/Medicine/SalineBag_01/SalineBag_USSR_01.et", anchor + "5 0 0"); + m_SpareSaline = Spawn("{527D7C5D2E476BDC}Prefabs/Items/Medicine/SalineBag_01/SalineBag_USSR_01.et", anchor + "6 0 0"); + if (!Check(m_Casualty && m_Healer && m_Dressing && m_Saline && m_SpareSaline, "two isolated characters and finite stock-type medicine spawned")) return -1; + if (!Check(!ERR_Actors.Player(m_Casualty) && !ERR_Actors.Player(m_Healer), "neither medical actor is a real player")) return -1; + m_Deadline = now + 120000; + m_Wait = now + 1000; + m_Step = 1; + return 0; + } + if (!ERR_Actors.Alive(m_Casualty) || !ERR_Actors.Alive(m_Healer)) + { + Check(false, "owned casualty or healer died unexpectedly"); + return -1; + } + if (m_Step == 1) + { + m_Damage = SCR_CharacterDamageManagerComponent.Cast(m_Casualty.FindComponent(SCR_CharacterDamageManagerComponent)); + m_Controller = CharacterControllerComponent.Cast(m_Casualty.FindComponent(CharacterControllerComponent)); + m_SalineStorage = SCR_SalineStorageComponent.Cast(m_Casualty.FindComponent(SCR_SalineStorageComponent)); + m_Inventory = SCR_InventoryStorageManagerComponent.Cast(m_Healer.FindComponent(SCR_InventoryStorageManagerComponent)); + if (!Check(m_Damage && m_Controller && m_SalineStorage && m_Inventory, "native health, controller and medical storage components available")) return -1; + m_Blood = m_Damage.GetBloodHitZone(); + if (!Check(m_Blood && !m_Controller.IsUnconscious() && !m_Damage.IsBleeding(), "casualty begins healthy and conscious")) return -1; + if (!Check(m_Inventory.TryInsertItem(m_Dressing) && m_Inventory.TryInsertItem(m_Saline) && m_Inventory.TryInsertItem(m_SpareSaline), "finite medical items enter healer inventory")) return -1; + SCR_ConsumableItemComponent dressing = SCR_ConsumableItemComponent.Cast(m_Dressing.FindComponent(SCR_ConsumableItemComponent)); + SCR_ConsumableItemComponent saline = SCR_ConsumableItemComponent.Cast(m_Saline.FindComponent(SCR_ConsumableItemComponent)); + if (!Check(dressing && saline, "stock items contain actual native consumable components")) return -1; + SCR_ConsumableBandage bandageEffect = SCR_ConsumableBandage.Cast(dressing.GetConsumableEffect()); + SCR_ConsumableSalineBag salineEffect = SCR_ConsumableSalineBag.Cast(saline.GetConsumableEffect()); + SCR_EConsumableFailReason reason; + if (!Check(bandageEffect && salineEffect && !bandageEffect.CanApplyEffect(m_Casualty, m_Healer, reason) && !salineEffect.CanApplyEffect(m_Casualty, m_Healer, reason), "healthy casualty rejects bandage and saline")) return -1; + array zones = {}; + m_Damage.GetHitZonesOfGroupFromOwner(ECharacterHitZoneGroup.LEFTARM, zones); + SCR_CharacterHitZone wound; + foreach (HitZone zone : zones) + { + SCR_CharacterHitZone candidate = SCR_CharacterHitZone.Cast(zone); + if (candidate && candidate.GetMaxBleedingRate() > 0) { wound = candidate; break; } + } + if (!Check(wound != null, "native left-arm hit zone can bleed")) return -1; + wound.SetHealthScaled(0.5); + m_Damage.AddBleedingEffectOnHitZone(wound); + float threshold = m_Blood.GetDamageStateThreshold(ECharacterBloodState.UNCONSCIOUS) * m_Blood.GetMaxHealth(); + float destroyed = m_Blood.GetDamageStateThreshold(ECharacterBloodState.DESTROYED) * m_Blood.GetMaxHealth(); + if (!Check(threshold - destroyed > 200, "native blood thresholds permit a survivable recovery fixture")) return -1; + // Initial casualty condition only. All subsequent blood changes are native effects. + m_Blood.SetHealth(threshold - 100); + m_SeedBlood = m_Blood.GetHealth(); + m_Wait = now + 5000; + m_Step = 2; + return 0; + } + if (m_Step == 2) + { + Trace("untreated blood loss"); + if (!Check(m_Damage.IsBleeding() && m_Blood.GetHealth() < m_SeedBlood && m_Controller.IsUnconscious(), "native bleeding reduces real blood and causes unconsciousness")) return -1; + SCR_ConsumableItemComponent dressing = SCR_ConsumableItemComponent.Cast(m_Dressing.FindComponent(SCR_ConsumableItemComponent)); + SCR_ConsumableBandage effect = SCR_ConsumableBandage.Cast(dressing.GetConsumableEffect()); + SCR_EConsumableFailReason reason; + if (!Check(effect.CanApplyEffectToHZ(m_Casualty, m_Healer, ECharacterHitZoneGroup.LEFTARM, reason), "real dressing accepts bleeding arm")) return -1; + ItemUseParameters parameters = effect.GetAnimationParameters(m_Dressing, m_Casualty, ECharacterHitZoneGroup.LEFTARM); + if (!Check(parameters && effect.GetDeleteOnUse(), "native dressing parameters and finite consumption policy are valid")) return -1; + dressing.ApplyItemEffect(m_Casualty, m_Healer, parameters, m_Dressing, effect.GetDeleteOnUse()); + m_Wait = now + 500; + m_Step = 3; + return 0; + } + if (m_Step == 3) + { + if (!Check(!m_Dressing && !m_Damage.IsBleeding() && m_Damage.GetGroupDamageOverTime(ECharacterHitZoneGroup.LEFTARM, EDamageType.BLEEDING) == 0, "dressing is consumed and native bleeding is stopped")) return -1; + if (!Check(m_Controller.IsUnconscious(), "bandage alone has not fabricated blood recovery")) return -1; + SCR_ConsumableItemComponent saline = SCR_ConsumableItemComponent.Cast(m_Saline.FindComponent(SCR_ConsumableItemComponent)); + SCR_ConsumableSalineBag effect = SCR_ConsumableSalineBag.Cast(saline.GetConsumableEffect()); + SCR_EConsumableFailReason reason; + if (!Check(effect && effect.CanApplyEffect(m_Casualty, m_Healer, reason) && !effect.GetDeleteOnUse(), "native saline accepts real blood loss and retains bag for infusion")) return -1; + ItemUseParameters parameters = effect.GetAnimationParameters(m_Saline, m_Casualty); + if (!Check(parameters != null, "native saline item parameters available")) return -1; + m_PreInfusionBlood = m_Blood.GetHealth(); + m_RegenSpeed = effect.GetItemRegenSpeed(); + saline.ApplyItemEffect(m_Casualty, m_Healer, parameters, m_Saline, effect.GetDeleteOnUse()); + m_InfusionStarted = now; + m_Wait = now + 1000; + m_Step = 4; + return 0; + } + if (m_Step == 4) + { + array attached = {}; + m_SalineStorage.GetAll(attached); + if (!Check(m_Saline && attached.Count() == 1 && attached.Contains(m_Saline) && m_Damage.GetGroupSalineBagged(ECharacterHitZoneGroup.RIGHTARM) && SalineEffects() == 1, "real saline bag occupies native treatment slot with one healing effect")) return -1; + SCR_ConsumableItemComponent spare = SCR_ConsumableItemComponent.Cast(m_SpareSaline.FindComponent(SCR_ConsumableItemComponent)); + SCR_EConsumableFailReason reason; + if (!Check(!spare.GetConsumableEffect().CanApplyEffect(m_Casualty, m_Healer, reason) && reason == SCR_EConsumableFailReason.ALREADY_APPLIED && m_SpareSaline, "occupied treatment slot rejects another bag without consuming spare")) return -1; + m_NextDiagnostic = now; + m_Step = 5; + } + if (m_Step == 5) + { + if (now >= m_NextDiagnostic) { Trace("native infusion"); m_NextDiagnostic = now + 10000; } + if (!m_Controller.IsUnconscious()) m_Recovered = true; + if (m_Saline || AttachedBags() != 0 || SalineEffects() != 0 || m_Damage.GetGroupSalineBagged(ECharacterHitZoneGroup.RIGHTARM)) return 0; + float requiredGain = Math.Min(m_RegenSpeed * 60, (m_Blood.GetMaxHealth() - m_PreInfusionBlood) * 0.8); + if (!Check(m_RegenSpeed > 0 && m_Blood.GetHealth() - m_PreInfusionBlood >= requiredGain, "native infusion restores substantial blood without setting health again")) return -1; + if (!Check(m_Recovered && !m_Controller.IsUnconscious() && ERR_Actors.CanFight(m_Casualty), "casualty regains consciousness through native health recovery")) return -1; + if (!Check(now - m_InfusionStarted >= 85000 && !m_Saline && AttachedBags() == 0 && SalineEffects() == 0, "finite saline expires after native duration and releases treatment state")) return -1; + if (!Check(m_SpareSaline != null, "unused spare survives the completed infusion")) return -1; + InventoryItemComponent spareItem = InventoryItemComponent.Cast(m_SpareSaline.FindComponent(InventoryItemComponent)); + if (!Check(spareItem && spareItem.GetParentSlot(), "rejected spare bag remains a physical inventory item")) return -1; + m_Result = 1; + Stop(); + Print("ERR MEDICAL RESULT: native blood loss, finite treatment and recovery; not manual action or multiplayer acceptance"); + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c new file mode 100644 index 0000000..21efa9a --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c @@ -0,0 +1,183 @@ +#ifdef WORKBENCH +// Explicit disposable-world fixture: destroy all four authored radio documents, +// then move the real participant to the station. No replacement clues or actors +// are used to grant discovery; the normal site tick must identify the station. +class ERR_NativeObjectiveLossProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Player; + protected ERR_SiteRuntime m_Radio; + protected ref array m_Documents = {}; + protected IEntity m_NonParticipant; + protected IEntity m_Blocker; + protected bool m_Partial; + protected bool m_SettingSaved; + protected int m_RevealChance; + protected int m_Step; + protected int m_Identifications; + protected float m_Wait; + protected float m_Deadline; + void ERR_NativeObjectiveLossProbe(ERR_GameMode mode, IEntity player, bool partial) + { + m_Mode = mode; m_Player = player; m_Partial = partial; + m_Mode.OnLocationDiscovered().Insert(Discovered); + } + protected void Discovered(ERR_LocationComponent location, int previous, int current) + { + if (m_Radio && location == m_Radio.Location && current == 2) m_Identifications++; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: objective-loss " + detail); return true; } + Print("ERR SMOKE FAIL: objective-loss " + detail, LogLevel.ERROR); + Stop(); + return false; + } + protected void Move(vector position) + { + vector transform[4]; + m_Player.GetWorldTransform(transform); + transform[3] = ERR_Actors.Ground(position); + ChimeraCharacter.Cast(m_Player).Teleport(transform); + } + protected void CollectDocuments(out array documents) + { + documents.Clear(); + array locations = {}; + m_Mode.Locations(locations); + array stock = {}; + foreach (ERR_LocationComponent location : locations) + { + ERR_SiteRuntime site = m_Mode.Sites().Find(location.Id()); + if (!site || !site.Container) continue; + ERR_Inventory.AppendUnique(InventoryStorageManagerComponent.Cast(site.Container.FindComponent(InventoryStorageManagerComponent)), stock); + } + ERR_Inventory.AppendUnique(InventoryStorageManagerComponent.Cast(m_Player.FindComponent(InventoryStorageManagerComponent)), stock); + foreach (IEntity item : stock) + { + ERR_DocumentComponent document = ERR_DocumentComponent.Cast(item.FindComponent(ERR_DocumentComponent)); + if (document && document.TargetId() == m_Radio.Location.Id()) documents.Insert(item); + } + } + void Stop() + { + if (m_Mode) + { + m_Mode.OnLocationDiscovered().Remove(Discovered); + if (m_SettingSaved) m_Mode.Settings().Set("intelRevealChancePercent", m_RevealChance); + } + m_SettingSaved = false; + ERR_Actors.DeleteSpawned(m_NonParticipant); + ERR_Actors.DeleteSpawned(m_Blocker); + } + int Tick(float now) + { + if (m_Deadline == 0) m_Deadline = now + 60000; + if (now > m_Deadline || !m_Mode.Active() || !ERR_Actors.CanFight(m_Player)) + { + Check(false, "fixture lost its active conscious participant or exceeded its deadline"); + return -1; + } + if (now < m_Wait) return 0; + if (m_Step == 0) + { + m_Radio = m_Mode.Sites().Find("everon-radio-1"); + if (!Check(m_Radio && m_Radio.Location && m_Radio.Location.Knowledge() == 0 && m_Radio.Definition.DiscoverRadius == 8, "authored station is initially unknown with bounded eight-metre discovery")) return -1; + CollectDocuments(m_Documents); + if (!Check(m_Documents.Count() == 4, "four distinct physical documents exist before deliberate loss")) return -1; + if (!Check(m_Mode.UnlockPrison(m_Player) && m_Mode.Phase() == ERR_Phase.RADIO_SEARCH, "real prisoner enters radio search through ordinary mission interface")) return -1; + if (m_Partial) + { + m_RevealChance = m_Mode.Settings().Get("intelRevealChancePercent"); + m_SettingSaved = true; + if (!Check(m_Mode.Settings().Set("intelRevealChancePercent", 0), "isolated first document produces only partial knowledge")) return -1; + ERR_SiteRuntime cache = m_Mode.Sites().Find("everon-supply-1"); + Move(cache.Container.GetOrigin() + "0 0 2"); + InventoryStorageManagerComponent source = InventoryStorageManagerComponent.Cast(cache.Container.FindComponent(InventoryStorageManagerComponent)); + SCR_InventoryStorageManagerComponent target = SCR_InventoryStorageManagerComponent.Cast(m_Player.FindComponent(SCR_InventoryStorageManagerComponent)); + array stock = {}; + ERR_Inventory.Items(source, stock); + IEntity selected; + foreach (IEntity item : stock) if (m_Documents.Contains(item)) { selected = item; break; } + BaseInventoryStorageComponent destination; + if (selected && target) destination = target.FindStorageForItem(selected); + if (!Check(destination && source.TryMoveItemToStorage(selected, destination), "one real document transfer accepted before the remaining clues are lost")) return -1; + m_Wait = now + 8000; + } + m_Step = 1; + return 0; + } + if (m_Step == 1) + { + int expected; + if (m_Partial) expected = 1; + if (!Check(m_Radio.Location.Knowledge() == expected, "ordinary clue processing leaves the requested unknown or partial station state")) return -1; + foreach (IEntity document : m_Documents) if (document) SCR_EntityHelper.DeleteEntityAndChildren(document); + m_Step = 2; + m_Wait = now + 1500; + return 0; + } + if (m_Step == 2) + { + foreach (IEntity removed : m_Documents) + if (!Check(!removed, "each original physical document is deleted")) return -1; + array remaining = {}; + CollectDocuments(remaining); + if (!Check(remaining.IsEmpty() && m_Mode.Sites().Prepare() == ERR_PrepareResult.READY, "all targeted documents are absent and preparation does not replenish them")) return -1; + Move(m_Radio.Location.Position() + "0 0 20"); + m_NonParticipant = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, ERR_Actors.Ground(m_Radio.Location.Position() + "3 0 0")); + if (!Check(m_NonParticipant != null, "disposable unpossessed character created for authorization rejection")) return -1; + m_Mode.Own(m_NonParticipant); + if (!Check(!m_Mode.Sites().CanObserve(m_NonParticipant, m_Radio), "unpossessed character cannot identify the station")) return -1; + m_Step = 3; + m_Wait = now + 6000; + return 0; + } + if (m_Step == 3) + { + int expected; + if (m_Partial) expected = 1; + if (!Check(m_Radio.Location.Knowledge() == expected && !m_Mode.Sites().CanObserve(m_Player, m_Radio), "distant participant and nearby nonparticipant do not reveal the station")) return -1; + ERR_Actors.DeleteSpawned(m_NonParticipant); + m_Blocker = ERR_Actors.Spawn("{A67420C1FB91856E}Prefabs/ERR/PrisonWall.et", ERR_Actors.Ground(m_Radio.Location.Position() + "-1.5 0 2")); + if (!Check(m_Blocker != null, "physical obstruction created before close approach")) return -1; + m_Mode.Own(m_Blocker); + Move(m_Radio.Location.Position() + "0 0 4"); + m_Step = 4; + m_Wait = now + 6000; + return 0; + } + if (m_Step == 4) + { + int expected; + if (m_Partial) expected = 1; + PrintFormat("ERR OBJECTIVE LOSS: player=%1 radio=%2 knowledge=%3 visible=%4", m_Player.GetOrigin(), m_Radio.Location.Position(), m_Radio.Location.Knowledge(), m_Mode.Sites().CanObserve(m_Player, m_Radio)); + if (!Check(m_Radio.Location.Knowledge() == expected && !m_Mode.Sites().CanObserve(m_Player, m_Radio), "a nearby station behind a wall remains unidentified")) return -1; + ERR_Actors.DeleteSpawned(m_Blocker); + m_Step = 5; + m_Wait = now + 6000; + return 0; + } + if (m_Step == 5) + { + TraceParam sight = new TraceParam(); + sight.Start = m_Player.GetOrigin() + "0 1.5 0"; + sight.End = m_Radio.Location.Position() + "0 1.3 0"; + sight.Flags = TraceFlags.WORLD | TraceFlags.ENTS; + sight.LayerMask = TRACE_LAYER_CAMERA; + sight.Exclude = m_Player; + float fraction = m_Mode.GetWorld().TraceMove(sight, null); + PrintFormat("ERR OBJECTIVE LOSS FINAL: player=%1 radio=%2 knowledge=%3 identifications=%4 visible=%5", m_Player.GetOrigin(), m_Radio.Location.Position(), m_Radio.Location.Knowledge(), m_Identifications, m_Mode.Sites().CanObserve(m_Player, m_Radio)); + PrintFormat("ERR OBJECTIVE LOSS SIGHT: fraction=%1 hit=%2 blockerRemaining=%3", fraction, sight.TraceEnt, m_Blocker); + if (!Check(m_Mode.Sites().CanObserve(m_Player, m_Radio) && m_Radio.Location.Knowledge() == 2 && m_Identifications == 1, "actual participant with clear close approach identifies the station once through normal discovery")) return -1; + array remaining = {}; + CollectDocuments(remaining); + if (!Check(remaining.IsEmpty(), "physical discovery creates no replacement documents")) return -1; + if (!Check(m_Mode.RadioDefence().CanBegin(m_Player, m_Radio.Location) && m_Mode.TuneRadio(m_Player, m_Radio.Location) && m_Mode.Phase() == ERR_Phase.RADIO_DEFENCE, "identified station permits ordinary authorized tuning after complete document loss")) return -1; + Stop(); + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c new file mode 100644 index 0000000..c32f072 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c @@ -0,0 +1,238 @@ +#ifdef WORKBENCH +// Exercise native task entries and detail text on the private test display. +// This is local presentation evidence, not remote task replication acceptance. +class ERR_NativeObjectiveProbe +{ + protected static bool s_Failed; + protected static Widget s_Entry; + protected static Widget s_Detail; + protected static SCR_Task s_Task; + protected static SCR_TaskListEntryUIComponent s_EntryHandler; + protected static SCR_TaskListEntryDescriptionUIComponent s_DetailHandler; + protected static ref SCR_TaskListEntryDescriptionUIComponent s_ClosedHandler; + protected static float s_CloseReadyAt; + protected static SCR_Task s_IsolatedTask; + protected static bool s_IsolatedDeleteRequested; + protected static SCR_Task s_PreservedMissionTask; + protected static ref SCR_TaskExecutor s_RestoreExecutor; + static void BeginRound() + { + Stop(); + s_Failed = false; + } + protected static bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: objective UI " + detail); return true; } + s_Failed = true; + Stop(); + Print("ERR SMOKE FAIL: objective UI " + detail, LogLevel.ERROR); + return false; + } + static void Stop() + { + if (s_EntryHandler && s_DetailHandler) s_EntryHandler.GetOnTaskVisualChanged().Remove(s_DetailHandler.InitDescription); + if (s_Detail) s_Detail.RemoveFromHierarchy(); + if (s_Entry) s_Entry.RemoveFromHierarchy(); + s_Detail = null; + s_Entry = null; + s_DetailHandler = null; + s_EntryHandler = null; + s_Task = null; + s_ClosedHandler = null; + s_CloseReadyAt = 0; + SCR_TaskSystem tasks = SCR_TaskSystem.GetInstance(); + if (tasks && s_IsolatedTask && !s_IsolatedDeleteRequested) tasks.DeleteTask(s_IsolatedTask); + if (tasks && s_PreservedMissionTask && s_RestoreExecutor && !s_PreservedMissionTask.IsTaskAssignedTo(s_RestoreExecutor)) + tasks.AssignTask(s_PreservedMissionTask, s_RestoreExecutor, true); + s_IsolatedTask = null; + s_IsolatedDeleteRequested = false; + s_PreservedMissionTask = null; + s_RestoreExecutor = null; + } + // Emit unchanged task state: exercise actual invoker subscriptions without + // changing assignment, visibility, ownership or mission progression. + protected static void EmitTaskCallbacks(SCR_Task task) + { + task.GetOnTaskAssigneeAdded().Invoke(task, null, 0); + task.GetOnTaskAssigneeRemoved().Invoke(task, null, 0); + task.GetOnTaskUIVisibilityChanged().Invoke(task, task.GetTaskUIVisibility()); + task.GetOnTaskVisibilityChanged().Invoke(task, task.GetTaskVisibility()); + task.GetOnTaskOwnershipChanged().Invoke(task, task.GetTaskOwnership()); + task.GetOnDisplayDataChanged().Invoke(); + } + static bool BeginCloseReopen(ERR_GameMode mode, float now) + { + if (!Observe(mode)) return false; + // Reinitialization is the vanilla route when the selected task changes. + s_DetailHandler.InitDescription(s_Task); + s_DetailHandler.ERR_ProbeWatch(); + EmitTaskCallbacks(s_Task); + if (!Check(s_DetailHandler.ERR_ProbeTaskCallbacks() == 5, "rebinding keeps one subscription to each native task event")) return false; + // Keep only the handler alive so a leaked event or queued overflow callback + // can be counted safely after actual widget destruction. No manual unbinding. + SCR_Task task = s_Task; + ref SCR_TaskListEntryDescriptionUIComponent closed = s_DetailHandler; + Stop(); + s_ClosedHandler = closed; + s_ClosedHandler.ERR_ProbeClosed(); + if (!Check(s_ClosedHandler.ERR_ProbeWasDetached() && s_ClosedHandler.ERR_ProbeHasNoTask(), "closing native widget uses production detach and releases its task")) return false; + EmitTaskCallbacks(task); + if (!Check(s_ClosedHandler.ERR_ProbeLateCallbacks() == 0, "closed native widget receives no task callbacks")) return false; + s_CloseReadyAt = now + 500; + return true; + } + // One normal smoke tick allows native 100ms overflow work to become due. + static int TickCloseReopen(ERR_GameMode mode, float now) + { + if (s_Failed || !s_ClosedHandler) return -1; + if (now < s_CloseReadyAt) return 0; + if (!Check(s_ClosedHandler.ERR_ProbeLateCallbacks() == 0, "closed native widget has no delayed overflow callbacks")) return -1; + if (!Observe(mode)) return -1; + if (!Check(s_DetailHandler != null, "details reopen through native layout and current objective binding")) return -1; + return 1; + } + // Dedicated objective-ui case: delete an owned test task before its panel. + // The real objective remains alive and regains its local assignment immediately. + static bool BeginDeletedTaskClose(ERR_GameMode mode, float now) + { + Stop(); + SCR_TaskSystem tasks = SCR_TaskSystem.GetInstance(); + s_PreservedMissionTask = mode.Objectives().Current(); + s_RestoreExecutor = SCR_TaskSystem.TaskExecutorFromPlayerID(SCR_PlayerController.GetLocalPlayerId()); + if (!Check(tasks && s_PreservedMissionTask && s_RestoreExecutor, "isolated deletion has a native task system, mission task and local executor")) return false; + s_IsolatedTask = tasks.CreateTask("{1D0F815858EE24AD}Prefabs/Tasks/BaseTask.et", "erri-mission-probe-teardown", "Objective cleanup probe", "Isolated native task for widget teardown."); + if (!Check(s_IsolatedTask && s_IsolatedTask != s_PreservedMissionTask, "deletion fixture owns a separate native task")) return false; + tasks.SetTaskUIVisibility(s_IsolatedTask, SCR_ETaskUIVisibility.LIST_ONLY); + // Vanilla permits one assigned task per executor. Cleanup restores the real one. + tasks.AssignTask(s_IsolatedTask, s_RestoreExecutor, true); + if (!Check(s_IsolatedTask.IsTaskAssignedTo(s_RestoreExecutor), "isolated task has an actual local assignee")) return false; + s_Detail = GetGame().GetWorkspace().CreateWidgets("{552EB1921B5C548C}UI/layouts/Task/TaskListEntryDescription.layout"); + if (!Check(s_Detail != null, "isolated native details layout created")) return false; + s_Detail.SetVisible(false); + s_DetailHandler = SCR_TaskListEntryDescriptionUIComponent.Cast(s_Detail.FindHandler(SCR_TaskListEntryDescriptionUIComponent)); + if (!Check(s_DetailHandler != null, "isolated native details handler attached")) return false; + s_DetailHandler.InitDescription(s_IsolatedTask); + s_DetailHandler.ERR_ProbeWatch(); + s_IsolatedDeleteRequested = true; + tasks.DeleteTask(s_IsolatedTask); + // These are native weak references, not manually cleared probe variables. + if (!Check(s_IsolatedTask == null && s_DetailHandler.ERR_ProbeHasNoTask(), "native task deletion clears both task and bound-widget weak references")) return false; + s_ClosedHandler = s_DetailHandler; + s_Detail.RemoveFromHierarchy(); + s_Detail = null; + s_DetailHandler = null; + s_ClosedHandler.ERR_ProbeClosed(); + if (!Check(s_ClosedHandler.ERR_ProbeWasDetached(), "deleted-task panel closes through production detach")) return false; + tasks.AssignTask(s_PreservedMissionTask, s_RestoreExecutor, true); + if (!Check(mode.Objectives().Current() == s_PreservedMissionTask && s_PreservedMissionTask.IsTaskAssignedTo(s_RestoreExecutor), "real mission objective survives isolated deletion and assignment is restored")) return false; + s_CloseReadyAt = now + 500; + return true; + } + static int TickDeletedTaskClose(ERR_GameMode mode, float now) + { + if (s_Failed || !s_ClosedHandler) return -1; + if (now < s_CloseReadyAt) return 0; + if (!Check(s_ClosedHandler.ERR_ProbeLateCallbacks() == 0, "deleted-task panel has no delayed callbacks after weak references clear")) return -1; + if (!Check(s_PreservedMissionTask && mode.Objectives().Current() == s_PreservedMissionTask && s_PreservedMissionTask.IsTaskAssignedTo(s_RestoreExecutor), "real mission objective remains intact after delayed teardown check")) return -1; + Stop(); + return 1; + } + static bool Observe(ERR_GameMode mode) + { + if (s_Failed) return false; + SCR_Task task = mode.Objectives().Current(); + if (!Check(task != null, "current native task exists")) return false; + if (s_Task != task) + { + Stop(); + s_Task = task; + s_Entry = GetGame().GetWorkspace().CreateWidgets("{B71975032150BAFB}UI/layouts/Task/TaskListEntry.layout"); + s_Detail = GetGame().GetWorkspace().CreateWidgets("{552EB1921B5C548C}UI/layouts/Task/TaskListEntryDescription.layout"); + if (!Check(s_Entry && s_Detail, "native list and detail layouts created")) return false; + s_Entry.SetVisible(false); + s_Detail.SetVisible(false); + s_EntryHandler = SCR_TaskListEntryUIComponent.Cast(s_Entry.FindHandler(SCR_TaskListEntryUIComponent)); + s_DetailHandler = SCR_TaskListEntryDescriptionUIComponent.Cast(s_Detail.FindHandler(SCR_TaskListEntryDescriptionUIComponent)); + if (!Check(s_EntryHandler && s_DetailHandler, "native handlers attached")) return false; + s_EntryHandler.InitTask(task); + s_DetailHandler.InitDescription(task); + // Same visual-change route used by the vanilla task list. + s_EntryHandler.GetOnTaskVisualChanged().Insert(s_DetailHandler.InitDescription); + } + RichTextWidget title = RichTextWidget.Cast(s_Entry.FindAnyWidget("m_wTaskTitle")); + RichTextWidget description = RichTextWidget.Cast(s_Detail.FindAnyWidget("m_wDescription")); + if (!Check(title && description && title.GetText() == task.GetTaskName() && description.GetText() == task.GetTaskDescription(), "open list and details contain current title and instructions")) return false; + Widget showMap = s_Detail.FindAnyWidget("m_wButtonShowMap"); + if (!Check(showMap && !showMap.IsVisible(), "list-only task cannot expose an undiscovered map position")) return false; + SCR_TaskExecutor player = SCR_TaskSystem.TaskExecutorFromPlayerID(SCR_PlayerController.GetLocalPlayerId()); + if (!Check(player && task.IsTaskAssignedTo(player), "actual local player receives the active objective")) return false; + if (!Check(ERR_ObjectiveText.Extraction(12500).Contains("12.5") && !ERR_ObjectiveText.Extraction(12500).Contains("9 kilometres"), "extraction instructions follow a nondefault boundary")) return false; + return true; + } +} + +// Observers exist only in the opt-in native fixture. They do not unsubscribe or +// cancel work: a late callback is counted as failure before avoiding dead-widget +// dereferences, allowing the fixture to report the production cleanup defect. +modded class SCR_TaskListEntryDescriptionUIComponent +{ + protected bool m_ERRProbeWatching; + protected bool m_ERRProbeClosed; + protected bool m_ERRProbeDetached; + protected int m_ERRProbeTaskCallbacks; + protected int m_ERRProbeLateCallbacks; + void ERR_ProbeWatch() { m_ERRProbeWatching = true; m_ERRProbeTaskCallbacks = 0; } + void ERR_ProbeClosed() { m_ERRProbeClosed = true; } + int ERR_ProbeTaskCallbacks() { return m_ERRProbeTaskCallbacks; } + int ERR_ProbeLateCallbacks() { return m_ERRProbeLateCallbacks; } + bool ERR_ProbeWasDetached() { return m_ERRProbeDetached; } + bool ERR_ProbeHasNoTask() { return m_Task == null; } + protected bool ERR_ProbeCallback(bool taskEvent, string kind) + { + if (!m_ERRProbeWatching) return false; + if (m_ERRProbeClosed) + { + m_ERRProbeLateCallbacks++; + PrintFormat("ERR OBJECTIVE LATE CALLBACK: kind=%1 count=%2 task=%3 detached=%4 root=%5", kind, m_ERRProbeLateCallbacks, m_Task != null, m_ERRProbeDetached, m_wRoot != null); + return true; + } + if (taskEvent) m_ERRProbeTaskCallbacks++; + return false; + } + override void HandlerDeattached(Widget w) + { + m_ERRProbeDetached = true; + super.HandlerDeattached(w); + } + protected override void UpdateAssignees(notnull SCR_Task task, SCR_TaskExecutor newAssignee = null, int requesterID = 0) + { + if (ERR_ProbeCallback(true, "UpdateAssignees")) return; + super.UpdateAssignees(task, newAssignee, requesterID); + } + protected override void OnTaskUIVisibilityChanged(SCR_Task task, SCR_ETaskUIVisibility visible) + { + if (ERR_ProbeCallback(true, "OnTaskUIVisibilityChanged")) return; + super.OnTaskUIVisibilityChanged(task, visible); + } + protected override void OnTaskVisibilityChanged(SCR_Task task, SCR_ETaskVisibility visible) + { + if (ERR_ProbeCallback(true, "OnTaskVisibilityChanged")) return; + super.OnTaskVisibilityChanged(task, visible); + } + protected override void OnTaskOwnershipChanged(SCR_Task task, SCR_ETaskOwnership ownership) + { + if (ERR_ProbeCallback(true, "OnTaskOwnershipChanged")) return; + super.OnTaskOwnershipChanged(task, ownership); + } + protected override void CheckOverflow(Widget w) + { + if (ERR_ProbeCallback(false, "CheckOverflow")) return; + super.CheckOverflow(w); + } + override void UpdateTask() + { + if (ERR_ProbeCallback(false, "UpdateTask")) return; + super.UpdateTask(); + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c new file mode 100644 index 0000000..ec795e5 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c @@ -0,0 +1,203 @@ +#ifdef WORKBENCH +// Observe existing physical guards. No teleporting, spawned soldiers or forced +// completion: a full ordered loop and physical movement must happen natively. +class ERR_NativePatrolProbe +{ + protected ERR_GameMode m_Mode; + protected string m_SiteId; + protected ERR_SiteRuntime m_Site; + protected IEntity m_Actor; + protected vector m_Origin; + protected float m_Deadline; + protected int m_Completions; + protected int m_LastIndex = -1; + protected bool m_BadSequence; + protected bool m_Moved; + protected bool m_Started; + protected bool m_Prepared; + protected float m_AcquireDeadline; + protected bool m_Finished; + protected int m_LastQueueSample = -1; + protected ref map m_QueueBounds = new map(); + void ERR_NativePatrolProbe(ERR_GameMode mode, string siteId = "everon-outpost-1") { m_Mode = mode; m_SiteId = siteId; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: patrol " + detail); return true; } + Print("ERR SMOKE FAIL: patrol " + detail, LogLevel.ERROR); + return false; + } + protected void Completed(AIWaypoint waypoint) + { + if (!m_Site) return; + int index = m_Site.PatrolWaypoints.Find(waypoint); + if (index < 0) return; + if (m_LastIndex >= 0 && index != (m_LastIndex + 1) % m_Site.PatrolWaypoints.Count()) m_BadSequence = true; + m_LastIndex = index; + m_Completions++; + PrintFormat("ERR PATROL COMPLETED: site=%1 index=%2 count=%3", m_Site.Definition.Id, index, m_Completions); + } + protected bool DefinitionChecks() + { + ERR_ScenarioDefinition definition = ERR_ScenarioDefinition.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab("{BC310DC0CD27F523}Configs/ERR/EveronSites.conf")); + if (!Check(definition && definition.Valid(), "authored definition resolves")) return false; + ERR_SiteDefinition site = definition.Find("everon-outpost-1"); + if (!Check(site && site.Patrol && site.Patrol.Count() == 4, "four ordered outpost points authored")) return false; + ref array savedRoute = site.Patrol; + site.Patrol = new array(); + site.Patrol.Insert(savedRoute[0]); + if (!Check(!definition.Valid(), "single-point route rejected")) return false; + for (int extra = 1; extra < 7; extra++) site.Patrol.Insert(savedRoute[extra % savedRoute.Count()]); + if (!Check(!definition.Valid(), "over-six-point route rejected")) return false; + site.Patrol.Clear(); + site.Patrol.Insert(null); + site.Patrol.Insert(savedRoute[1]); + if (!Check(!definition.Valid(), "missing point rejected")) return false; + site.Patrol = savedRoute; + vector saved = site.Patrol[0].Offset; + site.Patrol[0].Offset = "61 0 0"; + if (!Check(!definition.Valid(), "unbounded route rejected")) return false; + site.Patrol[0].Offset = "0 1 0"; + if (!Check(!definition.Valid(), "floating route rejected")) return false; + site.Patrol[0].Offset = site.Patrol[1].Offset; + if (!Check(!definition.Valid(), "duplicate route points rejected")) return false; + site.Patrol[0].Offset = saved; + site.Guarded = false; + if (!Check(!definition.Valid(), "route without a physical guard rejected")) return false; + site.Guarded = true; + ERR_SiteDefinition prison = definition.Find("everon-prison-1"); + prison.Patrol = site.Patrol; + if (!Check(!definition.Valid(), "prison patrol rejected; gate guards remain stationary")) return false; + prison.Patrol = null; + return Check(definition.Valid(), "isolated authoring mutations restored"); + } + protected bool PreparedRoute(string id, bool deferDuplicateFailure = false) + { + ERR_SiteRuntime site = m_Mode.Sites().Find(id); + if (!Check(site && site.Group && site.PatrolCycle && site.PatrolWaypoints.Count() == 4, id + " existing group has one cycle and four native moves")) return false; + array route = {}; + site.PatrolCycle.GetWaypoints(route); + if (!Check(route.Count() == 4 && site.PatrolCycle.GetRerunCounter() == -1 && m_Mode.Sites().Owns(site.PatrolCycle), id + " finite owner holds repeating cycle")) return false; + for (int i = 0; i < route.Count(); i++) + { + vector expected = site.Definition.Position + site.Definition.GuardOffset + site.Definition.Patrol[i].Offset; + if (!Check(route[i] == site.PatrolWaypoints[i] && m_Mode.Sites().Owns(route[i]) && vector.DistanceXZ(route[i].GetOrigin(), expected) < 0.1, id + " authored point " + i.ToString())) return false; + } + array queued = {}; + site.Group.GetWaypoints(queued); + PrintFormat("ERR PATROL QUEUE: site=%1 count=%2 current=%3", id, queued.Count(), site.Group.GetCurrentWaypoint()); + for (int diagnosticIndex = 0; diagnosticIndex < Math.Min(queued.Count(), 20); diagnosticIndex++) + { + AIWaypoint entry = queued[diagnosticIndex]; + PrintFormat("ERR PATROL QUEUE ENTRY: site=%1 index=%2 point=%3 cycle=%4 current=%5 entity=%6", id, diagnosticIndex, site.PatrolWaypoints.Find(entry), entry == site.PatrolCycle, entry == site.Group.GetCurrentWaypoint(), entry); + } + // Diagnostic only: retain duplicate rejection at final acceptance, but first + // observe whether native completion events execute the apparent repetitions. + // GetWaypoints has no documented raw-queue/expanded-cycle distinction. + int repeated; + for (int j = 0; j < queued.Count(); j++) + { + if (!Check(queued[j] && (queued[j] == site.PatrolCycle || site.PatrolWaypoints.Contains(queued[j])), id + " queue contains only owned patrol references")) return false; + for (int k = 0; k < j; k++) if (queued[j] == queued[k]) repeated++; + } + int currentIndex = site.PatrolWaypoints.Find(site.Group.GetCurrentWaypoint()); + string stateKey = id + ":" + currentIndex.ToString(); + if (m_QueueBounds.Contains(stateKey)) + { + if (!Check(queued.Count() <= m_QueueBounds.Get(stateKey), id + " queue does not grow at the same current route point")) return false; + } + else m_QueueBounds.Insert(stateKey, queued.Count()); + PrintFormat("ERR PATROL QUEUE DIAGNOSTIC: site=%1 repeatedPairs=%2 deferred=%3 completions=%4", id, repeated, deferDuplicateFailure, m_Completions); + if (!deferDuplicateFailure && !Check(repeated == 0, id + " no duplicate queue references")) return false; + return true; + } + int Tick(float now) + { + if (m_Finished) return 1; + if (!m_Started) + { + if (!m_Prepared) + { + if (!DefinitionChecks() || !PreparedRoute("everon-supply-2", true) || !PreparedRoute("everon-outpost-1", true)) return -1; + ERR_SiteRuntime prison = m_Mode.Sites().Find("everon-prison-1"); + if (!Check(prison && prison.Group && !prison.PatrolCycle && prison.PatrolWaypoints.IsEmpty(), "prison guards retain stationary orders")) return -1; + m_Site = m_Mode.Sites().Find(m_SiteId); + if (!Check(m_Site && m_Site.Group && m_Site.InitialGuardCount == 6, "selected native guard profile requests six physical members")) return -1; + m_AcquireDeadline = now + 15000; + m_Prepared = true; + } + if (!m_Site || !m_Site.Group) { Check(false, "original guard group disappeared before observation"); return -1; } + array agents = {}; + m_Site.Group.GetAgents(agents); + array ready = {}; + foreach (AIAgent agent : agents) + { + if (!agent) continue; + IEntity actor = agent.GetControlledEntity(); + if (ERR_Actors.CanFight(actor) && !ready.Contains(actor)) ready.Insert(actor); + } + if (ready.Count() > m_Site.InitialGuardCount) { Check(false, "original group contains excess living physical guards"); return -1; } + if (ready.Count() < m_Site.InitialGuardCount) + { + if (now < m_AcquireDeadline) return 0; + PrintFormat("ERR PATROL ACTOR TIMEOUT: site=%1 agents=%2 requested=%3 nativeComplete=%4", m_SiteId, agents.Count(), m_Site.InitialGuardCount, m_Site.Group.IsExpandComplete()); + Check(false, "existing living physical guard unavailable after bounded readiness wait"); + return -1; + } + m_Actor = ready[0]; + if (!Check(ready.Count() == 6, "six distinct original living physical guards available")) return -1; + m_Origin = m_Actor.GetOrigin(); + m_Site.Group.GetOnWaypointCompleted().Insert(Completed); + m_Deadline = now + 180000; + m_Started = true; + return 0; + } + if (m_Actor && vector.DistanceXZ(m_Origin, m_Actor.GetOrigin()) >= 8) m_Moved = true; + if (m_BadSequence) { Stop(); Check(false, "native route completion order"); return -1; } + if (m_Completions != m_LastQueueSample) + { + m_LastQueueSample = m_Completions; + if (!PreparedRoute(m_SiteId, true)) { Stop(); return -1; } + } + // Five completions prove traversal across a cycle boundary, from any starting point. + if (m_Completions >= 5 && m_Moved) + { + Stop(); + if (!Check(true, "existing physical guard moved at least 8m and five native moves completed in authored cyclic order")) return -1; + if (!PreparedRoute(m_SiteId)) return -1; + m_Finished = true; + return 1; + } + if (now >= m_Deadline) + { + PrintFormat("ERR PATROL TIMEOUT: completions=%1 moved=%2 actor=%3 current=%4", m_Completions, m_Moved, m_Actor, m_Site.Group.GetCurrentWaypoint()); + Stop(); Check(false, "native route traversal completed within 180s"); return -1; + } + return 0; + } + // Run last in a disposable mission: deliberately stops both route owners. + static bool StopChecks(ERR_GameMode mode) + { + ERR_SiteRuntime site = mode.Sites().Find("everon-outpost-1"); + if (!site || !site.Group || !site.PatrolCycle) return false; + AIWaypoint search = AIWaypoint.Cast(ERR_Actors.Spawn(ERR_Resources.SearchWaypoint(), ERR_Actors.Ground(site.Definition.Position + "40 0 0"))); + if (!search) return false; + mode.Own(search); + site.Group.AddWaypointAt(search, 0); + mode.Sites().Stop(); + mode.Sites().Stop(); + array queued = {}; + site.Group.GetWaypoints(queued); + bool valid = !site.PatrolCycle && site.PatrolWaypoints.IsEmpty() && queued.Contains(search) && mode.Sites().Prepare() == ERR_PrepareResult.FAILED; + site.Group.RemoveWaypoint(search); + ERR_Actors.DeleteSpawned(search); + if (valid) Print("ERR SMOKE PASS: patrol stop clears owned routes once and preserves foreign Search"); + else Print("ERR SMOKE FAIL: patrol stop ownership", LogLevel.ERROR); + return valid; + } + void Stop() + { + if (m_Site && m_Site.Group) m_Site.Group.GetOnWaypointCompleted().Remove(Completed); + } + void ~ERR_NativePatrolProbe() { Stop(); } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c new file mode 100644 index 0000000..cbd064d --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c @@ -0,0 +1,819 @@ +#ifdef WORKBENCH +// New native-input feasibility experiment. No original Escapists flight code. +// Only the exact fixture-owned AI pilot and helicopter receive these hooks. +modded class SCR_CharacterControllerComponent +{ + override void OnPrepareControls(IEntity owner, ActionManager am, float dt, bool player) + { + ERR_NativePoweredFlightProbe probe = ERR_NativePoweredFlightProbe.Current(); + if (probe && !player) probe.PreparePilotActions(this, owner, am, dt); + super.OnPrepareControls(owner, am, dt, player); + if (probe && !player) probe.ObservePilotPreparation(this, owner); + } + protected override void OnApplyControls(IEntity owner, float timeSlice) + { + super.OnApplyControls(owner, timeSlice); + ERR_NativePoweredFlightProbe probe = ERR_NativePoweredFlightProbe.Current(); + if (probe) probe.ApplyPilot(this, owner, timeSlice); + } +} +modded class SCR_HelicopterControllerComponent +{ + protected override event void OnPrepareControls() + { + super.OnPrepareControls(); + ERR_NativePoweredFlightProbe probe = ERR_NativePoweredFlightProbe.Current(); + if (probe) probe.PrepareHelicopter(this); + } +} +class ERR_PoweredFlightRules +{ + static const int PAD_CANDIDATES = 128; + static const int PAD_REFINEMENTS = 80; + static const int AIRPORT_CANDIDATES = 169; + static vector AirportOffset(int index) + { + if (index < 0 || index >= AIRPORT_CANDIDATES) return vector.Zero; + int x = Math.Mod(index, 13) - 6; + int z = index / 13; + z -= 6; + return Vector(x * 50, 0, z * 50); + } + static vector RefineOffset(int index) + { + if (index < 0 || index >= PAD_REFINEMENTS) return vector.Zero; + int sample = index; + if (sample >= 40) sample++; + int x = Math.Mod(sample, 9) - 4; + int z = sample / 9; + z -= 4; + return Vector(x * 10, 0, z * 10); + } + static vector PadOffset(int index) + { + if (index < 0 || index >= PAD_CANDIDATES) return vector.Zero; + float radius = 120; + int segments = 12; + int sample = index; + float phase = 0; + if (index >= 12 && index < 108) + { + int ring = (index - 12) / 24; + radius = 200 + ring * 80; + segments = 24; sample = Math.Mod(index - 12, 24); phase = Math.Mod(ring, 2) * 0.5; + } + else if (index >= 108) + { + radius = 500; segments = 20; sample = index - 108; phase = 0.25; + } + float angle = (sample + phase) * 2 * Math.PI / segments; + return Vector(Math.Cos(angle) * radius, 0, Math.Sin(angle) * radius); + } + static bool Authority(bool server, bool enabled, bool stopped, bool ownedPilot, bool ownedSeat, bool playerPresent, bool alive, bool fueled) + { + return server && enabled && !stopped && ownedPilot && ownedSeat && !playerPresent && alive && fueled; + } + static float ClampInput(float value, float limit = 1) + { + return Math.Clamp(value, -limit, limit); + } + static float NativeCollective(float signedDemand) + { + // Preserve the legacy Apply experiment unchanged. Later observations showed + // overwritten positive inputs too, so this is not a proven native domain. + return (ClampInput(signedDemand) + 1) * 0.5; + } + static float CollectiveCommand(float signedDemand, bool actions, int stage) + { + // Preserve pre-engine/startup zero and the old Apply comparison branch. + if (!actions) return NativeCollective(signedDemand); + if (stage == 9) return 0.05; + if (stage == 10) return -0.05; + if (stage == 7) return -1; // keep minimum pitch while the stopped engine's rotors coast + if (stage >= 4 && stage <= 6) return ClampInput(signedDemand); + return 0; + } + static bool NegativeCollectiveObserved(float command, float signal) + { + return command >= -0.06 && command <= -0.04 && Math.AbsFloat(signal - command) <= 0.01; + } + static bool CollectiveObserved(float command, float signal) + { + return command >= 0.04 && command <= 0.06 && Math.AbsFloat(signal - command) <= 0.01; + } + static float DesiredVertical(float height, bool landing) + { + float target = 8; + if (landing) target = 0; + return Math.Clamp((target - height) * 0.6, -0.8, 1.5); + } + static bool Hover(float height, float speed, float vertical, float upright, float drift) + { + return height >= 7 && height <= 9 && speed < 1.5 && Math.AbsFloat(vertical) < 0.5 && upright > 0.98 && drift < 8; + } + static bool Landed(bool contact, float height, float speed, float angular, float upright) + { + return contact && height < 1 && height > -1 && speed < 0.5 && angular < 0.1 && upright > 0.98; + } + static bool TranslationInputs(bool selected, bool actions, bool autohover) + { + return !selected || (actions && autohover); + } + static bool TranslationActive(bool selected, bool frozen, bool actions, bool autohover, int stage) + { + return selected && frozen && actions && autohover && stage == 5; + } + static bool TranslationTarget(vector home, vector start, vector fallback, out vector target) + { + target = vector.Zero; + if (!(vector.DistanceXZ(home, start) < 8)) return false; + vector direction = home - start; direction[1] = 0; + if (direction.Length() < 0.5) { direction = fallback; direction[1] = 0; } + float length = direction.Length(); + if (!(length >= 0.5)) return false; + target = start + direction * (4 / length); + return vector.DistanceXZ(start, target) >= 3.99 && vector.DistanceXZ(start, target) <= 4.01 && vector.DistanceXZ(home, target) <= 5; + } + static vector TranslationDemand(vector target, vector position, vector velocity) + { + vector error = target - position; error[1] = 0; + vector desired = error * 0.25; + float speed = desired.Length(); + if (speed > 0.5) desired = desired * (0.5 / speed); + velocity[1] = 0; + // Experimental outer velocity request only; native autohover stabilizes attitude. + vector demand = (desired - velocity) * 0.05; + float magnitude = demand.Length(); + if (magnitude > 0.03) demand = demand * (0.03 / magnitude); + return demand; + } + static bool TranslationHeld(bool contact, float height, float speed, float vertical, float upright, float drift, float horizontalSpeed, float targetError, float displacement) + { + return !contact && Hover(height, speed, vertical, upright, drift) && horizontalSpeed >= 0 && horizontalSpeed < 0.25 && targetError >= 0 && targetError <= 0.75 && displacement >= 3.25; + } +} +class ERR_NativePoweredFlightProbe +{ + protected static ERR_NativePoweredFlightProbe s_Current; + protected ERR_GameMode m_Mode; + protected Vehicle m_Aircraft; + protected SCR_AIGroup m_Group; + protected IEntity m_Pilot; + protected HelicopterControllerComponent m_Controller; + protected CharacterControllerComponent m_Character; + protected CharacterInputContext m_Input; + protected VehicleHelicopterSimulation m_Simulation; + protected FuelManagerComponent m_Fuel; + protected PilotCompartmentSlot m_Seat; + protected CollectiveMode m_OriginalMode; + protected vector m_Home; + protected vector m_TestPad; + protected float m_Heading; + protected float m_Deadline; + protected float m_StageDeadline; + protected float m_Stable = -1; + protected float m_PreviousTick = -1; + protected float m_NextLog; + protected float m_InitialFuel; + protected float m_Collective = -1; + protected float m_LastControl; + protected int m_Stage; + protected int m_Wakes; + protected int m_StartRequests; + protected int m_ControlUpdates; + protected int m_PilotPreparations; + protected int m_PositiveGateUpdates; + protected float m_PositiveSignalSince = -1; + protected int m_NegativeGateUpdates; + protected float m_NegativeSignalSince = -1; + protected bool m_SignedCollectiveProven; + protected int m_HelicopterUpdates; + protected bool m_PilotSpawnRequested; + protected AIAgent m_PilotAgent; + protected int m_OriginalPilotLOD; + protected bool m_PilotLODSaved; + protected bool m_PilotSeatsLogged; + protected float m_NextInitializationLog; + protected float m_NextSeatingLog; + protected bool m_Bound; + protected bool m_ModeSaved; + protected bool m_Stopped; + protected bool m_Complete; + protected bool m_ReadbackOK = true; + protected bool m_ActionInputs; + protected bool m_Started; + protected bool m_AutohoverMode; + protected bool m_TranslationMode; + protected bool m_TranslationFrozen; + protected bool m_TranslationProven; + protected vector m_TranslationOrigin; + protected vector m_TranslationTarget; + protected int m_TranslationUpdates; + protected bool m_AutohoverSaved; + protected bool m_OriginalAutohover; + protected HelicopterControllerComponent m_AutohoverController; + protected ActionManager m_OwnedActions; + protected int m_ActionContextSamples; + static const ResourceName AIRCRAFT = "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et"; + static const ResourceName GROUP = "{000CD338713F2B5A}Prefabs/AI/Groups/Group_Base.et"; + static const ResourceName PILOT = "{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et"; + static bool Enabled() + { + string enabled, outcome; + return Replication.IsServer() && System.GetCLIParam("errBaseSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && (outcome == "powered-flight" || outcome == "powered-translate"); + } + static ERR_NativePoweredFlightProbe Current() { return s_Current; } + void ERR_NativePoweredFlightProbe(ERR_GameMode mode) + { + string actionInputs; + m_ActionInputs = System.GetCLIParam("errFlightActionInputs", actionInputs) && actionInputs == "1"; + string outcome; + m_TranslationMode = System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "powered-translate"; + m_Mode = mode; m_Deadline = GetGame().GetWorld().GetWorldTime() + 240000; + if (Enabled() && !s_Current) s_Current = this; + else m_Stopped = true; + } + // Fixture configuration only: caller must select this before the first Tick. + bool SetAutohoverMode(bool enabled) + { + if (m_Started || m_Stopped || m_Complete || m_Bound || m_Aircraft) return false; + m_AutohoverMode = enabled; + return true; + } + protected bool BeginAutohover() + { + if (!m_AutohoverMode) return true; + if (m_AutohoverSaved || !m_Bound || !PoweredAuthority() || !m_Controller || m_Controller.GetOwner() != m_Aircraft) return false; + m_AutohoverController = m_Controller; + m_OriginalAutohover = m_Controller.GetAutohoverEnabled(); + m_AutohoverSaved = true; + m_Controller.SetAutohoverEnabled(true); + return m_Controller.GetAutohoverEnabled(); + } + protected bool AutohoverReady() + { + if (!m_AutohoverMode) return true; + // Native autohover also rewrites collective. Prove direct input consumption + // first, then enable its controller only for the bounded flight phase. + if (!m_AutohoverSaved && (m_Stage == 2 || m_Stage == 3 || m_Stage == 9 || m_Stage == 10)) return true; + return m_AutohoverSaved && m_AutohoverController && m_AutohoverController == m_Controller && m_Controller.GetOwner() == m_Aircraft && m_Controller.GetAutohoverEnabled(); + } + protected void RestoreAutohover(bool ownedSeat) + { + if (ownedSeat && m_AutohoverSaved && m_AutohoverController && m_AutohoverController == m_Controller && m_Controller.GetOwner() == m_Aircraft) + { + m_Controller.SetAutohoverEnabled(m_OriginalAutohover); + PrintFormat("ERR POWERED AUTOHOVER RESTORE: original=%1 observed=%2", m_OriginalAutohover, m_Controller.GetAutohoverEnabled()); + if (m_Controller.GetAutohoverEnabled() != m_OriginalAutohover) Print("ERR SMOKE FAIL: powered-flight original owned autohover state restored", LogLevel.ERROR); + } + m_AutohoverSaved = false; + m_AutohoverController = null; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: powered-flight " + detail); return true; } + Print("ERR SMOKE FAIL: powered-flight " + detail, LogLevel.ERROR); Stop(); return false; + } + protected bool PlayerPresent() + { + if (!m_Aircraft || !m_Group || m_Group.GetPlayerCount(true) > 0) return true; + array ids = {}; GetGame().GetPlayerManager().GetPlayers(ids); + foreach (int id : ids) + { + IEntity actor = GetGame().GetPlayerManager().GetPlayerControlledEntity(id); + if (actor && (actor == m_Pilot || CompartmentAccessComponent.GetVehicleIn(actor) == m_Aircraft)) return true; + } + return false; + } + protected bool OwnPilot() + { + return m_Pilot && m_Group && ERR_Actors.Group(m_Pilot) == m_Group && !ERR_Actors.Player(m_Pilot); + } + protected bool PoweredAuthority() + { + bool occupied = m_Seat && m_Seat.GetOccupant() == m_Pilot && m_Controller && m_Controller.GetPilotCompartmentSlot() == m_Seat && CompartmentAccessComponent.GetVehicleIn(m_Pilot) == m_Aircraft; + bool alive = ERR_Actors.Alive(m_Aircraft) && ERR_Actors.CanFight(m_Pilot); + SCR_VehicleDamageManagerComponent damage; + if (m_Aircraft) damage = SCR_VehicleDamageManagerComponent.Cast(m_Aircraft.FindComponent(SCR_VehicleDamageManagerComponent)); + alive = alive && damage && damage.GetEngineFunctional() && damage.GetMovementDamage() < 1 && !damage.IsOnFire(); + if (m_Simulation) + for (int rotor = 0; rotor < m_Simulation.RotorCount(); rotor++) if (m_Simulation.RotorGetState(rotor) == RotorState.DESTROYED) alive = false; + return ERR_PoweredFlightRules.Authority(Replication.IsServer(), Enabled(), m_Stopped, OwnPilot(), occupied, PlayerPresent(), alive, m_Fuel && m_Fuel.HasFuel()); + } + void PrepareHelicopter(HelicopterControllerComponent controller) + { + if (!m_Bound || controller != m_Controller || !PoweredAuthority()) return; + // Native SCR controller normally reapplies device preferences every update. + // Override only this owned fixture controller, never global/user settings. + controller.SetCollectiveMode(CollectiveMode.Direct); m_HelicopterUpdates++; + } + bool UsesActionInputs() { return m_ActionInputs; } + void ObservePilotPreparation(CharacterControllerComponent controller, IEntity owner) + { + if (!m_Bound || controller != m_Character || owner != m_Pilot || !PoweredAuthority()) return; + m_PilotPreparations++; + } + // Both selectable input paths share one computation. Only the selected + // path integrates per callback; neither path invokes the other writer. + protected bool ComputePilotDemand(CharacterControllerComponent controller, IEntity owner, float dt, out float collective, out vector axes) + { + if (!m_Bound || controller != m_Character || owner != m_Pilot || !PoweredAuthority() || !AutohoverReady() || !m_Input || !m_Simulation || dt <= 0 || dt > 0.2) return false; + if (m_ActionInputs && m_Stage >= 4 && m_Stage <= 6 && !m_SignedCollectiveProven) return false; + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + vector velocity = m_Simulation.GetVelocity(); + vector angular = m_Simulation.GetAngularVelocityLocal(); + float height = transform[3][1] - m_Home[1]; + float forward, aside, torque; + collective = -1; + if (m_Stage == 9) collective = -0.9; // native0.05, bounded signal-consumption proof + if (m_Stage >= 4 && m_Stage <= 6 && m_Controller.IsEngineOn()) + { + float desiredVertical = ERR_PoweredFlightRules.DesiredVertical(height, m_Stage == 6); + float error = desiredVertical - velocity[1]; + m_Collective = Math.Clamp(m_Collective + error * dt * 0.12, -0.95, 0.8); + collective = Math.Clamp(m_Collective + error * 0.12, -1, 0.9); + vector offset = m_Home - transform[3]; offset[1] = 0; + // Native105226 already brakes before8m refusal; increase only velocity damping. + vector acceleration = offset * 0.08 - velocity * 0.6; acceleration[1] = 0; + // Small local cyclic corrections counter drift/tilt through native inputs. + // Sign/gain and native Direct-mode response remain experimental evidence. + forward = ERR_PoweredFlightRules.ClampInput((vector.Dot(acceleration, transform[2]) / 9.81 + transform[2][1]) * 0.8 - angular[0] * 1.2, 0.15); + aside = ERR_PoweredFlightRules.ClampInput((vector.Dot(acceleration, transform[0]) / 9.81 + transform[0][1]) * 0.8 + angular[2] * 1.2, 0.15); + // Native autohover also adjusts collective; observe its physical response. + // Give its lateral controller zero custom cyclic in this experiment. + // Preserve collective/yaw and bounds; never combine two cyclic controllers. + if (m_AutohoverMode) { forward = 0; aside = 0; } + if (ERR_PoweredFlightRules.TranslationActive(m_TranslationMode, m_TranslationFrozen, m_ActionInputs, m_AutohoverMode, m_Stage)) + { + vector demand = ERR_PoweredFlightRules.TranslationDemand(m_TranslationTarget, transform[3], velocity); + forward = ERR_PoweredFlightRules.ClampInput(vector.Dot(demand, transform[2]), 0.03); + aside = ERR_PoweredFlightRules.ClampInput(vector.Dot(demand, transform[0]), 0.03); + m_TranslationUpdates++; + } + float headingError = m_Heading - m_Aircraft.GetYawPitchRoll()[0]; + while (headingError > 180) headingError -= 360; + while (headingError < -180) headingError += 360; + torque = ERR_PoweredFlightRules.ClampInput(headingError * 0.01 - angular[1] * 0.3, 0.3); + if (m_Stage == 6 && ERR_PoweredFlightRules.Landed(m_Simulation.HasAnyGroundContact(), height, velocity.Length(), angular.Length(), transform[1][1])) collective = -1; + } + collective = ERR_PoweredFlightRules.CollectiveCommand(collective, m_ActionInputs, m_Stage); + axes = Vector(forward, aside, torque); + return true; + } + protected bool WriteActionPair(ActionManager am, string positive, string negative, float demand) + { + float a = Math.Clamp(demand, 0, 1); + float b = Math.Clamp(-demand, 0, 1); + am.SetActionValue(positive, a); am.SetActionValue(negative, b); + return Math.AbsFloat(am.GetActionValue(positive) - a) < 0.001 && Math.AbsFloat(am.GetActionValue(negative) - b) < 0.001; + } + protected bool OwnActionManager(ActionManager am) + { + // Read the global manager only to reject shared ownership. Never write it. + return am && m_PilotAgent && am == m_PilotAgent.GetActionManager() && am != GetGame().GetInputManager(); + } + void PreparePilotActions(CharacterControllerComponent controller, IEntity owner, ActionManager am, float dt) + { + if (!m_ActionInputs || !m_Bound || controller != m_Character || owner != m_Pilot || !PoweredAuthority()) return; + if (!OwnActionManager(am)) { m_ReadbackOK = false; return; } + m_OwnedActions = am; + // Same short activation pattern used by vanilla game.c; this manager belongs + // solely to the fixture AI, never to global hardware or the human player. + // Native104256 reports false from ActivateContext while already active. + // Treat observed active state as authority, not an undocumented return meaning. + bool alreadyActive = am.IsContextActive("HelicopterContext"); + bool activated; + if (!alreadyActive) activated = am.ActivateContext("HelicopterContext", 1); + bool contextActive = am.IsContextActive("HelicopterContext"); + if (m_ActionContextSamples < 4) + { + m_ActionContextSamples++; + PrintFormat("ERR POWERED ACTION CONTEXT: sample=%1 activated=%2 active=%3 dt=%4 input=%5 simulation=%6", m_ActionContextSamples, activated, contextActive, dt, m_Input != null, m_Simulation != null); + } + if (!contextActive) { m_ReadbackOK = false; return; } + float collective; vector axes; + if (!ComputePilotDemand(controller, owner, dt, collective, axes)) return; + bool a = WriteActionPair(am, "HelicopterCollectiveIncrease", "HelicopterCollectiveDecrease", collective); + bool b = WriteActionPair(am, "HelicopterCyclicForward", "HelicopterCyclicBack", axes[0]); + bool c = WriteActionPair(am, "HelicopterCyclicRight", "HelicopterCyclicLeft", axes[1]); + bool d = WriteActionPair(am, "HelicopterAntiTorqueRight", "HelicopterAntiTorqueLeft", axes[2]); + m_ReadbackOK = m_ReadbackOK && a && b && c && d; + m_ControlUpdates++; m_LastControl = GetGame().GetWorld().GetWorldTime(); + } + void ApplyPilot(CharacterControllerComponent controller, IEntity owner, float dt) + { + // The experimental actor-action path and old context path never both write. + if (m_ActionInputs) return; + float collective; vector axes; + if (!ComputePilotDemand(controller, owner, dt, collective, axes)) return; + float forward = axes[0]; float aside = axes[1]; float torque = axes[2]; + m_Input.SetVehicleThrottle(1); + m_Input.SetVehicleCollective(collective); + m_Input.SetVehicleCyclicForward(forward); + m_Input.SetVehicleCyclicAside(aside); + m_Input.SetVehicleAntiTorque(torque); + m_ReadbackOK = m_ReadbackOK && Math.AbsFloat(m_Input.GetVehicleCollective() - collective) < 0.001 && Math.AbsFloat(m_Input.GetVehicleCyclicForward() - forward) < 0.001 && Math.AbsFloat(m_Input.GetVehicleCyclicAside() - aside) < 0.001 && Math.AbsFloat(m_Input.GetVehicleAntiTorque() - torque) < 0.001; + m_ControlUpdates++; m_LastControl = GetGame().GetWorld().GetWorldTime(); + } + protected bool FindPad(out vector result) + { + vector anchor = m_Mode.ExtractionVehicle().GetOrigin(); + int tested, lowGround, slopeRejected, cylinderRejected, sweepRejected; + float bestSlope = float.MAX; + vector bestCandidate; + vector refinementAnchor; + int localCandidates = ERR_PoweredFlightRules.PAD_CANDIDATES + ERR_PoweredFlightRules.PAD_REFINEMENTS; + for (int index = 0; index < localCandidates + ERR_PoweredFlightRules.AIRPORT_CANDIDATES; index++) + { + if (index == ERR_PoweredFlightRules.PAD_CANDIDATES) + { + if (bestSlope == float.MAX) refinementAnchor = anchor; + else refinementAnchor = bestCandidate; + // Freeze the refinement centre; improvements must not move the grid. + } + tested++; + vector candidate; + if (index < ERR_PoweredFlightRules.PAD_CANDIDATES) candidate = ERR_Actors.Ground(anchor + ERR_PoweredFlightRules.PadOffset(index)); + else if (index < localCandidates) candidate = ERR_Actors.Ground(refinementAnchor + ERR_PoweredFlightRules.RefineOffset(index - ERR_PoweredFlightRules.PAD_CANDIDATES)); + // Installed vanilla Eden/Airport location centre; candidate only, never + // accepted without exactly the same terrain and physical clearance queries. + else candidate = ERR_Actors.Ground("4900.953 0 11787.412" + ERR_PoweredFlightRules.AirportOffset(index - localCandidates)); + if (candidate[1] < 2) { lowGround++; continue; } + float maximumDelta = 0; + for (int edge = 0; edge < 4; edge++) + { + float side = edge * Math.PI / 2; + vector point = candidate + Vector(Math.Cos(side) * 14, 0, Math.Sin(side) * 14); + maximumDelta = Math.Max(maximumDelta, Math.AbsFloat(SCR_TerrainHelper.GetTerrainY(point) - candidate[1])); + } + if (maximumDelta < bestSlope) { bestSlope = maximumDelta; bestCandidate = candidate; } + if (maximumDelta > 0.8) { slopeRejected++; continue; } + // Retain slope and exact native rejection semantics; widen the tested + // column for a runtime-measured whole-aircraft footprint plus8m drift. + if (!SCR_WorldTools.TraceCilinderUtil(candidate + "0 2.5 0", 40, 4, TraceFlags.ENTS)) { cylinderRejected++; continue; } + TraceBox clearance = new TraceBox(); clearance.Start = candidate + "0 3 0"; clearance.End = candidate + "0 60 0"; + clearance.Mins = "-40 -1 -40"; clearance.Maxs = "40 1 40"; clearance.Flags = TraceFlags.ENTS | TraceFlags.WORLD; + if (GetGame().GetWorld().TraceMove(clearance, null) < 1) { sweepRejected++; continue; } + PrintFormat("ERR POWERED PAD: found=%1 tested=%2 distance=%3m maximumHeightDelta=%4m lowGround=%5 slopeRejected=%6 cylinderRejected=%7 sweepRejected=%8", candidate, tested, vector.DistanceXZ(anchor, candidate), maximumDelta, lowGround, slopeRejected, cylinderRejected, sweepRejected); + result = candidate; return true; + } + if (bestSlope == float.MAX) bestSlope = -1; + PrintFormat("ERR POWERED PAD: no safe candidate; tested=%1 localRadius=557m plus airport300m-grid lowGround=%2 slopeRejected=%3 cylinderRejected=%4 sweepRejected=%5 bestHeightDelta=%6m bestCandidate=%7 (diagnostic only; never a fallback)", tested, lowGround, slopeRejected, cylinderRejected, sweepRejected, bestSlope, bestCandidate); + return false; + } + protected void Diagnostic(float now) + { + if (!m_Simulation || !m_Aircraft || now < m_NextLog) return; + m_NextLog = now + 2000; + if (m_Stage == 4 && now < m_StageDeadline - 57000) m_NextLog = now + 250; + if (m_TranslationMode && m_Stage == 5) m_NextLog = now + 500; + if (m_ActionInputs) + { + bool ownedActions = OwnActionManager(m_OwnedActions); + bool contextActive = m_OwnedActions && m_OwnedActions.IsContextActive("HelicopterContext"); + PrintFormat("ERR POWERED ACTION MANAGER: selected=1 exactOwnedNonGlobal=%1 contextActive=%2 virtualWrites=%3", ownedActions, contextActive, m_ControlUpdates); + } + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + PrintFormat("ERR POWERED AUTOHOVER: selected=%1 saved=%2 enabled=%3 exactController=%4", m_AutohoverMode, m_AutohoverSaved, m_Controller.GetAutohoverEnabled(), m_AutohoverController == m_Controller); + PrintFormat("ERR POWERED FLIGHT: stage=%1 height=%2 drift=%3 speed=%4 vertical=%5 up=%6 groundContact=%7 fuel=%8 engine=%9", m_Stage, transform[3][1] - m_Home[1], vector.DistanceXZ(transform[3], m_Home), m_Simulation.GetVelocity().Length(), m_Simulation.GetVelocity()[1], transform[1][1], m_Simulation.HasAnyGroundContact(), m_Fuel.GetTotalFuel(), m_Controller.IsEngineOn()); + vector rotorAxis; m_Simulation.RotorGetAxis(0, rotorAxis); + PrintFormat("ERR POWERED HEADING: desiredYaw=%1 actualYawPitchRoll=%2", m_Heading, m_Aircraft.GetYawPitchRoll()); + PrintFormat("ERR POWERED ROTOR AXIS: local=%1 acceleration=%2", rotorAxis, m_Simulation.GetAcceleration()); + PrintFormat("ERR POWERED MOTION: offset=%1 velocity=%2 angularLocal=%3 forward=%4 right=%5", m_Home - transform[3], m_Simulation.GetVelocity(), m_Simulation.GetAngularVelocityLocal(), transform[2], transform[0]); + PrintFormat("ERR POWERED INPUT: pilotHooks=%1 vehicleHooks=%2 readback=%3 collective=%4 cyclicF=%5 cyclicR=%6 antiTorque=%7 rotorRPM=%8 targetRPM=%9", m_ControlUpdates, m_HelicopterUpdates, m_ReadbackOK, m_Input.GetVehicleCollective(), m_Input.GetVehicleCyclicForward(), m_Input.GetVehicleCyclicAside(), m_Input.GetVehicleAntiTorque(), m_Simulation.RotorGetRPM(0), m_Simulation.RotorGetRPMTarget(0)); + if (m_TranslationMode && m_TranslationFrozen) + { + vector direction = m_TranslationTarget - m_TranslationOrigin; direction[1] = 0; direction = direction * 0.25; + vector travel = transform[3] - m_TranslationOrigin; travel[1] = 0; + float along = vector.Dot(travel, direction); + vector cross = travel - direction * along; + vector horizontal = m_Simulation.GetVelocity(); horizontal[1] = 0; + PrintFormat("ERR POWERED TRANSLATION: stage=%1 origin=%2 target=%3 position=%4 along=%5 cross=%6 error=%7 horizontalSpeed=%8 updates=%9", m_Stage, m_TranslationOrigin, m_TranslationTarget, transform[3], along, cross.Length(), vector.DistanceXZ(transform[3], m_TranslationTarget), horizontal.Length(), m_TranslationUpdates); + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + if (signals) + { + int cyclicForward = signals.FindSignal("MainRotorCyclicForward"); + int cyclicAside = signals.FindSignal("MainRotorCyclicAside"); + if (cyclicForward >= 0 && cyclicAside >= 0) PrintFormat("ERR POWERED TRANSLATION SIGNALS: pilotForward=%1 pilotAside=%2 rotorForward=%3 rotorAside=%4 (native autohover may modify rotor commands)", m_Input.GetVehicleCyclicForward(), m_Input.GetVehicleCyclicAside(), signals.GetSignalValue(cyclicForward), signals.GetSignalValue(cyclicAside)); + } + } + } + protected bool PollNativeFlightComponents(float now) + { + // Component pointers, simulation and tank contents may initialize after spawn. + // Enumerate the real empty primary cockpit slot; an active pilot assignment + // is a later occupancy requirement, not a prerequisite to creating its pilot. + m_Controller = HelicopterControllerComponent.Cast(m_Aircraft.FindComponent(HelicopterControllerComponent)); + m_Simulation = null; + if (m_Controller) m_Simulation = m_Controller.GetSimulation(); + m_Fuel = FuelManagerComponent.Cast(m_Aircraft.FindComponent(FuelManagerComponent)); + BaseCompartmentManagerComponent manager = BaseCompartmentManagerComponent.Cast(m_Aircraft.FindComponent(BaseCompartmentManagerComponent)); + array slots = {}; + if (manager) manager.GetCompartments(slots); + m_Seat = null; + if (slots.Count() <= 64) + { + foreach (BaseCompartmentSlot slot : slots) + { + PilotCompartmentSlot pilotSlot = PilotCompartmentSlot.Cast(slot); + if (!pilotSlot || pilotSlot.GetOwner() != m_Aircraft || pilotSlot.GetVehicle() != m_Aircraft) continue; + if (!m_PilotSeatsLogged) PrintFormat("ERR POWERED INITIAL SEAT: name=%1 unique=%2 type=%3 occupied=%4 accessible=%5 piloting=%6", pilotSlot.GetCompartmentName(), pilotSlot.GetCompartmentUniqueName(), pilotSlot.GetType(), pilotSlot.GetOccupant() != null, pilotSlot.IsCompartmentAccessible(), pilotSlot.IsPiloting()); + // This is the actual object name in the audited stock Mi8 prefab. Do not + // choose the copilot merely because it has the same PilotCompartment type. + if (pilotSlot.GetCompartmentName() != "PilotCompartment") continue; + if (pilotSlot.GetType() != ECompartmentType.PILOT || !pilotSlot.IsCompartmentAccessible()) continue; + if (pilotSlot.GetOccupant() || pilotSlot.IsReserved() || pilotSlot.IsGetInLocked()) continue; + m_Seat = pilotSlot; + } + } + if (slots.Count() > 0) m_PilotSeatsLogged = true; + bool validSimulation = m_Simulation && m_Simulation.IsValid(); + bool fueled = m_Fuel && m_Fuel.HasFuel(); + PilotCompartmentSlot active; + if (m_Controller) active = m_Controller.GetPilotCompartmentSlot(); + if (now >= m_NextInitializationLog || now >= m_StageDeadline) + { + m_NextInitializationLog = now + 2000; + float fuel = -1; + if (m_Fuel) fuel = m_Fuel.GetTotalFuel(); + PrintFormat("ERR POWERED INITIALIZATION: controller=%1 simulation=%2 valid=%3 manager=%4 slots=%5 primaryEmptySeat=%6 activeSeat=%7 fuelManager=%8", m_Controller != null, m_Simulation != null, validSimulation, manager != null, slots.Count(), m_Seat != null, active != null, m_Fuel != null); + PrintFormat("ERR POWERED INITIALIZATION STOCK: fueled=%1 totalFuel=%2 agents=%3 pilotSpawnRequested=%4", fueled, fuel, m_Group.GetAgentsCount(), m_PilotSpawnRequested); + } + return m_Controller && validSimulation && m_Seat && fueled; + } + protected void SeatingDiagnostic(float now) + { + // Observe each existing stage-1 predicate without changing seating, AI, + // physics, health, fuel, or the shared preparation deadline. + if (now < m_NextSeatingLog && now < m_StageDeadline) return; + m_NextSeatingLog = now + 2000; + bool ownPilot = OwnPilot(); + bool seatMatches = m_Seat.GetOccupant() == m_Pilot; + bool activeMatches = m_Controller.GetPilotCompartmentSlot() == m_Seat; + bool vehicleMatches = m_Pilot && CompartmentAccessComponent.GetVehicleIn(m_Pilot) == m_Aircraft; + bool aircraftReady = ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft); + bool pilotAlive = ERR_Actors.Alive(m_Pilot); + bool pilotConscious = ERR_Actors.CanFight(m_Pilot); + bool aircraftAlive = ERR_Actors.Alive(m_Aircraft); + bool sameGroup = ERR_Actors.Group(m_Pilot) == m_Group; + bool player = ERR_Actors.Player(m_Pilot); + PrintFormat("ERR POWERED SEATING: ownPilot=%1 seatOccupantMatches=%2 activeSlotMatches=%3 vehicleMatches=%4 aircraftReady=%5 wakes=%6 stableSince=%7 remainingMs=%8", ownPilot, seatMatches, activeMatches, vehicleMatches, aircraftReady, m_Wakes, m_Stable, m_StageDeadline - now); + PrintFormat("ERR POWERED SEATING ACTORS: pilotExists=%1 alive=%2 conscious=%3 sameGroup=%4 player=%5 groupAgents=%6 aircraftAlive=%7", m_Pilot != null, pilotAlive, pilotConscious, sameGroup, player, m_Group.GetAgentsCount(), aircraftAlive); + PrintFormat("ERR POWERED SEATING IDENTITIES: pilot=%1 occupant=%2 selectedSeat=%3 activeSeat=%4 group=%5 actualGroup=%6", m_Pilot, m_Seat.GetOccupant(), m_Seat, m_Controller.GetPilotCompartmentSlot(), m_Group, ERR_Actors.Group(m_Pilot)); + if (m_PilotAgent) PrintFormat("ERR POWERED SEATING AGENT: actualLOD=%1 forcedLOD=%2 activated=%3", m_PilotAgent.GetLOD(), m_PilotAgent.GetPermanentLOD(), m_PilotAgent.IsAIActivated()); + CompartmentAccessComponent access; + if (m_Pilot) access = CompartmentAccessComponent.Cast(m_Pilot.FindComponent(CompartmentAccessComponent)); + if (access) PrintFormat("ERR POWERED SEATING ACCESS: gettingIn=%1 gettingOut=%2", access.IsGettingIn(), access.IsGettingOut()); + Physics physics = m_Aircraft.GetPhysics(); + vector entityTransform[4]; m_Aircraft.GetWorldTransform(entityTransform); + if (physics) PrintFormat("ERR POWERED SEATING PHYSICS: dynamic=%1 awake=%2 speed=%3 angularSpeed=%4 entityUp=%5 entityOrigin=%6", physics.IsDynamic(), physics.IsActive(), physics.GetVelocity().Length(), physics.GetAngularVelocity().Length(), entityTransform[1][1], entityTransform[3]); + vector nativeTransform[4]; m_Simulation.GetWorldTransform(nativeTransform); + bool valid = m_Simulation.IsValid(); + bool nativeContact = m_Simulation.HasAnyGroundContact(); + bool parkedSupport = ERR_CasualtyGroundSupport.Parked(m_Aircraft, now >= m_StageDeadline); + PrintFormat("ERR POWERED SEATING SIMULATION: valid=%1 nativeContact=%2 parkedSupport=%3 engineOn=%4 nativeUp=%5 nativeOrigin=%6", valid, nativeContact, parkedSupport, m_Controller.IsEngineOn(), nativeTransform[1][1], nativeTransform[3]); + } + void Stop() + { + if (m_Stopped) return; + // Input cleanup is confined to the same unclaimed test pilot/aircraft. + bool ours = m_Bound && OwnPilot() && !PlayerPresent(); + bool ownSeat = ours && m_Seat && m_Seat.GetOccupant() == m_Pilot && m_Controller && m_Controller.GetPilotCompartmentSlot() == m_Seat && CompartmentAccessComponent.GetVehicleIn(m_Pilot) == m_Aircraft; + RestoreAutohover(ownSeat); + m_Stopped = true; m_Bound = false; + if (s_Current == this) s_Current = null; + if (ours && m_ActionInputs && OwnActionManager(m_OwnedActions)) + { + WriteActionPair(m_OwnedActions, "HelicopterCollectiveIncrease", "HelicopterCollectiveDecrease", 0); + WriteActionPair(m_OwnedActions, "HelicopterCyclicForward", "HelicopterCyclicBack", 0); + WriteActionPair(m_OwnedActions, "HelicopterCyclicRight", "HelicopterCyclicLeft", 0); + WriteActionPair(m_OwnedActions, "HelicopterAntiTorqueRight", "HelicopterAntiTorqueLeft", 0); + } + if (ours && !m_ActionInputs && m_Input) + { + m_Input.SetVehicleCollective(0); m_Input.SetVehicleThrottle(0); + m_Input.SetVehicleCyclicForward(0); m_Input.SetVehicleCyclicAside(0); m_Input.SetVehicleAntiTorque(0); + } + if (ours && m_Controller && m_ModeSaved) m_Controller.SetCollectiveMode(m_OriginalMode); + m_OwnedActions = null; + if (m_PilotLODSaved && m_PilotAgent && OwnPilot() && !PlayerPresent()) m_PilotAgent.SetPermanentLOD(m_OriginalPilotLOD); + if (m_Group && m_Group.GetPlayerCount(true) == 0) m_Group.SetPermanentLOD(-1); + // Keep real airborne/failed test actors for diagnosis and mode-owned cleanup. + // Stop never repairs, stabilizes, teleports, refuels or replaces them. + } + protected bool BeginTranslation(float now, vector position, vector fallback) + { + if (!Check(m_TranslationMode && !m_TranslationFrozen && m_Stage == 4 && m_ActionInputs && m_AutohoverMode && AutohoverReady(), "translation starts once after the original native hover stage")) return false; + vector target; + if (!Check(ERR_PoweredFlightRules.TranslationTarget(m_Home, position, fallback, target), "frozen four-metre horizontal target remains within five metres of original home")) return false; + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + if (!Check(signals && signals.FindSignal("MainRotorCyclicForward") >= 0 && signals.FindSignal("MainRotorCyclicAside") >= 0, "existing native cyclic signals available for translation observation")) return false; + m_TranslationOrigin = position; + m_TranslationTarget = target; + m_TranslationFrozen = true; + m_Stage = 5; m_StageDeadline = now + 45000; m_Stable = -1; m_NextLog = 0; + PrintFormat("ERR POWERED TRANSLATION BEGIN: origin=%1 target=%2 originalHome=%3 deadline=%4 overallDeadline=%5", m_TranslationOrigin, m_TranslationTarget, m_Home, m_StageDeadline, m_Deadline); + return true; + } + protected bool CheckTranslation(float now, vector position, float height, float speed, float upright, float drift) + { + if (!ERR_PoweredFlightRules.TranslationActive(m_TranslationMode, m_TranslationFrozen, m_ActionInputs, m_AutohoverMode, m_Stage)) return Check(false, "translation retains its selected inputs and frozen stage ownership"); + if (now >= m_StageDeadline) return Check(false, "four-metre translation and five-second target hold finish within 45 seconds"); + vector velocity = m_Simulation.GetVelocity(); + vector horizontal = velocity; horizontal[1] = 0; + bool held = m_TranslationUpdates >= 3 && ERR_PoweredFlightRules.TranslationHeld(m_Simulation.HasAnyGroundContact(), height, speed, velocity[1], upright, drift, horizontal.Length(), vector.DistanceXZ(position, m_TranslationTarget), vector.DistanceXZ(position, m_TranslationOrigin)); + if (!held) m_Stable = -1; + if (held && m_Stable < 0) m_Stable = now; + if (m_Stable < 0 || now - m_Stable < 5000) return true; + if (!Check(true, "actual horizontal translation reaches frozen target and holds five seconds at 7–9m with horizontal speed below 0.25m/s")) return false; + m_TranslationProven = true; + m_Stage = 6; m_StageDeadline = now + 65000; m_Stable = -1; + return true; + } + int Tick(float now) + { + if (m_Complete) return 1; + if (m_Stopped) return -1; + m_Started = true; + if (!Enabled() || !m_Mode || now >= m_Deadline || ERR_MissionRules.Terminal(m_Mode.Phase())) { Check(false, "server fixture active within 240-second bound"); return -1; } + if (!ERR_PoweredFlightRules.TranslationInputs(m_TranslationMode, m_ActionInputs, m_AutohoverMode)) { Check(false, "translation requires actor-local actions and selected native autohover before allocation"); return -1; } + if (m_PreviousTick >= 0 && (now < m_PreviousTick || now - m_PreviousTick > 1500)) { m_Stable = -1; m_PositiveSignalSince = -1; m_NegativeSignalSince = -1; } + m_PreviousTick = now; + if (m_Stage == 0) + { + if (!m_Mode.ExtractionVehicle()) return 0; + vector pad; + if (!Check(FindPad(pad), "separate clear flat test pad found; extraction vehicle untouched")) return -1; + m_TestPad = pad; + m_Aircraft = Vehicle.Cast(ERR_Actors.Spawn(AIRCRAFT, pad)); + m_Group = SCR_AIGroup.Cast(ERR_Actors.Spawn(GROUP, pad + "20 0 0")); + m_Mode.Own(m_Aircraft); m_Mode.Own(m_Group); + if (!Check(m_Aircraft && m_Group, "one stock unarmed airframe and own empty group created once")) return -1; + // Group_USSR_Base authors six queued members; use the memberless native + // base group so adding one pilot cannot initiate a hidden crew allocation. + if (!Check(m_Group.InitFactionKey("USSR") && m_Group.GetFactionName() == "USSR", "memberless native group receives explicit USSR faction")) return -1; + m_Group.SetPermanentLOD(0); m_Group.ActivateAI(); + m_Stage = 8; m_StageDeadline = now + 30000; return 0; + } + if (m_Stage == 8) + { + if (!m_Aircraft || !m_Group || PlayerPresent()) { Check(false, "initial fixture airframe/group remain owned and unclaimed"); return -1; } + bool componentsReady = PollNativeFlightComponents(now); + if (now >= m_StageDeadline) { Check(false, "native flight components and empty primary pilot seat initialize within shared 30-second preparation bound"); return -1; } + if (!componentsReady) return 0; + if (!Check(!m_PilotSpawnRequested && m_Group.GetAgentsCount() == 0, "native components initialized before the only pilot allocation")) return -1; + m_PilotSpawnRequested = true; + AIGroup nativeGroup = m_Group; + m_Pilot = m_Seat.SpawnCharacterInCompartment(PILOT, nativeGroup, GROUP); + if (m_Pilot) m_Mode.Own(m_Pilot); + if (!Check(m_Pilot && nativeGroup == m_Group, "one existing vanilla character spawned through native pilot-seat mechanism")) return -1; + AIControlComponent pilotControl = AIControlComponent.Cast(m_Pilot.FindComponent(AIControlComponent)); + if (pilotControl) m_PilotAgent = pilotControl.GetControlAIAgent(); + if (!Check(m_PilotAgent && OwnPilot(), "single native pilot owns its actual control agent and fixture group")) return -1; + // Group LOD does not establish each member's own native LOD. Keep the + // distant fixture pilot's actual control agent active, as physical crews do. + m_OriginalPilotLOD = m_PilotAgent.GetPermanentLOD(); m_PilotLODSaved = true; + m_PilotAgent.SetPermanentLOD(0); m_PilotAgent.ActivateAI(); + m_Stage = 1; return 0; + } + if (m_Stage == 1) + { + if (!m_Aircraft || !m_Group || !m_Controller || !m_Simulation || !m_Seat) { Check(false, "same native flight objects survive seating"); return -1; } + SeatingDiagnostic(now); + Physics physics = m_Aircraft.GetPhysics(); + if (physics && physics.IsDynamic() && m_Simulation.IsValid() && m_Wakes == 0) { m_Wakes = 1; physics.SetActive(ActiveState.ACTIVE); m_Stable = -1; return 0; } + if (now >= m_StageDeadline) { Check(false, "initial native seating and ground settling complete in 30 seconds"); return -1; } + if (!m_Wakes || !OwnPilot() || m_Seat.GetOccupant() != m_Pilot || m_Controller.GetPilotCompartmentSlot() != m_Seat || !ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft)) { m_Stable = -1; return 0; } + if (m_Stable < 0) m_Stable = now; + if (now - m_Stable < 1000) return 0; + m_Character = CharacterControllerComponent.Cast(m_Pilot.FindComponent(CharacterControllerComponent)); + if (m_Character) m_Input = m_Character.GetInputContext(); + if (!Check(m_Input && m_Group.GetAgentsCount() == 1 && PoweredAuthority(), "one living native AI pilot physically occupies its own fueled helicopter")) return -1; + m_Home = m_Aircraft.GetOrigin(); m_Heading = m_Aircraft.GetYawPitchRoll()[0]; + m_OriginalMode = m_Controller.GetCollectiveMode(); m_ModeSaved = true; + m_InitialFuel = m_Fuel.GetTotalFuel(); m_Bound = true; + m_Stage = 2; m_StageDeadline = now + 5000; return 0; + } + Diagnostic(now); + if (!PoweredAuthority() || !m_ReadbackOK || !AutohoverReady()) { Check(false, "current owned conscious pilot, fuel, rotors, selected autohover and exact input readback remain valid"); return -1; } + if (m_Stage == 2) + { + if (now >= m_StageDeadline) { Check(false, "native AI input and helicopter preparation hooks execute before engine start"); return -1; } + if (m_PilotPreparations < 3 || m_ControlUpdates < 3 || m_HelicopterUpdates < 3) return 0; + if (!Check(m_Controller.GetCollectiveMode() == CollectiveMode.Direct && m_Input.GetVehicleCollective() == 0, "owned native input hooks apply minimum collective in Direct mode")) return -1; + if (!Check(!m_Controller.IsEngineOn(), "native engine remains off until the complete footprint is qualified")) return -1; + vector measuredOrigin; + float measuredRadius; + if (!Check(ERR_NativeFlightFootprint.Measure(m_Aircraft, m_Simulation, m_TestPad, measuredOrigin, measuredRadius), "actual complete model and rotor footprint fits the cleared flight column before engine start")) return -1; + // Baseline the actual entity world origin used by geometry and telemetry, + // after native placement; this never changes an entity transform. + m_Home = measuredOrigin; + m_StartRequests = 1; + bool started = m_Controller.StartEngine(); + PrintFormat("ERR POWERED ENGINE REQUEST: StartEngine returned=%1; normal procedure, no force-start or simulation EngineStart", started); + m_Stage = 3; m_StageDeadline = now + 65000; return 0; + } + if (now - m_LastControl > 1000) { Check(false, "native control callback remains live during test flight"); return -1; } + vector transform[4]; m_Aircraft.GetWorldTransform(transform); + float height = transform[3][1] - m_Home[1]; + float speed = m_Simulation.GetVelocity().Length(); + float drift = vector.DistanceXZ(transform[3], m_Home); + if (height > 18 || height < -3 || drift >= 8 || transform[1][1] < 0.85) { Check(false, "physical test stays inside height, drift and tilt safety envelope"); return -1; } + if (m_Stage == 3) + { + if (now >= m_StageDeadline) { Check(false, "normal engine startup and native rotor RPM complete within 65 seconds"); return -1; } + float targetRPM = m_Simulation.RotorGetRPMTarget(0); + if (!m_Controller.IsEngineOn() || targetRPM <= 0 || m_Simulation.RotorGetRPM(0) < targetRPM * 0.9 || m_Fuel.GetTotalFuel() >= m_InitialFuel) return 0; + if (!Check(m_StartRequests == 1 && m_Fuel.GetTotalFuel() < m_InitialFuel, "single normal engine start spins physical rotor and consumes native fuel")) return -1; + m_PositiveGateUpdates = m_ControlUpdates; m_PositiveSignalSince = -1; + m_Stage = 9; m_StageDeadline = now + 3000; return 0; + } + if (((m_Stage >= 4 && m_Stage <= 6) || m_Stage == 9 || m_Stage == 10) && !m_Controller.IsEngineOn()) { Check(false, "powered flight retains real running engine"); return -1; } + if (m_Stage == 9) + { + if (now >= m_StageDeadline) { Check(false, "positive native collective reaches actual rotor signal before climb within three seconds"); return -1; } + SignalsManagerComponent signals = m_Controller.GetSignalsManager(); + int signalIndex = -1; + if (signals) signalIndex = signals.FindSignal("MainRotorCollective"); + if (!Check(signalIndex >= 0, "existing native main rotor collective signal available for consumption proof")) return -1; + float observed = signals.GetSignalValue(signalIndex); + bool matched = m_ControlUpdates >= m_PositiveGateUpdates + 3 && ERR_PoweredFlightRules.CollectiveObserved(m_Input.GetVehicleCollective(), observed); + PrintFormat("ERR POWERED COLLECTIVE GATE: command=%1 rotorSignal=%2 applyUpdates=%3 matched=%4", m_Input.GetVehicleCollective(), observed, m_ControlUpdates - m_PositiveGateUpdates, matched); + if (!matched) { m_PositiveSignalSince = -1; return 0; } + if (m_PositiveSignalSince < 0) m_PositiveSignalSince = now; + if (now - m_PositiveSignalSince < 500) return 0; + if (!Check(true, "positive collective persists in existing native rotor signal across actual ticks before climb")) return -1; + if (m_ActionInputs) + { + m_NegativeGateUpdates = m_ControlUpdates; m_NegativeSignalSince = -1; + m_Stage = 10; m_StageDeadline = now + 3000; return 0; + } + if (!Check(BeginAutohover(), "selected native autohover enabled after direct collective consumption proof; exact owned controller readback")) return -1; + m_Collective = -0.8; m_Stage = 4; m_StageDeadline = now + 65000; m_Stable = -1; return 0; + } + if (m_Stage == 10) + { + if (now >= m_StageDeadline) { Check(false, "negative actor collective reaches actual rotor signal before climb within three seconds"); return -1; } + if (!Check(m_ActionInputs && m_Controller.GetCollectiveMode() == CollectiveMode.Direct && !m_Controller.GetAutohoverEnabled(), "negative consumption proof uses owned actor actions in Direct mode with autohover off")) return -1; + SignalsManagerComponent negativeSignals = m_Controller.GetSignalsManager(); + int negativeIndex = -1; + if (negativeSignals) negativeIndex = negativeSignals.FindSignal("MainRotorCollective"); + if (!Check(negativeIndex >= 0, "existing native main rotor collective signal available for negative proof")) return -1; + float negativeObserved = negativeSignals.GetSignalValue(negativeIndex); + bool negativeMatched = m_ControlUpdates >= m_NegativeGateUpdates + 3 && ERR_PoweredFlightRules.NegativeCollectiveObserved(m_Input.GetVehicleCollective(), negativeObserved); + PrintFormat("ERR POWERED NEGATIVE COLLECTIVE GATE: command=%1 rotorSignal=%2 actionUpdates=%3 matched=%4", m_Input.GetVehicleCollective(), negativeObserved, m_ControlUpdates - m_NegativeGateUpdates, negativeMatched); + if (!negativeMatched) { m_NegativeSignalSince = -1; return 0; } + if (m_NegativeSignalSince < 0) m_NegativeSignalSince = now; + if (now - m_NegativeSignalSince < 500) return 0; + if (!Check(true, "negative actor collective persists in existing native rotor signal across actual ticks before signed flight demand")) return -1; + m_SignedCollectiveProven = true; + if (!Check(BeginAutohover(), "selected native autohover enabled only after both direct collective consumption proofs")) return -1; + m_Collective = -0.8; m_Stage = 4; m_StageDeadline = now + 65000; m_Stable = -1; return 0; + } + if (m_TranslationMode && m_Stage == 5) + { + if (!CheckTranslation(now, transform[3], height, speed, transform[1][1], drift)) return -1; + return 0; + } + if (m_Stage == 4 || m_Stage == 5) + { + bool hover = !m_Simulation.HasAnyGroundContact() && ERR_PoweredFlightRules.Hover(height, speed, m_Simulation.GetVelocity()[1], transform[1][1], drift); + if (!hover) m_Stable = -1; + if (hover && m_Stable < 0) m_Stable = now; + if (now >= m_StageDeadline) { Check(false, "actual powered takeoff and five-second stable hover reached in 65 seconds"); return -1; } + if (m_Stable >= 0 && now - m_Stable >= 5000) + { + if (!Check(m_ControlUpdates > 100 && m_Fuel.GetTotalFuel() < m_InitialFuel - 0.05, "actual 7–9 metre powered hover stable five seconds with native fuel consumption")) return -1; + if (m_TranslationMode) + { + if (!BeginTranslation(now, transform[3], transform[0])) return -1; + return 0; + } + m_Stage = 6; m_StageDeadline = now + 65000; m_Stable = -1; + } + return 0; + } + if (m_Stage == 6) + { + if (m_TranslationMode && !m_TranslationProven) { Check(false, "translation reaches its frozen target before landing"); return -1; } + bool landed = ERR_PoweredFlightRules.Landed(m_Simulation.HasAnyGroundContact(), height, speed, m_Simulation.GetAngularVelocity().Length(), transform[1][1]); + if (!landed) m_Stable = -1; + if (landed && m_Stable < 0) m_Stable = now; + if (now >= m_StageDeadline) { Check(false, "actual native contact landing reached within 65 seconds"); return -1; } + if (m_Stable < 0 || now - m_Stable < 2000) return 0; + if (!Check(drift < 8 && m_Fuel.GetTotalFuel() < m_InitialFuel - 0.05 && m_Wakes == 1 && m_StartRequests == 1, "same physical aircraft and living AI pilot land with stable ground contact after powered hover")) return -1; + m_Controller.StopEngine(false); + m_Stage = 7; m_StageDeadline = now + 15000; return 0; + } + if (m_Stage == 7) + { + if (now >= m_StageDeadline) { Check(false, "normal engine shutdown completed on actual ground"); return -1; } + if (m_Controller.IsEngineOn()) return 0; + PrintFormat("ERR POWERED SHUTDOWN: height=%1 speed=%2 angular=%3 up=%4 contact=%5 authority=%6 collective=%7 rotorRPM=%8", height, speed, m_Simulation.GetAngularVelocity().Length(), transform[1][1], m_Simulation.HasAnyGroundContact(), PoweredAuthority(), m_Input.GetVehicleCollective(), m_Simulation.RotorGetRPM(0)); + if (!Check(ERR_PoweredFlightRules.Landed(m_Simulation.HasAnyGroundContact(), height, speed, m_Simulation.GetAngularVelocity().Length(), transform[1][1]) && PoweredAuthority(), "native engine off after contact landing; no transform/velocity/health/fuel correction")) return -1; + Stop(); m_Complete = true; return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c new file mode 100644 index 0000000..7cd8883 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c @@ -0,0 +1,167 @@ +#ifdef WORKBENCH +// Disposable-world fixture. Direct native door boundary, gate damage and real admitted character; +// deliberate asynchronous repositioning tests sampling, not walking/input/MP. +class ERR_NativePrisonBreachProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Player; + protected vector m_Center; + protected vector m_Target; + protected int m_Step; + protected int m_Transitions; + protected float m_Wait; + protected float m_Deadline; + void ERR_NativePrisonBreachProbe(ERR_GameMode mode, IEntity player) + { + m_Mode = mode; m_Player = player; + m_Mode.OnPhaseChanged().Insert(PhaseChanged); + } + protected void PhaseChanged(ERR_Phase previous, ERR_Phase current) + { + if (previous == ERR_Phase.PRISON && current == ERR_Phase.RADIO_SEARCH) m_Transitions++; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: prison-breach " + detail); return true; } + Print("ERR SMOKE FAIL: prison-breach " + detail, LogLevel.ERROR); + Stop(); + return false; + } + protected void Move(vector offset) + { + vector transform[4]; + m_Player.GetWorldTransform(transform); + m_Target = ERR_Actors.Ground(m_Center + offset); + transform[3] = m_Target; + ChimeraCharacter.Cast(m_Player).Teleport(transform); + } + protected bool Arrived() { return vector.Distance(m_Player.GetOrigin(), m_Target) < 1; } + void Stop() { if (m_Mode) m_Mode.OnPhaseChanged().Remove(PhaseChanged); } + int Tick(float now) + { + if (m_Deadline == 0) m_Deadline = now + 45000; + if (now > m_Deadline || !m_Mode.Active() || !ERR_Actors.CanFight(m_Player) || !m_Mode.Players().CurrentActor(m_Player)) + { + vector observed; + if (m_Player) observed = m_Player.GetOrigin(); + PrintFormat("ERR PRISON BREACH STATE: step=%1 player=%2 target=%3 phase=%4", m_Step, observed, m_Target, m_Mode.Phase()); + Check(false, "deadline or canonical conscious participant lost"); + return -1; + } + if (now < m_Wait) return 0; + ERR_PrisonEscapeService escape = m_Mode.PrisonEscape(); + if (m_Step == 0) + { + if (escape) Print("ERR PRISON BREACH REGISTRATION: " + escape.RegistrationReason()); + if (!Check(escape && escape.Registered() && escape.Gate() && !escape.GateLost() && m_Mode.Phase() == ERR_Phase.PRISON, "actual authored gate registered before any breach")) return -1; + array locations = {}; + m_Mode.Locations(locations); + foreach (ERR_LocationComponent location : locations) + if (location.Kind() == ERR_LocationKind.PRISON) m_Center = location.Position(); + Move("1.5 0 -4"); + m_Step = 1; m_Wait = now + 1500; + return 0; + } + if (m_Step == 1) + { + if (!Arrived() || !escape.ProbeArmed(m_Player)) return 0; + if (!Check(m_Mode.Phase() == ERR_Phase.PRISON && m_Transitions == 0, "inside sample alone does not complete prison")) return -1; + IEntity gate = escape.Gate(); + BaseDoorComponent door = BaseDoorComponent.Cast(gate.FindComponent(BaseDoorComponent)); + BaseActionsManagerComponent manager = BaseActionsManagerComponent.Cast(gate.FindComponent(BaseActionsManagerComponent)); + array actions = {}; + if (manager) manager.GetActionsList(actions); + ERR_PrisonDoorAction guardedAction; + foreach (BaseUserAction action : actions) + { + ERR_PrisonDoorAction candidate = ERR_PrisonDoorAction.Cast(action); + if (candidate && candidate.GetOwner() == gate) guardedAction = candidate; + } + ERR_SiteRuntime prison = m_Mode.Sites().Find("everon-prison-1"); + array guards = {}; + if (prison && prison.Group) prison.Group.GetAgents(guards); + IEntity actualGuard; + foreach (AIAgent guard : guards) + if (guard && ERR_Actors.CanFight(guard.GetControlledEntity()) && !ERR_Actors.Player(guard.GetControlledEntity())) { actualGuard = guard.GetControlledEntity(); break; } + if (!Check(door && guardedAction && actualGuard && Math.AbsFloat(door.GetNormalizedDoorState()) < 0.01 && !door.IsOpening(), "actual intact gate is closed with successor door action and original living guard")) return -1; + if (!Check(!guardedAction.CanBePerformedScript(actualGuard) && !guardedAction.CanBePerformedScript(m_Player), "locked phase rejects both original AI and actual prisoner action permission")) return -1; + // Direct calls deliberately match SCR_AIOpenDoor's execution boundary. + // This is not autonomous AI navigation or a player held-input test. + guardedAction.PerformAction(gate, actualGuard); + guardedAction.PerformAction(gate, m_Player); + m_Step = 11; m_Wait = now + 1500; + return 0; + } + if (m_Step == 11) + { + IEntity gate = escape.Gate(); + BaseDoorComponent door; + if (gate) door = BaseDoorComponent.Cast(gate.FindComponent(BaseDoorComponent)); + if (!Check(door && !escape.GateLost() && Math.AbsFloat(door.GetNormalizedDoorState()) < 0.01 && !door.IsOpening() && m_Mode.Phase() == ERR_Phase.PRISON && m_Transitions == 0, "direct AI/player PerformAction cannot open locked native gate or advance progression")) return -1; + SCR_DestructionMultiPhaseComponent damage = SCR_DestructionMultiPhaseComponent.Cast(gate.FindComponent(SCR_DestructionMultiPhaseComponent)); + if (!Check(damage && damage.GetDefaultHitZone(), "actual gate has its inherited multiphase destruction component and hit zone")) return -1; + PrintFormat("ERR PRISON BREACH DAMAGE: health=%1 enabled=%2 threshold=%3", damage.GetHealth(), damage.IsDamageHandlingEnabled(), damage.GetTotalDestructionThreshold()); + vector hit[3]; hit[0] = gate.GetOrigin(); hit[1] = "0 0 1"; hit[2] = "0 0 -1"; + SCR_DamageContext context = new SCR_DamageContext(EDamageType.TRUE, 100000, hit, gate, damage.GetDefaultHitZone(), Instigator.CreateInstigator(m_Player), null, -1, -1); + damage.HandleDamage(context); + m_Step = 2; m_Wait = now + 1500; + return 0; + } + if (m_Step == 2) + { + if (!escape.GateLost()) return 0; + PrintFormat("ERR PRISON BREACH GATE: remaining=%1 lost=%2", escape.Gate(), escape.GateLost()); + ERR_PrisonEscapeService late = new ERR_PrisonEscapeService(m_Mode); + late.PhaseChanged(ERR_Phase.PREPARING, ERR_Phase.PRISON); + bool refusedLate = !late.Registered() && !late.GateLost(); + late.Stop(); + if (!Check(refusedLate, "fresh registration after native gate loss stays unregistered and cannot grant escape")) return -1; + if (!Check(m_Mode.Phase() == ERR_Phase.PRISON && m_Transitions == 0, "native gate destruction alone cannot advance the round")) return -1; + Move("1.5 0 -60"); + m_Step = 3; m_Wait = now + 2500; + return 0; + } + if (m_Step == 3) + { + if (!Arrived()) return 0; + if (!Check(m_Mode.Phase() == ERR_Phase.PRISON && !escape.ProbeArmed(m_Player), "actual far displacement is rejected and clears inside continuity")) return -1; + Move("1.5 0 -9"); + m_Step = 4; m_Wait = now + 2500; + return 0; + } + if (m_Step == 4) + { + if (!Arrived()) return 0; + if (!Check(m_Mode.Phase() == ERR_Phase.PRISON && !escape.ProbeArmed(m_Player), "outside-only arrival cannot finish prison")) return -1; + Move("1.5 0 -4"); + m_Step = 5; m_Wait = now + 1500; + return 0; + } + if (m_Step == 5) + { + if (!Arrived() || !escape.ProbeArmed(m_Player)) return 0; + Move("1.5 0 -9"); + m_Step = 6; m_Wait = now + 1500; + return 0; + } + if (m_Step == 6) + { + if (!Arrived() || m_Mode.Phase() == ERR_Phase.PRISON) return 0; + if (!Check(m_Mode.Phase() == ERR_Phase.RADIO_SEARCH && m_Transitions == 1, "bounded inside-to-outside crossing advances once through ordinary phase event")) return -1; + ERR_SiteRuntime first = m_Mode.Sites().Find("everon-supply-1"); + ERR_SiteRuntime second = m_Mode.Sites().Find("everon-supply-2"); + if (!Check(first && second && first.Location.Knowledge() == 2 && second.Location.Knowledge() == 2, "ordinary escape handlers reveal both scavenging sites")) return -1; + m_Step = 7; m_Wait = now + 2500; + return 0; + } + if (m_Step == 7) + { + if (!Check(m_Mode.Phase() == ERR_Phase.RADIO_SEARCH && m_Transitions == 1, "later production ticks do not repeat prison completion")) return -1; + Stop(); + m_Step = 8; + return 1; + } + return 1; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c new file mode 100644 index 0000000..8ac8bae --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c @@ -0,0 +1,210 @@ +#ifdef WORKBENCH +// One real controller plus eleven disposable physical characters. This probes +// native inventory and transfer compatibility, not twelve clients or UI pickup. +class ERR_NativePrisonerProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Player; + protected ref array m_Actors = {}; + protected ref map m_Reservations = new map(); + protected ref ERR_SpawnPlacement m_Placement = new ERR_SpawnPlacement(); + protected ref map m_Expected = new map(); + protected ERR_SiteRuntime m_Cache; + protected InventoryStorageManagerComponent m_Source; + protected SCR_InventoryStorageManagerComponent m_Inventory; + protected IEntity m_Document; + protected vector m_Original[4]; + protected int m_Step; + protected int m_Checked; + protected float m_Wait; + void ERR_NativePrisonerProbe(ERR_GameMode mode, IEntity player) + { + m_Mode = mode; m_Player = player; + m_Expected.Set("Prefabs/Characters/HeadGear/Hat_Patrol_US_01/Hat_Patrol_US_01.et", 1); + m_Expected.Set("Prefabs/Characters/Uniforms/Jacket_US_BDU_rolledup.et", 1); + m_Expected.Set("Prefabs/Characters/Uniforms/Pants_US_BDU.et", 1); + m_Expected.Set("Prefabs/Characters/Footwear/CombatBoots_US_01.et", 1); + m_Expected.Set("Prefabs/Items/Equipment/Watches/Watch_SandY184A.et", 1); + m_Expected.Set("Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_US_01.et", 2); + m_Expected.Set("Prefabs/Items/Medicine/Tourniquet_01/Tourniquet_US_01.et", 1); + m_Expected.Set("Prefabs/Items/Medicine/MorphineInjection_01/MorphineInjection_01.et", 1); + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: prisoner " + detail); return true; } + Print("ERR SMOKE FAIL: prisoner " + detail, LogLevel.ERROR); + Stop(); + return false; + } + protected void Positions(string stage) + { + foreach (int index, IEntity actor : m_Actors) + { + if (!actor) continue; + vector lower, upper; + actor.GetWorldBounds(lower, upper); + PrintFormat("ERR PRISONER POSITION: stage=%1 index=%2 requested=%3 actual=%4 boundsMin=%5 boundsMax=%6", stage, index, m_Reservations.Get(index), actor.GetOrigin(), lower, upper); + } + } + protected bool Kit(IEntity actor, int index) + { + if (!Check(actor && actor.GetPrefabData() && actor.GetPrefabData().GetPrefabName() == "{3FF693715C9F8928}Prefabs/ERR/Prisoner.et", "character " + index.ToString() + " uses successor resource")) return false; + if (!Check(actor.FindComponent(SCR_CharacterDamageManagerComponent) && actor.FindComponent(CharacterControllerComponent) && actor.FindComponent(SCR_SalineStorageComponent) && actor.FindComponent(SCR_TourniquetStorageComponent) && actor.FindComponent(CompartmentAccessComponent), "character " + index.ToString() + " retains vanilla health, treatment and vehicle components")) return false; + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(actor.FindComponent(InventoryStorageManagerComponent)); + if (!Check(inventory != null, "character inventory exists")) return false; + array items = {}; + inventory.GetItems(items); + map counts = new map(); + int identityItems; + array seen = {}; + foreach (IEntity item : items) + { + if (!item || !item.GetPrefabData()) return Check(false, "inventory item has no resource identity"); + ResourceName resource = item.GetPrefabData().GetPrefabName(); + PrintFormat("ERR PRISONER ITEM: actor=%1 item=%2 resource=%3 duplicateReference=%4", index, item, resource, seen.Contains(item)); + if (seen.Contains(item)) continue; + seen.Insert(item); + // Vanilla creates identification on possession, death or unconsciousness. + // Preserve this native identity record; it is not mission navigation equipment. + if (resource.EndsWith("Prefabs/Items/PersonalBelongings/PersonalBelongings_US.et")) + { + if (!Check(ERR_Actors.Player(actor) && item.FindComponent(SCR_IdentityInventoryItemComponent), "possessed prisoner retains native identification")) return false; + identityItems++; + continue; + } + // A non-equipment belt is authored by the rolled-up vanilla jacket itself. + if (resource.EndsWith("Prefabs/Characters/Vests/Vest_ALICE/Vest_ALICE_belt_dummy.et")) continue; + bool allowed = false; + foreach (string path, int expected : m_Expected) + { + if (!resource.EndsWith(path)) continue; + counts.Set(path, counts.Get(path) + 1); + allowed = true; + break; + } + if (!allowed) return Check(false, "unexpected starter inventory resource: " + resource); + } + int expectedIdentity; + if (ERR_Actors.Player(actor)) expectedIdentity = 1; + if (!Check(identityItems == expectedIdentity, "native identification is created exactly once for the possessed prisoner")) return false; + foreach (string path, int expected : m_Expected) + if (counts.Get(path) != expected) return Check(false, string.Format("character %1 expected %2 of %3, found %4", index, expected, path, counts.Get(path))); + PrintFormat("ERR PRISONER INVENTORY: character=%1 storedItems=%2", index, items.Count()); + return Check(true, "character " + index.ToString() + " has exact clothing/watch/medical kit and no inherited navigation, radio, binoculars, tools, flares or weapons"); + } + protected bool Contains(InventoryStorageManagerComponent inventory, IEntity item) + { + if (!inventory || !item) return false; + array items = {}; + inventory.GetItems(items); + return items.Contains(item); + } + void Stop() + { + // Return borrowed stock when its source still exists; never spawn replacements. + if (m_Document && m_Cache && m_Cache.Container && m_Inventory && Contains(m_Inventory, m_Document)) + { + BaseInventoryStorageComponent destination = BaseInventoryStorageComponent.Cast(m_Cache.Container.FindComponent(BaseInventoryStorageComponent)); + if (destination) m_Inventory.TryMoveItemToStorage(m_Document, destination); + } + for (int i = 1; i < m_Actors.Count(); i++) ERR_Actors.DeleteSpawned(m_Actors[i]); + m_Reservations.Clear(); + } + int Tick(float now) + { + if (now < m_Wait) return 0; + if (m_Step == 0) + { + if (!Check(m_Mode && m_Mode.Phase() == ERR_Phase.PRISON && ERR_Actors.Player(m_Player) && ERR_Actors.CanFight(m_Player), "fixture begins with a real conscious prisoner")) return -1; + m_Player.GetWorldTransform(m_Original); + m_Actors.Insert(m_Player); + m_Reservations.Set(0, m_Player.GetOrigin()); + Positions("initial"); + m_Step = 1; + m_Wait = now + 1000; + return 0; + } + if (m_Step == 1) + { + if (m_Actors.Count() < 12) + { + vector position; + bool available = m_Placement.Prison(m_Mode.PrisonPosition(), m_Reservations, position); + if (!available) Positions("no-clear-slot"); + if (!Check(available, "bounded clear prison slot exists for next test character")) return -1; + IEntity actor = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, position); + if (!Check(actor != null, "physical test prisoner created")) return -1; + m_Mode.Own(actor); + m_Reservations.Set(m_Actors.Count(), position); + m_Actors.Insert(actor); + DamageManagerComponent damage = DamageManagerComponent.Cast(actor.FindComponent(DamageManagerComponent)); + if (!Check(damage != null, "test prisoner damage component exists")) return -1; + damage.EnableDamageHandling(false); + m_Wait = now + 500; + return 0; + } + Positions("all-spawned"); + m_Step = 2; m_Wait = now + 1500; + return 0; + } + if (m_Step == 2) + { + if (m_Checked == 0) Positions("settled"); + if (!Kit(m_Actors[m_Checked], m_Checked)) return -1; + m_Checked++; + if (m_Checked < 12) return 0; + m_Cache = m_Mode.Sites().Find("everon-supply-1"); + if (!Check(m_Cache && m_Cache.Container, "authored clue source remains available")) return -1; + m_Source = InventoryStorageManagerComponent.Cast(m_Cache.Container.FindComponent(InventoryStorageManagerComponent)); + m_Inventory = SCR_InventoryStorageManagerComponent.Cast(m_Player.FindComponent(SCR_InventoryStorageManagerComponent)); + if (!Check(m_Source && m_Inventory, "source and player inventory managers are usable")) return -1; + array stock = {}; + m_Source.GetItems(stock); + foreach (IEntity item : stock) + { + ERR_DocumentComponent document = ERR_DocumentComponent.Cast(item.FindComponent(ERR_DocumentComponent)); + if (document && document.TargetId() == "everon-radio-1") { m_Document = item; break; } + } + if (!Check(m_Document && m_Inventory, "real finite radio document and player storage found")) return -1; + vector transform[4]; m_Player.GetWorldTransform(transform); + transform[3] = ERR_Actors.Ground(m_Cache.Container.GetOrigin() + "0 0 2"); + ChimeraCharacter.Cast(m_Player).Teleport(transform); + m_Step = 3; m_Wait = now + 1000; + return 0; + } + if (m_Step == 3) + { + BaseInventoryStorageComponent destination = m_Inventory.FindStorageForItem(m_Document); + if (!Check(destination && m_Source.TryMoveItemToStorage(m_Document, destination), "minimal starter clothing accepts a real authored clue transfer")) return -1; + m_Step = 4; m_Wait = now + 1000; + return 0; + } + if (m_Step == 4) + { + if (!Check(Contains(m_Inventory, m_Document) && !Contains(m_Source, m_Document) && m_Mode.Phase() == ERR_Phase.PRISON, "document physically moved without duplication while prison phase remains active")) return -1; + BaseInventoryStorageComponent destination = BaseInventoryStorageComponent.Cast(m_Cache.Container.FindComponent(BaseInventoryStorageComponent)); + if (!Check(destination && m_Inventory.TryMoveItemToStorage(m_Document, destination), "borrowed document returns to finite source")) return -1; + m_Step = 5; m_Wait = now + 1000; + return 0; + } + if (m_Step == 5) + { + if (!Check(Contains(m_Source, m_Document) && !Contains(m_Inventory, m_Document), "borrowed clue restored exactly once")) return -1; + Stop(); + ChimeraCharacter.Cast(m_Player).Teleport(m_Original); + m_Step = 6; m_Wait = now + 1000; + return 0; + } + if (m_Step == 6) + { + for (int i = 1; i < m_Actors.Count(); i++) + if (!Check(!m_Actors[i], "disposable prisoner removed after native cleanup")) return -1; + ERR_PlayerLife life = m_Mode.Players().Get(GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(m_Player)); + if (!Check(ERR_Actors.Player(m_Player) && ERR_Actors.Alive(m_Player) && life && life.UsedLife, "real prisoner and spent life preserved")) return -1; + m_Step = 7; + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c new file mode 100644 index 0000000..37a91a2 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c @@ -0,0 +1,105 @@ +#ifdef WORKBENCH +// Synchronous roster-body fault injection against the real admitted controller. +// No disconnect, possession, account change, network event or native rebind is simulated. +class ERR_NativeProgressionIdentityProbe +{ + protected static ERR_GameMode s_Mode; + protected static IEntity s_Actor; + protected static bool s_DocumentAttempted; + protected static bool s_DocumentPassed; + protected static bool s_Failed; + static bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: progression identity " + detail); return true; } + s_Failed = true; + Print("ERR SMOKE FAIL: progression identity " + detail, LogLevel.ERROR); + return false; + } + static bool Failed() { return s_Failed; } + static bool DocumentPassed() { return s_DocumentPassed; } + static void Stop() { s_Mode = null; s_Actor = null; } + static void BeginRound() { Stop(); s_DocumentAttempted = false; s_DocumentPassed = false; s_Failed = false; } + static bool Begin(ERR_GameMode mode, IEntity actor) + { + BeginRound(); + string enabled; + if (!Replication.IsServer() || !System.GetCLIParam("errBaseSmoke", enabled) || enabled != "1") return false; + if (!mode || !actor || !mode.Players()) return false; + ERR_PlayerLife life = mode.Players().CurrentActor(actor); + PlayerController controller = GetGame().GetPlayerController(); + if (!Check(life && controller && controller.GetControlledEntity() == actor && mode.Phase() == ERR_Phase.PRISON && ERR_Actors.CanFight(actor) && SCR_FactionManager.SGetFaction(actor) == mode.PlayerFaction() && vector.DistanceXZ(actor.GetOrigin(), mode.PrisonPosition()) < 5, "actual local conscious prisoner is canonical and inside lock range")) return false; + IEntity savedActor = life.Actor; + UUID savedIdentity = life.AccountId; + int savedConnection = life.ConnectionId; + bool savedConnected = life.Connected; + bool savedUsedLife = life.UsedLife; + // No callback, assertion, early return or yield between mutation and restore. + life.Actor = null; + bool nativeRosterRefused = mode.Players().CurrentActor(actor) == null; + bool refused = !mode.UnlockPrison(actor); + life.Actor = savedActor; + if (!Check(nativeRosterRefused && refused && mode.Phase() == ERR_Phase.PRISON, "synchronous body-mismatch fault injection rejects normal prison unlock without progression")) return false; + if (!Check(mode.Players().CurrentActor(actor) == life && controller.GetControlledEntity() == savedActor && life.AccountId == savedIdentity && life.ConnectionId == savedConnection && life.Connected == savedConnected && life.UsedLife == savedUsedLife, "exact actor, account, connection and used-life state restored before assertions")) return false; + s_Mode = mode; s_Actor = actor; + Print("ERR IDENTITY FIXTURE LIMIT: synchronous roster Actor=null fault injection, immediately restored; no actual possession, reconnect, foreign faction or multiplayer test"); + return true; + } + static bool WantsDocument(ERR_GameMode mode, IEntity actor) + { + return !s_Failed && !s_DocumentAttempted && mode && mode == s_Mode && actor == s_Actor; + } + static void AttemptDocument() { s_DocumentAttempted = true; } + static void CompleteDocument(bool success) { s_DocumentPassed = success; } +} + +modded class ERR_DiscoveryService +{ + protected override void Recover(IEntity player) + { + if (!ERR_NativeProgressionIdentityProbe.WantsDocument(m_Mode, player)) { super.Recover(player); return; } + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(player.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) { super.Recover(player); return; } + array folders = {}; Folders(inventory, folders); + array locations = {}; m_Mode.Locations(locations); + IEntity candidate; + ERR_LocationComponent target; + foreach (IEntity folder : folders) + { + if (!folder || m_Spent.Contains(folder) || m_Spent.Count() >= 4096) continue; + InventoryItemComponent item = InventoryItemComponent.Cast(folder.FindComponent(InventoryItemComponent)); + ERR_DocumentComponent document = ERR_DocumentComponent.Cast(folder.FindComponent(ERR_DocumentComponent)); + if (!item || !item.GetParentSlot() || !item.GetParentSlot().GetStorage() || !item.GetParentSlot().GetStorage().Contains(folder) || !document) continue; + foreach (ERR_LocationComponent location : locations) + if (location && location.Id() == document.TargetId() && location.Knowledge() < 2) { candidate = folder; target = location; break; } + if (candidate) break; + } + if (!candidate) { super.Recover(player); return; } + ERR_NativeProgressionIdentityProbe.AttemptDocument(); + ERR_PlayerLife life = m_Mode.Players().CurrentActor(player); + PlayerController controller = GetGame().GetPlayerController(); + if (!ERR_NativeProgressionIdentityProbe.Check(life && controller && controller.GetControlledEntity() == player && ERR_Actors.Alive(player) && SCR_FactionManager.SGetFaction(player) == m_Mode.PlayerFaction(), "real held unspent targeted document has an eligible unidentified site and canonical carrier")) return; + array knowledge = {}; + foreach (ERR_LocationComponent location : locations) knowledge.Insert(location.Knowledge()); + int spent = m_Spent.Count(); + int previousKnowledge = target.Knowledge(); + IEntity savedActor = life.Actor; + UUID savedIdentity = life.AccountId; + int savedConnection = life.ConnectionId; + bool savedConnected = life.Connected; + bool savedUsedLife = life.UsedLife; + // Call the actual production implementation directly: no recursion into this + // hook. Restore synchronously before any check, positive call or return. + life.Actor = null; + super.Recover(player); + life.Actor = savedActor; + bool unchanged = m_Spent.Count() == spent && !m_Spent.Contains(candidate); + for (int index = 0; index < locations.Count(); index++) + if (!locations[index] || locations[index].Knowledge() != knowledge[index]) unchanged = false; + if (!ERR_NativeProgressionIdentityProbe.Check(unchanged, "synchronous body-mismatch fault injection neither spends the held document nor changes any discovery knowledge")) return; + if (!ERR_NativeProgressionIdentityProbe.Check(m_Mode.Players().CurrentActor(player) == life && controller.GetControlledEntity() == savedActor && life.AccountId == savedIdentity && life.ConnectionId == savedConnection && life.Connected == savedConnected && life.UsedLife == savedUsedLife, "document rejection restores exact canonical actor and unchanged used-life identity before normal recovery")) return; + super.Recover(player); + bool recovered = m_Spent.Contains(candidate) && m_Spent.Count() > spent && target.Knowledge() > previousKnowledge; + ERR_NativeProgressionIdentityProbe.CompleteDocument(ERR_NativeProgressionIdentityProbe.Check(recovered, "immediately restored ordinary recovery spends the same actual document and advances its target")); + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c new file mode 100644 index 0000000..cd2c545 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c @@ -0,0 +1,367 @@ +#ifdef WORKBENCH +// Only connection membership is simulated for the second character. Native +// actor mutations settle on later frames; isolated service timestamps stay exact. +class ERR_NativeRadioSample : ERR_RadioDefenceService +{ + ref array Members = {}; + int Connections = 2; + void ERR_NativeRadioSample(ERR_GameMode mode) { m_Mode = mode; } + protected override bool IsPlayer(IEntity actor) { return Members.Contains(actor); } + protected override int ConnectedPlayers() { return Connections; } + protected override void Players(out array players) { players.Copy(Members); } +} +class ERR_NativeRadioDefenceProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Player; + protected IEntity m_Second; + protected ERR_LocationComponent m_Radio; + protected FactionAffiliationComponent m_Affiliation; + protected ref ERR_NativeRadioSample m_Service; + protected ref ERR_RadioDefenceService m_Authoritative; + protected int m_Starts; + protected int m_Completions; + protected int m_Changes; + protected int m_OriginalDuration; + protected vector m_Original[4]; + protected bool m_OriginalUnconscious; + protected bool m_Snapshot; + protected bool m_SettingsChanged; + protected bool m_Restored; + protected bool m_RestoreSucceeded; + protected int m_Step; + protected int m_Result; + protected float m_Wait; + protected float m_StateDeadline; + protected float m_NextStateDiagnostic; + + void ERR_NativeRadioDefenceProbe(ERR_GameMode mode, IEntity player, ERR_LocationComponent radio) + { + m_Mode = mode; m_Player = player; m_Radio = radio; + } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: radio service " + detail); return true; } + Print("ERR SMOKE FAIL: radio service " + detail, LogLevel.ERROR); + m_Result = -1; + Restore(); + return false; + } + protected void Started(ERR_LocationComponent location) { m_Starts++; } + protected void Changed(ERR_RadioDefenceService service) { m_Changes++; } + protected void Completed(ERR_LocationComponent location) + { + m_Completions++; + m_Service.Tick(1000000); // Re-entrant observer cannot complete twice. + } + protected void Move(IEntity actor, vector position) + { + vector transform[4]; actor.GetWorldTransform(transform); + transform[3] = ERR_Actors.Ground(position); + ChimeraCharacter.Cast(actor).Teleport(transform); + } + protected void Conscious(IEntity actor, bool value) + { + CharacterControllerComponent.Cast(actor.FindComponent(CharacterControllerComponent)).SetUnconscious(!value); + } + protected float Distance(string label) + { + float distance = vector.DistanceXZ(m_Player.GetOrigin(), m_Radio.Position()); + PrintFormat("ERR RADIO POSITION: %1 actor=%2 radio=%3 distanceXZ=%4", label, m_Player.GetOrigin(), m_Radio.Position(), distance); + return distance; + } + protected void WaitFor(int step, float now) + { + m_Step = step; + m_Wait = now + 750; + m_StateDeadline = now + 12000; + m_NextStateDiagnostic = now; + } + protected void RecoveryDiagnostic(IEntity actor, string label) + { + CharacterControllerComponent controller; + if (actor) controller = CharacterControllerComponent.Cast(actor.FindComponent(CharacterControllerComponent)); + int unconscious = -1; + int lifeState = -1; + if (controller) + { + unconscious = controller.IsUnconscious(); + lifeState = controller.GetLifeState(); + } + PrintFormat("ERR RADIO RECOVERY: %1 step=%2 alive=%3 canFight=%4 unconscious=%5 lifeState=%6 origin=%7", label, m_Step, ERR_Actors.Alive(actor), ERR_Actors.CanFight(actor), unconscious, lifeState, actor.GetOrigin()); + } + // Native recovery includes controller/ragdoll state transitions beyond one + // frame. Poll the observed state without reissuing SetUnconscious or altering + // health. Dead/missing actors fail immediately; delayed recovery has a bound. + protected bool Recovered(IEntity actor, float now, string label) + { + if (!actor || !ERR_Actors.Alive(actor)) + { + Check(false, label + " lost its living actor during recovery"); + return false; + } + if (ERR_Actors.CanFight(actor)) + { + RecoveryDiagnostic(actor, label + " ready"); + return true; + } + if (now >= m_NextStateDiagnostic) + { + RecoveryDiagnostic(actor, label + " waiting"); + m_NextStateDiagnostic = now + 1000; + } + if (now >= m_StateDeadline) + { + Check(false, label + " did not regain conscious native state within twelve seconds"); + return false; + } + m_Wait = now + 250; + return false; + } + protected void AuthorizationDiagnostic() + { + int id = GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(m_Player); + ERR_PlayerLife life = m_Mode.Players().Get(id); + bool connected = life && life.Connected; + bool usedLife = life && life.UsedLife; + bool sameActor = life && life.Actor == m_Player; + bool friendly = m_Mode.PlayerFaction() && SCR_FactionManager.SGetFaction(m_Player) == m_Mode.PlayerFaction(); + PrintFormat("ERR RADIO AUTH: active=%1 phase=%2 registered=%3 kind=%4 knowledge=%5 serviceState=%6 distance=%7", m_Mode.Active(), m_Mode.Phase(), m_Mode.HasLocation(m_Radio), m_Radio.Kind(), m_Radio.Knowledge(), m_Authoritative.State(), vector.DistanceXZ(m_Player.GetOrigin(), m_Radio.Position())); + PrintFormat("ERR RADIO AUTH: playerId=%1 connected=%2 usedLife=%3 sameActor=%4 friendly=%5 canFight=%6 canBegin=%7", id, connected, usedLife, sameActor, friendly, ERR_Actors.CanFight(m_Player), m_Authoritative.CanBegin(m_Player, m_Radio)); + } + protected void Restore() + { + if (m_Restored) return; + m_Restored = true; + m_RestoreSucceeded = true; + if (m_Service) + { + m_Service.OnStarted().Remove(Started); + m_Service.OnProgressChanged().Remove(Changed); + m_Service.OnCompleted().Remove(Completed); + m_Service.Stop(); + } + if (m_Authoritative) m_Authoritative.Stop(); + if (!GetGame() || !Replication.IsServer()) return; + if (m_SettingsChanged && m_Mode && m_Mode.Settings()) + m_RestoreSucceeded = m_Mode.Settings().Set("radioDefenceSeconds", m_OriginalDuration); + if (m_Snapshot && m_Player) + { + CharacterControllerComponent controller = CharacterControllerComponent.Cast(m_Player.FindComponent(CharacterControllerComponent)); + ChimeraCharacter character = ChimeraCharacter.Cast(m_Player); + if (controller && character && ERR_Actors.Alive(m_Player)) + { + controller.SetUnconscious(m_OriginalUnconscious); + character.Teleport(m_Original); + } + else m_RestoreSucceeded = false; + } + ERR_Actors.DeleteSpawned(m_Second); + m_Second = null; + } + // The parent must call this on cancellation/fixture timeout as well as failure. + // No fixture-owned callqueue is installed; no later mutation runs after Stop. + void Stop() + { + if (m_Result == 0) m_Result = -1; + Restore(); + } + int Tick(float now) + { + if (m_Result != 0) return m_Result; + if (now < m_Wait) return 0; + if (!Replication.IsServer() || !m_Mode || !m_Player || !m_Radio || !m_Mode.Settings()) + { + Check(false, "async fixture lost authoritative mission/player/radio"); + return -1; + } + if (m_Step == 0) + { + if (!Check(m_Mode.Phase() == ERR_Phase.RADIO_SEARCH && m_Radio.Knowledge() == 2 && ERR_Actors.Player(m_Player), "identified radio and real controlled prisoner available")) return -1; + m_OriginalDuration = m_Mode.Settings().Get("radioDefenceSeconds"); + m_Player.GetWorldTransform(m_Original); + CharacterControllerComponent controller = CharacterControllerComponent.Cast(m_Player.FindComponent(CharacterControllerComponent)); + if (!Check(controller && ChimeraCharacter.Cast(m_Player), "controlled prisoner supports native state restoration")) return -1; + m_OriginalUnconscious = controller.IsUnconscious(); + m_Snapshot = true; + if (!Check(m_Mode.Settings().Set("radioDefenceSeconds", 30), "isolated thirty-second duration saved")) return -1; + m_SettingsChanged = true; + m_Second = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, ERR_Actors.Ground(m_Radio.Position() + "-2 0 0")); + if (!Check(m_Second != null, "second physical defender spawned")) return -1; + m_Mode.Own(m_Second); + DamageManagerComponent.Cast(m_Second.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + WaitFor(1, now); + return 0; + } + if (m_Step == 1) + { + if (!Check(ERR_Actors.CanFight(m_Second), "second physical defender settles with simulated connection membership")) return -1; + m_Authoritative = new ERR_RadioDefenceService(m_Mode); + if (!Check(!m_Authoritative.Begin(m_Second, m_Radio), "ordinary AI cannot tune even while alive and nearby")) return -1; + if (!Check(!m_Authoritative.Begin(m_Player, null), "missing radio rejected")) return -1; + Move(m_Player, m_Radio.Position() + "6 0 0"); + WaitFor(2, now); + return 0; + } + if (m_Step == 2) + { + if (!Check(Distance("outside tuning range after deferred teleport") > 5 && !m_Authoritative.Begin(m_Player, m_Radio), "tuning outside five metres rejected")) return -1; + Move(m_Player, m_Radio.Position() + "2 0 0"); + Conscious(m_Player, false); + WaitFor(3, now); + return 0; + } + if (m_Step == 3) + { + CharacterControllerComponent controller = CharacterControllerComponent.Cast(m_Player.FindComponent(CharacterControllerComponent)); + if (!Check(Distance("unconscious tuning range after deferred teleport") <= 5 && controller.IsUnconscious() && !m_Authoritative.Begin(m_Player, m_Radio), "unconscious prisoner cannot tune")) return -1; + Conscious(m_Player, true); + WaitFor(4, now); + return 0; + } + if (m_Step == 4) + { + if (!Recovered(m_Player, now, "tuning prisoner")) return m_Result; + AuthorizationDiagnostic(); + m_Service = new ERR_NativeRadioSample(m_Mode); + if (!Check(ERR_Actors.CanFight(m_Player) && m_Authoritative.CanBegin(m_Player, m_Radio), "registered friendly conscious prisoner remains authorized")) return -1; + if (!Check(!m_Service.Begin(m_Player, m_Radio), "unregistered defender cannot start the isolated service")) return -1; + m_Service.Members.Insert(m_Player); m_Service.Members.Insert(m_Second); + m_Affiliation = FactionAffiliationComponent.Cast(m_Second.FindComponent(FactionAffiliationComponent)); + if (!Check(m_Affiliation != null, "physical defender has native faction affiliation")) return -1; + m_Affiliation.SetAffiliatedFaction(m_Mode.EnemyFaction()); + WaitFor(5, now); + return 0; + } + if (m_Step == 5) + { + if (!Check(SCR_FactionManager.SGetFaction(m_Second) == m_Mode.EnemyFaction() && !m_Service.Begin(m_Second, m_Radio), "hostile controlled defender cannot tune")) return -1; + m_Affiliation.SetAffiliatedFaction(m_Mode.PlayerFaction()); + WaitFor(6, now); + return 0; + } + if (m_Step == 6) + { + m_Service.OnStarted().Insert(Started); + m_Service.OnProgressChanged().Insert(Changed); + m_Service.OnCompleted().Insert(Completed); + if (!Check(m_Service.Begin(m_Player, m_Radio) && !m_Service.Begin(m_Player, m_Radio) && m_Starts == 1, "start event emitted once and duplicate start rejected")) return -1; + m_Service.Tick(1000); + if (!Check(m_Service.DefenderCount() == 2 && m_Service.Since() == 1000 && m_Service.Occupied(), "two conscious physical defenders share one timer")) return -1; + m_Affiliation.SetAffiliatedFaction(m_Mode.EnemyFaction()); + WaitFor(7, now); + return 0; + } + if (m_Step == 7) + { + m_Service.Tick(1500); + if (!Check(!m_Service.CanDefend(m_Second) && m_Service.DefenderCount() == 1 && m_Service.Since() == 1000, "hostile actor cannot defend even with simulated connection membership")) return -1; + m_Affiliation.SetAffiliatedFaction(m_Mode.PlayerFaction()); + WaitFor(8, now); + return 0; + } + if (m_Step == 8) + { + m_Service.Tick(1600); + int changed = m_Changes; + m_Service.Tick(6000); + if (!Check(m_Service.SecondsRemaining(6000) == 25 && m_Changes == changed, "elapsed countdown does not emit redundant progress events")) return -1; + Conscious(m_Player, false); + WaitFor(9, now); + return 0; + } + if (m_Step == 9) + { + m_Service.Tick(7000); + if (!Check(m_Service.DefenderCount() == 1 && m_Service.Since() == 1000, "second defender preserves progress while first is unconscious")) return -1; + Conscious(m_Second, false); + WaitFor(10, now); + return 0; + } + if (m_Step == 10) + { + m_Service.Tick(8000); + if (!Check(!m_Service.Occupied() && m_Service.Since() == -1 && m_Service.SecondsRemaining(8000) == 30, "all unconscious defenders reset accumulated time")) return -1; + Conscious(m_Player, true); + WaitFor(11, now); + return 0; + } + if (m_Step == 11) + { + if (!Recovered(m_Player, now, "first defender")) return m_Result; + m_Service.Tick(9000); + if (!Check(m_Service.DefenderCount() == 1 && m_Service.Since() == 9000, "conscious recovery starts a fresh continuous interval")) return -1; + Conscious(m_Second, true); + WaitFor(12, now); + return 0; + } + if (m_Step == 12) + { + if (!Recovered(m_Second, now, "second defender")) return m_Result; + m_Service.Tick(10000); + m_Service.Connections = 0; m_Service.Tick(11000); + if (!Check(m_Service.DefenderCount() == 0 && !m_Service.Occupied(), "empty server resets despite remaining character bodies")) return -1; + m_Service.Connections = 2; m_Service.Tick(12000); + Move(m_Player, m_Radio.Position() + "60.5 0 0"); + WaitFor(13, now); + return 0; + } + if (m_Step == 13) + { + m_Service.Tick(13000); + if (!Check(Distance("outside defence radius after deferred teleport") >= 60 && !m_Service.CanDefend(m_Player) && m_Service.DefenderCount() == 1 && m_Service.Since() == 12000, "outside sixty metres excludes first defender without resetting second")) return -1; + DamageManagerComponent damage = DamageManagerComponent.Cast(m_Second.FindComponent(DamageManagerComponent)); + damage.EnableDamageHandling(true); + SCR_CharacterDamageManagerComponent.Cast(damage).Kill(Instigator.CreateInstigator(m_Second)); + WaitFor(14, now); + return 0; + } + if (m_Step == 14) + { + m_Service.Tick(14000); + if (!Check(!ERR_Actors.Alive(m_Second) && !m_Service.CanDefend(m_Second) && !m_Service.Occupied(), "dead defender cannot maintain transmission")) return -1; + Move(m_Player, m_Radio.Position() + "2 0 0"); + WaitFor(15, now); + return 0; + } + if (m_Step == 15) + { + if (!Check(Distance("returned to radio after deferred teleport") <= 5 && ERR_Actors.CanFight(m_Player), "survivor returns physically before final transmission samples")) return -1; + m_Service.Tick(15000); + if (!Check(m_Mode.Settings().Set("radioDefenceSeconds", 45), "live duration increase saved")) return -1; + m_Service.Tick(45000); + if (!Check(m_Service.State() == ERR_RadioDefenceState.DEFENDING && m_Service.Since() == 15000 && m_Service.SecondsRemaining(45000) == 15, "live duration increase preserves accumulated occupancy")) return -1; + if (!Check(m_Mode.Settings().Set("radioDefenceSeconds", 30), "live duration reduction saved")) return -1; + m_Service.Tick(45000); + if (!Check(m_Service.State() == ERR_RadioDefenceState.COMPLETED && m_Completions == 1 && m_Service.SecondsRemaining(45000) == 0, "live duration reduction completes at exact continuous boundary")) return -1; + m_Service.Tick(46000); m_Service.Stop(); m_Service.Tick(47000); + if (!Check(m_Completions == 1 && !m_Service.Begin(m_Player, m_Radio), "completed service cannot restart or emit duplicate completion after stop")) return -1; + ERR_NativeRadioSample stopped = new ERR_NativeRadioSample(m_Mode); + stopped.Members.Insert(m_Player); stopped.OnCompleted().Insert(Completed); + if (!Check(stopped.Begin(m_Player, m_Radio), "isolated cancellation service begins")) return -1; + stopped.Tick(1000); stopped.Stop(); stopped.Stop(); stopped.Tick(60000); + if (!Check(stopped.State() == ERR_RadioDefenceState.STOPPED && !stopped.Occupied() && m_Completions == 1 && !stopped.Begin(m_Player, m_Radio), "stop cancels progress and future starts without completing")) return -1; + ERR_NativeRadioSample terminal = new ERR_NativeRadioSample(m_Mode); + terminal.Members.Insert(m_Player); terminal.OnCompleted().Insert(Completed); + if (!Check(terminal.Begin(m_Player, m_Radio), "isolated terminal-phase service begins")) return -1; + terminal.Tick(1000); terminal.PhaseChanged(ERR_Phase.RADIO_DEFENCE, ERR_Phase.DEFEAT); terminal.Tick(60000); + if (!Check(terminal.State() == ERR_RadioDefenceState.STOPPED && m_Completions == 1, "terminal phase event prevents later completion")) return -1; + if (!Check(m_Mode.Phase() == ERR_Phase.RADIO_SEARCH && m_Mode.RadioDefence().State() == ERR_RadioDefenceState.IDLE, "isolated event tests leave live objective ready for normal tuning")) return -1; + Restore(); + WaitFor(90, now); + return 0; + } + if (m_Step == 90) + { + if (!m_OriginalUnconscious && !Recovered(m_Player, now, "restored prisoner")) return m_Result; + CharacterControllerComponent controller = CharacterControllerComponent.Cast(m_Player.FindComponent(CharacterControllerComponent)); + PrintFormat("ERR RADIO RESTORE: actual=%1 original=%2 distance=%3", m_Player.GetOrigin(), m_Original[3], vector.Distance(m_Player.GetOrigin(), m_Original[3])); + if (!Check(m_RestoreSucceeded && m_Mode.Settings().Get("radioDefenceSeconds") == m_OriginalDuration && controller.IsUnconscious() == m_OriginalUnconscious && vector.Distance(m_Player.GetOrigin(), m_Original[3]) < 1.5, "isolated test restores live duration and physical player state after a world frame")) return -1; + m_Result = 1; + return 1; + } + Check(false, "unknown asynchronous fixture step"); + return -1; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c new file mode 100644 index 0000000..7ebba2c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c @@ -0,0 +1,96 @@ +#ifdef WORKBENCH +class ERR_NativeRecoveryProbe +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Player; + protected CharacterControllerComponent m_Controller; + protected float m_Wait; + protected float m_RecoveryDeadline; + protected bool m_Stopped; + protected bool m_ChangedConsciousness; + protected bool m_InitiallyUnconscious; + protected int m_Step; + protected int m_Changes; + void ERR_NativeRecoveryProbe(ERR_GameMode mode, IEntity player) + { + m_Mode = mode; m_Player = player; + m_Controller = CharacterControllerComponent.Cast(player.FindComponent(CharacterControllerComponent)); + if (m_Controller) m_InitiallyUnconscious = m_Controller.IsUnconscious(); + mode.Recovery().OnChanged().Insert(Changed); + mode.OnStop().Insert(Stop); + } + protected void Changed(string message) { m_Changes++; } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_Mode) m_Mode.OnStop().Remove(Stop); + if (m_Mode && m_Mode.Recovery()) m_Mode.Recovery().OnChanged().Remove(Changed); + if (m_ChangedConsciousness && m_Controller && ERR_Actors.Alive(m_Player)) m_Controller.SetUnconscious(m_InitiallyUnconscious); + } + protected bool Check(bool ok, string detail) + { + if (ok) { Print("ERR SMOKE PASS: recovery " + detail); return true; } + Stop(); + Print("ERR SMOKE FAIL: recovery " + detail, LogLevel.ERROR); + return false; + } + int Tick(float now) + { + if (m_Stopped) return -1; + if (now < m_Wait) return 0; + if (m_Step == 0) + { + m_Mode.Recovery().Tick(); + if (!Check(m_Controller && m_Mode.Recovery().Conscious() == 1 && m_Mode.RecoveryStatus().IsEmpty(), "real conscious prisoner is available without recovery warning")) return -1; + array replies = {}; + m_Mode.Admin().Execute(m_Mode, false, "mission abandon", replies); + if (!Check(replies.Count() == 1 && replies[0].Contains("Administrator") && m_Mode.Phase() == ERR_Phase.PRISON && m_Mode.EndReason().IsEmpty(), "unauthorized abandonment leaves round and result intact")) return -1; + m_Mode.Admin().Execute(m_Mode, true, "mission abandon now", replies); + if (!Check(m_Mode.Phase() == ERR_Phase.PRISON && m_Mode.EndReason().IsEmpty(), "malformed abandonment does not end a round")) return -1; + m_ChangedConsciousness = true; + m_Controller.SetUnconscious(true); + m_Step = 1; m_Wait = now + 1000; + return 0; + } + if (m_Step == 1) + { + m_Mode.Recovery().Tick(); + if (!Check(ERR_Actors.Alive(m_Player) && !ERR_Actors.CanFight(m_Player) && m_Mode.Recovery().Incapacitated() == 1 && m_Mode.Recovery().Conscious() == 0, "native unconscious prisoner is counted as incapacitated, not dead")) return -1; + if (!Check(m_Mode.RecoveryStatus().Contains("No conscious prisoner") && m_Mode.Status().Contains("mission abandon") && ERR_ObjectiveText.Description(m_Mode).Contains(m_Mode.RecoveryStatus()), "server status and native objective copy explain the recovery state")) return -1; + if (!Check(m_Changes == 1, "recovery state publishes exactly one change")) return -1; + m_Mode.Recovery().Tick(); + if (!Check(m_Changes == 1, "unchanged sampling emits no duplicate recovery event")) return -1; + m_Step = 2; m_Wait = now + 35000; + return 0; + } + if (m_Step == 2) + { + if (!Check(m_Mode.Phase() == ERR_Phase.PRISON && ERR_Actors.Alive(m_Player) && !ERR_Actors.CanFight(m_Player) && m_Mode.Players().HasSurvivor(), "all-incapacitated player survives beyond ordinary defeat grace")) return -1; + m_Controller.SetUnconscious(false); + m_RecoveryDeadline = now + 12000; + m_Step = 3; m_Wait = now + 1000; + return 0; + } + if (m_Step == 3) + { + if (!ERR_Actors.CanFight(m_Player) && now < m_RecoveryDeadline) return 0; + m_Mode.Recovery().Tick(); + if (!Check(ERR_Actors.CanFight(m_Player) && m_Mode.RecoveryStatus().IsEmpty() && m_Mode.Recovery().Conscious() == 1 && m_Changes == 2, "native recovery clears the warning once")) return -1; + int id = GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(m_Player); + ERR_PlayerLife life = m_Mode.Players().Get(id); + if (!Check(life && life.UsedLife && life.Actor == m_Player, "recovery preserves original actor and spent life")) return -1; + m_Controller.SetUnconscious(true); + m_Step = 4; m_Wait = now + 1000; + return 0; + } + if (m_Step == 4) + { + m_Mode.Recovery().Tick(); + if (!Check(!m_Mode.RecoveryStatus().IsEmpty() && m_Changes == 3, "second incapacitation restores warning before abandonment")) return -1; + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c new file mode 100644 index 0000000..b664226 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c @@ -0,0 +1,68 @@ +#ifdef WORKBENCH +// Local controller and native presentation provider; no network clients are +// simulated. The extraction snapshot was produced by real occupied seats. +class ERR_NativeResultProbe +{ + protected static Widget s_Content; + protected static bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: result " + detail); return true; } + if (s_Content) s_Content.RemoveFromHierarchy(); + s_Content = null; + Print("ERR SMOKE FAIL: result " + detail, LogLevel.ERROR); + return false; + } + protected static bool NativeText(string title, string debrief) + { + if (!s_Content) return false; + TextWidget titleWidget = TextWidget.Cast(s_Content.FindAnyWidget("GameOver_State")); + TextWidget debriefWidget = TextWidget.Cast(s_Content.FindAnyWidget("GameOver_Description")); + return titleWidget && debriefWidget && titleWidget.GetText() == title && debriefWidget.GetText() == debrief; + } + static bool Run(ERR_ExtractionService extraction, UUID escapedAccount, UUID missedAccount) + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + if (!Check(controller && extraction && extraction.State() == ERR_ExtractionState.ESCAPED, "local controller and physical extraction snapshot exist")) return false; + int playerId = controller.GetPlayerId(); + ERR_EscapeGameOverScreenInfo info = new ERR_EscapeGameOverScreenInfo(); + array staleIds = {playerId}; + SCR_GameModeEndData staleData = SCR_GameModeEndData.Create(EGameOverTypes.VICTORY, staleIds); + array copiedIds = {}; + staleData.GetWinnerIds(copiedIds); + controller.ERR_ResetEscapeResult(); + if (!Check(controller.ERR_EscapeResult() == ERR_PersonalEscapeResult.UNKNOWN && info.GetTitle(playerId, copiedIds) == "The helicopter escaped", "unknown controller ignores stale native end-data winner ID")) return false; + ResourceName layout = "{C4507D07F3C54831}UI/layouts/HUD/GameOver/EndScreen/EndScreenContent_NoImage.layout"; + s_Content = GetGame().GetWorkspace().CreateWidgets(layout); + if (!Check(s_Content != null, "native result content widgets created")) return false; + s_Content.SetVisible(false); + SCR_GameOverScreenContentUIComponent contentHandler = SCR_GameOverScreenContentUIComponent.Cast(s_Content.FindHandler(SCR_GameOverScreenContentUIComponent)); + if (!Check(contentHandler != null, "native result content handler attached")) return false; + SCR_GameOverScreenUIContentData content = new SCR_GameOverScreenUIContentData(layout, info, staleData, "STALE WINNER", string.Empty, "STALE DEBRIEF", ResourceName.Empty, ResourceName.Empty, null, string.Empty, string.Empty, string.Empty); + contentHandler.InitContent(content); + if (!Check(NativeText("The helicopter escaped", "Your personal escape result is not available."), "opened native content ignores a stale winner while personal result is unknown")) return false; + ERR_PlayerRoster roster = new ERR_PlayerRoster(); + if (!Check(roster.Bind(playerId, escapedAccount), "isolated presentation account binds to local controller ID")) return false; + roster.Spawned(playerId, controller.GetControlledEntity()); + controller.ERR_PublishEscapeResult(roster, extraction); + array noWinners = {}; + if (!Check(controller.ERR_EscapeResult() == ERR_PersonalEscapeResult.ESCAPED && info.GetTitle(playerId, noWinners) == "You escaped Everon", "identity snapshot publishes victory despite missing end-data ID")) return false; + if (!Check(NativeText("You escaped Everon", "You crossed the extraction boundary aboard the helicopter."), "already-open native content refreshes when personal victory arrives")) return false; + if (!Check(roster.Bind(playerId, missedAccount), "local presentation connection ID is recycled to non-escapee")) return false; + roster.Spawned(playerId, controller.GetControlledEntity()); + controller.ERR_PublishEscapeResult(roster, extraction); + if (!Check(controller.ERR_EscapeResult() == ERR_PersonalEscapeResult.MISSED && info.GetTitle(playerId, copiedIds) == "The helicopter escaped" && info.GetDebriefing(playerId, copiedIds) == "You did not escape with the helicopter.", "recycled winner ID cannot grant escape or misdescribe dead occupants")) return false; + if (!Check(NativeText("The helicopter escaped", "You did not escape with the helicopter."), "native text refresh removes the previous account's win")) return false; + if (!Check(roster.Bind(playerId, escapedAccount), "escaped presentation account returns after simulated rebind")) return false; + controller.ERR_PublishEscapeResult(roster, extraction); + if (!Check(info.GetTitle(playerId, noWinners) == "You escaped Everon", "presentation follows returning account rather than copied end data")) return false; + controller.ERR_ResetEscapeResult(); + if (!Check(controller.ERR_EscapeResult() == ERR_PersonalEscapeResult.UNKNOWN && info.GetTitle(playerId, copiedIds) == "The helicopter escaped", "round reset clears personal result despite stale winner ID")) return false; + if (!Check(NativeText("The helicopter escaped", "Your personal escape result is not available."), "round reset clears the open native result text")) return false; + s_Content.RemoveFromHierarchy(); + s_Content = null; + ERR_GameMode mode = ERR_GameMode.Get(); + controller.ERR_PublishEscapeResult(mode.Players(), mode.Extraction()); + return true; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c new file mode 100644 index 0000000..d171845 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c @@ -0,0 +1,58 @@ +#ifdef WORKBENCH +// Read-only spatial survey of new authored site candidates. No world edits. +class ERR_NativeSiteSurvey +{ + protected bool m_Blocked; + protected string m_Obstacle; + protected bool Obstacle(IEntity entity) + { + if (entity && entity.GetVObject()) + { + m_Blocked = true; + m_Obstacle = entity.ToString(); + if (entity.GetPrefabData()) m_Obstacle = entity.GetPrefabData().GetPrefabName(); + } + return !m_Blocked; + } + void Area(string name, vector center) + { + int found, slopes, blocked; + float best = 10000; + for (int x = -80; x <= 80; x += 20) + for (int z = -80; z <= 80; z += 20) + { + vector position = ERR_Actors.Ground(center + Vector(x, 0, z)); + float low = 10000; + float high = -10000; + for (int dx = -2; dx <= 2; dx += 2) + for (int dz = -2; dz <= 2; dz += 2) + { + float height = GetGame().GetWorld().GetSurfaceY(position[0] + dx, position[2] + dz); + low = Math.Min(low, height); + high = Math.Max(high, height); + } + best = Math.Min(best, high-low); + if (low < 1 || high - low > 1.2) { slopes++; continue; } + m_Blocked = false; + GetGame().GetWorld().QueryEntitiesByAABB(Vector(position[0]-1.3, low+0.1, position[2]-1.3), Vector(position[0]+1.3, high+2, position[2]+1.3), Obstacle); + if (m_Blocked) + { + blocked++; + if (blocked <= 2) PrintFormat("ERR SITE OBSTACLE: area=%1 position=%2 object=%3", name, position, m_Obstacle); + continue; + } + found++; + PrintFormat("ERR SITE CANDIDATE: area=%1 position=%2 elevationRange=%3", name, position, high-low); + } + PrintFormat("ERR SITE SURVEY COUNT: area=%1 clear=%2 slopes=%3 blocked=%4 bestSlope=%5", name, found, slopes, blocked, best); + } + void Run() + { + Area("west-supplies", "5900 0 7200"); + Area("medical", "6320 0 7440"); + Area("outpost", "6740 0 7320"); + Print("ERR SMOKE PASS: candidate survey completed without authoring world changes"); + Print("ERR SMOKE COMPLETE: read-only site survey"); + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c new file mode 100644 index 0000000..7c331df --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c @@ -0,0 +1,111 @@ +// Opt-in local diagnostic only. It does not bypass validation or alter cleanup. +#ifdef WORKBENCH +modded class SCR_BaseItemSupportStationComponent +{ + protected static int s_ERRStationTeardownLines; + protected static int s_ERRStationInitLines; + protected bool m_ERRStationInitSeen; + protected bool m_ERRStationInitModePresent; + protected bool m_ERRStationInitMainWorld; + protected bool m_ERRStationInitSiteOwned; + protected bool m_ERRStationInitInInventory; + protected ResourceName m_ERRStationInitParentPrefab; + protected bool m_ERRStationInDelete; + protected IEntity m_ERRStationDeleteOwner; + + protected override void DelayedInit(IEntity owner) + { + // Preserve initialization and every native validation before observation. + super.DelayedInit(owner); + string enabled; + if (!System.GetCLIParam("errStationTeardownDiag", enabled) || enabled != "1" || !owner) return; + m_ERRStationInitSeen = true; + ERR_GameMode mode = ERR_GameMode.Get(); + m_ERRStationInitModePresent = mode != null; + if (GetGame()) m_ERRStationInitMainWorld = owner.GetWorld() == GetGame().GetWorld(); + ERR_SiteService sites; + if (mode) sites = mode.Sites(); + m_ERRStationInitSiteOwned = sites && sites.Owns(owner); + InventoryItemComponent item = InventoryItemComponent.Cast(owner.FindComponent(InventoryItemComponent)); + m_ERRStationInitInInventory = item && item.GetParentSlot(); + IEntity parent = owner.GetParent(); + if (parent && parent.GetPrefabData()) m_ERRStationInitParentPrefab = parent.GetPrefabData().GetPrefabName(); + if (s_ERRStationInitLines >= 64) return; + s_ERRStationInitLines++; + ResourceName prefab; + if (owner.GetPrefabData()) prefab = owner.GetPrefabData().GetPrefabName(); + PrintFormat("ERR STATION INIT OWNERSHIP: n=%1 prefab=%2 modePresent=%3 mainWorld=%4 siteOwned=%5 inInventory=%6 parentPrefab=%7", s_ERRStationInitLines, prefab, m_ERRStationInitModePresent, m_ERRStationInitMainWorld, m_ERRStationInitSiteOwned, m_ERRStationInitInInventory, m_ERRStationInitParentPrefab); + } + + override void OnDelete(IEntity owner) + { + string enabled; + bool diagnose = System.GetCLIParam("errStationTeardownDiag", enabled) && enabled == "1"; + if (diagnose) + { + m_ERRStationInDelete = true; + m_ERRStationDeleteOwner = owner; + } + + // Preserve vanilla OnDelete, including its call to InitValidSetup. + super.OnDelete(owner); + + m_ERRStationInDelete = false; + m_ERRStationDeleteOwner = null; + } + + protected override bool InitValidSetup() + { + if (m_ERRStationInDelete && s_ERRStationTeardownLines < 64) + { + s_ERRStationTeardownLines++; + IEntity owner = m_ERRStationDeleteOwner; + string ownerName = ""; + ResourceName prefab; + if (owner) + { + ownerName = owner.GetName(); + if (owner.GetPrefabData()) prefab = owner.GetPrefabData().GetPrefabName(); + } + bool globalCatalogPresent = SCR_EntityCatalogManagerComponent.GetInstance() != null; + SCR_BaseGameMode baseMode; + if (GetGame()) baseMode = SCR_BaseGameMode.Cast(GetGame().GetGameMode()); + int gameState = -1; + int phase = -1; + bool hasEndData; + if (baseMode) + { + gameState = baseMode.GetState(); + hasEndData = baseMode.GetEndGameData() != null; + ERR_GameMode mode = ERR_GameMode.Cast(baseMode); + if (mode) phase = mode.Phase(); + } + string detail = string.Format("ERR STATION TEARDOWN DIAG: n=%1 owner=%2 prefab=%3 cachedCatalog=%4 globalCatalog=%5", s_ERRStationTeardownLines, ownerName, prefab, m_EntityCatalogManager != null, globalCatalogPresent); + detail += string.Format(" modePresent=%1 gameState=%2 errPhase=%3 endData=%4 call=OnDelete/InitValidSetup", baseMode != null, gameState, phase, hasEndData); + detail += string.Format(" initSeen=%1 initMode=%2 initMainWorld=%3 initSiteOwned=%4 initInInventory=%5 initParentPrefab=%6", m_ERRStationInitSeen, m_ERRStationInitModePresent, m_ERRStationInitMainWorld, m_ERRStationInitSiteOwned, m_ERRStationInitInInventory, m_ERRStationInitParentPrefab); + bool deleteMainWorld; + bool deleteSiteOwned; + bool deleteInInventory; + ResourceName deleteParentPrefab; + if (owner) + { + if (GetGame()) deleteMainWorld = owner.GetWorld() == GetGame().GetWorld(); + ERR_GameMode deleteMode = ERR_GameMode.Cast(baseMode); + ERR_SiteService deleteSites; + if (deleteMode) deleteSites = deleteMode.Sites(); + deleteSiteOwned = deleteSites && deleteSites.Owns(owner); + InventoryItemComponent deleteItem = InventoryItemComponent.Cast(owner.FindComponent(InventoryItemComponent)); + deleteInInventory = deleteItem && deleteItem.GetParentSlot(); + IEntity deleteParent = owner.GetParent(); + if (deleteParent && deleteParent.GetPrefabData()) deleteParentPrefab = deleteParent.GetPrefabData().GetPrefabName(); + } + detail += string.Format(" deleteMainWorld=%1 deleteSiteOwned=%2 deleteInInventory=%3 deleteParentPrefab=%4", deleteMainWorld, deleteSiteOwned, deleteInInventory, deleteParentPrefab); + Print(detail); + if (s_ERRStationTeardownLines == 64) Print("ERR STATION TEARDOWN DIAG: 64-line diagnostic limit reached; vanilla validation and cleanup continue unchanged."); + } + + // Retain every original validation result and error message. + return super.InitValidSetup(); + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c new file mode 100644 index 0000000..03790c0 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c @@ -0,0 +1,117 @@ +#ifdef WORKBENCH +class ERR_NativeSettingsReader : ERR_Settings +{ + bool Probe(string path, out map values) { return Read(path, values); } +} +// Runs inside the disposable native test profile. No original settings touched. +class ERR_NativeTimeProbe +{ + protected static float s_EngineTime; + protected static float s_ClockHours; + protected static int s_Multiplier; + protected static bool s_Started; + static bool VerifyProgression(ERR_GameMode mode) + { + ChimeraWorld world = ChimeraWorld.CastFrom(mode.GetWorld()); + TimeAndWeatherManagerEntity manager = world.GetTimeAndWeatherManager(); + if (!Check(s_Started && manager && manager.GetIsDayAutoAdvanced(), "clock advancement remains enabled")) return false; + float elapsed = manager.GetEngineTime() - s_EngineTime; + if (!Check(elapsed >= 10, "progression sampled across at least ten engine seconds")) return false; + float actual = manager.GetTimeOfTheDay() - s_ClockHours; + if (actual < 0) actual += 24; + float expected = elapsed * s_Multiplier / 3600.0; + return Check(Math.AbsFloat(actual - expected) < 0.001, "native clock advances at configured rate without periodic resets"); + } + protected static bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: mission time " + detail); return true; } + Print("ERR SMOKE FAIL: mission time " + detail, LogLevel.ERROR); + return false; + } + protected static bool WriteFixture(string path, string omit = "", bool clock = false, float minutes = 840, bool speed = false, float multiplier = 1) + { + JsonSaveContext json = new JsonSaveContext(); + json.EnableTypeDiscriminator(false); + if (omit != "reportIntervalSeconds") json.WriteValue("reportIntervalSeconds", 20); + json.WriteValue("supportSquadLimit", 2); + json.WriteValue("responseRadiusMetres", 1500); + json.WriteValue("aiIntelChancePercent", 0); + json.WriteValue("intelRevealChancePercent", 100); + json.WriteValue("radioDefenceSeconds", 120); + if (clock) json.WriteValue("startTimeMinutes", minutes); + if (speed) json.WriteValue("timeMultiplier", multiplier); + return json.SaveToFile(path); + } + protected static bool SettingsMigration(string path) + { + if (!Check(WriteFixture(path), "legacy fixture created")) return false; + ERR_Settings legacy = new ERR_Settings(path); + if (!Check(legacy.Get("reportIntervalSeconds") == 20 && legacy.Get("radioDefenceSeconds") == 120 && legacy.Get("aiIntelChancePercent") == 0 && legacy.Get("intelRevealChancePercent") == 100, "existing six-key settings preserved")) return false; + if (!Check(legacy.Get("startTimeMinutes") == 840 && legacy.Get("timeMultiplier") == 1, "only absent time settings receive defaults")) return false; + JsonLoadContext unchanged = new JsonLoadContext(); + if (!Check(unchanged.LoadFromFile(path) && !unchanged.DoesKeyExist("startTimeMinutes") && !unchanged.DoesKeyExist("timeMultiplier"), "loading does not rewrite legacy file")) return false; + if (!Check(legacy.Set("startTimeMinutes", 375) && legacy.Set("timeMultiplier", 4), "explicit save upgrades valid legacy settings")) return false; + ERR_Settings reloaded = new ERR_Settings(path); + if (!Check(reloaded.Get("startTimeMinutes") == 375 && reloaded.Get("timeMultiplier") == 4 && reloaded.Get("responseRadiusMetres") == 1500 && reloaded.Get("radioDefenceSeconds") == 120, "new keys and old values survive reload")) return false; + ERR_NativeSettingsReader reader = new ERR_NativeSettingsReader(); + map values; + if (!WriteFixture(path, "", true, 1440)) return false; + if (!Check(!reader.Probe(path, values), "present out-of-range time cannot silently default")) return false; + if (!WriteFixture(path, "", true, 375.5)) return false; + if (!Check(!reader.Probe(path, values), "fractional clock setting rejected")) return false; + if (!WriteFixture(path, "", false, 0, true, 0)) return false; + if (!Check(!reader.Probe(path, values), "zero multiplier rejected")) return false; + if (!WriteFixture(path, "reportIntervalSeconds")) return false; + if (!Check(!reader.Probe(path, values), "missing legacy setting remains invalid")) return false; + if (!WriteFixture(path, "", true, 375)) return false; + if (!Check(reader.Probe(path, values) && values.Get("startTimeMinutes") == 375 && values.Get("timeMultiplier") == 1, "partially upgraded file defaults only missing new field")) return false; + if (!WriteFixture(path, "", false, 0, true, 25)) return false; + ERR_Settings recovered = new ERR_Settings(path); + if (!Check(recovered.Get("startTimeMinutes") == 375 && recovered.Get("timeMultiplier") == 1 && recovered.Get("reportIntervalSeconds") == 20, "valid saved backup recovers invalid primary")) return false; + return true; + } + static bool Run(ERR_GameMode mode) + { + int minutes; + if (!Check(ERR_TimeService.ParseClock("00:00", minutes) && minutes == 0 && ERR_TimeService.ParseClock("23:59", minutes) && minutes == 1439 && ERR_TimeService.Clock(375) == "06:15", "clock parsing includes midnight and final minute")) return false; + if (!Check(!ERR_TimeService.ParseClock("24:00", minutes) && !ERR_TimeService.ParseClock("12:60", minutes) && !ERR_TimeService.ParseClock("1:00", minutes) && !ERR_TimeService.ParseClock("ab:cd", minutes) && !ERR_TimeService.ParseClock("06:15junk", minutes), "malformed clock commands rejected")) return false; + string path = "$profile:erri-native-time-probe.json"; + if (!Check(!FileIO.FileExists(path) && !FileIO.FileExists(path + ".bak") && !FileIO.FileExists(path + ".tmp"), "isolated fixture paths unused")) return false; + bool migrated = SettingsMigration(path); + FileIO.DeleteFile(path); FileIO.DeleteFile(path + ".bak"); FileIO.DeleteFile(path + ".tmp"); + if (!migrated) return false; + if (!Check(mode.Time() && mode.Time().Started(), "server starts world clock before prison phase")) return false; + ChimeraWorld world = ChimeraWorld.CastFrom(mode.GetWorld()); + TimeAndWeatherManagerEntity manager = world.GetTimeAndWeatherManager(); + if (!Check(manager && manager.GetIsDayAutoAdvanced() && Math.AbsFloat(manager.GetDayDuration() - ERR_TimeService.DayDuration(mode.Time().Multiplier())) < 0.1, "engine progression matches applied multiplier")) return false; + int originalTime = mode.Settings().Get("startTimeMinutes"); + int originalSpeed = mode.Settings().Get("timeMultiplier"); + array replies = {}; + mode.Admin().Execute(mode, false, "mission time set 06:15", replies); + if (!Check(mode.Settings().Get("startTimeMinutes") == originalTime && replies[0] == "Administrator access required.", "unauthorized clock mutation rejected")) return false; + mode.Admin().Execute(mode, true, "mission time set 24:00", replies); + if (!Check(mode.Settings().Get("startTimeMinutes") == originalTime && replies[0].Contains("Invalid"), "invalid clock command preserves setting")) return false; + float currentHours = manager.GetTimeOfTheDay(); + float currentDuration = manager.GetDayDuration(); + int appliedStart = mode.Time().StartMinutes(); + int appliedSpeed = mode.Time().Multiplier(); + mode.Admin().Execute(mode, true, "mission time set 06:15", replies); + bool savedTime = mode.Settings().Get("startTimeMinutes") == 375 && replies[0].Contains("next round"); + mode.Admin().Execute(mode, true, "mission speed set 4", replies); + bool savedSpeed = mode.Settings().Get("timeMultiplier") == 4 && replies[0].Contains("next round"); + bool idempotent = mode.Time().Start(mode) && Math.AbsFloat(manager.GetTimeOfTheDay() - currentHours) < 0.01 && manager.GetDayDuration() == currentDuration && mode.Time().StartMinutes() == appliedStart && mode.Time().Multiplier() == appliedSpeed; + mode.Admin().Execute(mode, true, "mission time show", replies); + bool shown = replies.Count() == 2 && replies[0].Contains("Clock") && replies[1] == "Next round: 06:15, 4x progression."; + bool restoredTime = mode.Settings().Set("startTimeMinutes", originalTime); + bool restoredSpeed = mode.Settings().Set("timeMultiplier", originalSpeed); + if (!Check(savedTime && savedSpeed && restoredTime && restoredSpeed, "authorized settings persist and test restores originals")) return false; + if (!Check(idempotent, "saved changes and repeated start leave current clock and speed intact")) return false; + if (!Check(shown, "admin sees current clock separately from next round settings")) return false; + s_EngineTime = manager.GetEngineTime(); + s_ClockHours = manager.GetTimeOfTheDay(); + s_Multiplier = mode.Time().Multiplier(); + s_Started = true; + return true; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c new file mode 100644 index 0000000..305a3b4 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c @@ -0,0 +1,146 @@ +#ifdef WORKBENCH +// Explicit destructive test of successor-owned transport in the disposable +// scenario. Scripted occupants and engine input are not manual driving or MP. +class ERR_NativeTransportProbe +{ + protected ERR_GameMode m_Mode; + protected ERR_SiteRuntime m_Site; + protected Vehicle m_Vehicle; + protected CarControllerComponent m_Controller; + protected SCR_FuelManagerComponent m_Fuel; + protected ref array m_Actors = {}; + protected BaseCompartmentSlot m_Driver; + protected BaseCompartmentSlot m_Passenger; + protected int m_Step; + protected float m_Wait; + void ERR_NativeTransportProbe(ERR_GameMode mode) { m_Mode = mode; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: transport " + detail); return true; } + Print("ERR SMOKE FAIL: transport " + detail, LogLevel.ERROR); + return false; + } + protected bool DefinitionChecks() + { + ERR_ScenarioDefinition definition = ERR_ScenarioDefinition.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab("{BC310DC0CD27F523}Configs/ERR/EveronSites.conf")); + ERR_SiteDefinition site; + if (definition) site = definition.Find("everon-supply-2"); + if (!Check(site && site.Transport && definition.Valid(), "authored transport definition resolves")) return false; + ERR_SiteTransport transport = site.Transport; + vector offset = transport.Offset; + transport.Offset = "61 0 0"; + if (!Check(!definition.Valid(), "unbounded parking offset rejected")) return false; + transport.Offset = "0 1 0"; + if (!Check(!definition.Valid(), "floating parking offset rejected")) return false; + transport.Offset = offset; + float radius = transport.ClearanceRadius; + transport.ClearanceRadius = 1; + if (!Check(!definition.Valid(), "undersized parking footprint rejected")) return false; + transport.ClearanceRadius = 9; + if (!Check(!definition.Valid(), "unbounded parking footprint rejected")) return false; + transport.ClearanceRadius = radius; + float range = transport.MaximumTerrainRange; + transport.MaximumTerrainRange = 2; + if (!Check(!definition.Valid(), "unsafe authoring slope allowance rejected")) return false; + transport.MaximumTerrainRange = range; + ERR_SiteDefinition radio = definition.Find("everon-radio-1"); + radio.Transport = transport; + if (!Check(!definition.Valid(), "transport restricted to optional depot and outpost sites")) return false; + radio.Transport = null; + return Check(definition.Valid(), "valid authoring restored after isolated mutations"); + } + protected IEntity Character(int index) + { + IEntity actor = ERR_Actors.Spawn(m_Mode.Factions().PrisonerPrefab, ERR_Actors.Ground(m_Vehicle.GetOrigin() + Vector(-8 - index * 2, 0, 0))); + if (!actor) return null; + m_Mode.Own(actor); + m_Actors.Insert(actor); + DamageManagerComponent damage = DamageManagerComponent.Cast(actor.FindComponent(DamageManagerComponent)); + if (damage) damage.EnableDamageHandling(false); + return actor; + } + int Tick(float now) + { + if (now < m_Wait) return 0; + if (m_Step == 0) + { + if (!DefinitionChecks()) return -1; + m_Site = m_Mode.Sites().Find("everon-supply-2"); + if (!Check(m_Site && m_Site.Transport && m_Mode.Sites().TransportCount() == 1 && m_Mode.Sites().Owns(m_Site.Transport), "exactly one authored transport belongs to the finite site service")) return -1; + m_Vehicle = m_Site.Transport; + m_Controller = CarControllerComponent.Cast(m_Vehicle.FindComponent(CarControllerComponent)); + m_Fuel = SCR_FuelManagerComponent.Cast(m_Vehicle.FindComponent(SCR_FuelManagerComponent)); + if (!Check(m_Controller && m_Fuel && m_Fuel.HasFuel() && m_Controller.GetPersistentHandBrake(), "wheeled transport starts parked with vanilla finite fuel")) return -1; + PrintFormat("ERR TRANSPORT FUEL: current=%1 maximum=%2", m_Fuel.GetTotalFuel(), m_Fuel.GetTotalMaxFuel()); + BaseCompartmentManagerComponent manager = BaseCompartmentManagerComponent.Cast(m_Vehicle.FindComponent(BaseCompartmentManagerComponent)); + array seats = {}; + if (manager) manager.GetCompartments(seats); + int usable; + foreach (BaseCompartmentSlot slot : seats) + { + if (!slot) continue; + ECompartmentType type = SCR_CompartmentAccessComponent.GetCompartmentType(slot); + if (type == ECompartmentType.PILOT) { usable++; if (!m_Driver) m_Driver = slot; } + if (type == ECompartmentType.CARGO) { usable++; if (!m_Passenger) m_Passenger = slot; } + } + PrintFormat("ERR TRANSPORT SEATS: usable driver/passenger positions=%1", usable); + if (!Check(m_Driver && m_Passenger && m_Driver != m_Passenger, "native driver and passenger compartments are distinct")) return -1; + DamageManagerComponent.Cast(m_Vehicle.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + IEntity driver = Character(0); + IEntity passenger = Character(1); + if (!Check(driver && passenger, "isolated physical occupants created")) return -1; + CompartmentAccessComponent access = CompartmentAccessComponent.Cast(driver.FindComponent(CompartmentAccessComponent)); + if (!Check(access && access.GetInVehicle(m_Vehicle, m_Driver, true, -1, ECloseDoorAfterActions.INVALID, false), "native driver boarding request accepted")) return -1; + m_Step = 1; + m_Wait = now + 1500; + return 0; + } + if (m_Step == 1) + { + CompartmentAccessComponent access = CompartmentAccessComponent.Cast(m_Actors[1].FindComponent(CompartmentAccessComponent)); + if (!Check(access && access.GetInVehicle(m_Vehicle, m_Passenger, true, -1, ECloseDoorAfterActions.INVALID, false), "native passenger boarding request accepted")) return -1; + m_Step = 2; + m_Wait = now + 2500; + return 0; + } + if (m_Step == 2) + { + if (!Check(m_Driver.GetOccupant() == m_Actors[0] && m_Passenger.GetOccupant() == m_Actors[1] && CompartmentAccessComponent.GetVehicleIn(m_Actors[0]) == m_Vehicle && CompartmentAccessComponent.GetVehicleIn(m_Actors[1]) == m_Vehicle, "driver and passenger physically occupy their native seats")) return -1; + if (!Check(m_Controller.IsEngineOn() || m_Controller.StartEngine(), "ordinary native engine start request accepted")) return -1; + m_Step = 3; + m_Wait = now + 6000; + return 0; + } + if (m_Step == 3) + { + if (!Check(m_Controller.IsEngineOn(), "native wheeled engine starts with available fuel")) return -1; + m_Fuel.SetTotalFuelPercentage(0); + if (!Check(m_Mode.Sites().Prepare() == ERR_PrepareResult.READY && m_Site.Transport == m_Vehicle, "preparation queries preserve the original vehicle after deliberate fuel depletion")) return -1; + m_Step = 4; + m_Wait = now + 5000; + return 0; + } + if (m_Step == 4) + { + if (!Check(!m_Fuel.HasFuel() && m_Fuel.GetTotalFuel() <= 0.001 && m_Mode.Sites().Prepare() == ERR_PrepareResult.READY && m_Mode.Sites().TransportCount() == 1 && m_Site.Transport == m_Vehicle, "empty transport stays empty and is not refilled or replaced")) return -1; + foreach (IEntity actor : m_Actors) ERR_Actors.DeleteSpawned(actor); + m_Actors.Clear(); + ERR_Actors.DeleteSpawned(m_Vehicle); + m_Step = 5; + m_Wait = now + 3000; + return 0; + } + if (m_Step == 5) + { + if (!Check(!m_Site.Transport && m_Mode.Sites().TransportCount() == 0 && m_Mode.Sites().Prepare() == ERR_PrepareResult.READY, "lost transport remains absent after service ticks and preparation queries")) return -1; + ERR_ScenarioDefinition definition = ERR_ScenarioDefinition.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab("{BC310DC0CD27F523}Configs/ERR/EveronSites.conf")); + if (!Check(!m_Mode.Sites().Begin(definition, ERR_Supplies.Map()) && m_Mode.Sites().TransportCount() == 0, "duplicate initialization cannot replace lost transport")) return -1; + m_Mode.Sites().Stop(); + if (!Check(m_Mode.Sites().Prepare() == ERR_PrepareResult.FAILED && !m_Mode.Sites().Begin(definition, ERR_Supplies.Map()), "stopped finite owner cannot reinitialize transport")) return -1; + m_Step = 6; + return 1; + } + return 0; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c new file mode 100644 index 0000000..475a2b1 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c @@ -0,0 +1,36 @@ +#ifdef WORKBENCH +// Authoring-only survey: omit transport in the fixture's in-memory definition so +// an invalid parking candidate cannot block inspecting nearby terrain/scenery. +modded class ERR_SiteService +{ + override bool Begin(ERR_ScenarioDefinition definition, ResourceName fieldMap) + { + string outcome; + if (definition && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "transport-survey") + foreach (ERR_SiteDefinition site : definition.Sites) site.Transport = null; + return super.Begin(definition, fieldMap); + } +} +class ERR_NativeTransportSurvey +{ + static void Run(ERR_GameMode mode) + { + ERR_ScenarioDefinition definition = ERR_ScenarioDefinition.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab("{BC310DC0CD27F523}Configs/ERR/EveronSites.conf")); + ERR_SiteDefinition site = definition.Find("everon-supply-2"); + int clear; + for (int x = -40; x <= 40; x += 8) + for (int z = -40; z <= 40; z += 8) + { + vector offset = Vector(x, 0, z); + if (offset.Length() < 8) continue; + vector position = site.Position + offset; + if (!mode.Sites().TransportClearance(position, site.Transport.ClearanceRadius, site.Transport.MaximumTerrainRange)) continue; + clear++; + PrintFormat("ERR PARKING CANDIDATE: offset=%1 position=%2", offset, ERR_Actors.Ground(position)); + } + PrintFormat("ERR PARKING SURVEY: clear=%1; no scenery removed and no transport spawned", clear); + Print("ERR SMOKE PASS: transport parking survey completed"); + Print("ERR SMOKE COMPLETE: bounded transport parking survey"); + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c new file mode 100644 index 0000000..b583a40 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c @@ -0,0 +1,59 @@ +// Native task descriptions otherwise remain stale while their entry is open. +// Own only this scenario's additional binding and missing native detach cleanup. +modded class SCR_TaskListEntryDescriptionUIComponent +{ + protected SCR_Task m_ERRObservedObjective; + // Entity references become null when a task is deleted; work ownership must survive. + protected bool m_ERROwnsObjectiveBinding; + override void InitDescription(notnull SCR_Task task) + { + // Native InitDescription deletes assignee labels; cancel their delayed work first. + ERR_UnbindObjectiveDetails(); + super.InitDescription(task); + if (!ERR_GameMode.Get() || !task.GetTaskID().StartsWith("erri-mission-")) return; + m_ERRObservedObjective = task; + m_ERROwnsObjectiveBinding = true; + task.GetOnDisplayDataChanged().Insert(ERR_RefreshObjectiveDetails); + } + protected void ERR_RefreshObjectiveDetails() + { + if (m_wRoot && m_Task && m_Task == m_ERRObservedObjective) UpdateTask(); + } + protected override void UpdateAssignees(notnull SCR_Task task, SCR_TaskExecutor newAssignee = null, int requesterID = 0) + { + // Native assignment refresh also deletes the old labels before rebuilding them. + if (m_ERROwnsObjectiveBinding && task == m_Task) + ERR_CancelObjectiveOverflow(); + super.UpdateAssignees(task, newAssignee, requesterID); + } + protected void ERR_CancelObjectiveOverflow() + { + if (GetGame() && GetGame().GetCallqueue()) GetGame().GetCallqueue().Remove(CheckOverflow); + } + protected void ERR_UnbindObjectiveDetails() + { + if (!m_ERROwnsObjectiveBinding) return; + ERR_CancelObjectiveOverflow(); + if (m_ERRObservedObjective) m_ERRObservedObjective.GetOnDisplayDataChanged().Remove(ERR_RefreshObjectiveDetails); + m_ERRObservedObjective = null; + m_ERROwnsObjectiveBinding = false; + } + override void HandlerDeattached(Widget w) + { + // Vanilla detaches widget/manager listeners but leaves these task listeners. + // Preserve that vanilla path for every task outside the successor scenario. + if (m_ERROwnsObjectiveBinding) + { + // These five native invokers are static and survive task entity deletion. + SCR_Task.GetOnTaskAssigneeAdded().Remove(UpdateAssignees); + SCR_Task.GetOnTaskAssigneeRemoved().Remove(UpdateAssignees); + SCR_Task.GetOnTaskUIVisibilityChanged().Remove(OnTaskUIVisibilityChanged); + SCR_Task.GetOnTaskVisibilityChanged().Remove(OnTaskVisibilityChanged); + SCR_Task.GetOnTaskOwnershipChanged().Remove(OnTaskOwnershipChanged); + if (m_TaskComponent) m_TaskComponent.GetOnTaskVisualChanged().Remove(OnTaskVisualChanged); + m_Task = null; + } + ERR_UnbindObjectiveDetails(); + super.HandlerDeattached(w); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c new file mode 100644 index 0000000..60128d0 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c @@ -0,0 +1,64 @@ +// Shared player-facing copy; reads replicated mission state and never changes it. +class ERR_ObjectiveText +{ + static string Title(ERR_Phase phase) + { + if (phase == ERR_Phase.PRISON) return "Escape the prison"; + if (phase == ERR_Phase.RADIO_SEARCH) return "Locate the radio station"; + if (phase == ERR_Phase.RADIO_DEFENCE) return "Defend the radio transmission"; + if (phase == ERR_Phase.EXTRACTION) return "Escape Everon by helicopter"; + return "Escape Everon"; + } + static string Extraction(float radius) + { + return string.Format("The map marks the initial helicopter pickup site. Board the helicopter and fly beyond %1 kilometres from the prison. To load an unconscious prisoner, place them on the ground beside the grounded, stationary helicopter and use 'Load casualty into extraction helicopter' on them. Living prisoners aboard escape; dead or absent prisoners do not.", radius / 1000.0); + } + static string RadioFeedbackMessage(ERR_RadioFeedback feedback) + { + if (feedback == ERR_RadioFeedback.WAITING) + return "Waiting for a conscious defender near the radio. Keep someone within 60 metres to start the transmission."; + if (feedback == ERR_RadioFeedback.TRANSMITTING) + return "Transmission in progress. Keep a conscious survivor within 60 metres of the radio. Leaving the area resets progress."; + if (feedback == ERR_RadioFeedback.INTERRUPTED) + return "Transmission interrupted. Progress has reset. Return a conscious survivor to within 60 metres of the radio to resume."; + return "Keep a conscious survivor within 60 metres of the radio until the transmission finishes. Leaving the area resets the defence timer."; + } + static string Description(ERR_GameMode mode, bool progress = true) + { + string description = PhaseDescription(mode, progress); + if (mode && mode.Active() && !mode.RecoveryStatus().IsEmpty()) description += "\n" + mode.RecoveryStatus(); + return description; + } + protected static string PhaseDescription(ERR_GameMode mode, bool progress) + { + if (!mode) return ""; + ERR_Phase phase = mode.Phase(); + if (phase == ERR_Phase.PREPARING) + { + if (!mode.PreparationError().IsEmpty()) return "The mission could not start. An administrator can use /esc status for the cause. Spawning is disabled until the configuration is corrected and the scenario restarted."; + return "Preparing mission sites and equipment. You will spawn when the mission is ready."; + } + if (phase == ERR_Phase.PRISON) + return "Search the supply box inside the prison for weapons and a field map. Pick the gate lock, then get clear of the guards."; + if (phase == ERR_Phase.RADIO_SEARCH) + { + array locations = {}; + mode.Locations(locations); + foreach (ERR_LocationComponent location : locations) + if (location.Kind() == ERR_LocationKind.RADIO && location.Knowledge() == 2) + return "The radio station is identified on your map. Reach its radio and complete the 'Contact extraction HQ' action to start the transmission."; + return "Choose either marked supply cache. Take its intelligence folders into your own inventory to reveal the station on your map. If only a search area appears, take another folder. Each cache has enough folders; use the other if one is lost. If every folder is lost, a close approach with a clear view can identify the station itself. Nearby medical and guard sites can also be discovered by approaching with a clear view."; + } + if (phase == ERR_Phase.RADIO_DEFENCE) + { + if (!progress) return RadioFeedbackMessage(mode.RadioFeedback()); + int seconds = mode.DefenceSecondsRemaining(); + if (!mode.DefenceOccupied()) + return string.Format("Transmission interrupted. Keep a conscious survivor within 60 metres of the radio for %1 seconds. Leaving resets progress.", seconds); + int displayed = Math.Ceil(seconds / 5.0) * 5; + return string.Format("Transmission in progress: up to %1 seconds remaining. Keep a conscious survivor within 60 metres of the radio. Leaving resets progress.", displayed); + } + if (phase == ERR_Phase.EXTRACTION) return Extraction(mode.EscapeRadius()); + return ""; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Objectives.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Objectives.c new file mode 100644 index 0000000..b01ef91 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Objectives.c @@ -0,0 +1,60 @@ +// Server-owned presentation adapter: mission rules decide progress, native tasks +// replicate it. Companion addons neither create nor advance these objectives. +class ERR_Objectives +{ + protected ERR_GameMode m_Mode; + protected SCR_Task m_Current; + protected string m_LastDescription; + protected bool m_Stopped; + + void ERR_Objectives(ERR_GameMode mode) { m_Mode = mode; } + SCR_Task Current() { return m_Current; } + static string Id(ERR_Phase phase) { return "erri-mission-" + phase.ToString(); } + + void PhaseChanged(ERR_Phase previous, ERR_Phase current) + { + if (!Replication.IsServer() || m_Stopped) return; + SCR_TaskSystem tasks = SCR_TaskSystem.GetInstance(); + if (!tasks) { Print("Rereintroduced: native task system missing", LogLevel.ERROR); return; } + if (m_Current) + { + SCR_ETaskState result = SCR_ETaskState.COMPLETED; + if (current == ERR_Phase.DEFEAT) result = SCR_ETaskState.FAILED; + tasks.SetTaskState(m_Current, result); + } + m_Current = null; + if (ERR_MissionRules.Terminal(current)) return; + string title = ERR_ObjectiveText.Title(current); + if (title.IsEmpty()) return; + m_Current = tasks.CreateTask("{1D0F815858EE24AD}Prefabs/Tasks/BaseTask.et", Id(current), title, Description()); + if (!m_Current) { Print("Rereintroduced: objective creation failed", LogLevel.ERROR); return; } + // Location markers use the discovery registry. A task cannot expose an unknown site. + tasks.SetTaskUIVisibility(m_Current, SCR_ETaskUIVisibility.LIST_ONLY); + m_Mode.Own(m_Current); + m_LastDescription = ""; + Tick(GetGame().GetWorld().GetWorldTime()); + } + + protected string Description() { return ERR_ObjectiveText.Description(m_Mode); } + + void Tick(float now) + { + if (!Replication.IsServer() || m_Stopped || !m_Current) return; + string description = Description(); + if (description != m_LastDescription) + { + m_Current.SetTaskDescription(description); + m_LastDescription = description; + } + SCR_TaskSystem tasks = SCR_TaskSystem.GetInstance(); + if (!tasks) return; + array players = {}; + GetGame().GetPlayerManager().GetPlayers(players); + foreach (int playerId : players) + { + SCR_TaskExecutor executor = SCR_TaskSystem.TaskExecutorFromPlayerID(playerId); + if (executor && !m_Current.IsTaskAssignedTo(executor)) tasks.AssignTask(m_Current, executor, true); + } + } + void Stop() { m_Stopped = true; } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Observer.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Observer.c new file mode 100644 index 0000000..2682bcc --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Observer.c @@ -0,0 +1,256 @@ +enum ERR_ObserverReason +{ + NONE, + SPENT_LIFE, + LATE_EXTRACTION, + SPAWN_UNAVAILABLE +} + +// Presentation only. Existing server admission and observer selection own state. +class ERR_ObserverGuidance +{ + static string Message(int reason, bool survivorAvailable) + { + if (reason == ERR_ObserverReason.NONE) return ""; + string message = "You are spectating until the next round."; + if (reason == ERR_ObserverReason.SPENT_LIFE) + message = "Your life for this round has been used. You can play again next round."; + else if (reason == ERR_ObserverReason.LATE_EXTRACTION) + message = "Extraction has started. New prisoners can join next round."; + else if (reason == ERR_ObserverReason.SPAWN_UNAVAILABLE) + message = "Your prisoner could not be spawned. You are spectating until the next round."; + if (!survivorAvailable) + return message + " No survivor is currently available to follow. The view will follow a survivor when one becomes available."; + return message + " Use /esc spectate next or /esc spectate previous to change who you follow."; + } + static bool Refresh(bool shown, int previousReason, int reason, bool previousAvailable, bool survivorAvailable) + { + return reason != ERR_ObserverReason.NONE && (!shown || previousReason != reason || previousAvailable != survivorAvailable); + } +} + +// A local follow camera. It never possesses its target or offers free flight. +[BaseContainerProps(), SCR_BaseManualCameraComponentTitle()] +class ERR_FollowSurvivorCameraComponent : SCR_BaseManualCameraComponent +{ + override bool EOnCameraInit() { return true; } + override void EOnCameraFrame(SCR_ManualCameraParam param) + { + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerController()); + if (!controller) return; + IEntity target = controller.ERR_ObservedEntity(); + vector aim = controller.ERR_ObserverAnchor() + "0 1.5 0"; + vector position = aim + "0 4 -6"; + IEntity exclude = target; + if (target) + { + IEntity vehicle = CompartmentAccessComponent.GetVehicleIn(target); + vector transform[4]; + if (vehicle) + { + vehicle.GetWorldTransform(transform); + vector lower, upper; + vehicle.GetWorldBounds(lower, upper); + aim = (lower + upper) * 0.5; + position = aim + "0 5 0" - transform[2] * 10; + exclude = vehicle; + } + else + { + target.GetWorldTransform(transform); + aim = transform[3] + "0 1.5 0"; + position = aim + "0 1.5 0" - transform[2] * 4; + } + } + TraceParam trace = new TraceParam(); + trace.Start = aim; + trace.End = position; + trace.Flags = TraceFlags.WORLD | TraceFlags.ENTS; + trace.LayerMask = TRACE_LAYER_CAMERA; + trace.Exclude = exclude; + float fraction = GetCameraEntity().GetWorld().TraceMove(trace, null); + if (fraction < 1) position = vector.Lerp(aim, position, Math.Max(0.05, fraction - 0.05)); + Math3D.DirectionAndUpMatrix(vector.Direction(position, aim), "0 1 0", param.transform); + param.transform[3] = position; + param.isDirty = true; + } +} + +modded class SCR_PlayerController +{ + [RplProp()] + protected ERR_ObserverReason m_ERRObserverReason; + [RplProp()] + protected RplId m_ERRObservedId = RplId.Invalid(); + [RplProp()] + protected vector m_ERRObserverAnchor; + protected IEntity m_ERRServerObserved; + protected IEntity m_ERRServerObservedVehicle; + protected SCR_ManualCamera m_ERRObserverCamera; + protected bool m_ERRObserverMonitor; + protected bool m_ERRObserverReady; + protected ERR_ObserverReason m_ERRShownObserverReason; + protected bool m_ERRShownObserverAvailable; + protected float m_ERRLastCycle = -1000; + + ERR_ObserverReason ERR_ObserverState() { return m_ERRObserverReason; } + vector ERR_ObserverAnchor() { return m_ERRObserverAnchor; } + IEntity ERR_ObservedEntity() + { + RplComponent component = RplComponent.Cast(Replication.FindItem(m_ERRObservedId)); + if (!component) return null; + return component.GetEntity(); + } + bool ERR_HasObserverCamera() { return m_ERRObserverCamera != null; } + + void ERR_SetObserver(ERR_ObserverReason reason) + { + if (!Replication.IsServer()) return; + if (reason != ERR_ObserverReason.NONE && ERR_Actors.Alive(GetControlledEntity())) return; + m_ERRObserverReason = reason; + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode && reason != ERR_ObserverReason.NONE) m_ERRObserverAnchor = mode.PrisonPosition(); + if (reason == ERR_ObserverReason.NONE) ERR_ReleaseObserved(); + Replication.BumpMe(); + ERR_UpdateObserverServer(); + } + + protected void ERR_StreamObserved(IEntity entity, bool normalStreaming) + { + RplIdentity identity = GetRplIdentity(); + if (!identity.IsValid() || identity == RplIdentity.Local() || !entity) return; + RplComponent component = RplComponent.Cast(entity.FindComponent(RplComponent)); + if (component) component.EnableStreamingConNode(identity, normalStreaming); + } + protected void ERR_ReleaseObserved() + { + ERR_StreamObserved(m_ERRServerObserved, true); + ERR_StreamObserved(m_ERRServerObservedVehicle, true); + m_ERRServerObserved = null; + m_ERRServerObservedVehicle = null; + m_ERRObservedId = RplId.Invalid(); + } + void ERR_UpdateObserverServer(int direction = 0) + { + if (!Replication.IsServer() || m_ERRObserverReason == ERR_ObserverReason.NONE) return; + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode || !mode.Active() || ERR_Actors.Alive(GetControlledEntity())) + { + m_ERRObserverReason = ERR_ObserverReason.NONE; + ERR_ReleaseObserved(); + Replication.BumpMe(); + return; + } + array survivors = {}; + ERR_Actors.Players(survivors); + Faction friendly = mode.PlayerFaction(); + for (int i = survivors.Count() - 1; i >= 0; i--) + if (!friendly || !mode.Players() || !mode.Players().CurrentActor(survivors[i]) || SCR_FactionManager.SGetFaction(survivors[i]) != friendly) survivors.RemoveOrdered(i); + int index = survivors.Find(m_ERRServerObserved); + if (index < 0) index = 0; + else index += direction; + if (index < 0) index = survivors.Count() - 1; + if (index >= survivors.Count()) index = 0; + IEntity target; + if (!survivors.IsEmpty()) target = survivors[index]; + if (target != m_ERRServerObserved) + { + ERR_ReleaseObserved(); + m_ERRServerObserved = target; + if (target) + { + RplComponent component = RplComponent.Cast(target.FindComponent(RplComponent)); + if (component) m_ERRObservedId = component.Id(); + ERR_StreamObserved(target, false); + } + } + if (target) + { + m_ERRObserverAnchor = target.GetOrigin(); + IEntity vehicle = CompartmentAccessComponent.GetVehicleIn(target); + if (vehicle != m_ERRServerObservedVehicle) + { + ERR_StreamObserved(m_ERRServerObservedVehicle, true); + m_ERRServerObservedVehicle = vehicle; + ERR_StreamObserved(vehicle, false); + } + } + Replication.BumpMe(); + } + void ERR_CycleObserver(int direction) + { + if (this == GetGame().GetPlayerController()) Rpc(ERR_RequestObserverCycle, direction); + } + [RplRpc(RplChannel.Reliable, RplRcver.Server)] + protected void ERR_RequestObserverCycle(int direction) + { + if (!Replication.IsServer() || (direction != -1 && direction != 1)) return; + float now = GetGame().GetWorld().GetWorldTime(); + if (now - m_ERRLastCycle < 250) return; + m_ERRLastCycle = now; + ERR_UpdateObserverServer(direction); + } + + void ERR_StartObserverMonitor() + { + if (this != GetGame().GetPlayerController() || System.IsConsoleApp() || m_ERRObserverMonitor) return; + m_ERRObserverMonitor = true; + ERR_OnObserverMonitorStarted(); + GetGame().GetCallqueue().CallLater(ERR_UpdateObserverClient, 250, true); + } + protected void ERR_OnObserverMonitorStarted() {} + protected void ERR_UpdateObserverClient() + { + ERR_GameMode mode = ERR_GameMode.Get(); + bool observe = mode && mode.Active() && m_ERRObserverReason != ERR_ObserverReason.NONE && !ERR_Actors.Alive(GetControlledEntity()); + if (!observe) + { + ERR_CloseObserverCamera(); + return; + } + if (!m_ERRObserverCamera) + { + Resource resource = Resource.Load("{EB1210AAE1BB8F54}Prefabs/ERR/SpectatorCamera.et"); + if (!resource || !resource.IsValid()) return; + EntitySpawnParams params = new EntitySpawnParams(); + params.TransformMode = ETransformMode.WORLD; + params.Transform[3] = m_ERRObserverAnchor + "0 5 -6"; + m_ERRObserverCamera = SCR_ManualCamera.Cast(GetGame().SpawnEntityPrefab(resource, GetGame().GetWorld(), params)); + if (!m_ERRObserverCamera) return; + } + CameraManager manager = GetGame().GetCameraManager(); + if (!manager || manager.CurrentCamera() != m_ERRObserverCamera) return; + SCR_RespawnSystemComponent respawn = SCR_RespawnSystemComponent.GetInstance(); + if (respawn) respawn.DestroyLoadingPlaceholder(); + // The server-selected replicated ID distinguishes no target from a target + // whose local entity is still streaming. Never imply no survivors from delay. + bool survivorAvailable = m_ERRObservedId != RplId.Invalid(); + if (ERR_ObserverGuidance.Refresh(m_ERRObserverReady, m_ERRShownObserverReason, m_ERRObserverReason, m_ERRShownObserverAvailable, survivorAvailable)) + { + SCR_HintManagerComponent hints = SCR_HintManagerComponent.GetInstance(); + if (!hints) return; // retry on the existing monitor; do not lose the first hint + hints.ShowCustom(ERR_ObserverGuidance.Message(m_ERRObserverReason, survivorAvailable), "Spectating", 12); + m_ERRObserverReady = true; + m_ERRShownObserverReason = m_ERRObserverReason; + m_ERRShownObserverAvailable = survivorAvailable; + } + } + protected void ERR_CloseObserverCamera() + { + m_ERRObserverReady = false; + if (!m_ERRObserverCamera) return; + if (GetGame().GetPlayerController() == this) m_ERRObserverCamera.TrySwitchToControlledEntityCamera(); + m_ERRObserverCamera.Terminate(); + delete m_ERRObserverCamera; + m_ERRObserverCamera = null; + } + void ~SCR_PlayerController() + { + if (GetGame()) + { + GetGame().GetCallqueue().Remove(ERR_UpdateObserverClient); + ERR_CloseObserverCamera(); + if (Replication.IsServer()) ERR_ReleaseObserved(); + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c new file mode 100644 index 0000000..7c06393 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c @@ -0,0 +1,273 @@ +// Explicit local diagnostic launcher. Normal games and Workbench never request +// transitions from this file. No player, identity or audit state is fabricated. +#ifndef WORKBENCH +// Native Game is not Managed; this script-owned helper owns the callback. +class ERR_OrdinaryScenarioLaunchRequest : Managed +{ + protected string m_Project; + protected ResourceName m_Header; + protected string m_Addon; + protected bool m_Queued; + protected bool m_Finished; + + void Queue(string project, ResourceName header, string addon) + { + if (m_Queued || m_Finished) return; + m_Queued = true; + m_Project = project; + m_Header = header; + m_Addon = addon; + GetGame().GetCallqueue().CallLater(Attempt, 0, false); + } + + void Cancel() + { + m_Finished = true; + if (GetGame() && GetGame().GetCallqueue()) GetGame().GetCallqueue().Remove(Attempt); + } + + protected void Attempt() + { + if (m_Finished) return; + m_Finished = true; + if (!GameStateTransitions.IsInsideMainMenu() || ERR_GameMode.Get() || GameStateTransitions.IsTransitionRequestedOrInProgress()) + { + Print("ERR ORDINARY: header launch refused outside idle main menu", LogLevel.ERROR); + return; + } + string addons; + if (!System.GetCLIParam("addons", addons) || addons != m_Addon) + { + Print("ERR ORDINARY: header launch addon selection mismatch", LogLevel.ERROR); + return; + } + ResourceName expected = m_Header; + MissionHeader header = MissionHeader.ReadMissionHeader(expected); + if (!header || header.GetWorldResourceName() != "{B6C516F86302C679}Worlds/ERR_Everon.ent" || header.GetWorldSystemsConfig() != "{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf") + { + Print("ERR ORDINARY: diagnostic mission header is invalid", LogLevel.ERROR); + return; + } + PrintFormat("ERR ORDINARY: requesting header project=%1", m_Project); + if (!GameStateTransitions.RequestScenarioChangeTransition(expected, string.Empty, addons)) + Print("ERR ORDINARY: native header transition refused", LogLevel.ERROR); + } + +} + +// One optional capture request per world, with no camera or gameplay mutation. +// Managed callback ownership matches the ordinary launch request above. +class ERR_OrdinaryScreenshotRequest : Managed +{ + protected static ref ERR_OrdinaryScreenshotRequest s_Request; + protected static bool s_Attempted; + protected ERR_GameMode m_Mode; + protected PlayerController m_Controller; + protected IEntity m_Actor; + protected ref ERR_PlayerLife m_Life; + protected UUID m_Account; + protected int m_PlayerId; + protected bool m_Finished; + + protected static bool Enabled() + { + string project, screenshot; + if (!Replication.IsServer() || System.IsConsoleApp()) return false; + if (!System.GetCLIParam("errOrdinaryScenario", project) || (project != "core" && project != "chat")) return false; + return System.GetCLIParam("errOrdinaryScreenshot", screenshot) && screenshot == "1"; + } + static void Queue(ERR_GameMode mode, PlayerController controller, IEntity actor) + { + if (s_Attempted || !Enabled() || !mode || !controller || !actor || !mode.Players()) return; + ERR_PlayerLife life = mode.Players().CurrentActor(actor); + if (!life) return; + ERR_OrdinaryScreenshotRequest request = new ERR_OrdinaryScreenshotRequest(); + request.m_Mode = mode; request.m_Controller = controller; request.m_Actor = actor; + request.m_Life = life; request.m_Account = life.AccountId; request.m_PlayerId = controller.GetPlayerId(); + if (!request.Valid()) return; + s_Attempted = true; s_Request = request; + mode.OnStop().Insert(request.Cancel); + GetGame().GetCallqueue().CallLater(request.Capture, 3000, false); + Print("ERR ORDINARY: optional prisoner screenshot queued after finalized admission"); + } + protected bool Valid() + { + if (!Enabled() || !GetGame() || !m_Mode || m_Mode != ERR_GameMode.Get()) return false; + if (!GetGame().GetWorld() || m_Mode.GetWorld() != GetGame().GetWorld() || !m_Mode.Active() || m_Mode.Phase() != ERR_Phase.PRISON) return false; + if (!m_Controller || m_Controller != GetGame().GetPlayerController() || m_Controller.GetPlayerId() != m_PlayerId || m_PlayerId <= 0) return false; + PlayerManager manager = GetGame().GetPlayerManager(); + if (!manager || manager.GetPlayerController(m_PlayerId) != m_Controller || manager.GetPlayerControlledEntity(m_PlayerId) != m_Actor || m_Controller.GetControlledEntity() != m_Actor) return false; + if (!ERR_Actors.Alive(m_Actor) || !m_Mode.Players()) return false; + ERR_PlayerLife current = m_Mode.Players().CurrentActor(m_Actor); + return current && current == m_Life && current.AccountId == m_Account; + } + void Cancel() + { + if (m_Finished) return; + m_Finished = true; + if (GetGame() && GetGame().GetCallqueue()) GetGame().GetCallqueue().Remove(Capture); + if (m_Mode) m_Mode.OnStop().Remove(Cancel); + m_Mode = null; m_Controller = null; m_Actor = null; m_Life = null; + } + // Read-only projection evidence, only inside the already validated capture. + // World AABB corners transformed to prison space are an envelope, not a + // promise that the material's irregular clutter mask fills that envelope. + protected void YardDiagnostic() + { + array locations = {}; + m_Mode.Locations(locations); + if (locations.Count() > 64) return; + IEntity prison; + foreach (ERR_LocationComponent location : locations) + { + if (!location || location.Kind() != ERR_LocationKind.PRISON || location.Id() != "everon-prison-1") continue; + IEntity owner = location.GetOwner(); + if (!owner || owner.GetWorld() != m_Mode.GetWorld() || !owner.GetPrefabData()) continue; + if (owner.GetPrefabData().GetPrefabName() != "{BE6B8D56349038A6}Prefabs/ERR/Prison.et") continue; + if (prison) { Print("ERR YARD: ambiguous registered prison; no measurement"); return; } + prison = owner; + } + if (!prison) { Print("ERR YARD: exact registered prison missing; no measurement"); return; } + vector prisonTransform[4]; prison.GetWorldTransform(prisonTransform); + PrintFormat("ERR YARD: prison world origin=%1 basisX=%2 basisY=%3 basisZ=%4", prisonTransform[3], prisonTransform[0], prisonTransform[1], prisonTransform[2]); + array entities = {prison}; + array depths = {0}; + int decals; + for (int index = 0; index < entities.Count(); index++) + { + IEntity entity = entities[index]; + if (!entity) { Print("ERR YARD: hierarchy changed; partial measurement"); return; } + DecalEntity decal = DecalEntity.Cast(entity); + if (decal) + { + decals++; + vector mins, maxs; decal.GetWorldBounds(mins, maxs); + vector worldTransform[4]; decal.GetWorldTransform(worldTransform); + string nativeType = decal.Type().ToString(); + ResourceName prefab; + if (decal.GetPrefabData()) prefab = decal.GetPrefabData().GetPrefabName(); + PrintFormat("ERR YARD: decal=%1 type=%2 prefab=%3 worldMin=%4 worldMax=%5", decals, nativeType, prefab, mins, maxs); + PrintFormat("ERR YARD: decal=%1 world origin=%2 basisX=%3 basisY=%4 basisZ=%5", decals, worldTransform[3], worldTransform[0], worldTransform[1], worldTransform[2]); + for (int x = 0; x < 2; x++) + for (int y = 0; y < 2; y++) + for (int z = 0; z < 2; z++) + { + vector corner = mins; + if (x == 1) corner[0] = maxs[0]; + if (y == 1) corner[1] = maxs[1]; + if (z == 1) corner[2] = maxs[2]; + vector localCorner = prison.CoordToLocal(corner); + PrintFormat("ERR YARD: decal=%1 corner=%2/%3/%4 prisonLocal=%5", decals, x, y, z, localCorner); + } + } + IEntity child = entity.GetChildren(); + while (child) + { + if (depths[index] >= 8 || entities.Count() >= 64 || entities.Contains(child)) + { + Print("ERR YARD: hierarchy bound or duplicate reached; partial measurement"); + return; + } + entities.Insert(child); depths.Insert(depths[index] + 1); + child = child.GetSibling(); + } + } + PrintFormat("ERR YARD: measurement complete nodes=%1 decals=%2; bounds do not certify clutter-mask coverage", entities.Count(), decals); + } + protected void Capture() + { + if (m_Finished) return; + bool valid = Valid(); + if (valid) YardDiagnostic(); + Cancel(); + if (!valid) + { + Print("ERR ORDINARY: optional prisoner screenshot cancelled; original admission no longer current"); + return; + } + System.MakeScreenshot("$logs:err-ordinary-prison"); + Print("ERR ORDINARY: optional prisoner screenshot requested without camera or input changes"); + } + static void ClearWorld() + { + if (s_Request) s_Request.Cancel(); + s_Request = null; + s_Attempted = false; + } +} + +modded class ArmaReforgerScripted +{ + protected ref ERR_OrdinaryScenarioLaunchRequest m_ERRDiagnosticLaunchRequest; + protected bool m_ERRDiagnosticLaunchAttempted; + protected string m_ERRDiagnosticProject; + + protected ResourceName ERR_DiagnosticHeader(string project) + { + if (project == "core") return "{AD62322D5213C440}Missions/ERR_Everon_Base.conf"; + return string.Empty; + } + + protected string ERR_DiagnosticAddon(string project) + { + if (project == "core") return "2528466DE220D91C"; + return string.Empty; + } + + override bool OnGameStart() + { + bool started = super.OnGameStart(); + if (!started || !System.GetCLIParam("errOrdinaryScenario", m_ERRDiagnosticProject)) return started; + ResourceName expected = ERR_DiagnosticHeader(m_ERRDiagnosticProject); + if (expected.IsEmpty()) + { + Print("ERR ORDINARY: invalid diagnostic project", LogLevel.ERROR); + return started; + } + // A loaded successor is inspected only; never replace an active mission. + if (ERR_GameMode.Get()) + { + MissionHeader active = GetMissionHeader(); + ResourceName systems = "{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf"; + if (!active || active.GetHeaderResourceName() != expected || active.GetWorldSystemsConfig() != systems || GetSystemsConfig() != systems) + Print("ERR ORDINARY: active scenario header/systems mismatch", LogLevel.ERROR); + else + PrintFormat("ERR ORDINARY: header verified project=%1 systems=MissionSystems", m_ERRDiagnosticProject); + return started; + } + if (m_ERRDiagnosticLaunchAttempted) return started; + m_ERRDiagnosticLaunchAttempted = true; + // OnGameStart runs while the native state is finishing initialization. The + // one queued attempt requires that it actually reached the main menu. + m_ERRDiagnosticLaunchRequest = new ERR_OrdinaryScenarioLaunchRequest(); + m_ERRDiagnosticLaunchRequest.Queue(m_ERRDiagnosticProject, expected, ERR_DiagnosticAddon(m_ERRDiagnosticProject)); + return started; + } + + + override protected void OnBeforeWorldCleanup() + { + ERR_OrdinaryScreenshotRequest.ClearWorld(); + if (m_ERRDiagnosticLaunchRequest) m_ERRDiagnosticLaunchRequest.Cancel(); + m_ERRDiagnosticLaunchRequest = null; + super.OnBeforeWorldCleanup(); + } +} + +// Observe normal finalized admission; this never creates a body or identity. +modded class ERR_GameMode +{ + override void PlayerSpawned(int id, IEntity actor) + { + super.PlayerSpawned(id, actor); + string project; + if (!System.GetCLIParam("errOrdinaryScenario", project) || (project != "core" && project != "chat")) return; + PlayerController local = GetGame().GetPlayerController(); + if (!local || local.GetPlayerId() != id || local.GetControlledEntity() != actor || !ERR_Actors.Alive(actor)) return; + if (!Players().CurrentActor(actor) || Phase() != ERR_Phase.PRISON) return; + PrintFormat("ERR ORDINARY: local participant verified project=%1 phase=prison", project); + ERR_OrdinaryScreenshotRequest.Queue(this, local, actor); + } +} + +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c new file mode 100644 index 0000000..0824111 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c @@ -0,0 +1,61 @@ +modded class SCR_PlayerController +{ + protected ChatCommandInvoker m_ERRCommand; + protected float m_ERRLastRequest = -1000; + protected int m_ERRRegisterAttempts; + + override void OnControlledEntityChanged(IEntity from, IEntity to) + { + super.OnControlledEntityChanged(from, to); + if (this == GetGame().GetPlayerController() && ERR_GameMode.Get()) ERR_Register(); + } + + protected void ERR_Register() + { + if (m_ERRCommand || m_ERRRegisterAttempts++ > 40) return; + SCR_ChatPanelManager manager = SCR_ChatPanelManager.GetInstance(); + if (!manager) { GetGame().GetCallqueue().CallLater(ERR_Register, 250, false); return; } + m_ERRCommand = manager.GetCommandInvoker("esc"); + if (m_ERRCommand) m_ERRCommand.Insert(ERR_OnCommand); + } + protected override void ERR_OnObserverMonitorStarted() + { + super.ERR_OnObserverMonitorStarted(); + ERR_Register(); + } + protected void ERR_OnCommand(SCR_ChatPanel panel, string arguments) + { + string localCommand = arguments.Trim(); localCommand.ToLower(); + if (localCommand == "spectate next" || localCommand == "spectate previous") + { + int direction = 1; + if (localCommand == "spectate previous") direction = -1; + ERR_CycleObserver(direction); + return; + } + Rpc(ERR_Request, arguments); + } + + [RplRpc(RplChannel.Reliable, RplRcver.Server)] + protected void ERR_Request(string arguments) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!Replication.IsServer() || !mode) return; + float now = GetGame().GetWorld().GetWorldTime(); + if (arguments.Length() > 160 || now - m_ERRLastRequest < 250) return; + m_ERRLastRequest = now; + arguments = arguments.Trim(); arguments.ToLower(); + array replies = {}; + mode.Admin().Execute(mode, SCR_Global.IsAdmin(GetPlayerId()), arguments, replies); + foreach (string reply : replies) ERR_Reply(reply); + } + protected void ERR_Reply(string text) { Rpc(ERR_Response, text); } + [RplRpc(RplChannel.Reliable, RplRcver.Owner)] + protected void ERR_Response(string text) { SCR_ChatComponent.RadioProtocolMessage(text); } + + void ~SCR_PlayerController() + { + if (GetGame()) GetGame().GetCallqueue().Remove(ERR_Register); + if (m_ERRCommand) m_ERRCommand.Remove(ERR_OnCommand); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c new file mode 100644 index 0000000..947360c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c @@ -0,0 +1,56 @@ +enum ERR_PersonalEscapeResult { UNKNOWN, ESCAPED, MISSED } + +// Only the server resolves account identities. Clients receive their controller's +// result, never a persistent account ID or a reused end-data connection ID. +modded class SCR_PlayerController +{ + [RplProp(onRplName: "ERR_OnEscapeResultReplicated")] + protected ERR_PersonalEscapeResult m_ERREscapeResult; + [RplProp(onRplName: "ERR_OnEscapeResultReplicated")] + protected RplId m_ERREscapeResultMission = RplId.Invalid(); + protected static ref ScriptInvoker s_ERREscapeResultChanged = new ScriptInvoker(); + + static ScriptInvoker ERR_OnEscapeResultChanged() { return s_ERREscapeResultChanged; } + protected RplId ERR_CurrentResultMission() + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode) return RplId.Invalid(); + RplComponent component = RplComponent.Cast(mode.FindComponent(RplComponent)); + if (!component) return RplId.Invalid(); + return component.Id(); + } + ERR_PersonalEscapeResult ERR_EscapeResult() + { + RplId mission = ERR_CurrentResultMission(); + if (mission == RplId.Invalid() || mission != m_ERREscapeResultMission) return ERR_PersonalEscapeResult.UNKNOWN; + return m_ERREscapeResult; + } + void ERR_ResetEscapeResult() + { + if (!Replication.IsServer()) return; + m_ERREscapeResult = ERR_PersonalEscapeResult.UNKNOWN; + m_ERREscapeResultMission = ERR_CurrentResultMission(); + Replication.BumpMe(); + ERR_OnEscapeResultReplicated(); + } + void ERR_PublishEscapeResult(ERR_PlayerRoster roster, ERR_ExtractionService extraction) + { + if (!Replication.IsServer()) return; + ERR_PersonalEscapeResult result = ERR_PersonalEscapeResult.UNKNOWN; + ERR_PlayerLife life; + if (roster) life = roster.Get(GetPlayerId()); + if (life && life.Connected && life.ConnectionId == GetPlayerId() && life.UsedLife && extraction && extraction.State() == ERR_ExtractionState.ESCAPED) + { + result = ERR_PersonalEscapeResult.MISSED; + if (extraction.DidEscape(life.AccountId)) result = ERR_PersonalEscapeResult.ESCAPED; + } + m_ERREscapeResult = result; + m_ERREscapeResultMission = ERR_CurrentResultMission(); + Replication.BumpMe(); + ERR_OnEscapeResultReplicated(); + } + protected void ERR_OnEscapeResultReplicated() + { + if (GetGame() && this == GetGame().GetPlayerController()) s_ERREscapeResultChanged.Invoke(); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c new file mode 100644 index 0000000..4d0bc21 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c @@ -0,0 +1,41 @@ +// Local presentation reads replicated state; it cannot advance objectives. +modded class SCR_PlayerController +{ + protected int m_ERRGuidePhase = -1; + protected bool m_ERRGuideStarted; + protected string m_ERRGuideMessage; + + override void OnControlledEntityChanged(IEntity from, IEntity to) + { + super.OnControlledEntityChanged(from, to); + ERR_StartGuide(); + } + protected override void ERR_OnObserverMonitorStarted() + { + super.ERR_OnObserverMonitorStarted(); + ERR_StartGuide(); + } + protected void ERR_StartGuide() + { + if (this != GetGame().GetPlayerController() || !ERR_GameMode.Get() || m_ERRGuideStarted) return; + m_ERRGuideStarted = true; + GetGame().GetCallqueue().CallLater(ERR_UpdateGuide, 1000, true); + } + protected void ERR_UpdateGuide() + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode) return; + if (mode.Phase() != ERR_Phase.PREPARING && !GetControlledEntity()) return; + string message = ERR_ObjectiveText.Description(mode, false); + if (m_ERRGuidePhase == mode.Phase() && m_ERRGuideMessage == message) return; + SCR_HintManagerComponent hints = SCR_HintManagerComponent.GetInstance(); + if (!hints) return; + if (!message.IsEmpty()) hints.ShowCustom(message, ERR_ObjectiveText.Title(mode.Phase()), 15); + m_ERRGuidePhase = mode.Phase(); + m_ERRGuideMessage = message; + } + void ~SCR_PlayerController() + { + if (GetGame()) GetGame().GetCallqueue().Remove(ERR_UpdateGuide); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c new file mode 100644 index 0000000..9bc1cbc --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c @@ -0,0 +1,118 @@ +// Round-owned identities survive controller IDs, death and reconnect attempts. +class ERR_PlayerLifeRules +{ + static bool CanEnter(bool usedLife, int phase) + { + return !usedLife && phase >= ERR_Phase.PRISON && phase <= ERR_Phase.RADIO_DEFENCE; + } +} + +class ERR_PlayerLife +{ + UUID AccountId; + int ConnectionId; + bool Connected; + bool UsedLife; + IEntity Actor; +} + +class ERR_PlayerRoster +{ + protected ref map m_Lives = new map(); + protected ref map m_Connections = new map(); + protected ref ScriptInvoker m_OnChanged = new ScriptInvoker(); + + ScriptInvoker OnChanged() { return m_OnChanged; } + bool Bind(int playerId, UUID identity) + { + if (!Replication.IsServer() || playerId <= 0 || identity.IsNull()) return false; + ERR_PlayerLife life; + if (!m_Lives.Find(identity, life)) + { + life = new ERR_PlayerLife(); + life.AccountId = identity; + m_Lives.Insert(identity, life); + } + if (life.Connected && life.ConnectionId != playerId) return false; + // A recycled transient ID cannot inherit the previous connection's record. + UUID previous; + if (m_Connections.Find(playerId, previous) && previous != identity) Disconnect(playerId); + life.ConnectionId = playerId; + life.Connected = true; + m_Connections.Set(playerId, identity); + m_OnChanged.Invoke(playerId); + return true; + } + ERR_PlayerLife Get(int playerId) + { + UUID identity; + if (!m_Connections.Find(playerId, identity)) return null; + return m_Lives.Get(identity); + } + // The roster identity was bound by the audited connection lifecycle. Consumers + // validate its current body rather than requesting a second backend identity. + ERR_PlayerLife CurrentActor(IEntity actor) + { + if (!Replication.IsServer() || !actor || !GetGame() || !GetGame().GetPlayerManager()) return null; + PlayerManager manager = GetGame().GetPlayerManager(); + int connection = manager.GetPlayerIdFromControlledEntity(actor); + if (connection <= 0 || manager.GetPlayerControlledEntity(connection) != actor) return null; + ERR_PlayerLife life = Get(connection); + if (!life || life.AccountId.IsNull() || !life.Connected || !life.UsedLife || life.ConnectionId != connection || life.Actor != actor) return null; + return life; + } + bool CanEnter(int playerId, int phase) + { + ERR_PlayerLife life = Get(playerId); + return life && life.Connected && ERR_PlayerLifeRules.CanEnter(life.UsedLife, phase); + } + void Spawned(int playerId, IEntity actor) + { + if (!Replication.IsServer() || !actor) return; + ERR_PlayerLife life = Get(playerId); + if (!life) return; + life.Actor = actor; + life.UsedLife = true; + m_OnChanged.Invoke(playerId); + } + void Disconnect(int playerId) + { + if (!Replication.IsServer()) return; + ERR_PlayerLife life = Get(playerId); + if (life) life.Connected = false; + m_Connections.Remove(playerId); + m_OnChanged.Invoke(playerId); + } + void Participants(out array lives) + { + lives.Clear(); + foreach (UUID identity, ERR_PlayerLife life : m_Lives) + if (life.UsedLife) lives.Insert(life); + } + bool HasSurvivor() + { + // Native reconnect reservations retain the original actor until expiry. + // A reserved survivor must not lose the round while their client reconnects. + foreach (UUID identity, ERR_PlayerLife life : m_Lives) + if (life.UsedLife && ERR_Actors.Alive(life.Actor)) return true; + return false; + } +} + +modded class SCR_ReconnectComponent +{ + override bool HandlePlayerDisconnect(int playerId, KickCauseCode cause) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!mode || !mode.Active()) return super.HandlePlayerDisconnect(playerId, cause); + UUID identity = SCR_PlayerIdentityUtils.GetPlayerIdentityId(playerId); + if (identity.IsNull()) return super.HandlePlayerDisconnect(playerId, cause); + // Voluntary and involuntary departures use the same vanilla reservation, + // timeout, character handoff and expiry cleanup. No replacement life is issued. + SCR_ReconnectData data = StoreData(playerId); + if (!IsDataRelevant(data)) return false; + m_mReconnectData.Set(identity, data); + UpdateExpieryCheck(); + return true; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c new file mode 100644 index 0000000..90e745a --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_PrisonEscapeService.c @@ -0,0 +1,199 @@ +// Physical escape from the authored 12m-square prison, including alternate +// exits. Normal lock picking remains available. No additional timer or respawn. +class ERR_PrisonEscapeRules +{ + static bool Inside(float x, float z, float halfSize) { return Math.AbsFloat(x) <= halfSize && Math.AbsFloat(z) <= halfSize; } + static bool Continuous(float elapsedMs, float displacement) + { + return elapsedMs > 0 && elapsedMs <= 2500 && displacement >= 0 && displacement <= 1.5 + 12.0 * elapsedMs / 1000.0; + } + static bool Registration(bool ownedDefinition, int gates, bool bounded, bool intact) { return ownedDefinition && gates == 1 && bounded && intact; } + static bool Grounded(float gap) { return gap >= -0.5 && gap <= 2.5; } + static bool Crossing(bool armed, float previousX, float previousZ, float x, float z, float elapsedMs, float displacement) + { + return armed && Inside(previousX, previousZ, 8) && !Inside(x, z, 8) && Continuous(elapsedMs, displacement); + } +} +class ERR_PrisonEscapeSample +{ + IEntity Actor; + PlayerController Controller; + int ConnectionId; + vector Position; + float ObservedAt; + bool Armed; +} +class ERR_PrisonEscapeService +{ + protected ERR_GameMode m_Mode; + protected IEntity m_Gate; + protected bool m_Registered; + protected bool m_Stopped; + protected vector m_Center; + protected string m_RegistrationReason = "prison phase not entered"; + protected ref map m_Samples = new map(); + void ERR_PrisonEscapeService(ERR_GameMode mode) { m_Mode = mode; } + IEntity Gate() { return m_Gate; } + bool Registered() { return m_Registered; } + string RegistrationReason() { return m_RegistrationReason; } + bool GateLost() + { + if (!m_Registered) return false; + if (!m_Gate) return true; + SCR_DestructionMultiPhaseComponent damage = SCR_DestructionMultiPhaseComponent.Cast(m_Gate.FindComponent(SCR_DestructionMultiPhaseComponent)); + return damage && (damage.GetDestroyed() || damage.IsDestructionQueued()); + } + protected bool HasSuccessorLock(IEntity entity) + { + BaseActionsManagerComponent manager = BaseActionsManagerComponent.Cast(entity.FindComponent(BaseActionsManagerComponent)); + if (!manager) return false; + array actions = {}; + manager.GetActionsList(actions); + foreach (BaseUserAction action : actions) + { + ERR_UnlockPrisonAction lock = ERR_UnlockPrisonAction.Cast(action); + if (lock && lock.GetOwner() == entity) return true; + } + return false; + } + // Native evaluated child prefabs need not expose the same raw prefab name as + // the authored reference. Follow the owned composition and its actual action. + protected bool FindGate(IEntity prison, out IEntity found, out int matches) + { + found = null; matches = 0; + array pending = {}; pending.Insert(prison); + int visited; + while (!pending.IsEmpty() && visited < 64) + { + IEntity entity = pending[0]; pending.Remove(0); visited++; + if (!entity) continue; + bool lock = HasSuccessorLock(entity); + bool door = entity.FindComponent(BaseDoorComponent) != null; + if (lock || door) + { + ResourceName raw; + if (entity.GetPrefabData()) raw = entity.GetPrefabData().GetPrefabName(); + PrintFormat("Rereintroduced [prison]: gate candidate raw=%1 resolved=%2 lock=%3 door=%4 position=%5", raw, SCR_ResourceNameUtils.GetPrefabName(entity), lock, door, entity.GetOrigin()); + } + if (entity != prison && lock && door) { found = entity; matches++; } + IEntity child = entity.GetChildren(); + while (child) + { + // Both queued and visited nodes count against the fixed scan bound. + if (pending.Count() + visited >= 64) return false; + pending.Insert(child); + child = child.GetSibling(); + } + } + return pending.IsEmpty(); + } + // One initial registration from the prepared, server-owned authored site. + // No world-nearby fallback or later retry can adopt a replacement/lost gate. + void PhaseChanged(ERR_Phase previous, ERR_Phase current) + { + m_Samples.Clear(); + if (!Replication.IsServer() || m_Stopped || current != ERR_Phase.PRISON || m_Registered) return; + m_RegistrationReason = "no unique owned authored prison"; + if (!m_Mode || !m_Mode.Sites()) return; + array locations = {}; + m_Mode.Locations(locations); + IEntity prison; + int prisons; + foreach (ERR_LocationComponent location : locations) + { + if (!location || location.Kind() != ERR_LocationKind.PRISON) continue; + ERR_SiteRuntime site = m_Mode.Sites().Find(location.Id()); + if (!site || site.Location != location || !site.Definition) continue; + if (site.Definition.Kind != ERR_LocationKind.PRISON || site.Definition.Prefab != "{BE6B8D56349038A6}Prefabs/ERR/Prison.et") continue; + IEntity owner = location.GetOwner(); + if (!owner || !m_Mode.Sites().Owns(owner)) continue; + prison = owner; prisons++; + } + if (prisons != 1) return; + ResourceName raw; + if (prison.GetPrefabData()) raw = prison.GetPrefabData().GetPrefabName(); + PrintFormat("Rereintroduced [prison]: owned composition raw=%1 resolved=%2 position=%3", raw, SCR_ResourceNameUtils.GetPrefabName(prison), prison.GetOrigin()); + IEntity found; + int gates; + bool bounded = FindGate(prison, found, gates); + SCR_DestructionMultiPhaseComponent damage; + if (found) damage = SCR_DestructionMultiPhaseComponent.Cast(found.FindComponent(SCR_DestructionMultiPhaseComponent)); + bool intact = damage && damage.GetDefaultHitZone() && !damage.GetDestroyed() && !damage.IsDestructionQueued(); + if (damage) PrintFormat("Rereintroduced [prison]: destruction health=%1 destroyed=%2 queued=%3", damage.GetHealth(), damage.GetDestroyed(), damage.IsDestructionQueued()); + if (!ERR_PrisonEscapeRules.Registration(true, gates, bounded, intact)) + { + m_RegistrationReason = string.Format("gate registration refused: candidates=%1 bounded=%2 intact=%3", gates, bounded, intact); + Print("Rereintroduced [prison]: " + m_RegistrationReason); + return; + } + m_Gate = found; + m_Center = prison.GetOrigin(); + m_Registered = true; + m_RegistrationReason = "one intact successor lock in owned prison"; + Print("Rereintroduced [prison]: " + m_RegistrationReason); + } + void RosterChanged(int connection) + { + // Invalidate only this connection; a simultaneous new join must not erase + // another prisoner's genuine inside-to-outside crossing. + array removed = {}; + foreach (UUID account, ERR_PrisonEscapeSample sample : m_Samples) + if (sample.ConnectionId == connection) removed.Insert(account); + foreach (UUID accountToRemove : removed) m_Samples.Remove(accountToRemove); + } + void Tick(float now) + { + if (!Replication.IsServer() || m_Stopped || !m_Mode || m_Mode.Phase() != ERR_Phase.PRISON || !m_Mode.Active() || !m_Registered) return; + ref map next = new map(); + array lives = {}; + m_Mode.Players().Participants(lives); + PlayerManager manager = GetGame().GetPlayerManager(); + foreach (ERR_PlayerLife life : lives) + { + IEntity actor = life.Actor; + if (!actor || m_Mode.Players().CurrentActor(actor) != life || !ERR_Actors.CanFight(actor) || CompartmentAccessComponent.GetVehicleIn(actor)) continue; + if (!m_Mode.PlayerFaction() || SCR_FactionManager.SGetFaction(actor) != m_Mode.PlayerFaction()) continue; + PlayerController controller = manager.GetPlayerController(life.ConnectionId); + if (!controller || controller.GetControlledEntity() != actor) continue; + vector position = actor.GetOrigin(); + float ground = GetGame().GetWorld().GetSurfaceY(position[0], position[2]); + if (!ERR_PrisonEscapeRules.Grounded(position[1] - ground)) continue; + vector offset = position - m_Center; + ERR_PrisonEscapeSample sample = m_Samples.Get(life.AccountId); + bool armed; + if (sample && sample.Actor == actor && sample.Controller == controller) + { + float elapsed = now - sample.ObservedAt; + float displacement = vector.Distance(position, sample.Position); + bool continuous = ERR_PrisonEscapeRules.Continuous(elapsed, displacement); + vector previousOffset = sample.Position - m_Center; + if (ERR_PrisonEscapeRules.Crossing(sample.Armed, previousOffset[0], previousOffset[2], offset[0], offset[2], elapsed, displacement)) + { + // An actual qualifying exit is sufficient even if the gate remains intact. + // Use the existing authority transition so cache reveal/tasks/HQ events + // remain exactly the same as successful lock picking. + m_Mode.Transition(ERR_Phase.RADIO_SEARCH); + return; + } + armed = continuous && sample.Armed; + } + if (!ERR_PrisonEscapeRules.Inside(offset[0], offset[2], 8)) continue; + if (!armed) armed = ERR_PrisonEscapeRules.Inside(offset[0], offset[2], 5.5); + ERR_PrisonEscapeSample updated = new ERR_PrisonEscapeSample(); + updated.Actor = actor; updated.Controller = controller; updated.ConnectionId = life.ConnectionId; + updated.Position = position; updated.ObservedAt = now; updated.Armed = armed; + next.Insert(life.AccountId, updated); + } + m_Samples = next; + } + void Stop() { m_Stopped = true; m_Samples.Clear(); m_Gate = null; m_Registered = false; } + #ifdef WORKBENCH + bool ProbeArmed(IEntity actor) + { + ERR_PlayerLife life = m_Mode.Players().CurrentActor(actor); + if (!life) return false; + ERR_PrisonEscapeSample sample = m_Samples.Get(life.AccountId); + return sample && sample.Actor == actor && sample.Armed; + } + #endif +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c new file mode 100644 index 0000000..19fa6f0 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c @@ -0,0 +1,137 @@ +enum ERR_RadioDefenceState +{ + IDLE, + DEFENDING, + COMPLETED, + STOPPED +} + +class ERR_RadioDefenceRules +{ + static float DefenceRadius() { return 60; } + static float TuneRadius() { return 5; } + static bool CanTune(int phase, bool registered, bool radio, int knowledge, bool player, bool conscious, float distance) + { + return phase == ERR_Phase.RADIO_SEARCH && registered && radio && knowledge >= 2 && player && conscious && distance >= 0 && distance <= TuneRadius(); + } + static bool Defender(bool player, bool conscious, float distance) + { + return player && conscious && distance >= 0 && distance < DefenceRadius(); + } + static float SinceAfterSample(float since, float previousSample, float now, int defenders) + { + if (now < 0 || defenders <= 0) return -1; + if (since < 0 || now < since || (previousSample >= 0 && now < previousSample)) return now; + return since; + } +} + +// Server-owned radio objective. Emits facts; GameMode alone advances the mission. +// Native tasks replicate presentation; no client can start/tick this service. +class ERR_RadioDefenceService +{ + protected ERR_GameMode m_Mode; + protected ERR_LocationComponent m_Location; + protected ERR_RadioDefenceState m_State; + protected float m_Since = -1; + protected float m_LastSample = -1; + protected int m_Defenders; + protected int m_LastDuration = -1; + protected ref ScriptInvoker m_OnStarted = new ScriptInvoker(); + protected ref ScriptInvoker m_OnProgressChanged = new ScriptInvoker(); + protected ref ScriptInvoker m_OnCompleted = new ScriptInvoker(); + + void ERR_RadioDefenceService(ERR_GameMode mode) { m_Mode = mode; } + static float DefenceRadius() { return ERR_RadioDefenceRules.DefenceRadius(); } + static float TuneRadius() { return ERR_RadioDefenceRules.TuneRadius(); } + ERR_RadioDefenceState State() { return m_State; } + ERR_LocationComponent Location() { return m_Location; } + float Since() { return m_Since; } + int DefenderCount() { return m_Defenders; } + bool Occupied() { return m_State == ERR_RadioDefenceState.DEFENDING && m_Since >= 0; } + ScriptInvoker OnStarted() { return m_OnStarted; } // (ERR_LocationComponent) + ScriptInvoker OnProgressChanged() { return m_OnProgressChanged; } // (ERR_RadioDefenceService) + ScriptInvoker OnCompleted() { return m_OnCompleted; } // (ERR_LocationComponent), once + + int DurationSeconds() + { + if (!m_Mode || !m_Mode.Settings()) return 0; + return m_Mode.Settings().Get("radioDefenceSeconds"); + } + int SecondsRemaining(float now) + { + int duration = DurationSeconds(); + if (m_State == ERR_RadioDefenceState.COMPLETED) return 0; + if (m_Since < 0 || now < m_Since) return duration; + return Math.Max(0, Math.Ceil(duration - (now - m_Since) / 1000.0)); + } + protected bool IsPlayer(IEntity actor) + { + return m_Mode && m_Mode.Players() && m_Mode.Players().CurrentActor(actor) != null; + } + protected bool Friendly(IEntity actor) + { + return m_Mode && m_Mode.PlayerFaction() && SCR_FactionManager.SGetFaction(actor) == m_Mode.PlayerFaction(); + } + protected int ConnectedPlayers() { return GetGame().GetPlayerManager().GetPlayerCount(); } + protected void Players(out array players) { ERR_Actors.Players(players); } + bool CanBegin(IEntity actor, ERR_LocationComponent location) + { + if (!Replication.IsServer() || !m_Mode || !m_Mode.Active() || m_State != ERR_RadioDefenceState.IDLE || !actor || !location) return false; + return ERR_RadioDefenceRules.CanTune(m_Mode.Phase(), m_Mode.HasLocation(location), location.Kind() == ERR_LocationKind.RADIO, location.Knowledge(), IsPlayer(actor) && Friendly(actor), ERR_Actors.CanFight(actor), vector.DistanceXZ(actor.GetOrigin(), location.Position())); + } + bool Begin(IEntity actor, ERR_LocationComponent location) + { + if (!CanBegin(actor, location) || !ERR_Settings.Valid("radioDefenceSeconds", DurationSeconds())) return false; + m_Location = location; + m_State = ERR_RadioDefenceState.DEFENDING; + m_Since = -1; + m_LastSample = -1; + m_Defenders = 0; + m_LastDuration = DurationSeconds(); + m_OnStarted.Invoke(location); + m_OnProgressChanged.Invoke(this); + return m_State == ERR_RadioDefenceState.DEFENDING; + } + bool CanDefend(IEntity actor) + { + if (!Replication.IsServer() || !m_Location || !actor) return false; + return ERR_RadioDefenceRules.Defender(IsPlayer(actor) && Friendly(actor), ERR_Actors.CanFight(actor), vector.DistanceXZ(actor.GetOrigin(), m_Location.Position())); + } + void Tick(float now) + { + if (!Replication.IsServer() || m_State != ERR_RadioDefenceState.DEFENDING || !m_Mode || !m_Mode.Active()) return; + float previousSince = m_Since; + int previousDefenders = m_Defenders; + m_Defenders = 0; + if (ConnectedPlayers() > 0 && m_Location && m_Mode.HasLocation(m_Location)) + { + array players = {}; + Players(players); + foreach (IEntity actor : players) if (CanDefend(actor)) m_Defenders++; + } + m_Since = ERR_RadioDefenceRules.SinceAfterSample(m_Since, m_LastSample, now, m_Defenders); + m_LastSample = now; + int duration = DurationSeconds(); + bool completed = ERR_MissionRules.DefenceComplete(now, m_Since, duration * 1000, m_Defenders > 0); + if (completed) m_State = ERR_RadioDefenceState.COMPLETED; + bool changed = completed || previousSince != m_Since || previousDefenders != m_Defenders || m_LastDuration != duration; + m_LastDuration = duration; + if (changed) m_OnProgressChanged.Invoke(this); + // Latch before callbacks: nested ticks or duplicate calls cannot complete twice. + if (completed) m_OnCompleted.Invoke(m_Location); + } + void PhaseChanged(ERR_Phase previous, ERR_Phase current) + { + if (current > ERR_Phase.RADIO_DEFENCE) Stop(); + } + void Stop() + { + if (!Replication.IsServer() || m_State == ERR_RadioDefenceState.STOPPED || m_State == ERR_RadioDefenceState.COMPLETED) return; + m_State = ERR_RadioDefenceState.STOPPED; + m_Since = -1; + m_Defenders = 0; + m_Location = null; + m_OnProgressChanged.Invoke(this); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c new file mode 100644 index 0000000..7ab0a90 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c @@ -0,0 +1,19 @@ +// Presentation only. The defence service remains the sole owner of progress. +enum ERR_RadioFeedback +{ + INACTIVE, + WAITING, + TRANSMITTING, + INTERRUPTED +} + +class ERR_RadioFeedbackRules +{ + static ERR_RadioFeedback Next(ERR_RadioFeedback previous, bool defending, bool occupied) + { + if (!defending) return ERR_RadioFeedback.INACTIVE; + if (occupied) return ERR_RadioFeedback.TRANSMITTING; + if (previous == ERR_RadioFeedback.TRANSMITTING || previous == ERR_RadioFeedback.INTERRUPTED) return ERR_RadioFeedback.INTERRUPTED; + return ERR_RadioFeedback.WAITING; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_RecoveryService.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_RecoveryService.c new file mode 100644 index 0000000..824bc4c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_RecoveryService.c @@ -0,0 +1,74 @@ +// Observation only: unconsciousness never consumes a life or ends a round here. +class ERR_RecoveryRules +{ + // 0 absent/dead, 1 reserved or awaiting handoff, 2 conscious, 3 incapacitated. + static int SurvivorKind(bool alive, bool connected, bool sameActor, bool canFight) + { + if (!alive) return 0; + if (!connected || !sameActor) return 1; + if (canFight) return 2; + return 3; + } + static bool NeedsRescuer(int conscious, int incapacitated) + { + return conscious == 0 && incapacitated > 0; + } +} + +class ERR_RecoveryService +{ + protected ERR_GameMode m_Mode; + protected bool m_Stopped; + protected int m_Conscious; + protected int m_Incapacitated; + protected int m_Reserved; + protected string m_Message; + protected ref ScriptInvoker m_OnChanged = new ScriptInvoker(); + void ERR_RecoveryService(ERR_GameMode mode) { m_Mode = mode; } + ScriptInvoker OnChanged() { return m_OnChanged; } + int Conscious() { return m_Conscious; } + int Incapacitated() { return m_Incapacitated; } + int Reserved() { return m_Reserved; } + string Message() { return m_Message; } + + void Tick() + { + if (!Replication.IsServer() || m_Stopped || !m_Mode || !m_Mode.Active()) return; + int conscious, incapacitated, reserved; + array lives = {}; + m_Mode.Players().Participants(lives); + foreach (ERR_PlayerLife life : lives) + { + IEntity controlled = null; + if (life.Connected) controlled = GetGame().GetPlayerManager().GetPlayerControlledEntity(life.ConnectionId); + int kind = ERR_RecoveryRules.SurvivorKind(ERR_Actors.Alive(life.Actor), life.Connected, controlled == life.Actor, ERR_Actors.CanFight(life.Actor)); + if (kind == 1) reserved++; + else if (kind == 2) conscious++; + else if (kind == 3) incapacitated++; + } + m_Conscious = conscious; + m_Incapacitated = incapacitated; + m_Reserved = reserved; + string message; + if (ERR_RecoveryRules.NeedsRescuer(conscious, incapacitated)) + { + message = "No conscious prisoner is currently available to help. Natural recovery and treatment can still continue."; + if (reserved > 0) message += " A surviving prisoner's reconnection may provide help."; + message += " An administrator can abandon this round with /esc mission abandon."; + } + Publish(message); + } + protected void Publish(string message) + { + if (m_Message == message) return; + m_Message = message; + m_OnChanged.Invoke(message); + } + void Stop() + { + if (!Replication.IsServer() || m_Stopped) return; + m_Stopped = true; + m_Conscious = 0; m_Incapacitated = 0; m_Reserved = 0; + Publish(""); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Resources.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Resources.c new file mode 100644 index 0000000..421530a --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Resources.c @@ -0,0 +1,10 @@ +// Shared mission resources are independent of the selected factions. +class ERR_Resources +{ + static ResourceName ObjectiveDocument() { return "{554159A6740C3F3E}Prefabs/ERR/ObjectiveDocument.et"; } + static ResourceName SearchWaypoint() { return "{B3E7B8DC2BAB8ACC}Prefabs/AI/Waypoints/AIWaypoint_SearchAndDestroy.et"; } + static ResourceName MoveWaypoint() { return "{750A8D1695BD6998}Prefabs/AI/Waypoints/AIWaypoint_Move.et"; } + static ResourceName CycleWaypoint() { return "{35BD6541CBB8AC08}Prefabs/AI/Waypoints/AIWaypoint_Cycle.et"; } + static ResourceName DefendWaypoint() { return "{93291E72AC23930F}Prefabs/AI/Waypoints/AIWaypoint_Defend.et"; } + static ResourceName IntelFolder() { return "{6D56FED1E55A8F84}Prefabs/Items/Misc/IntelligenceFolder_E_01/IntelligenceFolder_E_01.et"; } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c new file mode 100644 index 0000000..97afabd --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c @@ -0,0 +1,58 @@ +[ComponentEditorProps(category: "Rereintroduced", description: "Authored scenario definition and finite population lifecycle")] +class ERR_ScenarioComponentClass : ScriptComponentClass {} +class ERR_ScenarioComponent : ScriptComponent +{ + [Attribute("", UIWidgets.ResourceNamePicker, "Scenario site definitions", "conf")] + protected ResourceName m_Definition; + protected ref ERR_SiteService m_Sites; + protected bool m_Started; + protected bool m_Finished; + protected bool m_Failed; + + ERR_SiteService Sites() { return m_Sites; } + string FailureReason() + { + if (m_Sites && !m_Sites.FailureReason().IsEmpty()) return m_Sites.FailureReason(); + return "Scenario or additional force preparation failed."; + } + ERR_PrepareResult Prepare() + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!Replication.IsServer() || !mode || m_Failed) return ERR_PrepareResult.FAILED; + if (m_Finished) return ERR_PrepareResult.READY; + if (!m_Started) + { + m_Started = true; + ERR_ScenarioDefinition definition = ERR_ScenarioDefinition.Cast(SCR_BaseContainerTools.CreateInstanceFromPrefab(m_Definition)); + m_Sites = new ERR_SiteService(mode); + if (!m_Sites.Begin(definition, FieldMap())) { m_Failed = true; return ERR_PrepareResult.FAILED; } + } + ERR_PrepareResult result = m_Sites.Prepare(); + if (result != ERR_PrepareResult.READY) return result; + if (!PrepareAdditionalForces()) + { + m_Failed = true; + m_Sites.Rollback(); + return ERR_PrepareResult.FAILED; + } + mode.OnPhaseChanged().Insert(m_Sites.PhaseChanged); + mode.OnStop().Insert(m_Sites.Stop); + mode.OnTick().Insert(m_Sites.Tick); + GetGame().GetCallqueue().CallLater(ActivateSites, 2000, false); + m_Finished = true; + return ERR_PrepareResult.READY; + } + protected void ActivateSites() + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode && mode.Active() && m_Sites) m_Sites.Activate(); + } + protected bool PrepareAdditionalForces() { return true; } + protected ResourceName FieldMap() { return ERR_Supplies.Map(); } + protected override void OnDelete(IEntity owner) + { + if (GetGame()) GetGame().GetCallqueue().Remove(ActivateSites); + if (m_Sites) m_Sites.Stop(); + super.OnDelete(owner); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Settings.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Settings.c new file mode 100644 index 0000000..bacd463 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Settings.c @@ -0,0 +1,139 @@ +// One configuration owner; never mutate runtime state after a failed save. +class ERR_Settings +{ + static const string PATH = "$profile:rereintroduced.json"; + protected ref map m_Values = new map(); + protected bool m_ReadOnly; + protected string m_Path; + + static array Keys() + { + return {"reportIntervalSeconds", "supportSquadLimit", "responseRadiusMetres", "aiIntelChancePercent", "intelRevealChancePercent", "radioDefenceSeconds", "startTimeMinutes", "timeMultiplier", "startDateCode", "weatherProfile"}; + } + + static bool Valid(string key, int value) + { + if (key == "reportIntervalSeconds") return value >= 5 && value <= 60; + if (key == "supportSquadLimit") return value >= 0 && value <= 8; + if (key == "responseRadiusMetres") return value >= 500 && value <= 5000; + if (key == "aiIntelChancePercent" || key == "intelRevealChancePercent") return value >= 0 && value <= 100; + if (key == "radioDefenceSeconds") return value >= 30 && value <= 1800; + if (key == "startTimeMinutes") return value >= 0 && value <= 1439; + if (key == "timeMultiplier") return value >= 1 && value <= 24; + if (key == "weatherProfile") return value >= 0 && value <= 3; + if (key == "startDateCode") + { + if (value == 0) return true; + // Compact (year-1900)MMDD stays exactly representable by JSON floats. + if (value < 101 || value > 1501231) return false; + int year = 1900 + value / 10000; + int month = (value % 10000) / 100; + int day = value % 100; + if (month < 1 || month > 12 || day < 1) return false; + int days = 31; + if (month == 4 || month == 6 || month == 9 || month == 11) days = 30; + if (month == 2) + { + days = 28; + if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) days = 29; + } + return day <= days; + } + return false; + } + + static int AddedDefault(string key) + { + if (key == "startTimeMinutes") return 840; + if (key == "timeMultiplier") return 1; + if (key == "startDateCode" || key == "weatherProfile") return 0; + return -1; + } + + void ERR_Settings(string path = PATH) + { + m_Path = path; + m_Values.Set("reportIntervalSeconds", 10); + m_Values.Set("supportSquadLimit", 4); + m_Values.Set("responseRadiusMetres", 2000); + m_Values.Set("aiIntelChancePercent", 60); + m_Values.Set("intelRevealChancePercent", 15); + m_Values.Set("radioDefenceSeconds", 180); + m_Values.Set("startTimeMinutes", AddedDefault("startTimeMinutes")); + m_Values.Set("timeMultiplier", AddedDefault("timeMultiplier")); + m_Values.Set("startDateCode", AddedDefault("startDateCode")); + m_Values.Set("weatherProfile", AddedDefault("weatherProfile")); + if (!Replication.IsServer()) { m_ReadOnly = true; return; } + map loaded; + if (Read(m_Path, loaded) || Read(m_Path + ".bak", loaded)) m_Values = loaded; + else if (FileIO.FileExists(m_Path) || FileIO.FileExists(m_Path + ".bak")) + { + m_ReadOnly = true; + Print("Rereintroduced: invalid settings; defaults active, existing files preserved", LogLevel.ERROR); + } + } + + int Get(string key) { return m_Values.Get(key); } + + protected bool Read(string path, out map values) + { + JsonLoadContext json = new JsonLoadContext(); + if (!json.LoadFromFile(path)) return false; + values = new map(); + foreach (string key : Keys()) + { + // Only newly introduced keys may be absent in an older valid file. + if (!json.DoesKeyExist(key) && AddedDefault(key) >= 0) + { + values.Set(key, AddedDefault(key)); + continue; + } + float number; + if (!json.ReadValue(key, number)) return false; + int value = Math.Round(number); + if (number != value || !Valid(key, value)) return false; + values.Set(key, value); + } + return true; + } + + bool Set(string key, int value) + { + if (!Replication.IsServer() || m_ReadOnly || !Valid(key, value)) return false; + JsonSaveContext json = new JsonSaveContext(); + json.EnableTypeDiscriminator(false); + foreach (string option : Keys()) + { + int saved = Get(option); + if (option == key) saved = value; + json.WriteValue(option, saved); + } + map checked; + if (!json.SaveToFile(m_Path + ".tmp") || !Read(m_Path + ".tmp", checked)) return false; + foreach (string option : Keys()) + { + int expected = Get(option); + if (option == key) expected = value; + if (checked.Get(option) != expected) return false; + } + map previous; + if (Read(m_Path, previous) && !FileIO.CopyFile(m_Path, m_Path + ".bak")) return false; + if (!FileIO.CopyFile(m_Path + ".tmp", m_Path) || !Read(m_Path, checked)) + { + if (FileIO.FileExists(m_Path + ".bak")) FileIO.CopyFile(m_Path + ".bak", m_Path); + return false; + } + foreach (string option : Keys()) + { + int expected = Get(option); + if (option == key) expected = value; + if (checked.Get(option) != expected) + { + if (FileIO.FileExists(m_Path + ".bak")) FileIO.CopyFile(m_Path + ".bak", m_Path); + return false; + } + } + m_Values = checked; + return true; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c new file mode 100644 index 0000000..1298f99 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c @@ -0,0 +1,167 @@ +// Authored scenario data. These definitions contain no runtime entities. +[BaseContainerProps()] +class ERR_SiteStock +{ + [Attribute("", UIWidgets.ResourceNamePicker, "Physical inventory item", "et")] + ResourceName Prefab; + [Attribute("1", UIWidgets.EditBox, "Finite initial count")] + int Count; + [Attribute("", UIWidgets.EditBox, "Objective document's destination location ID")] + string TargetId; +} + +[BaseContainerProps()] +class ERR_SiteProp +{ + [Attribute("", UIWidgets.ResourceNamePicker, "Finite initial scenery", "et")] + ResourceName Prefab; + [Attribute("0 0 0", UIWidgets.Coords)] vector Offset; + [Attribute("0 0 0", UIWidgets.Coords, "Yaw, pitch, roll in degrees")] vector Angles; +} + +[BaseContainerProps()] +class ERR_SiteTransport +{ + [Attribute("", UIWidgets.ResourceNamePicker, "One finite wheeled transport; never replaced", "et")] + ResourceName Prefab; + [Attribute("0 0 0", UIWidgets.Coords, "Parking offset from the site; ground height is sampled")] + vector Offset; + [Attribute("0", UIWidgets.EditBox, "Parking heading in degrees")] + float Heading; + [Attribute("3", UIWidgets.EditBox, "Clear square half-width including vehicle and boarding space")] + float ClearanceRadius; + [Attribute("1", UIWidgets.EditBox, "Maximum terrain height range across parking footprint")] + float MaximumTerrainRange; +} + +[BaseContainerProps()] +class ERR_SitePatrolPoint +{ + [Attribute("0 0 0", UIWidgets.Coords, "Ground waypoint offset from the guard anchor")] + vector Offset; +} + +[BaseContainerProps()] +class ERR_SiteDefinition +{ + [Attribute()] + string Id; + [Attribute()] string Label; + [Attribute("0", UIWidgets.EditBox, "Conscious visual discovery radius: radio up to 8m, optional sites up to 60m") ] + float DiscoverRadius; + [Attribute()] ref array Props; + [Attribute()] ref ERR_SiteTransport Transport; + [Attribute("0", UIWidgets.ComboBox, "Location kind", enums: ParamEnumArray.FromEnum(ERR_LocationKind))] + ERR_LocationKind Kind; + [Attribute("", UIWidgets.ResourceNamePicker, "Successor site composition", "et")] + ResourceName Prefab; + [Attribute("0 0 0", UIWidgets.Coords)] + vector Position; + [Attribute("", UIWidgets.ResourceNamePicker, "Optional physical guard group", "et")] + ResourceName Guards; + [Attribute()] ref array Patrol; + [Attribute("0", UIWidgets.CheckBox, "Populate a finite squad from the faction catalog") ] + bool Guarded; + [Attribute("20 0 0", UIWidgets.Coords)] + vector GuardOffset; + [Attribute("", UIWidgets.ResourceNamePicker, "Finite inventory container", "et")] + ResourceName Container; + [Attribute("0 0 0", UIWidgets.Coords)] + vector ContainerOffset; + [Attribute()] + ref array Stock; + [Attribute("0", UIWidgets.CheckBox, "Show this supply location after prison escape")] + bool RevealOnEscape; +} + +[BaseContainerProps()] +class ERR_ScenarioDefinition +{ + [Attribute()] + ref array Sites; + [Attribute("2", UIWidgets.EditBox, "Independent accessible caches containing enough radio documents") ] + int MinimumRadioSources; + + ERR_SiteDefinition Find(string id) + { + foreach (ERR_SiteDefinition site : Sites) + if (site && site.Id == id) return site; + return null; + } + + bool Valid() + { + if (!Sites || Sites.IsEmpty() || Sites.Count() > 32) return false; + set ids = new set(); + int prisons, radios, extractions, groups, items, sources, maps, props, transports; + array cluePositions = {}; + if (MinimumRadioSources < 1 || MinimumRadioSources > 8) return false; + foreach (ERR_SiteDefinition site : Sites) + { + if (!site || site.Id.IsEmpty() || ids.Contains(site.Id) || site.Prefab.IsEmpty()) return false; + if (site.Label.IsEmpty() || site.Label.Length() > 64) return false; + if (!ERR_SiteDiscoveryRules.ValidRadius(site.Kind, site.DiscoverRadius)) return false; + bool optionalSite = site.Kind == ERR_LocationKind.DEPOT || site.Kind == ERR_LocationKind.OUTPOST; + if (!optionalSite && site.RevealOnEscape) return false; + if (site.Transport) + { + ERR_SiteTransport transport = site.Transport; + if (!optionalSite || transport.Prefab.IsEmpty() || transport.Offset.Length() > 60 || Math.AbsFloat(transport.Offset[1]) > 0.01) return false; + if (transport.Heading < -360 || transport.Heading > 360 || transport.ClearanceRadius < 2 || transport.ClearanceRadius > 8) return false; + if (transport.MaximumTerrainRange < 0 || transport.MaximumTerrainRange > 1.5) return false; + transports++; + } + if (site.Props) + { + if (site.Props.Count() > 12) return false; + props += site.Props.Count(); + foreach (ERR_SiteProp prop : site.Props) + if (!prop || prop.Prefab.IsEmpty() || prop.Offset.Length() > 40) return false; + } + if (site.Kind < ERR_LocationKind.PRISON || site.Kind > ERR_LocationKind.DEPOT) return false; + ids.Insert(site.Id); + if (site.Kind == ERR_LocationKind.PRISON) prisons++; + if (site.Kind == ERR_LocationKind.RADIO) radios++; + if (site.Kind == ERR_LocationKind.EXTRACTION) extractions++; + if (site.Guarded || !site.Guards.IsEmpty()) groups++; + if (site.Patrol && !site.Patrol.IsEmpty()) + { + // Native Move completes within 5m: separate every point by at least 12m. + if (!(site.Guarded || !site.Guards.IsEmpty()) || !optionalSite || site.Patrol.Count() < 2 || site.Patrol.Count() > 6) return false; + for (int pointIndex = 0; pointIndex < site.Patrol.Count(); pointIndex++) + { + ERR_SitePatrolPoint point = site.Patrol[pointIndex]; + if (!point || point.Offset.Length() > 60 || Math.AbsFloat(point.Offset[1]) > 0.01) return false; + for (int previous = 0; previous < pointIndex; previous++) + if (vector.DistanceXZ(point.Offset, site.Patrol[previous].Offset) < 12) return false; + } + } + int documents = 0; + if (!site.Stock) continue; + foreach (ERR_SiteStock stock : site.Stock) + { + if (!stock || stock.Prefab.IsEmpty() || stock.Count < 1 || stock.Count > 64 || site.Container.IsEmpty()) return false; + items += stock.Count; + if (stock.Prefab == ERR_Resources.ObjectiveDocument()) + { + if (stock.TargetId.IsEmpty()) return false; + if (site.RevealOnEscape || site.Kind == ERR_LocationKind.PRISON) documents += stock.Count; + } + if (site.Kind == ERR_LocationKind.PRISON && stock.Prefab == ERR_Supplies.Map()) maps += stock.Count; + if (!stock.TargetId.IsEmpty()) + { + ERR_SiteDefinition target = Find(stock.TargetId); + if (!target || target.Kind != ERR_LocationKind.RADIO || stock.Prefab != ERR_Resources.ObjectiveDocument()) return false; + } + } + if (documents >= 2) + { + foreach (vector position : cluePositions) + if (vector.DistanceXZ(position, site.Position) < 100) return false; + cluePositions.Insert(site.Position); + sources++; + } + } + return prisons == 1 && radios == 1 && extractions == 1 && groups <= 8 && items <= 256 && props <= 64 && transports <= 4 && sources >= MinimumRadioSources && maps >= 1; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c new file mode 100644 index 0000000..8926179 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c @@ -0,0 +1,17 @@ +// Authoring bounds separate close identification of the objective radio from +// broader discovery of optional supply sites. Neither reveals a remote site. +class ERR_SiteDiscoveryRules +{ + static float RadioRadiusLimit() { return 8; } + static bool ValidRadius(int kind, float radius) + { + if (radius < 0 || radius > 60) return false; + if (kind == ERR_LocationKind.RADIO) return radius <= RadioRadiusLimit(); + if (kind == ERR_LocationKind.DEPOT || kind == ERR_LocationKind.OUTPOST) return true; + return (kind == ERR_LocationKind.PRISON || kind == ERR_LocationKind.EXTRACTION) && radius == 0; + } + static bool InRange(float radius, float horizontalDistance, float verticalDistance) + { + return radius > 0 && horizontalDistance >= 0 && horizontalDistance <= radius && verticalDistance >= 0 && verticalDistance <= 8; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SiteService.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SiteService.c new file mode 100644 index 0000000..978353f --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SiteService.c @@ -0,0 +1,484 @@ +enum ERR_PrepareResult { FAILED = -1, PENDING, READY } + +class ERR_StockPlacement +{ + IEntity Item; + InventoryStorageManagerComponent Inventory; + bool Accepted; +} + +class ERR_SiteRuntime +{ + ref ERR_SiteDefinition Definition; + ERR_LocationComponent Location; + IEntity Container; + SCR_AIGroup Group; + int InitialGuardCount; + int LastInitialPhysical = -1; + int LastInitialConscious = -1; + Vehicle Transport; + AIWaypointCycle PatrolCycle; + ref array PatrolWaypoints = {}; +} + +// One owner for finite physical site contents. No population or stock refill tick. +class ERR_SiteService +{ + protected ERR_GameMode m_Mode; + protected ref ERR_ExtractionPlacement m_ExtractionPlacement; + ERR_ExtractionPlacement ExtractionPlacement() { return m_ExtractionPlacement; } + protected ref array m_Sites = {}; + protected ref array m_Entities = {}; + protected ref array m_Placements = {}; + protected ERR_PrepareResult m_State = ERR_PrepareResult.PENDING; + protected float m_Deadline; + protected float m_GuardDeadline; + protected bool m_Begun; + protected bool m_Stopped; + protected bool m_Activated; + protected bool m_Obstructed; + protected string m_FailureReason; + protected float m_NextDiscovery; + string FailureReason() { return m_FailureReason; } + + void ERR_SiteService(ERR_GameMode mode) { m_Mode = mode; } + int Count() { return m_Sites.Count(); } + bool Owns(IEntity entity) { return entity && m_Entities.Contains(entity); } + int TransportCount() + { + int count; + foreach (ERR_SiteRuntime site : m_Sites) + if (site.Transport) count++; + return count; + } + ERR_SiteRuntime Find(string id) + { + foreach (ERR_SiteRuntime site : m_Sites) + if (site.Definition.Id == id) return site; + return null; + } + protected bool CheckClearance(IEntity entity) + { + if (entity && entity.GetVObject()) m_Obstructed = true; + return !m_Obstructed; + } + protected bool CacheClearance(vector position) + { + m_Obstructed = false; + vector ground = ERR_Actors.Ground(position); + GetGame().GetWorld().QueryEntitiesByAABB(ground + "-1.3 0.1 -1.3", ground + "1.3 2 1.3", CheckClearance); + PrintFormat("Rereintroduced [sites]: cache clearance position=%1 clear=%2", ground, !m_Obstructed); + return !m_Obstructed; + } + protected bool CreateGuardOrders(ERR_SiteRuntime site, vector anchor) + { + if (!site.Definition.Patrol || site.Definition.Patrol.IsEmpty()) + { + AIWaypoint defend = AIWaypoint.Cast(Spawn(ERR_Resources.DefendWaypoint(), anchor)); + if (!defend) return false; + site.Group.AddWaypoint(defend); + return true; + } + foreach (ERR_SitePatrolPoint point : site.Definition.Patrol) + { + AIWaypoint move = AIWaypoint.Cast(Spawn(ERR_Resources.MoveWaypoint(), anchor + point.Offset)); + if (!move) return false; + site.PatrolWaypoints.Insert(move); + } + site.PatrolCycle = AIWaypointCycle.Cast(Spawn(ERR_Resources.CycleWaypoint(), anchor)); + if (!site.PatrolCycle) return false; + site.PatrolCycle.SetRerunCounter(-1); + site.PatrolCycle.SetWaypoints(site.PatrolWaypoints); + // The native cycle inserts its own children and itself. Adding children here + // would duplicate the route. HQ inserts Search at index 0 above this queue. + site.Group.AddWaypoint(site.PatrolCycle); + return true; + } + protected void StopPatrols() + { + foreach (ERR_SiteRuntime site : m_Sites) + { + array empty = {}; + if (site.PatrolCycle) site.PatrolCycle.SetWaypoints(empty); + if (site.Group) + { + array queued = {}; + site.Group.GetWaypoints(queued); + foreach (AIWaypoint waypoint : queued) + if (waypoint && (waypoint == site.PatrolCycle || site.PatrolWaypoints.Contains(waypoint))) site.Group.RemoveWaypoint(waypoint); + } + foreach (AIWaypoint move : site.PatrolWaypoints) ERR_Actors.DeleteSpawned(move); + ERR_Actors.DeleteSpawned(site.PatrolCycle); + site.PatrolWaypoints.Clear(); + site.PatrolCycle = null; + } + } + protected IEntity Spawn(ResourceName resource, vector position) + { + IEntity entity = ERR_Actors.Spawn(resource, ERR_Actors.Ground(position)); + if (entity) m_Entities.Insert(entity); + return entity; + } + // Read-only placement survey. It neither removes scenery nor searches for a + // replacement position; authors must correct a rejected parking location. + bool TransportClearance(vector position, float radius, float maximumRange) + { + if (radius < 2 || radius > 8 || maximumRange < 0 || maximumRange > 1.5) return false; + vector ground = ERR_Actors.Ground(position); + float lowest = ground[1]; + float highest = ground[1]; + for (int x = -1; x <= 1; x++) + { + for (int z = -1; z <= 1; z++) + { + vector sample = ERR_Actors.Ground(position + Vector(x * radius, 0, z * radius)); + lowest = Math.Min(lowest, sample[1]); + highest = Math.Max(highest, sample[1]); + } + } + m_Obstructed = false; + vector low = Vector(position[0] - radius, lowest + 0.1, position[2] - radius); + vector high = Vector(position[0] + radius, highest + 3, position[2] + radius); + GetGame().GetWorld().QueryEntitiesByAABB(low, high, CheckClearance); + bool clear = lowest >= 1 && highest - lowest <= maximumRange && !m_Obstructed; + PrintFormat("Rereintroduced [sites]: transport parking=%1 radius=%2 terrainRange=%3 obstructed=%4 clear=%5", ERR_Actors.Ground(position), radius, highest - lowest, m_Obstructed, clear); + return clear; + } + protected bool CreateTransport(ERR_SiteRuntime site, vector sitePosition) + { + ERR_SiteTransport spec = site.Definition.Transport; + if (!spec) return true; + vector position = ERR_Actors.Ground(sitePosition + spec.Offset); + if (!TransportClearance(position, spec.ClearanceRadius, spec.MaximumTerrainRange)) return Fail("obstructed or unsafe transport parking: " + site.Definition.Id); + IEntity entity = ERR_Actors.Spawn(spec.Prefab, position, Vector(spec.Heading, 0, 0)); + if (!entity) return Fail("transport prefab: " + site.Definition.Id); + m_Entities.Insert(entity); + site.Transport = Vehicle.Cast(entity); + if (!site.Transport) return Fail("transport must be a vehicle: " + site.Definition.Id); + CarControllerComponent controller = CarControllerComponent.Cast(site.Transport.FindComponent(CarControllerComponent)); + if (!controller) return Fail("transport must be wheeled: " + site.Definition.Id); + controller.SetPersistentHandBrake(true); + return true; + } + protected bool TransportReady(ERR_SiteRuntime site) + { + if (!site.Definition.Transport) return true; + Vehicle vehicle = site.Transport; + if (!ERR_Actors.Alive(vehicle)) return false; + vector low, high; + vehicle.GetWorldBounds(low, high); + vector center = ERR_Actors.Ground(site.Definition.Position + site.Definition.Transport.Offset); + float radius = site.Definition.Transport.ClearanceRadius - 0.5; + if (Math.AbsFloat(low[0] - center[0]) > radius || Math.AbsFloat(high[0] - center[0]) > radius || Math.AbsFloat(low[2] - center[2]) > radius || Math.AbsFloat(high[2] - center[2]) > radius) + { + if (GetGame().GetWorld().GetWorldTime() > m_Deadline) PrintFormat("Rereintroduced [sites]: transport footprint low=%1 high=%2 surveyedCenter=%3 origin=%4 allowedRadius=%5", low, high, center, vehicle.GetOrigin(), radius); + return false; + } + FuelManagerComponent fuel = FuelManagerComponent.Cast(vehicle.FindComponent(FuelManagerComponent)); + if (!fuel || !fuel.HasFuel()) + { + if (GetGame().GetWorld().GetWorldTime() > m_Deadline) PrintFormat("Rereintroduced [sites]: transport fuel manager=%1 hasFuel=%2", fuel != null, fuel && fuel.HasFuel()); + return false; + } + BaseCompartmentManagerComponent manager = BaseCompartmentManagerComponent.Cast(vehicle.FindComponent(BaseCompartmentManagerComponent)); + if (!manager) return false; + array seats = {}; + manager.GetCompartments(seats); + bool driver, passenger; + foreach (BaseCompartmentSlot slot : seats) + { + if (!slot) continue; + ECompartmentType type = SCR_CompartmentAccessComponent.GetCompartmentType(slot); + if (type == ECompartmentType.PILOT) driver = true; + if (type == ECompartmentType.CARGO) passenger = true; + } + if ((!driver || !passenger) && GetGame().GetWorld().GetWorldTime() > m_Deadline) PrintFormat("Rereintroduced [sites]: transport seats=%1 driver=%2 passenger=%3", seats.Count(), driver, passenger); + return driver && passenger; + } + protected bool Fail(string reason) + { + m_FailureReason = reason; + Print("Rereintroduced [sites]: preparation failed: " + reason, LogLevel.ERROR); + Rollback(); + m_State = ERR_PrepareResult.FAILED; + return false; + } + + bool Begin(ERR_ScenarioDefinition definition, ResourceName fieldMap) + { + if (!Replication.IsServer() || m_Begun || m_Stopped) return false; + m_Begun = true; + if (!definition || !definition.Valid()) return Fail("invalid scenario definition"); + m_Deadline = GetGame().GetWorld().GetWorldTime() + 15000; + m_GuardDeadline = GetGame().GetWorld().GetWorldTime() + ERR_InitialGuardRules.TimeoutMilliseconds(); + foreach (ERR_SiteDefinition spec : definition.Sites) + { + vector position = ERR_Actors.Ground(spec.Position); + if (position[1] < 1) return Fail("site below sea level: " + spec.Id); + IEntity root = Spawn(spec.Prefab, position); + if (!root) return Fail("site composition: " + spec.Id); + ERR_SiteRuntime site = new ERR_SiteRuntime(); + site.Definition = spec; + site.Location = ERR_LocationComponent.Cast(root.FindComponent(ERR_LocationComponent)); + if (!site.Location || !site.Location.Configure(spec.Id, spec.Kind, spec.Label)) return Fail("location identity: " + spec.Id); + m_Sites.Insert(site); + if (spec.Kind == ERR_LocationKind.PRISON) m_Mode.ConfigureStart(position); + if (spec.Kind == ERR_LocationKind.EXTRACTION) + { + Vehicle helicopter = Vehicle.Cast(Spawn(m_Mode.Factions().ExtractionPrefab, position + "12 0 0")); + if (!helicopter) return Fail("extraction vehicle"); + if (!m_Mode.SetExtractionVehicle(helicopter)) return Fail("extraction vehicle registration"); + m_ExtractionPlacement = new ERR_ExtractionPlacement(m_Mode, helicopter); + } + if (!spec.Container.IsEmpty()) + { + if (!CacheClearance(position + spec.ContainerOffset)) return Fail("obstructed cache position: " + spec.Id); + site.Container = Spawn(spec.Container, position + spec.ContainerOffset); + if (!site.Container) return Fail("container: " + spec.Id); + InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(site.Container.FindComponent(InventoryStorageManagerComponent)); + if (!inventory) return Fail("container inventory: " + spec.Id); + BaseInventoryStorageComponent storage = BaseInventoryStorageComponent.Cast(site.Container.FindComponent(BaseInventoryStorageComponent)); + if (!storage) return Fail("container storage: " + spec.Id); + inventory.AddStorage(storage); + if (spec.Stock) + { + foreach (ERR_SiteStock stock : spec.Stock) + { + ResourceName resource = stock.Prefab; + if (resource == ERR_Supplies.Map()) resource = fieldMap; + for (int i = 0; i < stock.Count; i++) + { + // Created exactly once; insertion retries always use this same entity. + IEntity item = Spawn(resource, site.Container.GetOrigin()); + if (!item) return Fail("stock resource: " + spec.Id); + if (!stock.TargetId.IsEmpty()) + { + ERR_DocumentComponent document = ERR_DocumentComponent.Cast(item.FindComponent(ERR_DocumentComponent)); + if (!document) return Fail("targeted document component"); + document.SetTarget(stock.TargetId); + } + ERR_StockPlacement placement = new ERR_StockPlacement(); + placement.Item = item; + placement.Inventory = inventory; + m_Placements.Insert(placement); + } + } + } + } + if (spec.Props) + { + foreach (ERR_SiteProp prop : spec.Props) + { + vector propPosition = ERR_Actors.Ground(position + prop.Offset); + if (!CacheClearance(propPosition)) return Fail("obstructed scenery position: " + spec.Id); + propPosition[1] = propPosition[1] + prop.Offset[1]; + IEntity scenery = ERR_Actors.Spawn(prop.Prefab, propPosition, prop.Angles); + if (!scenery) return Fail("scenery prefab: " + spec.Id); + m_Entities.Insert(scenery); + } + } + if (!CreateTransport(site, position)) return false; + if (spec.Guarded || !spec.Guards.IsEmpty()) + { + vector guardPosition = position + spec.GuardOffset; + ResourceName groupPrefab = spec.Guards; + if (groupPrefab.IsEmpty()) groupPrefab = m_Mode.Factions().GuardGroupPrefab; + site.Group = SCR_AIGroup.Cast(Spawn(groupPrefab, guardPosition)); + if (!site.Group) return Fail("guard group resource: " + spec.Id); + if (!site.Group.m_aUnitPrefabSlots || site.Group.m_aUnitPrefabSlots.IsEmpty() || !site.Group.GetSpawnImmediately()) return Fail("guard profile must request an initial physical squad: " + spec.Id); + site.InitialGuardCount = site.Group.m_aUnitPrefabSlots.Count(); + foreach (ResourceName member : site.Group.m_aUnitPrefabSlots) + if (member.IsEmpty()) return Fail("guard profile has an empty member resource: " + spec.Id); + if (!CreateGuardOrders(site, guardPosition)) return Fail("guard initial orders: " + spec.Id); + } + PrintFormat("Rereintroduced [sites]: authored %1 at %2", spec.Id, position); + } + return true; + } + + protected ERR_PrepareResult InitialGuards(ERR_SiteRuntime site) + { + bool requested = site.Definition.Guarded || !site.Definition.Guards.IsEmpty(); + if (!requested) return ERR_PrepareResult.READY; + if (!site.Group || site.InitialGuardCount <= 0) + { + Fail("initial guard group disappeared or has no configured members: " + site.Definition.Id); + return m_State; + } + if (site.Group.GetFaction() != m_Mode.EnemyFaction()) + { + Fail("guard group faction disagrees with catalog: " + site.Definition.Id); + return m_State; + } + array agents = {}; + array physical = {}; + site.Group.GetAgents(agents); + int conscious; + foreach (AIAgent agent : agents) + { + if (!agent) continue; + IEntity actor = agent.GetControlledEntity(); + if (!actor || physical.Contains(actor)) continue; + physical.Insert(actor); + if (SCR_FactionManager.SGetFaction(actor) != m_Mode.EnemyFaction()) + { + Fail("initial guard actor faction disagrees with catalog: " + site.Definition.Id); + return m_State; + } + if (ERR_Actors.CanFight(actor)) conscious++; + } + bool complete = site.Group.IsExpandComplete(); + if (site.LastInitialPhysical != physical.Count() || site.LastInitialConscious != conscious) + { + PrintFormat("Rereintroduced [guards]: initial site=%1 requested=%2 physical=%3 conscious=%4 nativeComplete=%5", site.Definition.Id, site.InitialGuardCount, physical.Count(), conscious, complete); + site.LastInitialPhysical = physical.Count(); + site.LastInitialConscious = conscious; + } + ERR_PrepareResult result = ERR_InitialGuardRules.State(site.InitialGuardCount, physical.Count(), conscious, complete, GetGame().GetWorld().GetWorldTime() > m_GuardDeadline); + if (result == ERR_PrepareResult.FAILED) + { + AIPathfindingComponent path = AIPathfindingComponent.Cast(site.Group.FindComponent(AIPathfindingComponent)); + NavmeshWorldComponent navmesh; + if (path) navmesh = path.GetNavmeshComponent(); + bool tileLoaded, tileRequested; + if (navmesh) + { + tileLoaded = navmesh.IsTileLoaded(site.Group.GetOrigin()); + tileRequested = navmesh.IsTileRequested(site.Group.GetOrigin()); + } + PrintFormat("Rereintroduced [guards]: timeout detail site=%1 navmesh=%2 tileLoaded=%3 tileRequested=%4 dormantAlive=%5 dormantDead=%6", site.Definition.Id, navmesh != null, tileLoaded, tileRequested, site.Group.GetDormantAliveCount(), site.Group.GetDormantDeadCount()); + Fail(string.Format("initial guard population incomplete or invalid: site=%1 requested=%2 physical=%3 conscious=%4 nativeComplete=%5; limit=90s; no replacement requested", site.Definition.Id, site.InitialGuardCount, physical.Count(), conscious, complete)); + } + return result; + } + protected void CancelInitialGuardRequests() + { + // Stock DespawnMembers returns early for an empty group; explicitly remove + // its queued initial request before a failed/stopped preparation deletes it. + if (!GetGame()) return; + ChimeraAIWorld world = ChimeraAIWorld.Cast(GetGame().GetAIWorld()); + if (!world) return; + foreach (ERR_SiteRuntime site : m_Sites) + { + if (!site.Group || site.InitialGuardCount <= 0) continue; + // Retire this instance's initial spawn intent as well as its current queue + // entries. A native expansion pass may otherwise schedule the empty capacity + // again. Existing physical members remain until the owner rolls back. + site.Group.SetSpawnImmediately(false); + site.Group.m_aUnitPrefabSlots = new array(); + world.PurgeSpawnRequestsForGroup(site.Group); + } + } + + ERR_PrepareResult Prepare() + { + if (!Replication.IsServer() || !m_Begun || m_Stopped) return ERR_PrepareResult.FAILED; + if (m_State != ERR_PrepareResult.PENDING) return m_State; + if (!m_ExtractionPlacement) { Fail("extraction placement owner missing"); return m_State; } + ERR_PrepareResult aircraftPlacement = m_ExtractionPlacement.Poll(GetGame().GetWorld().GetWorldTime()); + if (aircraftPlacement == ERR_PrepareResult.FAILED) { Fail(m_ExtractionPlacement.FailureReason()); return m_State; } + int pending, accepted, pendingGuards; + foreach (ERR_SiteRuntime site : m_Sites) + { + if (!TransportReady(site)) + { + if (GetGame().GetWorld().GetWorldTime() > m_Deadline) Fail("transport needs fuel, driver/passenger seats and a fitting parking footprint: " + site.Definition.Id); + return m_State; + } + ERR_PrepareResult guards = InitialGuards(site); + if (guards == ERR_PrepareResult.FAILED) return m_State; + if (guards == ERR_PrepareResult.PENDING) pendingGuards++; + } + string firstRejected; + foreach (ERR_StockPlacement placement : m_Placements) + { + if (!placement.Item || !placement.Inventory) { Fail("stock disappeared during initialization"); return m_State; } + array items = {}; + placement.Inventory.GetItems(items); + if (items.Contains(placement.Item)) continue; + pending++; + if (firstRejected.IsEmpty() && placement.Item.GetPrefabData()) firstRejected = placement.Item.GetPrefabData().GetPrefabName(); + if (placement.Accepted) accepted++; + if (!placement.Accepted) placement.Accepted = placement.Inventory.TryInsertItem(placement.Item); + } + if (pending) + { + if (GetGame().GetWorld().GetWorldTime() > m_Deadline) Fail(string.Format("physical stock insertion timed out: pending=%1 accepted=%2 sample=%3", pending, accepted, firstRejected)); + return m_State; + } + if (pendingGuards > 0 || aircraftPlacement == ERR_PrepareResult.PENDING) return m_State; + foreach (IEntity entity : m_Entities) m_Mode.Own(entity); + m_State = ERR_PrepareResult.READY; + PrintFormat("Rereintroduced [sites]: %1 sites and %2 physical stock items ready", m_Sites.Count(), m_Placements.Count()); + m_Placements.Clear(); + return m_State; + } + + void Activate() + { + if (m_State != ERR_PrepareResult.READY || m_Stopped || m_Activated) return; + m_Activated = true; + foreach (ERR_SiteRuntime site : m_Sites) + { + if (site.Definition.Kind == ERR_LocationKind.PRISON && site.Location) site.Location.Discover(0, 100); + if (site.Group) m_Mode.RegisterGroup(site.Group); + } + } + void PhaseChanged(ERR_Phase previous, ERR_Phase current) + { + if (!Replication.IsServer() || current != ERR_Phase.RADIO_SEARCH) return; + foreach (ERR_SiteRuntime site : m_Sites) + if (site.Definition.RevealOnEscape && site.Location) site.Location.Discover(0, 100); + } + bool CanObserve(IEntity player, ERR_SiteRuntime site) + { + if (!Replication.IsServer() || m_Stopped || !m_Mode.Active() || m_Mode.Phase() < ERR_Phase.RADIO_SEARCH) return false; + if (!site || !site.Definition || !m_Sites.Contains(site) || !site.Location || !m_Mode.HasLocation(site.Location) || !ERR_Actors.CanFight(player)) return false; + if (!ERR_Actors.Player(player) || !m_Mode.Players() || !m_Mode.PlayerFaction() || SCR_FactionManager.SGetFaction(player) != m_Mode.PlayerFaction()) return false; + if (!m_Mode.Players().CurrentActor(player)) return false; + vector position = site.Location.Position(); + vector observer = player.GetOrigin(); + if (!ERR_SiteDiscoveryRules.InRange(site.Definition.DiscoverRadius, vector.DistanceXZ(observer, position), Math.AbsFloat(observer[1] - position[1]))) return false; + TraceParam trace = new TraceParam(); + trace.Start = player.GetOrigin() + "0 1.5 0"; + trace.End = position + "0 1.3 0"; + trace.Flags = TraceFlags.WORLD | TraceFlags.ENTS; + trace.LayerMask = TRACE_LAYER_CAMERA; + trace.Exclude = player; + return GetGame().GetWorld().TraceMove(trace, null) >= 1; + } + void Tick(float now) + { + if (!Replication.IsServer() || m_Stopped || now < m_NextDiscovery) return; + m_NextDiscovery = now + 5000; + array players = {}; + ERR_Actors.Players(players, true); + foreach (ERR_SiteRuntime site : m_Sites) + { + if (!site.Location || site.Location.Knowledge() >= 2) continue; + foreach (IEntity player : players) + { + if (!CanObserve(player, site)) continue; + site.Location.Discover(0, 100); + break; + } + } + } + void Rollback() + { + Stop(); + // Children/items are listed after parents; delete them first. + for (int i = m_Entities.Count() - 1; i >= 0; i--) ERR_Actors.DeleteSpawned(m_Entities[i]); + m_Entities.Clear(); + m_Placements.Clear(); + m_Sites.Clear(); + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_ExtractionPlacement) m_ExtractionPlacement.Stop(); + if (m_State == ERR_PrepareResult.PENDING) CancelInitialGuardRequests(); + StopPatrols(); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c new file mode 100644 index 0000000..9bad5e3 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c @@ -0,0 +1,84 @@ +class ERR_SpawnTicket +{ + int ConnectionId; + UUID AccountId; + ERR_GameMode Mode; + SCR_PlayerController Controller; + SCR_SpawnRequestComponent Request; + ref SCR_SpawnData Data; + IEntity Actor; +} + +class ERR_SpawnFinalizationRules +{ + static bool PositionClose(vector actual, vector requested) + { + return vector.DistanceXZ(actual, requested) <= 0.6 && Math.AbsFloat(actual[1] - requested[1]) <= 1; + } + static bool Allows(int phase, bool connected, bool usedLife, UUID expected, UUID current, bool sameController, bool sameRequest, bool noControlledEntity) + { + return connected && ERR_PlayerLifeRules.CanEnter(usedLife, phase) && !expected.IsNull() && expected == current && sameController && sameRequest && noControlledEntity; + } +} + +modded class SCR_SpawnRequestComponent +{ + // Only a successor-owned admission ticket calls this. Disconnect or a mission + // phase change must not leave an old preload callback assigning an actor later. + void ERR_CancelAdmission(SCR_SpawnData data, bool notifyOwner) + { + if (!GetGame()) return; + GetGame().GetCallqueue().Remove(AwaitFinalization_S); + if (!Replication.IsServer()) return; + if (notifyOwner && GetPlayerController() && GetRespawnComponent()) SendResponse_S(SCR_ESpawnResult.SPAWN_NOT_ALLOWED, data); + } +} + +modded class SCR_FreeSpawnHandlerComponent +{ + protected ERR_SpawnLogic ERR_AdmissionLogic() + { + SCR_RespawnSystemComponent system = GetRespawnSystemComponent(); + if (!system) return null; + return ERR_SpawnLogic.Cast(system.GetSpawnLogic()); + } + protected void ERR_RejectOwnedActor(SCR_SpawnRequestComponent request, IEntity entity, SCR_SpawnData data) + { + // A repeated/malformed callback must never delete a currently possessed actor. + if (entity && !ERR_Actors.Player(entity)) HandleSpawnEntityFailure_S(request, entity, data, SCR_ESpawnResult.SPAWN_NOT_ALLOWED); + } + override SCR_ESpawnResult HandleRequest_S(SCR_SpawnRequestComponent requestComponent, SCR_SpawnData data, out IEntity spawnedEntity) + { + ERR_SpawnLogic logic = ERR_AdmissionLogic(); + if (!ERR_GameMode.Get() && !logic) return super.HandleRequest_S(requestComponent, data, spawnedEntity); + ERR_SpawnTicket ticket; + if (logic) ticket = logic.CreateSpawnTicket(requestComponent, data); + if (!ticket) return SCR_ESpawnResult.SPAWN_NOT_ALLOWED; + SCR_ESpawnResult result = super.HandleRequest_S(requestComponent, data, spawnedEntity); + if (result != SCR_ESpawnResult.OK) return result; + ticket.Actor = spawnedEntity; + if (!logic.TrackSpawnTicket(ticket)) + { + ERR_RejectOwnedActor(requestComponent, spawnedEntity, data); + return SCR_ESpawnResult.SPAWN_NOT_ALLOWED; + } + return result; + } + override SCR_ESpawnResult FinalizeRequest_S(SCR_SpawnRequestComponent requestComponent, SCR_SpawnData data, IEntity entity) + { + ERR_SpawnLogic logic = ERR_AdmissionLogic(); + if (!ERR_GameMode.Get() && !logic) return super.FinalizeRequest_S(requestComponent, data, entity); + ERR_SpawnTicket ticket; + if (logic) ticket = logic.TakeSpawnTicket(requestComponent, data, entity); + // No ticket means no ownership proof: reject without deleting arbitrary input. + if (!ticket) return SCR_ESpawnResult.SPAWN_NOT_ALLOWED; + if (!logic.MayFinalizeSpawn(ticket)) + { + ERR_RejectOwnedActor(requestComponent, entity, data); + return SCR_ESpawnResult.SPAWN_NOT_ALLOWED; + } + SCR_ESpawnResult result = super.FinalizeRequest_S(requestComponent, data, entity); + if (result != SCR_ESpawnResult.OK) ERR_RejectOwnedActor(requestComponent, entity, data); + return result; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c new file mode 100644 index 0000000..6712d86 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c @@ -0,0 +1,379 @@ +[BaseContainerProps(category: "Respawn")] +class ERR_SpawnLogic : SCR_SpawnLogic +{ + protected ref map m_Attempts = new map(); + protected ref map m_Identities = new map(); + protected ref map m_Retries = new map(); + protected ref map m_AuthorizedPositions = new map(); + protected ref set m_Pending = new set(); + protected ref ERR_SpawnPlacement m_Placement = new ERR_SpawnPlacement(); + protected ref array m_SpawnTickets = {}; + protected ERR_GameMode m_LifecycleMode; + protected bool m_AdmissionsStopped; + protected ref ERR_LocalAdmission m_LocalAdmission; + protected bool m_LocalAdmissionFailed; + + protected void BindLifecycle(ERR_GameMode mode) + { + if (!mode || m_LifecycleMode == mode) return; + if (m_LifecycleMode) + { + m_LifecycleMode.OnPhaseChanged().Remove(AdmissionPhaseChanged); + m_LifecycleMode.OnStop().Remove(StopAdmissions); + m_LifecycleMode.OnTick().Remove(CheckLocalAdmissionTick); + } + if (m_LocalAdmission && m_LocalAdmission.OfflineMode()) { StopAdmissions(); m_Identities.Clear(); } + if (m_LocalAdmission) m_LocalAdmission.Stop(); + m_LocalAdmission = new ERR_LocalAdmission(mode); + m_LocalAdmissionFailed = false; + m_AdmissionsStopped = false; + m_LifecycleMode = mode; + mode.OnPhaseChanged().Insert(AdmissionPhaseChanged); + mode.OnStop().Insert(StopAdmissions); + mode.OnTick().Insert(CheckLocalAdmissionTick); + } + + override void OnPlayerAuditSuccess_S(int playerId) + { + super.OnPlayerAuditSuccess_S(playerId); + UUID identity = SCR_PlayerIdentityUtils.GetPlayerIdentityId(playerId); + #ifdef WORKBENCH + if (identity.IsNull() && RplSession.Mode() != RplMode.Dedicated) + { + string name = GetGame().GetPlayerManager().GetPlayerName(playerId); + string suffix = Math.AbsInt(name.Hash()).ToString(12, true); + identity = "00e77100-0000-0000-0000-" + suffix; + } + #endif + ERR_GameMode mode = ERR_GameMode.Get(); + BindLifecycle(mode); + SCR_PlayerController resultController = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)); + if (resultController && (!m_LocalAdmission || !m_LocalAdmission.OfflineMode())) resultController.ERR_ResetEscapeResult(); + #ifndef WORKBENCH + string diagnosticProject; + if (System.GetCLIParam("errOrdinaryScenario", diagnosticProject) && (diagnosticProject == "core" || diagnosticProject == "chat")) + { + PrintFormat("ERR ORDINARY ADMISSION: server=%1 sessionMode=%2 modePresent=%3 controllerPresent=%4 identityPresent=%5 nameLength=%6", Replication.IsServer(), RplSession.Mode(), mode != null, resultController != null, !identity.IsNull(), GetGame().GetPlayerManager().GetPlayerName(playerId).Length()); + // Read cached native identity metadata only. Never print identity/name bytes, + // override cached backend identity or change its native utility. + string rawIdentity; + int rawLength = -1; + BackendApi backend = GetGame().GetBackendApi(); + if (backend) + { + rawIdentity = backend.GetPlayerIdentityId(playerId); + rawLength = rawIdentity.Length(); + } + UUID rawUUID = rawIdentity; + PrintFormat("ERR ORDINARY IDENTITY: rawLength=%1 rawEmpty=%2 rawNull=%3 rawFormatValid=%4 rawNullSentinel=%5 helperLength=%6 helperFormatValid=%7 dedicated=%8", rawLength, rawIdentity.IsEmpty(), rawUUID.IsNull(), UUID.IsUUID(rawIdentity), rawIdentity == UUID.NULL_UUID, identity.Length(), UUID.IsUUID(identity), RplSession.Mode() == RplMode.Dedicated); + } + #endif + if (m_LocalAdmission) identity = m_LocalAdmission.Resolve(mode, playerId, resultController, identity); + if (!CheckLocalAdmissionContext()) return; + // Repeated real callbacks retain the existing attempt/body/life and result. + if (m_LocalAdmission && m_LocalAdmission.Selected() && m_Identities.Contains(playerId)) + { + if (m_Identities.Get(playerId) != identity) { m_LocalAdmission.Disconnected(playerId); CheckLocalAdmissionContext(); return; } + if (resultController) resultController.ERR_PublishEscapeResult(mode.Players(), mode.Extraction()); + return; + } + if (!mode || !mode.Players().Bind(playerId, identity)) + { + Print("Rereintroduced: player identity could not be bound; spawn withheld", LogLevel.ERROR); + return; + } + if (resultController) + { + if (m_LocalAdmission && m_LocalAdmission.OfflineMode()) resultController.ERR_ResetEscapeResult(); + resultController.ERR_PublishEscapeResult(mode.Players(), mode.Extraction()); + } + m_Identities.Set(playerId, identity); + if ((!m_LocalAdmission || !m_LocalAdmission.LocalKey()) && ResolveReconnection(playerId)) + { + mode.PlayerSpawned(playerId, GetGame().GetPlayerManager().GetPlayerControlledEntity(playerId)); + SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)).ERR_SetObserver(ERR_ObserverReason.NONE); + return; + } + m_Attempts.Set(playerId, 0); + DoSpawn_S(playerId); + } + + protected override void DoSpawn_S(int playerId) + { + ERR_GameMode mode = ERR_GameMode.Get(); + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)); + if (!controller || !mode || m_AdmissionsStopped || !m_Identities.Contains(playerId) || !m_Attempts.Contains(playerId) || m_Pending.Contains(playerId)) return; + if (!CheckLocalAdmissionContext()) return; + if (controller.GetControlledEntity()) return; + if (ERR_MissionRules.Terminal(mode.Phase())) return; + if (!mode.PreparationError().IsEmpty()) { Observe(playerId, ERR_ObserverReason.SPAWN_UNAVAILABLE); return; } + // Preparing sites is not a failed spawn attempt. Every audited arrival waits + // for the same server preparation result before consuming its retry budget. + if (!mode.Active()) { RetryLater(playerId); return; } + int attempts = m_Attempts.Get(playerId); + if (attempts >= 30) { Observe(playerId, ERR_ObserverReason.SPAWN_UNAVAILABLE); return; } + if (!mode.Players().CanEnter(playerId, mode.Phase())) + { + ERR_ObserverReason reason = ERR_ObserverReason.SPENT_LIFE; + ERR_PlayerLife life = mode.Players().Get(playerId); + if (life && !life.UsedLife) reason = ERR_ObserverReason.LATE_EXTRACTION; + Observe(playerId, reason); + return; + } + // Every active, eligible admission consumes one attempt, even when native + // prerequisites or all safe positions are unavailable. Preparing and an + // already-pending request return above without spending this budget. + m_Attempts.Set(playerId, attempts + 1); + SCR_PlayerFactionAffiliationComponent affiliation = GetPlayerFactionComponent_S(playerId); + SCR_RespawnComponent respawn = GetPlayerRespawnComponent_S(playerId); + Faction faction = mode.PlayerFaction(); + if (!affiliation || !respawn || !faction) { RetryLater(playerId); return; } + affiliation.RequestFaction(faction); + vector position; + if (!SpawnPosition(mode, position)) { RetryLater(playerId); return; } + SCR_FreeSpawnData request = new SCR_FreeSpawnData(mode.Factions().PrisonerPrefab, position); + if (!respawn.CanSpawn(request)) { RetryLater(playerId); return; } + m_AuthorizedPositions.Set(playerId, position); + m_Pending.Insert(playerId); + if (!respawn.RequestSpawn(request)) OnPlayerSpawnFailed_S(playerId); + } + + protected bool SpawnPosition(ERR_GameMode mode, out vector position) + { + if (mode.Phase() == ERR_Phase.PRISON) return m_Placement.Prison(mode.PrisonPosition(), m_AuthorizedPositions, position); + array survivors = {}; + ERR_Actors.Players(survivors, true); + foreach (IEntity survivor : survivors) + { + // A controlled replacement or unfinished preload is not a round survivor. + if (!mode.Players() || !mode.Players().CurrentActor(survivor) || !mode.PlayerFaction() || SCR_FactionManager.SGetFaction(survivor) != mode.PlayerFaction()) continue; + if (m_Placement.Near(survivor, m_AuthorizedPositions, position)) return true; + } + return m_Placement.Prison(mode.PrisonPosition(), m_AuthorizedPositions, position); + } + + ERR_SpawnTicket CreateSpawnTicket(SCR_SpawnRequestComponent request, SCR_SpawnData data) + { + if (!Replication.IsServer() || !request || !data) return null; + int id = request.GetPlayerId(); + if (!Authorizes(id, data)) return null; + ERR_SpawnTicket ticket = new ERR_SpawnTicket(); + ticket.ConnectionId = id; + ticket.AccountId = m_Identities.Get(id); + ticket.Mode = ERR_GameMode.Get(); + ticket.Controller = SCR_PlayerController.Cast(request.GetPlayerController()); + ticket.Request = request; + ticket.Data = data; + return ticket; + } + bool TrackSpawnTicket(ERR_SpawnTicket ticket) + { + if (!Replication.IsServer() || !ticket || !ticket.Actor || ticket.Mode != ERR_GameMode.Get() || !Authorizes(ticket.ConnectionId, ticket.Data)) return false; + foreach (ERR_SpawnTicket existing : m_SpawnTickets) + if (existing.Request == ticket.Request || existing.Actor == ticket.Actor) return false; + m_SpawnTickets.Insert(ticket); + return true; + } + ERR_SpawnTicket TakeSpawnTicket(SCR_SpawnRequestComponent request, SCR_SpawnData data, IEntity entity) + { + if (!Replication.IsServer() || !request || !data || !entity) return null; + for (int i = 0; i < m_SpawnTickets.Count(); i++) + { + ERR_SpawnTicket ticket = m_SpawnTickets[i]; + if (ticket.Request != request || ticket.Data != data || ticket.Actor != entity) continue; + m_SpawnTickets.Remove(i); + return ticket; + } + return null; + } + bool MayFinalizeSpawn(ERR_SpawnTicket ticket) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!Replication.IsServer() || m_AdmissionsStopped || !mode || !ticket || ticket.Mode != mode || !ticket.Actor || !ticket.Request || !ticket.Controller) return false; + if (!CheckLocalAdmissionContext()) return false; + ERR_PlayerLife life = mode.Players().Get(ticket.ConnectionId); + if (!life || !m_Identities.Contains(ticket.ConnectionId)) return false; + PlayerController controller = GetGame().GetPlayerManager().GetPlayerController(ticket.ConnectionId); + bool sameController = controller == ticket.Controller && ticket.Request.GetPlayerController() == ticket.Controller; + bool sameRequest = ticket.Request.GetPlayerId() == ticket.ConnectionId && m_Identities.Get(ticket.ConnectionId) == ticket.AccountId; + if (!ERR_SpawnFinalizationRules.Allows(mode.Phase(), life.Connected, life.UsedLife, ticket.AccountId, life.AccountId, sameController, sameRequest, ticket.Controller.GetControlledEntity() == null)) return false; + if (!ERR_Actors.Alive(ticket.Actor) || !Authorizes(ticket.ConnectionId, ticket.Data)) return false; + // The preloaded body may have fallen or the reserved space become occupied. + if (!ERR_SpawnFinalizationRules.PositionClose(ticket.Actor.GetOrigin(), ticket.Data.GetPosition())) return false; + return m_Placement.Clear(ticket.Data.GetPosition(), m_AuthorizedPositions, ticket.ConnectionId, ticket.Actor); + } + protected void CancelOwnedTickets(int playerId, bool sendResponse) + { + for (int i = m_SpawnTickets.Count() - 1; i >= 0; i--) + { + ERR_SpawnTicket ticket = m_SpawnTickets[i]; + if (ticket.ConnectionId != playerId) continue; + m_SpawnTickets.Remove(i); + bool notify = sendResponse && ticket.Controller && ticket.Controller == GetGame().GetPlayerManager().GetPlayerController(playerId); + if (ticket.Request) ticket.Request.ERR_CancelAdmission(ticket.Data, notify); + ERR_Actors.DeleteSpawned(ticket.Actor); + } + } + protected void CancelAdmission(int playerId, ERR_ObserverReason reason) + { + m_Attempts.Remove(playerId); + m_Retries.Remove(playerId); + ClearPending(playerId); + m_AuthorizedPositions.Remove(playerId); + CancelOwnedTickets(playerId, true); + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)); + if (controller) controller.ERR_SetObserver(reason); + } + protected void AdmissionPhaseChanged(ERR_Phase previous, ERR_Phase current) + { + if (!Replication.IsServer() || current <= ERR_Phase.RADIO_DEFENCE) return; + array pending = {}; + foreach (int id, vector position : m_AuthorizedPositions) pending.Insert(id); + foreach (ERR_SpawnTicket ticket : m_SpawnTickets) + if (!pending.Contains(ticket.ConnectionId)) pending.Insert(ticket.ConnectionId); + foreach (int playerId : pending) + { + ERR_ObserverReason reason = ERR_ObserverReason.NONE; + if (current == ERR_Phase.EXTRACTION) reason = ERR_ObserverReason.LATE_EXTRACTION; + CancelAdmission(playerId, reason); + } + } + protected bool CheckLocalAdmissionContext() + { + if (!m_LocalAdmission || m_LocalAdmission.Validate()) return true; + if (m_LocalAdmissionFailed || m_AdmissionsStopped) return false; + m_LocalAdmissionFailed = true; + StopAdmissions(); + if (m_LifecycleMode) m_LifecycleMode.ERR_FailLocalAdmission(); + return false; + } + protected void CheckLocalAdmissionTick(float now) { CheckLocalAdmissionContext(); } + protected void StopAdmissions() + { + if (!Replication.IsServer()) return; + m_AdmissionsStopped = true; + if (m_LocalAdmission) m_LocalAdmission.Stop(); + array pending = {}; + foreach (int id, vector position : m_AuthorizedPositions) pending.Insert(id); + foreach (ERR_SpawnTicket ticket : m_SpawnTickets) + if (!pending.Contains(ticket.ConnectionId)) pending.Insert(ticket.ConnectionId); + foreach (int playerId : pending) CancelAdmission(playerId, ERR_ObserverReason.NONE); + m_Attempts.Clear(); + m_Retries.Clear(); + GetGame().GetCallqueue().Remove(RetrySpawn); + } + + protected void ClearPending(int playerId) + { + int index = m_Pending.Find(playerId); + if (index >= 0) m_Pending.Remove(index); + } + protected void RetryLater(int playerId) + { + UUID identity; + if (!m_Identities.Find(playerId, identity) || !m_Attempts.Contains(playerId)) return; + if (m_Retries.Contains(playerId) && m_Retries.Get(playerId) == identity) return; + m_Retries.Set(playerId, identity); + GetGame().GetCallqueue().CallLater(RetrySpawn, 1000, false, playerId, identity); + } + protected void RetrySpawn(int playerId, UUID identity) + { + if (!m_Identities.Contains(playerId) || m_Identities.Get(playerId) != identity || m_Retries.Get(playerId) != identity) return; + m_Retries.Remove(playerId); + DoSpawn_S(playerId); + } + protected override void OnPlayerSpawnFailed_S(int playerId) + { + CancelOwnedTickets(playerId, false); + ClearPending(playerId); + m_AuthorizedPositions.Remove(playerId); + RetryLater(playerId); + } + protected void Observe(int playerId, ERR_ObserverReason reason) + { + m_Attempts.Remove(playerId); + m_Retries.Remove(playerId); + ClearPending(playerId); + m_AuthorizedPositions.Remove(playerId); + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)); + if (controller) controller.ERR_SetObserver(reason); + } + protected override void OnPlayerEntityLost_S(int playerId) + { + super.OnPlayerEntityLost_S(playerId); + if (!m_Identities.Contains(playerId)) return; + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)); + GetGame().GetCallqueue().CallLater(ObserveAfterLoss, 100, false, playerId, m_Identities.Get(playerId), controller); + } + protected void ObserveAfterLoss(int playerId, UUID identity, SCR_PlayerController expectedController) + { + if (!expectedController || !m_Identities.Contains(playerId) || m_Identities.Get(playerId) != identity) return; + if (GetGame().GetPlayerManager().GetPlayerController(playerId) != expectedController || ERR_Actors.Alive(expectedController.GetControlledEntity())) return; + ERR_GameMode mode = ERR_GameMode.Get(); + ERR_PlayerLife life; + if (mode) life = mode.Players().Get(playerId); + if (life && life.UsedLife) Observe(playerId, ERR_ObserverReason.SPENT_LIFE); + } + override void OnPlayerSpawned_S(int playerId, IEntity entity) + { + super.OnPlayerSpawned_S(playerId, entity); + ClearPending(playerId); + m_AuthorizedPositions.Remove(playerId); + m_Attempts.Remove(playerId); + m_Retries.Remove(playerId); + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode) mode.PlayerSpawned(playerId, entity); + SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)); + if (controller) controller.ERR_SetObserver(ERR_ObserverReason.NONE); + PrintFormat("Rereintroduced [spawn]: player %1 at %2", playerId, entity.GetOrigin()); + } + override void OnPlayerDisconnected_S(int playerId, KickCauseCode cause, int timeout) + { + if (m_LocalAdmission && m_LocalAdmission.Disconnected(playerId)) CheckLocalAdmissionContext(); + CancelAdmission(playerId, ERR_ObserverReason.NONE); + m_Identities.Remove(playerId); + ERR_GameMode mode = ERR_GameMode.Get(); + if (mode) mode.Players().Disconnect(playerId); + if (GetPlayerRespawnComponent_S(playerId)) super.OnPlayerDisconnected_S(playerId, cause, timeout); + } + bool Authorizes(int playerId, SCR_SpawnData data) + { + ERR_GameMode mode = ERR_GameMode.Get(); + if (!Replication.IsServer() || m_AdmissionsStopped || !mode || !data || !m_Identities.Contains(playerId) || !mode.Players().CanEnter(playerId, mode.Phase())) return false; + if (!CheckLocalAdmissionContext()) return false; + ERR_PlayerLife life = mode.Players().Get(playerId); + if (!life || life.AccountId != m_Identities.Get(playerId)) return false; + if (!m_Pending.Contains(playerId) || !m_AuthorizedPositions.Contains(playerId) || data.GetPrefab() != mode.Factions().PrisonerPrefab) return false; + return vector.Distance(data.GetPosition(), m_AuthorizedPositions.Get(playerId)) < 0.1; + } + void ~ERR_SpawnLogic() + { + if (!GetGame()) return; + StopAdmissions(); + if (m_LifecycleMode) + { + m_LifecycleMode.OnPhaseChanged().Remove(AdmissionPhaseChanged); + m_LifecycleMode.OnStop().Remove(StopAdmissions); + m_LifecycleMode.OnTick().Remove(CheckLocalAdmissionTick); + } + GetGame().GetCallqueue().Remove(RetrySpawn); + GetGame().GetCallqueue().Remove(ObserveAfterLoss); + } +} + +modded class SCR_RespawnSystemComponent +{ + override bool CanRequestSpawn_S(SCR_SpawnRequestComponent requestComponent, SCR_SpawnHandlerComponent handlerComponent, SCR_SpawnData data, out SCR_ESpawnResult result = SCR_ESpawnResult.SPAWN_NOT_ALLOWED) + { + if (ERR_GameMode.Get()) + { + ERR_SpawnLogic logic = ERR_SpawnLogic.Cast(GetSpawnLogic()); + if (!requestComponent || !logic || !logic.Authorizes(requestComponent.GetPlayerId(), data)) + { + result = SCR_ESpawnResult.SPAWN_NOT_ALLOWED; + return false; + } + } + return super.CanRequestSpawn_S(requestComponent, handlerComponent, data, result); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c new file mode 100644 index 0000000..ec23f54 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c @@ -0,0 +1,84 @@ +// Allocation is based on occupied space, never on a transient player ID. +class ERR_SpawnPlacement +{ + protected IEntity m_Exclude; + protected bool m_Blocked; + protected bool Obstacle(IEntity entity) + { + if (!entity || (!entity.GetVObject() && !ChimeraCharacter.Cast(entity))) return true; + IEntity parent = entity; + for (int depth = 0; parent && depth < 32; depth++) + { + if (parent == m_Exclude) return true; + parent = parent.GetParent(); + } + m_Blocked = true; + return false; + } + bool Clear(vector position, map reservations, int ownReservation = -1, IEntity exclude = null) + { + if (!Replication.IsServer()) return false; + if (reservations) + foreach (int id, vector reserved : reservations) + if (id != ownReservation && vector.DistanceXZ(position, reserved) < 1.2 && Math.AbsFloat(position[1] - reserved[1]) < 2) return false; + vector ground = ERR_Actors.Ground(position); + if (ground[1] < 1 || Math.AbsFloat(position[1] - ground[1]) > 0.3) return false; + // Feet need supported, reasonably level terrain across the character width. + for (int x = -1; x <= 1; x++) + for (int z = -1; z <= 1; z++) + { + vector sample = ERR_Actors.Ground(position + Vector(x * 0.45, 0, z * 0.45)); + if (Math.AbsFloat(sample[1] - ground[1]) > 0.3) return false; + } + m_Blocked = false; + m_Exclude = exclude; + GetGame().GetWorld().QueryEntitiesByAABB(ground + "-0.45 0.15 -0.45", ground + "0.45 1.9 0.45", Obstacle); + m_Exclude = null; + return !m_Blocked; + } + bool Prison(vector center, map reservations, out vector position) + { + // Native character query bounds are about 4m wide. A 3m lattice leaves + // clearance between that conservative bound and the 0.9m query column. + // Search the four inner positions, then eight edge positions, then corners. + // All sixteen centers remain at least 1.5m inside the authored +/-6m walls. + for (int band = 0; band <= 2; band++) + for (int row = 0; row < 4; row++) + for (int column = 0; column < 4; column++) + { + int outerAxes = 0; + if (row == 0 || row == 3) outerAxes++; + if (column == 0 || column == 3) outerAxes++; + if (outerAxes != band) continue; + vector candidate = ERR_Actors.Ground(center + Vector(-4.5 + column * 3, 0, -4.5 + row * 3)); + if (!Clear(candidate, reservations)) continue; + position = candidate; + return true; + } + return false; + } + bool Near(IEntity survivor, map reservations, out vector position) + { + if (!ERR_Actors.CanFight(survivor) || CompartmentAccessComponent.GetVehicleIn(survivor)) return false; + vector anchor = survivor.GetOrigin(); + vector floor = ERR_Actors.Ground(anchor); + if (Math.AbsFloat(anchor[1] - floor[1]) > 1.5) return false; + for (int z = -2; z <= 2; z++) + for (int x = -2; x <= 2; x++) + { + if (x == 0 && z == 0) continue; + vector candidate = ERR_Actors.Ground(anchor + Vector(x * 1.5, 0, z * 1.5)); + if (Math.AbsFloat(candidate[1] - anchor[1]) > 1.5 || !Clear(candidate, reservations)) continue; + TraceParam trace = new TraceParam(); + trace.Start = anchor + "0 1 0"; + trace.End = candidate + "0 1 0"; + trace.Flags = TraceFlags.WORLD | TraceFlags.ENTS; + trace.LayerMask = TRACE_LAYER_CAMERA; + trace.Exclude = survivor; + if (GetGame().GetWorld().TraceMove(trace, null) < 1) continue; + position = candidate; + return true; + } + return false; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Supplies.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Supplies.c new file mode 100644 index 0000000..09a2fb0 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_Supplies.c @@ -0,0 +1,7 @@ +class ERR_Supplies +{ + static ResourceName Pistol() { return "{C0F7DD85A86B2900}Prefabs/Weapons/Handguns/PM/Handgun_PM.et"; } + static ResourceName Magazine() { return "{8B853CDD11BA916E}Prefabs/Weapons/Magazines/Magazine_9x18_PM_8rnd_Ball.et"; } + static ResourceName Map() { return "{13772C903CB5E4F7}Prefabs/Items/Equipment/Maps/Map_Paper_01/PaperMap_01_folded.et"; } + static ResourceName IntelTable() { return "{53506DCB398C7EBE}Prefabs/Props/Furniture/Table_01.et"; } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_TimeService.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_TimeService.c new file mode 100644 index 0000000..56b4f6d --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/Game/ERR/ERR_TimeService.c @@ -0,0 +1,81 @@ +// The authoritative engine manager owns progression and replication. This +// service sets it once per mission instance; saved changes apply next round. +class ERR_TimeService +{ + protected TimeAndWeatherManagerEntity m_Manager; + protected bool m_Started; + protected int m_StartMinutes; + protected int m_Multiplier; + + static float DayDuration(int multiplier) + { + if (!ERR_Settings.Valid("timeMultiplier", multiplier)) return -1; + return 86400.0 / multiplier; + } + static string Clock(int minutes) + { + if (!ERR_Settings.Valid("startTimeMinutes", minutes)) return "unavailable"; + int hours = minutes / 60; + int remainder = minutes % 60; + string hourText = hours.ToString(); + string minuteText = remainder.ToString(); + if (hours < 10) hourText = "0" + hourText; + if (remainder < 10) minuteText = "0" + minuteText; + return hourText + ":" + minuteText; + } + static bool ParseClock(string text, out int minutes) + { + if (text.Length() != 5 || text.Substring(2, 1) != ":") return false; + int hours; + int remainder; + if (!ERR_CommandArguments.Integer(text.Substring(0, 2), hours) || !ERR_CommandArguments.Integer(text.Substring(3, 2), remainder)) return false; + if (hours > 23 || remainder > 59) return false; + minutes = hours * 60 + remainder; + return true; + } + bool Start(ERR_GameMode mode) + { + if (!Replication.IsServer() || !mode || !mode.Settings()) return false; + if (m_Started) return true; + ChimeraWorld world = ChimeraWorld.CastFrom(mode.GetWorld()); + if (!world) return false; + m_Manager = world.GetTimeAndWeatherManager(); + if (!m_Manager) return false; + int startMinutes = mode.Settings().Get("startTimeMinutes"); + int multiplier = mode.Settings().Get("timeMultiplier"); + if (!ERR_Settings.Valid("startTimeMinutes", startMinutes) || !ERR_Settings.Valid("timeMultiplier", multiplier)) return false; + float previousDuration = m_Manager.GetDayDuration(); + bool previousAdvancement = m_Manager.GetIsDayAutoAdvanced(); + if (!m_Manager.SetDayDuration(DayDuration(multiplier))) return false; + if (!m_Manager.SetIsDayAutoAdvanced(true)) + { + m_Manager.SetDayDuration(previousDuration); + return false; + } + if (!m_Manager.SetTimeOfTheDay(startMinutes / 60.0, true)) + { + m_Manager.SetDayDuration(previousDuration); + m_Manager.SetIsDayAutoAdvanced(previousAdvancement); + return false; + } + m_StartMinutes = startMinutes; + m_Multiplier = multiplier; + m_Started = true; + PrintFormat("Rereintroduced [time]: started at %1 with %2x progression", Clock(m_StartMinutes), m_Multiplier); + return true; + } + bool Started() { return m_Started; } + int StartMinutes() { return m_StartMinutes; } + int Multiplier() { return m_Multiplier; } + int CurrentMinutes() + { + if (!m_Started || !m_Manager) return -1; + int minutes = Math.Floor(m_Manager.GetTimeOfTheDay() * 60); + return minutes % 1440; + } + string Status() + { + if (!m_Started) return "Clock not started."; + return "Clock " + Clock(CurrentMinutes()) + ", " + m_Multiplier.ToString() + "x progression (round started " + Clock(m_StartMinutes) + ")."; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c new file mode 100644 index 0000000..0e2e91c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c @@ -0,0 +1,26 @@ +// Honor noSplash before Game-module widget classes exist, only for the +// explicit ordinary diagnostic. Visible/unflagged startup stays vanilla. +#ifndef WORKBENCH +modded class SplashScreen +{ + protected bool m_ERRDiagnosticSplashSkipped; + + override void Load() + { + string project; + if (!System.IsCLIParam("noSplash") || !System.GetCLIParam("errOrdinaryScenario", project) || (project != "core" && project != "chat")) + { + super.Load(); + return; + } + // BaseLoadingAnim.Show may request Load again while the deliberately absent + // root is null. Preserve the splash sequence counter once per instance. + if (!m_ERRDiagnosticSplashSkipped) + { + m_ERRDiagnosticSplashSkipped = true; + s_iSplashShown++; + Print("ERR ORDINARY: diagnostic noSplash honored before Game compilation"); + } + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c new file mode 100644 index 0000000..ec3ade0 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c @@ -0,0 +1,27 @@ +[WorkbenchPluginAttribute(name: "Validate Rereintroduced base", wbModules: {"WorldEditor"})] +class ERR_ValidateBaseWorldPlugin : WorldEditorPlugin +{ + override void RunCommandline() + { + string play; + WorldEditor editor = Workbench.GetModule(WorldEditor); + if (editor) + { + WorldEditorAPI api = editor.GetApi(); + if (api) + { + float low = 10000; + float high = -10000; + for (int x = -3; x <= 3; x += 3) + for (int z = -3; z <= 3; z += 3) + { + float height = api.GetTerrainSurfaceY(6150 + x, 7050 + z); + low = Math.Min(low, height); + high = Math.Max(high, height); + } + PrintFormat("ERR SITE SURVEY: supply=6150/7050 elevationRange=%1 min=%2 max=%3", high - low, low, high); + } + } + if (editor && System.GetCLIParam("errPlay", play) && play == "1") editor.SwitchToGameMode(); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Worlds/ERR_Everon.ent b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Worlds/ERR_Everon.ent new file mode 100644 index 0000000..8561fb7 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Worlds/ERR_Everon.ent @@ -0,0 +1,3 @@ +SubScene { + Parent "{853E92315D1D9EFE}worlds/Eden/Eden.ent" +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Worlds/ERR_Everon.ent.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Worlds/ERR_Everon.ent.meta new file mode 100644 index 0000000..417bfa5 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Worlds/ERR_Everon.ent.meta @@ -0,0 +1,9 @@ +MetaFileClass { + Name "{B6C516F86302C679}Worlds/ERR_Everon.ent" + Configurations { + WorldResourceClass PC { + } + WorldResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Worlds/ERR_Everon_Layers/default.layer b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Worlds/ERR_Everon_Layers/default.layer new file mode 100644 index 0000000..b664d8d --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/Worlds/ERR_Everon_Layers/default.layer @@ -0,0 +1,35 @@ +ERR_GameMode Rereintroduced : "{978E045E53EF36C8}Prefabs/ERR/GameMode.et" { +} +SCR_AIWorld AIWorld : "{E0A05C76552E7F58}Prefabs/AI/SCR_AIWorld.et" { + components { + NavmeshWorldComponent "{5584F30E67F617AD}" { + NavmeshSettings NavmeshWorld "{50FC63BEBE3973C5}" { + NavmeshFilesConfig BaseNavmeshFilesConfig "{60CA9BE5536BF701}" : "{8BBC73472092902E}Configs/Navmesh/Navmesh_GM_Eden_Soldier.conf" {} + } + } + NavmeshWorldComponent "{5584F30EEFEE1223}" { + NavmeshSettings ChimeraNavmeshWorld "{50FC63BEBE3973C5}" { + NavmeshFilesConfig BaseNavmeshFilesConfig "{60CA9BE5536BF701}" : "{0228A79846FD8A97}Configs/Navmesh/Navmesh_GM_Eden_Vehicle.conf" {} + } + } + NavmeshWorldComponent "{5C8C9B750D124A63}" { + NavmeshSettings NavmeshWorld "{5C8C9B750B60C6E2}" { + NavmeshFilesConfig BaseNavmeshFilesConfig "{5C90BD0EC793647D}" { + NavmeshFile "{5E19E60F26327356}worlds/MP/Navmeshes/LowResEden.nmn" + } + } + } + } +} +PerceptionManager Perception : "{028DAEAD63E056BE}Prefabs/World/Game/PerceptionManager.et" { +} +SCR_FactionManager Factions : "{5414041A15DC4B54}Prefabs/ERR/FactionManager.et" { +} +SCR_LoadoutManager Loadouts : "{97EF4C1A41F63DDB}Prefabs/MP/Managers/Loadouts/LoadoutManager_USxUSSR.et" { +} + +RadioManagerEntity RadioManager : "{B8E09FAB91C4ECCD}Prefabs/Systems/Radio/RadioManager.et" { +} + +ScriptedChatEntity Chat : "{F69BC912AC8236F9}Prefabs/MP/ScriptedChatEntity.et" { +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/core/addon.gproj b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/addon.gproj new file mode 100644 index 0000000..54287e7 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/core/addon.gproj @@ -0,0 +1,8 @@ +GameProject { + ID "ERR_Core" + GUID "2528466DE220D91C" + TITLE "Escapists Rereintroduced - Core" + Dependencies { + "58D0FB3206B6F859" + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/intel/Scripts/Game/ERR/ERR_IntelService.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/intel/Scripts/Game/ERR/ERR_IntelService.c new file mode 100644 index 0000000..0e59973 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/intel/Scripts/Game/ERR/ERR_IntelService.c @@ -0,0 +1,84 @@ +class ERR_IntelRequest +{ + IEntity Actor; + int Attempts; + bool Accepted; +} + +// Optional enemy inventory distribution. Core owns recovery and discovery. +class ERR_IntelService +{ + protected ERR_GameMode m_Mode; + protected ref array m_Requests = {}; + protected ref set m_Rolled = new set(); + + void ERR_IntelService(ERR_GameMode mode) { m_Mode = mode; } + void RegisterGroup(SCR_AIGroup group) + { + if (!Replication.IsServer() || !group) return; + array members = {}; + group.GetAgents(members); + foreach (AIAgent member : members) + { + if (!member) continue; + IEntity actor = member.GetControlledEntity(); + if (!ERR_Actors.Alive(actor) || ERR_Actors.Player(actor) || m_Rolled.Contains(actor)) continue; + m_Rolled.Insert(actor); + if (Math.RandomInt(0, 100) >= m_Mode.Settings().Get("aiIntelChancePercent")) continue; + if (m_Requests.Count() >= 256) continue; + ERR_IntelRequest request = new ERR_IntelRequest(); + request.Actor = actor; + m_Requests.Insert(request); + } + } + + + void Tick(float now) + { + if (!Replication.IsServer()) return; + int budget = 8; + for (int i = m_Requests.Count() - 1; i >= 0 && budget > 0; i--) + { + budget--; + ERR_IntelRequest request = m_Requests[i]; + if (!ERR_Actors.Alive(request.Actor) || ERR_Actors.Player(request.Actor)) { m_Requests.Remove(i); continue; } + SCR_InventoryStorageManagerComponent inventory = SCR_InventoryStorageManagerComponent.Cast(request.Actor.FindComponent(SCR_InventoryStorageManagerComponent)); + array folders = {}; + if (inventory) ERR_DiscoveryService.Folders(inventory, folders); + if (!folders.IsEmpty()) { m_Requests.Remove(i); continue; } + request.Attempts++; + if (request.Attempts > 30) + { + Print("Rereintroduced [intel]: bounded assignment failed", LogLevel.WARNING); + m_Requests.Remove(i); continue; + } + if (inventory && !request.Accepted) + request.Accepted = inventory.TrySpawnPrefabToStorage(ERR_Resources.IntelFolder(), purpose: EStoragePurpose.PURPOSE_ANY); + } + } + + +#ifdef WORKBENCH + // Observation only: a negative carrying decision still counts as its one roll. + bool ERR_ProbeWasRolled(IEntity actor) + { + return Replication.IsServer() && actor && m_Rolled.Contains(actor); + } +#endif + + void Stop() { m_Requests.Clear(); m_Rolled.Clear(); } +} + +modded class ERR_GameMode +{ + protected ref ERR_IntelService m_Intel; + protected override void EOnInit(IEntity owner) + { + super.EOnInit(owner); + if (SCR_Global.IsEditMode() || !Replication.IsServer()) return; + m_Intel = new ERR_IntelService(this); + OnGroup().Insert(m_Intel.RegisterGroup); + OnTick().Insert(m_Intel.Tick); + OnStop().Insert(m_Intel.Stop); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/intel/addon.gproj b/docs/evidence/package-2026-09-19-1317-all/source/addons/intel/addon.gproj new file mode 100644 index 0000000..5b29a17 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/intel/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Intel" + GUID "D31039C7C53E348A" + TITLE "Escapists Rereintroduced - Intel" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Materials/ERRM_MapRenderTarget.emat b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Materials/ERRM_MapRenderTarget.emat new file mode 100644 index 0000000..d70697c --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Materials/ERRM_MapRenderTarget.emat @@ -0,0 +1,7 @@ +MatPBRBasic { + Color 0.882 0.847 0.792 1 + AlphaTest 0.5 + AllowUserAlphaBias 1 + BCRMap "$rendertarget" + OpacityMap "{A64A8C63E0FBAE87}system/textures/defWhite.edds" "{A64A8C63E0FBAE87}system/textures/defWhite.edds" anim( 0 ) +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Materials/ERRM_MapRenderTarget.emat.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Materials/ERRM_MapRenderTarget.emat.meta new file mode 100644 index 0000000..e99a6d5 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Materials/ERRM_MapRenderTarget.emat.meta @@ -0,0 +1,17 @@ +MetaFileClass { + Name "{03D6DE777C8E411C}Materials/ERRM_MapRenderTarget.emat" + Configurations { + ResourceClass PC { + } + ResourceClass XBOX_ONE : PC { + } + ResourceClass XBOX_SERIES : PC { + } + ResourceClass PS4 : PC { + } + ResourceClass PS5 : PC { + } + ResourceClass HEADLESS : PC { + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et new file mode 100644 index 0000000..9122e76 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et @@ -0,0 +1,78 @@ +GameEntity : "{C95E11C60810F432}Prefabs/Items/Core/Item_Base.et" { + ID "6FB475409DE44320" + components { + InventoryItemComponent "{5222EB4D0C73006B}" { + Attributes SCR_ItemAttributeCollection "{5222EB4D0A2B466B}" { + ItemDisplayName UIInfo "{7236A6DB18BD574C}" { + Name "Shared Field Map" + Description "A field map whose visible surface can be read by nearby players." + } + ItemPhysAttributes ItemPhysicalAttributes PhysicalAttributes { + Weight 0.1 + SizeSetupStrategy Manual + ItemDimensions 5 5 5 + ItemVolume 200 + DimensionScaler 1 + RestingAdditiveRotationLS 0 0 0 + RestingAdditiveOffsetLS 0 0 0 + } + ItemAnimationAttributes ItemAnimationAttributes "{4AC999738D39BA9A}" { + AnimationAttachments { + AnimationAttachmentInfo "{1D66E5B861D2F00A}" { + AnimGraph "{83675D0B0AB1B2C3}Assets/Items/Equipment/workspaces/paper_map.agr" + AnimInstance "{56794534F6B8C3D7}Assets/Items/Equipment/workspaces/player_map.asi" + BindingName "Gadget" + } + } + AllowInspection 1 + } + CustomAttributes { + PreviewRenderAttributes "{D12878E6C065B83D}" { + CameraPreset Top + CameraOrbitAngles -25 35 -25 + CameraDistanceToItem 2 + CameraOffset -0.01 0 0 + ItemRenderRotation 0 0 180 + FOV 10.5 + AspectRatio 1 + LodModel 1 + } + CharacterModifierAttributes "{78A32EF06ED3CB42}" { + ADSSpeedLimit 1 + } + } + m_eQuickSlotSize SLOT_1x1 + m_SlotType SLOT_GADGETS_STORAGE + } + } + MeshObject "{E66421D681D64AB7}" { + Object "{E443663E5241622A}Assets/Items/Equipment/Maps/Map_Paper_01/Map_Paper_01_folded.xob" + Materials { + MaterialAssignClass "{667CE655A40B0E50}" { + SourceMaterial "01__Default" + AssignedMaterial "{03D6DE777C8E411C}Materials/ERRM_MapRenderTarget.emat" + } + } + InheritVisibility 1 + } + RigidBody "{B29D8B091D657415}" { + Enabled 1 + LinearDamping 0.5 + AngularDamping 0.5 + AngularSleepingThreashold 1 + ModelGeometry 1 + } + ERRM_SharedMapComponent "{B576912A7A69396F}" { + m_sLayoutName "{255E1265F702B4AE}UI/layouts/ERRMap/SharedMapRenderTarget.layout" + m_eAnimVariable MAP + } + SCR_SoundDataComponent "{B6F06259A1F25D94}" { + m_aAudioSourceConfiguration { + SCR_AudioSourceConfiguration "{1F4628334AB3CE95}" { + m_sSoundProject "{13F8D0DE67678118}Sounds/Items/_SharedData/PickUp/Items_PickUp_Map.acp" + } + } + } + } + coords 0 0 0 +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta new file mode 100644 index 0000000..204db41 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta @@ -0,0 +1,17 @@ +MetaFileClass { + Name "{A46500E4A30B653B}Prefabs/Items/Equipment/ERRM_SharedFieldMap.et" + Configurations { + EntityTemplateResourceClass PC { + } + EntityTemplateResourceClass XBOX_ONE : PC { + } + EntityTemplateResourceClass XBOX_SERIES : PC { + } + EntityTemplateResourceClass PS4 : PC { + } + EntityTemplateResourceClass PS5 : PC { + } + EntityTemplateResourceClass HEADLESS : PC { + } + } +} \ No newline at end of file diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c new file mode 100644 index 0000000..022e963 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c @@ -0,0 +1,7 @@ +modded class ERR_ScenarioComponent +{ + protected override ResourceName FieldMap() + { + return "{A46500E4A30B653B}Prefabs/Items/Equipment/ERRM_SharedFieldMap.et"; + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c new file mode 100644 index 0000000..c871994 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Scripts/Game/ERRMap/ERRM_NativeMapOwnershipProbe.c @@ -0,0 +1,328 @@ +#ifdef WORKBENCH +// Opt-in local UI evidence. These adapters execute production methods and always +// delegate their overrides; no native map/camera operation is intercepted. +modded class ERRM_SharedMapComponent +{ + protected ERRM_NativeMapOwnershipProbe m_ERRMOwnershipProbe; + protected int m_ERRMOwnershipSlot; + void ERRM_ObserveOwnership(ERRM_NativeMapOwnershipProbe probe, int slot) { m_ERRMOwnershipProbe = probe; m_ERRMOwnershipSlot = slot; } + Widget ERRM_OwnershipRoot() { return m_ESMRootWidget; } + bool ERRM_OwnershipReady() { return m_ESMRootWidget && m_ESMRenderTarget; } + bool ERRM_BeginOwnershipCapture(IEntity holder) + { + m_bESMInHand = true; + m_ESMCharacterOwner = holder; + TryCaptureMapSurface(); + // Deliberately delay only these fixture-owned callbacks until the replacement + // map has completed native initialization. The real method bodies run below. + GetGame().GetCallqueue().Remove(CenterMapOnHolder); + GetGame().GetCallqueue().Remove(FinishMapCapture); + return OwnsMapCapture(); + } + void ERRM_StaleOwnershipCenter() { CenterMapOnHolder(); } + void ERRM_QueueStaleOwnershipCallbacks() + { + GetGame().GetCallqueue().CallLater(CenterMapOnHolder, 100, false); + GetGame().GetCallqueue().CallLater(FinishMapCapture, 200, false); + } + void ERRM_StaleOwnershipCamera() { RestoreCharacterCamera(); } + void ERRM_StopOwnershipCapture() + { + StopMapCapture(); + // Include the real successor + vanilla ModeClear chain, even for a spare map. + ModeClear(EGadgetMode.IN_HAND); + } + protected override void OnDelete(IEntity owner) + { + ERRM_NativeMapOwnershipProbe probe = m_ERRMOwnershipProbe; + int slot = m_ERRMOwnershipSlot; + super.OnDelete(owner); + // Observe after the complete production/vanilla chain, without clearing any + // evidence references or overriding the native deletion operation. + if (probe) probe.ObserveDeletion(slot, !m_ESMRootWidget && !m_ESMRenderTarget && !m_ESMMapEntity && !m_ESMMapConfig && !m_ESMCharacterOwner && !m_bESMOwnsMapRenderer && !m_bESMInHand); + } + protected override void CenterMapOnHolder() + { + if (m_ERRMOwnershipProbe) m_ERRMOwnershipProbe.ObserveCenter(); + super.CenterMapOnHolder(); + } + protected override void FinishMapCapture() + { + if (m_ERRMOwnershipProbe) m_ERRMOwnershipProbe.ObserveFinish(); + super.FinishMapCapture(); + } + protected override void RestoreCharacterCamera() + { + if (m_ERRMOwnershipProbe) m_ERRMOwnershipProbe.ObserveRestore(OwnsMapCapture()); + super.RestoreCharacterCamera(); + } + protected override void CompleteMapModeSwitch() + { + if (m_ERRMOwnershipProbe) m_ERRMOwnershipProbe.ObserveCompletion(); + super.CompleteMapModeSwitch(); + } +} + +class ERRM_NativeMapOwnershipProbe +{ + protected static const ResourceName MAP_PREFAB = "{A46500E4A30B653B}Prefabs/Items/Equipment/ERRM_SharedFieldMap.et"; + protected static const ResourceName MAP_LAYOUT = "{255E1265F702B4AE}UI/layouts/ERRMap/SharedMapRenderTarget.layout"; + protected static const ResourceName MAP_CONFIG = "{A786DD4868598F15}Configs/Map/MapPlain.conf"; + protected SCR_MapEntity m_Map; + protected IEntity m_CaptureEntity; + protected IEntity m_SpareEntity; + protected ERRM_SharedMapComponent m_Capture; + protected ERRM_SharedMapComponent m_Spare; + protected IEntity m_Holder; + protected Widget m_ReplacementRoot; + protected ref MapConfiguration m_ReplacementConfig; + protected MapConfiguration m_ReadyConfig; + protected int m_Step; + protected int m_CloseEvents; + protected int m_RestoreCalls; + protected int m_RestoreAuthorized; + protected int m_Completions; + protected int m_CenterCalls; + protected int m_FinishCalls; + protected int m_CenterBaseline; + protected int m_FinishBaseline; + protected int m_CloseBaseline; + protected int m_RestoreBaseline; + protected int m_AuthorizedBaseline; + protected int m_CompletionBaseline; + protected vector m_PanBaseline; + protected float m_ZoomBaseline; + protected bool m_DeleteRequested; + protected bool m_DeleteStateFailed; + protected int m_CaptureDeleted; + protected int m_SpareDeleted; + protected float m_DeleteDeadline; + protected float m_Deadline; + protected float m_WaitUntil; + protected bool m_Stopped; + protected bool m_Done; + static bool Enabled() + { + string enabled, outcome; + return System.GetCLIParam("errSmoke", enabled) && enabled == "1" && System.GetCLIParam("errSmokeOutcome", outcome) && outcome == "map-ownership"; + } + void ObserveRestore(bool authorized) + { + m_RestoreCalls++; + if (authorized) m_RestoreAuthorized++; + } + void ObserveDeletion(int slot, bool released) + { + if (!m_DeleteRequested || !released) m_DeleteStateFailed = true; + if (slot == 1) m_CaptureDeleted++; + else if (slot == 2) m_SpareDeleted++; + else m_DeleteStateFailed = true; + Print(string.Format("ERR MAP DELETE: afterSuper slot=%1 released=%2 captureCallbacks=%3 spareCallbacks=%4", slot, released, m_CaptureDeleted, m_SpareDeleted)); + } + protected bool DeletionComplete() + { + return m_DeleteRequested && !m_SpareEntity && !m_CaptureEntity && !m_Spare && !m_Capture && m_CaptureDeleted == 1 && m_SpareDeleted == 1 && !m_DeleteStateFailed; + } + protected void RequestOwnedDeletion() + { + if (m_DeleteRequested) return; + m_DeleteRequested = true; + if (m_SpareEntity) SCR_EntityHelper.DeleteEntityAndChildren(m_SpareEntity); + if (m_CaptureEntity) SCR_EntityHelper.DeleteEntityAndChildren(m_CaptureEntity); + } + protected void LogDeletionState(string when) + { + Print(string.Format("ERR MAP DELETE: %1 captureEntity=%2 spareEntity=%3 captureComponent=%4 spareComponent=%5 captureCallbacks=%6 spareCallbacks=%7 cleanupFailed=%8", when, m_CaptureEntity != null, m_SpareEntity != null, m_Capture != null, m_Spare != null, m_CaptureDeleted, m_SpareDeleted, m_DeleteStateFailed)); + } + void ObserveCompletion() { m_Completions++; } + void ObserveCenter() { m_CenterCalls++; } + void ObserveFinish() { m_FinishCalls++; } + protected void OnMapClosed(MapConfiguration config) { m_CloseEvents++; } + protected void OnMapReady(MapConfiguration config) { m_ReadyConfig = config; } + protected bool Check(bool condition, string detail) + { + if (condition) { Print("ERR SMOKE PASS: shared map ownership " + detail); return true; } + Print("ERR SMOKE FAIL: shared map ownership " + detail, LogLevel.ERROR); + Stop(); return false; + } + protected IEntity SpawnMap(vector origin) + { + EntitySpawnParams params = new EntitySpawnParams(); + params.TransformMode = ETransformMode.WORLD; + params.Transform[3] = origin; + return GetGame().SpawnEntityPrefab(Resource.Load(MAP_PREFAB), GetGame().GetWorld(), params); + } + // A distinct native configuration with the same vanilla plain-map settings. + // It intentionally shares immutable settings/module arrays with the closed + // capture configuration; neither configuration is serialized or resource-edited. + protected MapConfiguration CopyPlainConfig(MapConfiguration source, Widget root) + { + MapConfiguration copy = new MapConfiguration(); + copy.MapEntityMode = source.MapEntityMode; + copy.RootWidgetRef = root; + copy.LayerCount = source.LayerCount; + copy.MapPropsConfig = source.MapPropsConfig; + copy.LayerConfig = source.LayerConfig; + copy.DescriptorVisibilityConfig = source.DescriptorVisibilityConfig; + copy.DescriptorDefsConfig = source.DescriptorDefsConfig; + copy.Modules = source.Modules; + copy.Components = source.Components; + copy.OtherComponents = source.OtherComponents; + return copy; + } + protected bool ReplacementIsCurrent() + { + return m_Map && SCR_MapEntity.GetMapInstance() == m_Map && m_Map.IsOpen() && m_ReplacementConfig && m_Map.GetMapConfig() == m_ReplacementConfig && m_ReplacementConfig.RootWidgetRef == m_ReplacementRoot && m_Map.GetMapMenuRoot() == m_ReplacementRoot; + } + protected void SaveCounters() + { + m_CloseBaseline = m_CloseEvents; + m_RestoreBaseline = m_RestoreCalls; + m_AuthorizedBaseline = m_RestoreAuthorized; + m_CompletionBaseline = m_Completions; + m_CenterBaseline = m_CenterCalls; m_FinishBaseline = m_FinishCalls; + } + protected bool BeginReplacement(bool reuseConfig) + { + if (!Check(m_Map && !m_Map.IsOpen() && m_Capture.ERRM_BeginOwnershipCapture(m_Holder), "actual owned prefab captures its native plain-map root")) return false; + MapConfiguration captured = m_Map.GetMapConfig(); + if (!Check(captured && captured.RootWidgetRef == m_Capture.ERRM_OwnershipRoot(), "capture config belongs to exact fixture component")) return false; + // Close only the just-verified fixture view before replacing it; this also + // avoids the native double-open warning. Delayed callbacks remain stale. + m_Map.CloseMap(); + if (reuseConfig) m_ReplacementConfig = m_Map.SetupMapConfig(EMapEntityMode.PLAIN, MAP_CONFIG, m_ReplacementRoot); + else m_ReplacementConfig = CopyPlainConfig(captured, m_ReplacementRoot); + if (!Check(m_ReplacementConfig && ((reuseConfig && m_ReplacementConfig == captured) || (!reuseConfig && m_ReplacementConfig != captured)), "requested distinct/reused native configuration identity established")) return false; + m_ReadyConfig = null; + m_Map.OpenMap(m_ReplacementConfig); + if (!Check(ReplacementIsCurrent(), "actual replacement root is current native map")) return false; + SaveCounters(); + return true; + } + protected bool ExerciseStaleCallbacks() + { + if (!Check(ReplacementIsCurrent() && m_ReadyConfig == m_ReplacementConfig && !m_Map.IsZooming(), "replacement remains open after native open-complete event")) return false; + vector pan = m_Map.GetCurrentPan(); + float zoom = m_Map.GetTargetZoomPPU(); + m_Capture.ERRM_StaleOwnershipCenter(); + if (!Check(m_Map.GetCurrentPan() == pan && m_Map.GetTargetZoomPPU() == zoom && !m_Map.IsZooming(), "actual stale center callback cannot pan or retarget replacement zoom")) return false; + m_Capture.ERRM_StaleOwnershipCamera(); + if (!Check(m_RestoreCalls == m_RestoreBaseline + 1 && m_RestoreAuthorized == m_AuthorizedBaseline, "stale camera-restore method executes but native-write authorization is denied")) return false; + m_PanBaseline = pan; m_ZoomBaseline = zoom; + m_Capture.ERRM_QueueStaleOwnershipCallbacks(); + return true; + } + protected bool VerifyStaleAndStop() + { + if (!Check(m_CenterCalls == m_CenterBaseline + 2 && m_FinishCalls == m_FinishBaseline + 1, "both real delayed production callbacks ran exactly once")) return false; + if (!Check(ReplacementIsCurrent() && m_Map.GetCurrentPan() == m_PanBaseline && m_Map.GetTargetZoomPPU() == m_ZoomBaseline, "real delayed center and finish leave replacement view unchanged")) return false; + m_Capture.ERRM_StopOwnershipCapture(); + if (!Check(ReplacementIsCurrent() && m_CloseEvents == m_CloseBaseline && m_Completions == m_CompletionBaseline && m_RestoreCalls == m_RestoreBaseline + 1, "actual finish, stop and vanilla mode-clear preserve replacement and do not request camera restore")) return false; + return true; + } + // Returns 0 while waiting, 1 only after cleanup, -1 on failure. now is native + // world time in milliseconds, matching existing Chat smoke probes. + int Tick(float now) + { + if (m_Done) return 1; + if (m_Stopped) return -1; + if (!Enabled()) { Stop(); return -1; } + if (m_Step == 0) + { + m_Map = SCR_MapEntity.GetMapInstance(); + PlayerController controller = GetGame().GetPlayerController(); + if (!Check(m_Map && !m_Map.IsOpen() && controller && controller.GetControlledEntity() && GetGame().GetCameraManager().CurrentCamera() == controller.GetPlayerCamera(), "fixture starts only with closed map and actual local character camera")) return -1; + m_Holder = controller.GetControlledEntity(); + m_Deadline = now + 15000; + m_ReplacementRoot = GetGame().GetWorkspace().CreateWidgets(MAP_LAYOUT); + if (!Check(m_ReplacementRoot != null, "owned replacement native map layout created")) return -1; + m_ReplacementRoot.SetVisible(false); + RTTextureWidget target = RTTextureWidget.Cast(m_ReplacementRoot.FindAnyWidget("RTTexture0")); + if (target) target.SetEnabled(false); + SCR_MapEntity.GetOnMapClose().Insert(OnMapClosed); + SCR_MapEntity.GetOnMapOpenComplete().Insert(OnMapReady); + m_CaptureEntity = SpawnMap(m_Holder.GetOrigin() + Vector(0, 0.2, 0)); + m_SpareEntity = SpawnMap(m_Holder.GetOrigin() + Vector(0.3, 0.2, 0)); + if (!Check(m_CaptureEntity && m_SpareEntity && m_CaptureEntity != m_SpareEntity, "two separate real successor map prefabs spawned without inventory changes")) return -1; + m_WaitUntil = now + 1000; m_Step = 1; return 0; + } + if (now > m_Deadline) { Check(false, "bounded fixture deadline"); return -1; } + if (now < m_WaitUntil) return 0; + if (m_Step == 1) + { + if (!Check(m_CaptureEntity && m_SpareEntity, "both fixture entities survive until native component initialization")) return -1; + m_Capture = ERRM_SharedMapComponent.Cast(m_CaptureEntity.FindComponent(ERRM_SharedMapComponent)); + m_Spare = ERRM_SharedMapComponent.Cast(m_SpareEntity.FindComponent(ERRM_SharedMapComponent)); + if (!Check(m_Capture && m_Spare && m_Capture.ERRM_OwnershipReady() && m_Spare.ERRM_OwnershipReady(), "both native map components initialize actual render roots")) return -1; + m_Capture.ERRM_ObserveOwnership(this, 1); m_Spare.ERRM_ObserveOwnership(this, 2); + if (!BeginReplacement(false)) return -1; + m_WaitUntil = now + 1500; m_Step = 2; return 0; + } + if (m_Step == 2) + { + if (!ExerciseStaleCallbacks()) return -1; + m_WaitUntil = now + 750; m_Step = 3; return 0; + } + if (m_Step == 3) + { + if (!VerifyStaleAndStop()) return -1; + m_Map.CloseMap(); // exact replacement was checked immediately above + if (!BeginReplacement(true)) return -1; + m_WaitUntil = now + 1500; m_Step = 4; return 0; + } + if (m_Step == 4) + { + if (!ExerciseStaleCallbacks()) return -1; + m_WaitUntil = now + 750; m_Step = 5; return 0; + } + if (m_Step == 5) + { + if (!VerifyStaleAndStop()) return -1; + SaveCounters(); + m_Spare.ERRM_StopOwnershipCapture(); + RequestOwnedDeletion(); + LogDeletionState("request returned"); + m_DeleteDeadline = now + 3000; + m_WaitUntil = now + 100; m_Step = 6; return 0; + } + if (m_Step == 6) + { + if (!ReplacementIsCurrent() || m_CloseEvents != m_CloseBaseline || m_RestoreCalls != m_RestoreBaseline) + { + Check(false, "replacement remains unchanged while native deletion finishes"); return -1; + } + if (!DeletionComplete()) + { + if (now >= m_DeleteDeadline) + { + LogDeletionState("bounded deletion timeout"); + Check(false, "both actual entities/components delete and both superclass cleanup callbacks complete within three seconds"); return -1; + } + return 0; + } + LogDeletionState("completed on later tick"); + if (!Check(DeletionComplete(), "actual prefab deletion runs successor and vanilla superclass cleanup")) return -1; + if (!Check(ReplacementIsCurrent() && m_CloseEvents == m_CloseBaseline && m_RestoreCalls == m_RestoreBaseline, "spare and interrupted map deletion preserve replacement without restore calls")) return -1; + m_WaitUntil = now + 1500; m_Step = 7; return 0; + } + if (!Check(ReplacementIsCurrent() && m_CloseEvents == m_CloseBaseline && m_RestoreCalls == m_RestoreBaseline && m_Completions == m_CompletionBaseline && m_CenterCalls == m_CenterBaseline && m_FinishCalls == m_FinishBaseline, "replacement survives delayed native callback window after both deletions")) return -1; + Stop(); m_Done = true; + Print("ERR SMOKE PASS: shared map ownership owned UI removed; camera render flag has no native getter and is not claimed as measured"); + return 1; + } + void Stop() + { + if (m_Stopped) return; + m_Stopped = true; + if (m_Capture) m_Capture.ERRM_StopOwnershipCapture(); + if (m_Spare) m_Spare.ERRM_StopOwnershipCapture(); + if (ReplacementIsCurrent()) m_Map.CloseMap(); + SCR_MapEntity.GetOnMapClose().Remove(OnMapClosed); + SCR_MapEntity.GetOnMapOpenComplete().Remove(OnMapReady); + RequestOwnedDeletion(); + if (m_ReplacementRoot) m_ReplacementRoot.RemoveFromHierarchy(); + m_ReplacementRoot = null; m_ReplacementConfig = null; m_ReadyConfig = null; m_Map = null; + m_Capture = null; m_Spare = null; m_Holder = null; + } +} +#endif diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c new file mode 100644 index 0000000..33839a4 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c @@ -0,0 +1,231 @@ +[ComponentEditorProps(category: "GameScripted/Gadgets", description: "Vanilla map gadget with a world-visible rendered surface")] +class ERRM_SharedMapComponentClass : SCR_MapGadgetComponentClass +{ + [Attribute("{255E1265F702B4AE}UI/layouts/ERRMap/SharedMapRenderTarget.layout", UIWidgets.ResourcePickerThumbnail, "Off-screen map render target", "layout")] + protected ResourceName m_sLayoutName; + + [Attribute("0.12", UIWidgets.EditBox, "Initial map zoom in pixels per metre", "0.01 20", category: "Shared Map")] + protected float m_fInitialZoom; + + ResourceName GetSharedMapLayout() + { + return m_sLayoutName; + } + + float GetInitialZoom() + { + return m_fInitialZoom; + } +} + +// This remains a real SCR_MapGadgetComponent, so the normal M-key map, +// animations, ruler and faction-specific protractor settings keep working. +// The extra off-screen widget supplies the texture used by the held model. +class ERRM_SharedMapComponent : SCR_MapGadgetComponent +{ + protected const ResourceName MAP_CONFIG = "{A786DD4868598F15}Configs/Map/MapPlain.conf"; + protected const int MAP_SETUP_DELAY_MS = 100; + protected const int MAP_CAPTURE_DELAY_MS = 500; + protected const int MAP_RETRY_DELAY_MS = 250; + + protected Widget m_ESMRootWidget; + protected RTTextureWidget m_ESMRenderTarget; + protected SCR_MapEntity m_ESMMapEntity; + protected ref MapConfiguration m_ESMMapConfig; + protected IEntity m_ESMCharacterOwner; + protected bool m_bESMInHand; + protected bool m_bESMOwnsMapRenderer; + + protected override void EOnInit(IEntity owner) + { + super.EOnInit(owner); + + ERRM_SharedMapComponentClass data = ERRM_SharedMapComponentClass.Cast(GetComponentData(owner)); + WorkspaceWidget workspace = GetGame().GetWorkspace(); + if (!data || !workspace || data.GetSharedMapLayout().IsEmpty()) + return; + + m_ESMRootWidget = workspace.CreateWidgets(data.GetSharedMapLayout()); + if (!m_ESMRootWidget) + return; + + m_ESMRenderTarget = RTTextureWidget.Cast(m_ESMRootWidget.FindAnyWidget("RTTexture0")); + if (!m_ESMRenderTarget) + return; + + m_ESMRenderTarget.SetRenderTarget(owner); + m_ESMRenderTarget.SetEnabled(false); + } + + protected override void ModeSwitch(EGadgetMode mode, IEntity charOwner) + { + if (mode != EGadgetMode.IN_HAND || !m_ESMRootWidget || !m_ESMRenderTarget) + { + super.ModeSwitch(mode, charOwner); + return; + } + + m_bESMInHand = true; + m_ESMCharacterOwner = charOwner; + TryCaptureMapSurface(); + } + + protected override void ModeClear(EGadgetMode mode) + { + if (mode == EGadgetMode.IN_HAND) + StopMapCapture(); + + super.ModeClear(mode); + } + + protected void TryCaptureMapSurface() + { + if (!m_bESMInHand) + return; + + if (!m_ESMRootWidget || !m_ESMRenderTarget) + { + CompleteMapModeSwitch(); + return; + } + + m_ESMMapEntity = SCR_MapEntity.GetMapInstance(); + if (!m_ESMMapEntity) + { + CompleteMapModeSwitch(); + return; + } + + // The owner's normal map has priority. Capture only after it closes; + // otherwise this auxiliary render would replace or close the M-key UI. + if (m_ESMMapEntity.IsOpen()) + { + GetGame().GetCallqueue().CallLater(TryCaptureMapSurface, MAP_RETRY_DELAY_MS, false); + return; + } + + m_ESMRenderTarget.SetEnabled(true); + MapConfiguration mapConfig = m_ESMMapEntity.SetupMapConfig(EMapEntityMode.PLAIN, MAP_CONFIG, m_ESMRootWidget); + if (!mapConfig) + { + ReleaseMapCapture(); + CompleteMapModeSwitch(); + return; + } + + m_ESMMapConfig = mapConfig; + m_bESMOwnsMapRenderer = true; + m_ESMMapEntity.OpenMap(mapConfig); + if (!OwnsMapCapture()) + { + ReleaseMapCapture(); + if (m_bESMInHand && GetGame()) + GetGame().GetCallqueue().CallLater(TryCaptureMapSurface, MAP_RETRY_DELAY_MS, false); + return; + } + RestoreCharacterCamera(); + + GetGame().GetCallqueue().CallLater(CenterMapOnHolder, MAP_SETUP_DELAY_MS, false); + GetGame().GetCallqueue().CallLater(FinishMapCapture, MAP_CAPTURE_DELAY_MS, false); + } + + protected void CenterMapOnHolder() + { + if (!OwnsMapCapture() || !m_ESMCharacterOwner) + return; + + ERRM_SharedMapComponentClass data = ERRM_SharedMapComponentClass.Cast(GetComponentData(GetOwner())); + if (!data) + return; + + vector holderPosition = m_ESMCharacterOwner.GetOrigin(); + m_ESMMapEntity.ZoomPanSmooth(data.GetInitialZoom(), holderPosition[0], holderPosition[2], 0.1); + } + + protected void FinishMapCapture() + { + if (!m_bESMOwnsMapRenderer) + return; + if (!OwnsMapCapture()) + { + ReleaseMapCapture(); + // A native UI replaced this capture. Do not close, pan, fade or + // focus that UI; use the existing retry path after it closes. + if (m_bESMInHand && GetGame()) + GetGame().GetCallqueue().CallLater(TryCaptureMapSurface, MAP_RETRY_DELAY_MS, false); + return; + } + + ReleaseMapCapture(); + CompleteMapModeSwitch(); + } + + protected bool OwnsMapCapture() + { + if (!GetGame() || !m_bESMOwnsMapRenderer || !m_ESMMapEntity || !m_ESMMapConfig || !m_ESMRootWidget) + return false; + if (SCR_MapEntity.GetMapInstance() != m_ESMMapEntity || !m_ESMMapEntity.IsOpen()) + return false; + // Vanilla reuses the same config object for equal map modes and changes + // RootWidgetRef, so pointer identity alone cannot establish ownership. + return m_ESMMapEntity.GetMapConfig() == m_ESMMapConfig && m_ESMMapConfig.RootWidgetRef == m_ESMRootWidget; + } + + protected void ReleaseMapCapture() + { + bool ownsRenderer = OwnsMapCapture(); + // Freeze our own target even on interruption or foreign replacement. + if (m_ESMRenderTarget) + m_ESMRenderTarget.SetEnabled(false); + m_bESMOwnsMapRenderer = false; + m_ESMMapConfig = null; + if (ownsRenderer) + m_ESMMapEntity.CloseMap(); // vanilla also restores its character camera + } + + protected void CompleteMapModeSwitch() + { + if (!m_bESMInHand || !m_ESMCharacterOwner) + return; + + // Start the stock map only after the world-visible surface owns a frame. + super.ModeSwitch(EGadgetMode.IN_HAND, m_ESMCharacterOwner); + } + + protected void StopMapCapture() + { + m_bESMInHand = false; + if (GetGame()) + { + GetGame().GetCallqueue().Remove(TryCaptureMapSurface); + GetGame().GetCallqueue().Remove(CenterMapOnHolder); + GetGame().GetCallqueue().Remove(FinishMapCapture); + } + ReleaseMapCapture(); + m_ESMCharacterOwner = null; + m_ESMMapEntity = null; + } + + protected void RestoreCharacterCamera() + { + if (!OwnsMapCapture()) return; + PlayerController playerController = GetGame().GetPlayerController(); + if (playerController) + playerController.SetCharacterCameraRenderActive(true); + } + + protected override void OnDelete(IEntity owner) + { + StopMapCapture(); + + // The entity may already be destroyed when this callback runs during a + // world restart. Destroying the widget releases its render binding without + // passing the deleted entity back into the native renderer. + if (m_ESMRootWidget) + m_ESMRootWidget.RemoveFromHierarchy(); + + m_ESMRenderTarget = null; + m_ESMRootWidget = null; + super.OnDelete(owner); + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout new file mode 100644 index 0000000..bcefcb9 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout @@ -0,0 +1,39 @@ +FrameWidgetClass { + Name "rootFrame" + Slot FrameWidgetSlot { + SizeX 1024 + OffsetRight -1024 + SizeY 1024 + OffsetBottom -1024 + } + { + RTTextureWidgetClass { + Name "RTTexture0" + Slot FrameWidgetSlot { + Anchor 0 0 1 1 + SizeX -1024 + OffsetRight 0 + SizeY -1024 + OffsetBottom 0 + } + { + MapWidgetClass { + Name "MapWidget" + Slot FrameWidgetSlot { + Anchor 0 0 1 1 + SizeX -1024 + OffsetRight 0 + SizeY -1024 + OffsetBottom 0 + } + Clipping False + Color 1 1 1 1 + SizeInUnits 1024 1024 + OffsetPixels 0 0 + Clear 1 + ClearColor 0.78 0.74 0.62 1 + } + } + } + } +} diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta new file mode 100644 index 0000000..84e4dae --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta @@ -0,0 +1,17 @@ +MetaFileClass { + Name "{255E1265F702B4AE}UI/layouts/ERRMap/SharedMapRenderTarget.layout" + Configurations { + LayoutResourceClass PC { + } + LayoutResourceClass XBOX_ONE : PC { + } + LayoutResourceClass XBOX_SERIES : PC { + } + LayoutResourceClass PS4 : PC { + } + LayoutResourceClass PS5 : PC { + } + LayoutResourceClass HEADLESS : PC { + } + } +} \ No newline at end of file diff --git a/docs/evidence/package-2026-09-19-1317-all/source/addons/map/addon.gproj b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/addon.gproj new file mode 100644 index 0000000..5d0a4d2 --- /dev/null +++ b/docs/evidence/package-2026-09-19-1317-all/source/addons/map/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Map" + GUID "9AAEE9041D79809E" + TITLE "Escapists Rereintroduced - Map" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/archive-kind.json b/docs/evidence/packed-chat-2026-09-19-131942-current/archive-kind.json new file mode 100644 index 0000000..12983b8 --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/archive-kind.json @@ -0,0 +1,15 @@ +{ + "schema_version": 2, + "kind": "packed-chat-consumption", + "packed_launch_id": "66dc1385-ad47-4af2-8e14-e821132d3d7c", + "build_qualified": false, + "release_qualified": false, + "project": "chat", + "addon_order": [ + "core", + "ai", + "intel", + "map", + "chat" + ] +} diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/archive-sha256.json b/docs/evidence/packed-chat-2026-09-19-131942-current/archive-sha256.json new file mode 100644 index 0000000..267c958 --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/archive-sha256.json @@ -0,0 +1,27 @@ +{ + "archive-kind.json": "1a3786812f2f21e4f516faf70077ac6a40822d1ab235278c3b00ce0b023a6f39", + "console.log.txt": "386a9c83881aea27a4fc4e4ae68caf86b8f64bf31ae91ededfbda98d119b8c81", + "error.log.txt": "f20c51c762b52b4e7a68f72a7d451415034b5293db342c87bbce016de028c3a0", + "headless-launch.log.txt": "b0ee07bcc0959657b229693c71eabdaab27732ea510185bac4e4b29d9230b0a7", + "package/ai/addon.gproj": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1", + "package/ai/data.pak": "627b7389f0656a78f90acc5ead405e494b27b8bcb0cfb85dc812e177bc0f04f6", + "package/ai/resourceDatabase.rdb": "7dc88e5e7a9dfc6d3ddf9f046d211b083c1f379b61cdc32f6d93084add37e53f", + "package/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "package/chat/data.pak": "26fa2ce81dada224fcb0c24ea3e2ebca01eb67c149bd06bf77f04c6b5faeca53", + "package/chat/resourceDatabase.rdb": "42820c285d135a00f44be372b5611f568d0030aaa45b05091f59e723eec46dc4", + "package/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "package/core/data.pak": "3f84b9622afe2ff1683f05917a1e8e190f4f7dcf62f48a8c29adde95ce8a1b50", + "package/core/resourceDatabase.rdb": "e85f078208a86591a4b0f791d2b56661018bf46e4b14b5405b183df0baf485f3", + "package/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "package/intel/data.pak": "5396732e193eb36d4ce86f9999f3cb112b5e1766f0e1b1911b6baa5e761fa37a", + "package/intel/resourceDatabase.rdb": "062996b9102e99d19eb680bed04880b0e087d9f8789681c0f3ff8ab6772339ba", + "package/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a", + "package/map/data.pak": "211835e6afd1b9b18f0a0e4ebd235afa03b1436810c355d6cfeec636c8935dd0", + "package/map/resourceDatabase.rdb": "9b7f50a84d4fb2d390e42c25ecb68d264038bb81926065653e3e9f87556b2462", + "packed-input-provenance.json": "0dbcd17153b8d5f8aebed6aa4856473b997e3eaa375359719757ef370367e01a", + "raw-startup-report.json": "b131e12ea9f2d39cffbf1313350806fcbf34c3d16c1f49371d25a13968fc341b", + "report.json": "a6cc4b84959f99f957016afb19f7edd1f41bd67c0b43fa7e776130bd2f54d5d6", + "rereintroduced-hq.log.txt": "ea378e0c5731eb7a9e32911a56804152d016821f66cf0cc81cfd2e2d062598d3", + "runner.json.txt": "50a4d82431afc66003340092c729633f9dca1988fa842d018f3f817131bce7d5", + "script.log.txt": "cbc38ca59674f80d7381b62aba0a17d1f226d3bb4759a6b525942b81933cb895" +} diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/console.log.txt b/docs/evidence/packed-chat-2026-09-19-131942-current/console.log.txt new file mode 100644 index 0000000..6c14cd6 --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/console.log.txt @@ -0,0 +1,490 @@ +--------------------------------------------- +Log Z:\tmp\erri-packed-chat-20260919-1320\profile\logs\logs_2026-09-19_13-19-42\console.log started at 2026-09-19 13:19:42 (2026-09-19 11:19:42 UTC) + +13:19:42.929 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-packed-chat-20260919-1320\profile\logs\logs_2026-09-19_13-19-42' to filesystem under name logs +13:19:42.929 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-packed-chat-20260919-1320\profile\profile' to filesystem under name profile +13:19:42.929 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger\' +13:19:42.930 ENGINE : Initializing engine, version 192142 +13:19:42.930 ENGINE : CLI Params: -addonsDir Z:/tmp/erri-packed-chat-20260919-1320/input/addons -addons FA804F411BDDF2C6 -profile Z:/tmp/erri-packed-chat-20260919-1320/profile -errOrdinaryScenario chat -noSplash -noBackend -noSound -noThrow -disableCrashReporter -logconsole +13:19:42.937 ENGINE : Addon dirs: +13:19:42.937 ENGINE : dir: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons' +13:19:42.937 ENGINE : dir: './addons' +13:19:42.937 ENGINE : dir: 'Z:/tmp/erri-packed-chat-20260919-1320/profile/addons' +13:19:42.937 ENGINE : Available addons: +13:19:42.937 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/ai/addon.gproj' guid: '5192138CB9D5B911' (packed) +13:19:42.937 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' (packed) +13:19:42.937 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/core/addon.gproj' guid: '2528466DE220D91C' (packed) +13:19:42.937 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' (packed) +13:19:42.937 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/map/addon.gproj' guid: '9AAEE9041D79809E' (packed) +13:19:42.937 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +13:19:42.937 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +13:19:42.938 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/chat/' (pak count: 1) to filesystem under name ERR_Chat +13:19:42.938 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/map/' (pak count: 1) to filesystem under name ERR_Map +13:19:42.939 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/intel/' (pak count: 1) to filesystem under name ERR_Intel +13:19:42.939 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/ai/' (pak count: 1) to filesystem under name ERR_Ai +13:19:42.940 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/core/' (pak count: 1) to filesystem under name ERR_Core +13:19:43.071 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +13:19:43.074 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +13:19:43.074 ENGINE : CPU vendor : AuthenticAMD +13:19:43.074 ENGINE : CPU type : 2 +13:19:43.074 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +13:19:43.074 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +13:19:43.074 ENGINE : CPU count logical : 16 +13:19:43.074 ENGINE : CPU count physical : 8 +13:19:43.074 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +13:19:43.074 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:/tmp/erri-packed-chat-20260919-1320/input/addons/chat/resourceDatabase.rdb) +13:19:43.074 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:/tmp/erri-packed-chat-20260919-1320/input/addons/map/resourceDatabase.rdb) +13:19:43.075 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:/tmp/erri-packed-chat-20260919-1320/input/addons/intel/resourceDatabase.rdb) +13:19:43.075 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:/tmp/erri-packed-chat-20260919-1320/input/addons/ai/resourceDatabase.rdb) +13:19:43.075 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:/tmp/erri-packed-chat-20260919-1320/input/addons/core/resourceDatabase.rdb) +13:19:43.076 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +13:19:43.214 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +13:19:43.216 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-packed-chat-20260919-1320\profile\profile/resourceDatabase.rdb) +13:19:43.216 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-packed-chat-20260919-1320\profile\logs\logs_2026-09-19_13-19-42/resourceDatabase.rdb) +13:19:43.365 ENGINE : GameProject load +13:19:43.365 ENGINE : Loaded addons: +13:19:43.365 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +13:19:43.365 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +13:19:43.365 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:19:43.365 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:19:43.365 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:19:43.365 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:19:43.365 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:19:43.368 ENGINE : Loading custom engine user config '$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf' +13:19:43.368 ENGINE : No Enfusion settings file loaded. Continuing with defaults +13:19:43.368 ENGINE : Locale info: system en-US (English), user en-US (English) +13:19:43.501 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +13:19:43.502 RENDER : Basic screen setup: +13:19:43.502 RENDER : Back buffer width x height: 1280x720 +13:19:43.502 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +13:19:43.502 RENDER : MSAA : none +13:19:43.515 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +13:19:43.515 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +13:19:43.515 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +13:19:43.515 RENDER : * core clocks 2720 MHz, memory 1124 MHz +13:19:43.515 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +13:19:43.515 RENDER : AMD AGS correctly initialized +13:19:43.515 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition +13:19:43.515 RENDER : Detected output devices: +13:19:43.515 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +13:19:43.515 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +13:19:43.515 RENDER : Concurrent frames limit 2 +13:19:43.591 RENDER : DX12 device successfully created by AMD AGS library +13:19:43.591 RENDER : * user markers not supported in this version AMD SW +13:19:43.591 RENDER : Graphics device features +13:19:43.591 RENDER : Needed: +13:19:43.591 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +13:19:43.591 RENDER : Optional: +13:19:43.591 RENDER : * Allow tearing (VSYNC) : 1 +13:19:43.591 RENDER : * 16 bits : 1 +13:19:43.591 RENDER : * Resource heap tier : 3 +13:19:43.591 RENDER : * Persistent heaps (DRED) : 1 +13:19:43.591 RENDER : * DRED 1.2 is supported by compiler +13:19:43.613 RENDER : Main RT format setup. +13:19:43.613 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +13:19:43.613 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +13:19:43.619 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7 +13:19:43.648 PROFILING : Settings changed took: 1.283900 ms +13:19:43.652 RENDER : RENDER : Reload shaders +13:19:43.652 RENDER : Enfusion shader version 13 +13:19:43.652 INIT : INIT : ShaderListReload +13:19:43.652 PROFILING : ShaderListReload took: 0.000300 ms +13:19:44.084 RENDER : Loaded 3383 newer shader binaries +13:19:44.084 PROFILING : Reload shaders took: 431.764800 ms +13:19:44.087 ENGINE : Initializing inputs. +13:19:44.100 NETWORK : Initializing networking. +13:19:44.100 NETWORK : Using new GameRplScheduler. +13:19:44.100 SCRIPT : SCRIPT : Initializing scripts +13:19:44.100 SCRIPT : SCRIPT : ScriptProjectManager init +13:19:44.100 PROFILING : ScriptProjectManager init took: 0.008700 ms +13:19:44.117 PROFILING : Initializing scripts took: 17.057100 ms +13:19:44.118 BACKEND : Backend Services are disabled. +13:19:44.118 ENGINE : Enfusion engine successfully created. +13:19:44.125 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +13:19:44.148 GUI : Using default language (en_us) +13:19:44.148 GUI : Loading 'en_us' localization file. +13:19:44.148 INIT : INIT : Loading StringTable +13:19:44.177 PROFILING : Loading StringTable took: 28.100600 ms +13:19:44.177 SCRIPT : SCRIPT : Compiling GameLib scripts +13:19:44.207 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 666K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:19:44.207 PROFILING : Compiling GameLib scripts took: 30.547500 ms +13:19:44.207 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +13:19:44.207 SCRIPT : SCRIPT : Compiling Game scripts +13:19:45.082 SCRIPT : Compiling Game scripts +13:19:45.082 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:19:45.082 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:19:45.340 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:45.352 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:19:45.381 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:19:45.484 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:19:45.484 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:19:45.484 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:19:45.484 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:19:45.518 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:19:45.565 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +13:19:45.576 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:19:45.576 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:19:45.578 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:19:45.620 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:45.621 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:45.622 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:19:45.622 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:19:45.679 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:19:45.804 SCRIPT : Module: Game; loaded 5780x files; 11202x classes; used 27041K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 6264db09 +13:19:45.834 PROFILING : Compiling Game scripts took: 1626.503600 ms +13:19:45.834 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:19:45.870 ENGINE : Game successfully created. +13:19:45.913 PLATFORM : Save data from container 'settings' have been loaded +13:19:46.012 PLATFORM : Save data from container 'sessions' have been loaded +13:19:46.414 PLATFORM : System language differs from the saved one - using new language {new: 'en_us'; old: ''} +13:19:46.414 PLATFORM : Save data transaction to 'settings' started. +13:19:46.511 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission 'worlds/MainMenuWorld/MainMenuWorld.ent'. +13:19:46.512 WORLD : WORLD : Entities load 'worlds/MainMenuWorld/MainMenuWorld.ent' +13:19:46.512 PROFILING : Entities load took: 0.291400 ms +13:19:46.514 WORLD : WORLD : Game::LoadEntities +13:19:46.514 WORLD : WORLD : Initializing world systems +13:19:46.515 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +13:19:46.515 WORLD : WORLD : CreateEntities +13:19:46.515 WORLD : WORLD : CreateEntities +13:19:46.515 WORLD : WORLD : NotifyBeforeEntitiesCreated +13:19:46.516 RESOURCES : Loaded mission headers from 7 addon(s)! +13:19:46.516 PROFILING : NotifyBeforeEntitiesCreated took: 1.058200 ms +13:19:46.516 WORLD : WORLD : Wait for preloading data +13:19:46.516 PROFILING : Wait for preloading data took: 0.000200 ms +13:19:46.517 WORLD : WORLD : NotifyBeforeEntitiesInitialized +13:19:46.517 PROFILING : NotifyBeforeEntitiesInitialized took: 0.015200 ms +13:19:46.517 WORLD : InitEntities 'world' +13:19:46.517 ENTITY : Init entity @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> +13:19:46.517 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BC201D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +13:19:46.519 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BC201D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +13:19:46.519 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BC201D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +13:19:46.519 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BC201D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +13:19:46.519 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BC201D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +13:19:46.519 WORLD : WORLD : NotifyEntitiesInitialized +13:19:46.519 DEFAULT : DEFAULT : WorldVolumesCollection +13:19:46.519 PROFILING : WorldVolumesCollection took: 0.003000 ms +13:19:46.519 PROFILING : NotifyEntitiesInitialized took: 0.041600 ms +13:19:46.519 PROFILING : CreateEntities took: 4.020100 ms +13:19:46.519 PROFILING : CreateEntities took: 4.027200 ms +13:19:46.519 WORLD : WORLD : EOnActivate +13:19:46.519 PROFILING : EOnActivate took: 0.001600 ms +13:19:46.519 PROFILING : Game::LoadEntities took: 5.516600 ms +13:19:46.711 DEFAULT : Entered main menu. +13:19:46.810 PROFILING : Settings changed took: 0.514500 ms +13:19:46.811 DEFAULT (W): No GameMode present in the world, using fallback logic! +13:19:46.812 SCRIPT : ERR ORDINARY: requesting header project=chat +13:19:47.357 ENGINE : Game destroyed. +13:19:47.556 ENGINE : Addon dirs: +13:19:47.556 ENGINE : dir: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons' +13:19:47.556 ENGINE : dir: './addons' +13:19:47.556 ENGINE : dir: 'Z:/tmp/erri-packed-chat-20260919-1320/profile/addons' +13:19:47.556 ENGINE : dir: '$profile:../addons/' +13:19:47.556 ENGINE : Available addons: +13:19:47.556 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/ai/addon.gproj' guid: '5192138CB9D5B911' (packed) +13:19:47.556 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' (packed) +13:19:47.556 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/core/addon.gproj' guid: '2528466DE220D91C' (packed) +13:19:47.556 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' (packed) +13:19:47.556 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/map/addon.gproj' guid: '9AAEE9041D79809E' (packed) +13:19:47.556 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +13:19:47.556 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +13:19:47.556 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/chat/' (pak count: 1) to filesystem under name ERR_Chat +13:19:47.557 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/map/' (pak count: 1) to filesystem under name ERR_Map +13:19:47.557 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/intel/' (pak count: 1) to filesystem under name ERR_Intel +13:19:47.558 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/ai/' (pak count: 1) to filesystem under name ERR_Ai +13:19:47.558 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/core/' (pak count: 1) to filesystem under name ERR_Core +13:19:47.661 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +13:19:47.664 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +13:19:47.664 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:/tmp/erri-packed-chat-20260919-1320/input/addons/chat/resourceDatabase.rdb) +13:19:47.665 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:/tmp/erri-packed-chat-20260919-1320/input/addons/map/resourceDatabase.rdb) +13:19:47.665 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:/tmp/erri-packed-chat-20260919-1320/input/addons/intel/resourceDatabase.rdb) +13:19:47.666 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:/tmp/erri-packed-chat-20260919-1320/input/addons/ai/resourceDatabase.rdb) +13:19:47.666 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:/tmp/erri-packed-chat-20260919-1320/input/addons/core/resourceDatabase.rdb) +13:19:47.666 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +13:19:47.781 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +13:19:47.783 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-packed-chat-20260919-1320\profile\profile/resourceDatabase.rdb) +13:19:47.783 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-packed-chat-20260919-1320\profile\logs\logs_2026-09-19_13-19-42/resourceDatabase.rdb) +13:19:47.927 ENGINE : GameProject load +13:19:47.927 ENGINE : Loaded addons: +13:19:47.927 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +13:19:47.927 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +13:19:47.927 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/core/addon.gproj' guid: '2528466DE220D91C' +13:19:47.927 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +13:19:47.927 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +13:19:47.927 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +13:19:47.927 ENGINE : gproj: 'Z:/tmp/erri-packed-chat-20260919-1320/input/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +13:19:47.947 GUI : Using default language (en_us) +13:19:47.947 GUI : Loading 'en_us' localization file. +13:19:47.947 INIT : INIT : Loading StringTable +13:19:47.967 PROFILING : Loading StringTable took: 19.600700 ms +13:19:47.967 SCRIPT : SCRIPT : Compiling GameLib scripts +13:19:47.998 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 664K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:19:47.998 PROFILING : Compiling GameLib scripts took: 31.403600 ms +13:19:47.998 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +13:19:47.998 SCRIPT : SCRIPT : Compiling Game scripts +13:19:48.834 SCRIPT : Compiling Game scripts +13:19:48.834 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:19:48.834 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:19:49.074 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:49.086 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:19:49.112 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:19:49.210 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:19:49.210 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:19:49.210 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:19:49.210 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:19:49.243 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:19:49.288 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +13:19:49.301 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:19:49.301 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:19:49.302 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:19:49.346 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:49.346 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:49.347 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:19:49.347 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:19:49.403 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:19:49.520 SCRIPT : Module: Game; loaded 5780x files; 11202x classes; used 27014K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 6264db09 +13:19:49.547 PROFILING : Compiling Game scripts took: 1548.375900 ms +13:19:49.547 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +13:19:49.567 ENGINE : Game successfully created. +13:19:49.606 PLATFORM : Save data from container 'settings' have been loaded +13:19:49.705 PLATFORM : Save data from container 'sessions' have been loaded +13:19:49.705 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +13:19:49.705 ENGINE : Game user settings config loaded +13:19:49.805 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{C1E20667DCE324ED}Missions/ERR_Everon.conf'. +13:19:49.805 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +13:19:50.782 PROFILING : Entities load took: 976.521100 ms +13:19:50.784 WORLD : WORLD : Game::LoadEntities +13:19:50.784 WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" +13:19:50.785 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +13:19:50.785 WORLD : WORLD : CreateEntities +13:19:50.785 WORLD : WORLD : CreateEntities +13:19:50.785 WORLD : WORLD : NotifyBeforeEntitiesCreated +13:19:50.786 RESOURCES : Loaded mission headers from 7 addon(s)! +13:19:50.786 PROFILING : NotifyBeforeEntitiesCreated took: 0.997000 ms +13:19:50.786 WORLD : WORLD : Wait for preloading data +13:19:50.794 PROFILING : Wait for preloading data took: 7.621700 ms +13:19:50.919 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +13:19:50.919 PROFILING : PROFILING : Terrain load +13:19:52.306 PROFILING : Terrain load took: 1387.593700 ms +13:19:55.055 WORLD : Game::LoadEntities +13:19:55.055 WORLD : CreateEntities +13:19:55.055 WORLD : CreateEntities +13:19:55.055 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" +13:19:55.055 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:19:55.055 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:20:00.129 WORLD : WORLD : NotifyBeforeEntitiesInitialized +13:20:00.129 PROFILING : NotifyBeforeEntitiesInitialized took: 0.059500 ms +13:20:00.708 WORLD : InitEntities 'world' +13:20:00.708 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:20:00.708 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:20:00.725 WORLD : WORLD : NotifyEntitiesInitialized +13:20:00.725 TERRAIN : TERRAIN : Initializing road networks... +13:20:00.729 PROFILING : Initializing road networks... took: 3.211500 ms +13:20:00.729 DEFAULT : DEFAULT : WorldVolumesCollection +13:20:00.790 PROFILING : WorldVolumesCollection took: 60.965400 ms +13:20:00.790 INIT : INIT : SoundWorldInit +13:20:00.804 PROFILING : SoundWorldInit took: 14.266300 ms +13:20:00.804 PROFILING : NotifyEntitiesInitialized took: 78.610200 ms +13:20:00.804 PROFILING : CreateEntities took: 10018.454600 ms +13:20:00.804 PROFILING : CreateEntities took: 10018.631200 ms +13:20:00.805 WORLD : WORLD : Wait for preloading data around camera +13:20:01.106 PROFILING : Wait for preloading data around camera took: 300.416400 ms +13:20:01.106 WORLD : WORLD : EOnActivate +13:20:01.134 PROFILING : EOnActivate took: 28.081000 ms +13:20:01.134 PROFILING : Game::LoadEntities took: 10349.413400 ms +13:20:01.624 DEFAULT : Entered offline game state. +13:20:01.728 SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems +13:20:01.728 NETWORK : Player connected: connectionID=2147483646 +13:20:01.728 NETWORK : ### Connecting player: connectionID=2147483646, Name= +13:20:01.728 NETWORK : ### Creating player: PlayerId=1, Name=jakub +13:20:01.733 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:20:01.733 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +13:20:01.733 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:20:01.733 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:20:01.733 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:20:01.734 SCRIPT (W): Can't open config file "" +13:20:01.734 SCRIPT (W): Cannot update game blocklist. Backend is offline. +13:20:01.735 WORLD : InitEntities 'world' +13:20:01.735 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:20:01.735 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +13:20:01.735 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:20:01.735 SCRIPT (W): Slot_Chat Has no Content! +13:20:01.735 SCRIPT (W): Slot_VON Has no Content! +13:20:01.736 SCRIPT (W): Slot_AvailableActions Has no Content! +13:20:01.736 SCRIPT (W): Slot_Vehicle Has no Content! +13:20:01.736 SCRIPT (W): Slot_GameVersion Has no Content! +13:20:01.736 SCRIPT (W): Slot_Notifications Has no Content! +13:20:01.736 SCRIPT (W): Slot_Hints Has no Content! +13:20:01.741 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +13:20:01.741 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +13:20:01.741 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +13:20:01.741 SCRIPT : Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged. +13:20:01.741 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +13:20:01.742 NETWORK : Players connecting: 0 +13:20:01.742 NETWORK : Players connected: 1 / 1 +13:20:01.754 WORLD : Frame start +13:20:01.754 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +13:20:01.767 WORLD : UpdateEntities +13:20:01.767 WORLD : Frame +13:20:01.767 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +13:20:01.922 WORLD : UpdateEntities +13:20:01.922 WORLD : PostFrame +13:20:01.922 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +13:20:01.922 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:20:01.966 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:20:01.966 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:20:01.966 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +13:20:01.966 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +13:20:02.111 RENDER : RENDER : ObjectsHeightMap::Build +13:20:02.111 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +13:20:02.252 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 141.095400 ms +13:20:02.259 PROFILING : ObjectsHeightMap::Build took: 148.745100 ms +13:20:03.251 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +13:20:03.263 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +13:20:03.264 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +13:20:03.290 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +13:20:03.291 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +13:20:03.338 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +13:20:03.338 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +13:20:03.348 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +13:20:03.395 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +13:20:03.395 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +13:20:03.396 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +13:20:03.396 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +13:20:03.400 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +13:20:03.401 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +13:20:03.401 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +13:20:03.402 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +13:20:03.402 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +13:20:03.402 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +13:20:03.402 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +13:20:03.403 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +13:20:03.403 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +13:20:03.403 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:20:03.403 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +13:20:03.403 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +13:20:03.403 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:20:03.403 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +13:20:03.403 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +13:20:03.403 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:20:03.403 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:20:03.403 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:20:03.403 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:20:03.403 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:20:03.403 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +13:20:03.403 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:20:04.056 WORLD : UpdateEntities +13:20:04.056 WORLD : AfterPostSimulate +13:20:04.056 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +13:20:04.283 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:20:04.283 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:20:04.283 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:20:04.283 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:20:04.581 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.07,63.5139,7499.7> up=0.995518 +13:20:04.581 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.184465 angularSpeed=0.0791157 +13:20:04.581 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:20:04.581 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6048,7501.97> +13:20:04.581 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3048,7501.97> terrainY=63.3167 tireTerrainGap=-0.0118523 +13:20:04.581 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6048,7501.97> radius=0.3 bottom=<7012.06,63.3048,7501.97> fraction=0.400785 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.0118256 +13:20:04.581 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6015,7497.71> +13:20:04.581 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1515,7497.71> terrainY=64.1561 tireTerrainGap=-0.0045929 +13:20:04.581 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6015,7497.71> radius=0.45 bottom=<7009.88,64.1515,7497.71> fraction=0.4341 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00449371 +13:20:04.581 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2575,7497.75> +13:20:04.582 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8075,7497.75> terrainY=63.8177 tireTerrainGap=-0.010128 +13:20:04.582 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2575,7497.75> radius=0.45 bottom=<7014.42,63.8075,7497.75> fraction=0.408333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0101662 +13:20:04.582 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:20:04.815 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:20:04.815 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:20:04.815 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +13:20:04.815 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:20:05.383 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:20:05.383 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +13:20:05.383 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:20:05.648 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5424,7499.73> up=0.994264 +13:20:05.648 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.108701 angularSpeed=0.055614 +13:20:05.648 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:20:05.648 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6188,7502> +13:20:05.648 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3188,7502> terrainY=63.3125 tireTerrainGap=0.00629044 +13:20:05.648 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6188,7502> radius=0.3 bottom=<7012.06,63.3188,7502> fraction=0.483162 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00629425 +13:20:05.648 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6048,7497.72> +13:20:05.648 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1548,7497.72> terrainY=64.1487 tireTerrainGap=0.00601959 +13:20:05.648 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6048,7497.72> radius=0.45 bottom=<7009.92,64.1548,7497.72> fraction=0.481772 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00598907 +13:20:05.648 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2644,7497.8> +13:20:05.648 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8144,7497.8> terrainY=63.8148 tireTerrainGap=-0.000415802 +13:20:05.648 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2644,7497.8> radius=0.45 bottom=<7014.46,63.8144,7497.8> fraction=0.452778 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000389099 +13:20:05.648 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:20:05.648 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +13:20:05.915 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:20:05.915 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:20:05.915 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:20:05.915 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:20:06.448 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:20:06.448 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:20:06.448 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:20:06.448 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +13:20:06.716 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5277,7499.76> up=0.994266 +13:20:06.716 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0413957 angularSpeed=0.0508746 +13:20:06.716 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:20:06.716 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6121,7502.03> +13:20:06.716 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3121,7502.03> terrainY=63.31 tireTerrainGap=0.00206757 +13:20:06.716 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6121,7502.03> radius=0.3 bottom=<7012.07,63.3121,7502.03> fraction=0.464107 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00210571 +13:20:06.716 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5927,7497.74> +13:20:06.716 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1427,7497.74> terrainY=64.1417 tireTerrainGap=0.00102234 +13:20:06.716 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5927,7497.74> radius=0.45 bottom=<7009.97,64.1427,7497.74> fraction=0.459035 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.000991821 +13:20:06.716 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2584,7497.85> +13:20:06.716 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8084,7497.85> terrainY=63.8117 tireTerrainGap=-0.00329971 +13:20:06.716 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2584,7497.85> radius=0.45 bottom=<7014.51,63.8084,7497.85> fraction=0.439444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0033226 +13:20:06.716 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:20:06.982 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:20:06.982 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:20:06.982 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:20:06.982 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +13:20:07.516 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:20:07.517 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:20:07.517 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:20:07.517 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:20:07.782 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.528,7499.77> up=0.994224 +13:20:07.782 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:20:07.782 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:20:07.782 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.611,7502.04> +13:20:07.782 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.311,7502.04> terrainY=63.3094 tireTerrainGap=0.00153351 +13:20:07.782 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.611,7502.04> radius=0.3 bottom=<7012.08,63.311,7502.04> fraction=0.461324 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00149155 +13:20:07.782 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5928,7497.74> +13:20:07.782 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1429,7497.74> terrainY=64.1405 tireTerrainGap=0.00234985 +13:20:07.782 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5928,7497.74> radius=0.45 bottom=<7009.98,64.1429,7497.74> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +13:20:07.782 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2591,7497.86> +13:20:07.782 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8091,7497.86> terrainY=63.8112 tireTerrainGap=-0.00201035 +13:20:07.782 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2591,7497.86> radius=0.45 bottom=<7014.52,63.8091,7497.86> fraction=0.445278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00203705 +13:20:07.782 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:20:08.049 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:20:08.049 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:20:08.049 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +13:20:08.049 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:20:08.581 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:20:08.582 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:20:08.582 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +13:20:08.582 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:20:08.849 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.528,7499.77> up=0.994224 +13:20:08.849 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:20:08.849 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:20:08.849 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.611,7502.04> +13:20:08.849 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.311,7502.04> terrainY=63.3094 tireTerrainGap=0.00153351 +13:20:08.849 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.611,7502.04> radius=0.3 bottom=<7012.08,63.311,7502.04> fraction=0.461324 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00149155 +13:20:08.849 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5928,7497.74> +13:20:08.849 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1429,7497.74> terrainY=64.1405 tireTerrainGap=0.00234985 +13:20:08.849 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5928,7497.74> radius=0.45 bottom=<7009.98,64.1429,7497.74> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +13:20:08.849 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2591,7497.86> +13:20:08.849 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8091,7497.86> terrainY=63.8112 tireTerrainGap=-0.00201035 +13:20:08.849 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2591,7497.86> radius=0.45 bottom=<7014.52,63.8091,7497.86> fraction=0.445278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00203705 +13:20:08.849 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:20:09.115 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:20:09.115 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +13:20:09.124 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +13:20:09.124 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +13:20:09.125 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +13:20:09.125 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +13:20:09.125 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +13:20:09.125 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +13:20:09.125 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +13:20:09.919 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +13:20:09.955 SCRIPT : ERR ORDINARY: local participant verified project=chat phase=prison +13:20:09.955 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/error.log.txt b/docs/evidence/packed-chat-2026-09-19-131942-current/error.log.txt new file mode 100644 index 0000000..5b2f250 --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/error.log.txt @@ -0,0 +1,84 @@ +--------------------------------------------- +Log Z:\tmp\erri-packed-chat-20260919-1320\profile\logs\logs_2026-09-19_13-19-42\error.log started at 2026-09-19 13:19:44 (2026-09-19 11:19:44 UTC) + +13:19:44.125 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +13:19:45.082 SCRIPT : Compiling Game scripts +13:19:45.082 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:19:45.082 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:19:45.340 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:45.352 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:19:45.381 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:19:45.484 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:19:45.484 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:19:45.484 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:19:45.484 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:19:45.518 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:19:45.565 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +13:19:45.576 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:19:45.576 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:19:45.578 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:19:45.620 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:45.621 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:45.622 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:19:45.622 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:19:45.679 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:19:46.811 DEFAULT (W): No GameMode present in the world, using fallback logic! +13:19:48.834 SCRIPT : Compiling Game scripts +13:19:48.834 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:19:48.834 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:19:49.074 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:49.086 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:19:49.112 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:19:49.210 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:19:49.210 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:19:49.210 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:19:49.210 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:19:49.243 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:19:49.288 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +13:19:49.301 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:19:49.301 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:19:49.302 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:19:49.346 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:49.346 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:49.347 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:19:49.347 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:19:49.403 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:19:55.055 WORLD : Game::LoadEntities +13:19:55.055 WORLD : CreateEntities +13:19:55.055 WORLD : CreateEntities +13:19:55.055 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" +13:19:55.055 ENTITY : CreateComponent 'ScriptedRadioComponent' +13:19:55.055 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +13:20:00.708 WORLD : InitEntities 'world' +13:20:00.708 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +13:20:00.708 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:20:01.733 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:20:01.733 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +13:20:01.733 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:20:01.733 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:20:01.733 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:20:01.734 SCRIPT (W): Can't open config file "" +13:20:01.734 SCRIPT (W): Cannot update game blocklist. Backend is offline. +13:20:01.735 WORLD : InitEntities 'world' +13:20:01.735 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +13:20:01.735 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +13:20:01.735 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:20:01.735 SCRIPT (W): Slot_Chat Has no Content! +13:20:01.735 SCRIPT (W): Slot_VON Has no Content! +13:20:01.735 SCRIPT (W): Slot_AvailableActions Has no Content! +13:20:01.736 SCRIPT (W): Slot_Vehicle Has no Content! +13:20:01.736 SCRIPT (W): Slot_GameVersion Has no Content! +13:20:01.736 SCRIPT (W): Slot_Notifications Has no Content! +13:20:01.736 SCRIPT (W): Slot_Hints Has no Content! +13:20:01.741 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +13:20:01.922 WORLD : UpdateEntities +13:20:01.922 WORLD : PostFrame +13:20:01.922 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +13:20:01.922 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:20:01.966 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:20:01.966 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +13:20:01.966 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +13:20:01.966 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +13:20:04.056 WORLD : UpdateEntities +13:20:04.056 WORLD : AfterPostSimulate +13:20:04.056 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/headless-launch.log.txt b/docs/evidence/packed-chat-2026-09-19-131942-current/headless-launch.log.txt new file mode 100644 index 0000000..46bc54b --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/headless-launch.log.txt @@ -0,0 +1,139 @@ +[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1) +No CAP_SYS_NICE, falling back to regular-priority compute and threads. +Performance will be affected. +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope' +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2) +[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays' +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10) +[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11) +[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist +[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts' +[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist +[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0) +[gamescope] [Info] vulkan: physical device supports DRM format modifiers +[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend +[gamescope] [Info] vulkan: supported DRM formats for sampling usage: +[gamescope] [Info] vulkan: AR24 (0x34325241) +[gamescope] [Info] vulkan: XR24 (0x34325258) +[gamescope] [Info] vulkan: AB24 (0x34324241) +[gamescope] [Info] vulkan: XB24 (0x34324258) +[gamescope] [Info] vulkan: RG16 (0x36314752) +[gamescope] [Info] vulkan: NV12 (0x3231564E) +[gamescope] [Info] vulkan: AB4H (0x48344241) +[gamescope] [Info] vulkan: XB4H (0x48344258) +[gamescope] [Info] vulkan: AB48 (0x38344241) +[gamescope] [Info] vulkan: XB48 (0x38344258) +[gamescope] [Info] vulkan: AB30 (0x30334241) +[gamescope] [Info] vulkan: XB30 (0x30334258) +[gamescope] [Info] vulkan: AR30 (0x30335241) +[gamescope] [Info] vulkan: XR30 (0x30335258) +[gamescope] [Info] wlserver: Using explicit sync when available +[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0' +[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend +[gamescope] [Info] wlserver: Successfully initialized libei for input emulation! +[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use +[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2 +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Multiple symbols for level 1/group 1 on key +> Using F23, ignoring XF86TouchpadOff +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Symbol map for key redefined +> Using last definition for conflicting fields +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn +> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff +> Warning: Could not resolve keysym XF86ActionOnSelection +> Warning: Could not resolve keysym XF86ContextualInsert +> Warning: Could not resolve keysym XF86ContextualQuery +Errors from xkbcomp are not fatal to the X server +[gamescope] [Info] pipewire: stream state changed: connecting +[gamescope] [Info] pipewire: stream state changed: paused +[gamescope] [Info] pipewire: stream available on node ID: 101 +[gamescope] [Info] vblank: Using timerfd. +fsync: up and running. +[Gamescope WSI] No application info given. +[Gamescope WSI] Executable name: explorer.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: xalia.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: xalia.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] No application info given. +The XKEYBOARD keymap compiler (xkbcomp) reports: +> Warning: Unsupported maximum keycode 709, clipping. +> X11 cannot support keycodes above 255. +> Warning: Virtual modifier Hyper multiply defined +> Using 0, ignoring 0 +> Warning: Virtual modifier ScrollLock multiply defined +> Using 0, ignoring 0 +Errors from xkbcomp are not fatal to the X server +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: DXVK + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Executable name: ArmaReforgerSteam.exe +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: (null) + applicationVersion: 0 + pEngineName: (null) + engineVersion: 0 + apiVersion: 4198400 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: (null) + applicationVersion: 0 + pEngineName: (null) + engineVersion: 0 + apiVersion: 4198400 +ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment. +[Gamescope WSI] Application info: + pApplicationName: ArmaReforgerSteam.exe + applicationVersion: 0 + pEngineName: vkd3d + engineVersion: 12587008 + apiVersion: 4206592 +[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1. +[Gamescope WSI] Creating Gamescope surface: xid: 0x1a00030 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a00030 +[Gamescope WSI] Surface state: + steam app id: 1874880 + window xid: 0x1a00030 + wayland surface res id: 5 + layer client flags: 0x4 + server hdr output enabled: false + hdr formats exposed to client: false +[Gamescope WSI] Creating swapchain for xid: 0x1a00030 - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_R8G8B8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true +[Gamescope WSI] Created swapchain for xid: 0x1a00030 swapchain: 0x7f48581815c0 - imageCount: 3 +[Gamescope WSI] Destroying swapchain: 0x7f48581815c0 +[Gamescope WSI] Destroyed swapchain: 0x7f48581815c0 +[Gamescope WSI] Creating swapchain for xid: 0x1a00030 - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_R8G8B8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true +[Gamescope WSI] Created swapchain for xid: 0x1a00030 swapchain: 0x7f48581815c0 - imageCount: 3 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/ai/addon.gproj b/docs/evidence/packed-chat-2026-09-19-131942-current/package/ai/addon.gproj new file mode 100644 index 0000000..ec3100b --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/package/ai/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Ai" + GUID "5192138CB9D5B911" + TITLE "Escapists Rereintroduced - Ai" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/ai/data.pak b/docs/evidence/packed-chat-2026-09-19-131942-current/package/ai/data.pak new file mode 100644 index 0000000..0acdb2a Binary files /dev/null and b/docs/evidence/packed-chat-2026-09-19-131942-current/package/ai/data.pak differ diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/ai/resourceDatabase.rdb b/docs/evidence/packed-chat-2026-09-19-131942-current/package/ai/resourceDatabase.rdb new file mode 100644 index 0000000..c0fa6b4 Binary files /dev/null and b/docs/evidence/packed-chat-2026-09-19-131942-current/package/ai/resourceDatabase.rdb differ diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/chat/addon.gproj b/docs/evidence/packed-chat-2026-09-19-131942-current/package/chat/addon.gproj new file mode 100644 index 0000000..d2e277c --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/package/chat/addon.gproj @@ -0,0 +1,12 @@ +GameProject { + ID "ERR_Chat" + GUID "FA804F411BDDF2C6" + TITLE "Escapists Rereintroduced - Chat" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + "5192138CB9D5B911" + "D31039C7C53E348A" + "9AAEE9041D79809E" + } +} diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/chat/data.pak b/docs/evidence/packed-chat-2026-09-19-131942-current/package/chat/data.pak new file mode 100644 index 0000000..eca7712 Binary files /dev/null and b/docs/evidence/packed-chat-2026-09-19-131942-current/package/chat/data.pak differ diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/chat/resourceDatabase.rdb b/docs/evidence/packed-chat-2026-09-19-131942-current/package/chat/resourceDatabase.rdb new file mode 100644 index 0000000..4f59ccb Binary files /dev/null and b/docs/evidence/packed-chat-2026-09-19-131942-current/package/chat/resourceDatabase.rdb differ diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/core/addon.gproj b/docs/evidence/packed-chat-2026-09-19-131942-current/package/core/addon.gproj new file mode 100644 index 0000000..54287e7 --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/package/core/addon.gproj @@ -0,0 +1,8 @@ +GameProject { + ID "ERR_Core" + GUID "2528466DE220D91C" + TITLE "Escapists Rereintroduced - Core" + Dependencies { + "58D0FB3206B6F859" + } +} diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/core/data.pak b/docs/evidence/packed-chat-2026-09-19-131942-current/package/core/data.pak new file mode 100644 index 0000000..e511470 Binary files /dev/null and b/docs/evidence/packed-chat-2026-09-19-131942-current/package/core/data.pak differ diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/core/resourceDatabase.rdb b/docs/evidence/packed-chat-2026-09-19-131942-current/package/core/resourceDatabase.rdb new file mode 100644 index 0000000..2198e69 Binary files /dev/null and b/docs/evidence/packed-chat-2026-09-19-131942-current/package/core/resourceDatabase.rdb differ diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/intel/addon.gproj b/docs/evidence/packed-chat-2026-09-19-131942-current/package/intel/addon.gproj new file mode 100644 index 0000000..5b29a17 --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/package/intel/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Intel" + GUID "D31039C7C53E348A" + TITLE "Escapists Rereintroduced - Intel" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/intel/data.pak b/docs/evidence/packed-chat-2026-09-19-131942-current/package/intel/data.pak new file mode 100644 index 0000000..73d3dab Binary files /dev/null and b/docs/evidence/packed-chat-2026-09-19-131942-current/package/intel/data.pak differ diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/intel/resourceDatabase.rdb b/docs/evidence/packed-chat-2026-09-19-131942-current/package/intel/resourceDatabase.rdb new file mode 100644 index 0000000..8747de6 Binary files /dev/null and b/docs/evidence/packed-chat-2026-09-19-131942-current/package/intel/resourceDatabase.rdb differ diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/map/addon.gproj b/docs/evidence/packed-chat-2026-09-19-131942-current/package/map/addon.gproj new file mode 100644 index 0000000..5d0a4d2 --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/package/map/addon.gproj @@ -0,0 +1,9 @@ +GameProject { + ID "ERR_Map" + GUID "9AAEE9041D79809E" + TITLE "Escapists Rereintroduced - Map" + Dependencies { + "58D0FB3206B6F859" + "2528466DE220D91C" + } +} diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/map/data.pak b/docs/evidence/packed-chat-2026-09-19-131942-current/package/map/data.pak new file mode 100644 index 0000000..0e7fd67 Binary files /dev/null and b/docs/evidence/packed-chat-2026-09-19-131942-current/package/map/data.pak differ diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/package/map/resourceDatabase.rdb b/docs/evidence/packed-chat-2026-09-19-131942-current/package/map/resourceDatabase.rdb new file mode 100644 index 0000000..72364c1 Binary files /dev/null and b/docs/evidence/packed-chat-2026-09-19-131942-current/package/map/resourceDatabase.rdb differ diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/packed-input-provenance.json b/docs/evidence/packed-chat-2026-09-19-131942-current/packed-input-provenance.json new file mode 100644 index 0000000..23aa34a --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/packed-input-provenance.json @@ -0,0 +1,113 @@ +{ + "schema_version": 2, + "kind": "packed-chat-runtime-input", + "launch_id": "66dc1385-ad47-4af2-8e14-e821132d3d7c", + "captured_unix": 1789816781.2836075, + "candidate_directory": "/tmp/erri-native-package-current-20260919-1317/packages", + "runtime_directory": "/tmp/erri-packed-chat-20260919-1320/input/addons", + "profile": "/tmp/erri-packed-chat-20260919-1320/profile", + "command": [ + "gamescope", + "--backend", + "headless", + "-W", + "1280", + "-H", + "720", + "-w", + "1280", + "-h", + "720", + "-r", + "30", + "--", + "/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton", + "run", + "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/ArmaReforgerSteam.exe", + "-addonsDir", + "Z:/tmp/erri-packed-chat-20260919-1320/input/addons", + "-addons", + "FA804F411BDDF2C6", + "-profile", + "Z:/tmp/erri-packed-chat-20260919-1320/profile", + "-errOrdinaryScenario", + "chat", + "-noSplash", + "-noBackend", + "-noSound", + "-noThrow", + "-disableCrashReporter", + "-logconsole" + ], + "artifacts": { + "core/addon.gproj": { + "bytes": 137, + "sha256": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46" + }, + "core/data.pak": { + "bytes": 199646, + "sha256": "3f84b9622afe2ff1683f05917a1e8e190f4f7dcf62f48a8c29adde95ce8a1b50" + }, + "core/resourceDatabase.rdb": { + "bytes": 6865, + "sha256": "e85f078208a86591a4b0f791d2b56661018bf46e4b14b5405b183df0baf485f3" + }, + "ai/addon.gproj": { + "bytes": 154, + "sha256": "5f559db8f526700db11e6ae763f5245f19b7006fc68c56e4c09fb6f940bdf2a1" + }, + "ai/data.pak": { + "bytes": 85107, + "sha256": "627b7389f0656a78f90acc5ead405e494b27b8bcb0cfb85dc812e177bc0f04f6" + }, + "ai/resourceDatabase.rdb": { + "bytes": 1909, + "sha256": "7dc88e5e7a9dfc6d3ddf9f046d211b083c1f379b61cdc32f6d93084add37e53f" + }, + "intel/addon.gproj": { + "bytes": 160, + "sha256": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe" + }, + "intel/data.pak": { + "bytes": 1250, + "sha256": "5396732e193eb36d4ce86f9999f3cb112b5e1766f0e1b1911b6baa5e761fa37a" + }, + "intel/resourceDatabase.rdb": { + "bytes": 227, + "sha256": "062996b9102e99d19eb680bed04880b0e087d9f8789681c0f3ff8ab6772339ba" + }, + "map/addon.gproj": { + "bytes": 156, + "sha256": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a" + }, + "map/data.pak": { + "bytes": 10463, + "sha256": "211835e6afd1b9b18f0a0e4ebd235afa03b1436810c355d6cfeec636c8935dd0" + }, + "map/resourceDatabase.rdb": { + "bytes": 819, + "sha256": "9b7f50a84d4fb2d390e42c25ecb68d264038bb81926065653e3e9f87556b2462" + }, + "chat/addon.gproj": { + "bytes": 221, + "sha256": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e" + }, + "chat/data.pak": { + "bytes": 15163, + "sha256": "26fa2ce81dada224fcb0c24ea3e2ebca01eb67c149bd06bf77f04c6b5faeca53" + }, + "chat/resourceDatabase.rdb": { + "bytes": 804, + "sha256": "42820c285d135a00f44be372b5611f568d0030aaa45b05091f59e723eec46dc4" + } + }, + "build_qualification": "unqualified candidate; packaging verdict is unchanged", + "project": "chat", + "addon_order": [ + "core", + "ai", + "intel", + "map", + "chat" + ] +} diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/raw-startup-report.json b/docs/evidence/packed-chat-2026-09-19-131942-current/raw-startup-report.json new file mode 100644 index 0000000..6d9b329 --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/raw-startup-report.json @@ -0,0 +1,31 @@ +{ + "log": "console.log", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "packed-only chat ordinary local startup; explicit noSplash; no packaging, visible UI, escape, multiplayer or release qualification", + "local_participant_verified": true, + "scenario_header_verified": true, + "verified_header_projects": [ + "chat" + ], + "game_module_defines": [ + "PLATFORM_WINDOWS,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", + "PLATFORM_WINDOWS,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" + ], + "workbench_undefined": true, + "normal_mission_ready": true, + "unexpected_smoke_fixture": false, + "failed": false, + "ready": true, + "packed_only": true, + "packed_loaded_paths_verified": true, + "packed_input_violations": [], + "packed_normal_modules": true, + "build_qualified": false, + "release_qualified": false, + "failure_observed_during_polling": false, + "packed_consumption_verified": true +} diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/report.json b/docs/evidence/packed-chat-2026-09-19-131942-current/report.json new file mode 100644 index 0000000..cd4dc67 --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/report.json @@ -0,0 +1,81 @@ +{ + "log": "console.log", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "packed-only chat ordinary local startup; explicit noSplash; no packaging, visible UI, escape, multiplayer or release qualification", + "local_participant_verified": true, + "scenario_header_verified": true, + "verified_header_projects": [ + "chat" + ], + "game_module_defines": [ + "PLATFORM_WINDOWS,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", + "PLATFORM_WINDOWS,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" + ], + "workbench_undefined": true, + "normal_mission_ready": true, + "unexpected_smoke_fixture": false, + "failed": false, + "ready": true, + "packed_only": true, + "packed_loaded_paths_verified": true, + "packed_input_violations": [], + "packed_normal_modules": true, + "build_qualified": false, + "release_qualified": false, + "packed_consumption_verified": true, + "archived_packed_input_verified": true, + "runner_result": "packed-chat-started", + "runner_failure_latched": false, + "packed_inputs_unchanged_after_run": true, + "auxiliary_native_reports": { + "script.log": { + "log": "script.log", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" + }, + "error.log": { + "log": "error.log", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" + }, + "headless-launch.log": { + "log": "headless-launch.log", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" + }, + "rereintroduced-hq.log": { + "log": "rereintroduced-hq.log", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [], + "engine_errors": [], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" + } + }, + "auxiliary_native_failure": false, + "runner_settle_claim_consistent": true, + "settle_evidence": "Native readiness recomputed; 15-second continuous settling is the sealed runner verdict, not an independently recorded polling timeline.", + "qualification": "packed-only ordinary startup consumption only; original package build verdict and current source acceptance remain separate", + "verifier_sha256": { + "archive_packed.py": "5e5bdd638aad69468694a4410db81e9fcf5c7aa414126dd931d2a11d83c3da00", + "headless_game.py": "1116dc6b6636f04cc2875a7b404064fb092c83c1ae75c17d72b2d90348c93378", + "native_report.py": "bb75ef5fe551f45776d441f15a49ccad4daf19abca505187f9b2d30102538658" + } +} diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/rereintroduced-hq.log.txt b/docs/evidence/packed-chat-2026-09-19-131942-current/rereintroduced-hq.log.txt new file mode 100644 index 0000000..a8dc2c0 --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/rereintroduced-hq.log.txt @@ -0,0 +1,10 @@ +#1 t=6.9s M0 REGISTER group 1 [session=1789816800-1] +#2 t=6.9s M0 MORTAR DEPLOY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; authored gun and four-person crew; finite ammunition initialization pending [session=1789816800-1] +#3 t=7.7s M0 COURIER READY trip=0 state=1 delivered=0; 12 distinct original HE shells physically confirmed in existing western cache [session=1789816800-1] +#4 t=8.9s M0 REGISTER group 2 [session=1789816800-1] +#5 t=8.9s M0 REGISTER group 3 [session=1789816800-1] +#6 t=8.9s M0 REGISTER group 4 [session=1789816800-1] +#7 t=8.9s M0 REGISTER group 5 [session=1789816800-1] +#8 t=8.9s M0 REGISTER group 6 [session=1789816800-1] +#9 t=8.9s M0 REGISTER group 7 [session=1789816800-1] +#10 t=18.9s M0 MORTAR CREW READY site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; four original physical members, one manpack, 27 confirmed HE; new shell requests=27; allocation permanently closed [session=1789816800-1] diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/runner.json.txt b/docs/evidence/packed-chat-2026-09-19-131942-current/runner.json.txt new file mode 100644 index 0000000..878be75 --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/runner.json.txt @@ -0,0 +1,29 @@ +{ + "packed_only": true, + "packed_input_provenance": "packed-input-provenance.json", + "packed_input_provenance_sha256": "0dbcd17153b8d5f8aebed6aa4856473b997e3eaa375359719757ef370367e01a", + "packed_launch_id": "66dc1385-ad47-4af2-8e14-e821132d3d7c", + "stopped_unix": 1789816826.4378889, + "packed_inputs_unchanged_after_run": true, + "packed_input_error": null, + "console_sha256": "386a9c83881aea27a4fc4e4ae68caf86b8f64bf31ae91ededfbda98d119b8c81", + "build_qualified": false, + "release_qualified": false, + "started_unix": 1789816781.2837245, + "result": "packed-chat-started", + "session": "/tmp/erri-packed-chat-20260919-1320/profile/logs/logs_2026-09-19_13-19-42", + "project": "chat", + "cleanup_confirmed": true, + "runner_error": null, + "failure_grace_seconds": 20, + "failure_observed_during_polling": false, + "first_failure_elapsed_seconds": null, + "executable": "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/ArmaReforgerSteam.exe", + "dedicated_server": false, + "display": "headless Gamescope", + "audio": "-noSound plus own silent sink", + "control_only": false, + "source_manifest_scope": "none: packed input provenance is separate; loose source manifests cannot qualify this run", + "scope": "packed-only chat ordinary local startup; explicit noSplash; no packaging, visible UI, escape, multiplayer or release qualification", + "packed_consumption_verified": true +} diff --git a/docs/evidence/packed-chat-2026-09-19-131942-current/script.log.txt b/docs/evidence/packed-chat-2026-09-19-131942-current/script.log.txt new file mode 100644 index 0000000..1f9febf --- /dev/null +++ b/docs/evidence/packed-chat-2026-09-19-131942-current/script.log.txt @@ -0,0 +1,229 @@ +--------------------------------------------- +Log Z:\tmp\erri-packed-chat-20260919-1320\profile\logs\logs_2026-09-19_13-19-42\script.log started at 2026-09-19 13:19:44 (2026-09-19 11:19:44 UTC) + +13:19:44.100 SCRIPT : SCRIPT : Initializing scripts +13:19:44.100 SCRIPT : SCRIPT : ScriptProjectManager init +13:19:44.177 SCRIPT : SCRIPT : Compiling GameLib scripts +13:19:44.207 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 666K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:19:44.207 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +13:19:44.207 SCRIPT : SCRIPT : Compiling Game scripts +13:19:45.082 SCRIPT : Compiling Game scripts +13:19:45.082 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:19:45.082 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:19:45.340 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:45.352 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:19:45.381 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:19:45.484 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:19:45.484 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:19:45.484 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:19:45.484 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:19:45.518 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:19:45.565 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +13:19:45.576 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:19:45.576 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:19:45.578 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:19:45.620 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:45.621 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:45.622 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:19:45.622 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:19:45.679 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:19:45.804 SCRIPT : Module: Game; loaded 5780x files; 11202x classes; used 27041K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 6264db09 +13:19:46.517 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BC201D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +13:19:46.519 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BC201D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +13:19:46.519 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BC201D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +13:19:46.519 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BC201D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +13:19:46.519 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BC201D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +13:19:46.812 SCRIPT : ERR ORDINARY: requesting header project=chat +13:19:47.967 SCRIPT : SCRIPT : Compiling GameLib scripts +13:19:47.998 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 664K of static memory; defines: "PLATFORM_WINDOWS,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb +13:19:47.998 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +13:19:47.998 SCRIPT : SCRIPT : Compiling Game scripts +13:19:48.834 SCRIPT : Compiling Game scripts +13:19:48.834 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +13:19:48.834 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +13:19:49.074 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:49.086 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +13:19:49.112 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +13:19:49.210 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +13:19:49.210 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +13:19:49.210 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +13:19:49.210 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +13:19:49.243 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +13:19:49.288 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +13:19:49.301 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +13:19:49.301 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +13:19:49.302 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +13:19:49.346 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:49.346 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +13:19:49.347 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +13:19:49.347 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +13:19:49.403 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +13:19:49.520 SCRIPT : Module: Game; loaded 5780x files; 11202x classes; used 27014K of static memory; defines: "PLATFORM_WINDOWS,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"; CRC32: 6264db09 +13:20:00.708 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +13:20:01.728 SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems +13:20:01.733 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key! +13:20:01.733 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key! +13:20:01.734 SCRIPT (W): Can't open config file "" +13:20:01.734 SCRIPT (W): Cannot update game blocklist. Backend is offline. +13:20:01.735 SCRIPT (W): Slot_WeaponInfo Has no Content! +13:20:01.735 SCRIPT (W): Slot_Chat Has no Content! +13:20:01.735 SCRIPT (W): Slot_VON Has no Content! +13:20:01.736 SCRIPT (W): Slot_AvailableActions Has no Content! +13:20:01.736 SCRIPT (W): Slot_Vehicle Has no Content! +13:20:01.736 SCRIPT (W): Slot_GameVersion Has no Content! +13:20:01.736 SCRIPT (W): Slot_Notifications Has no Content! +13:20:01.736 SCRIPT (W): Slot_Hints Has no Content! +13:20:01.741 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +13:20:01.741 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +13:20:01.741 SCRIPT : Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged. +13:20:01.741 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +13:20:01.754 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +13:20:01.767 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +13:20:01.922 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +13:20:03.251 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +13:20:03.264 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +13:20:03.264 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +13:20:03.290 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +13:20:03.291 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +13:20:03.338 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +13:20:03.338 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +13:20:03.348 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +13:20:03.395 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +13:20:03.395 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +13:20:03.396 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +13:20:03.396 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +13:20:03.400 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +13:20:03.401 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +13:20:03.401 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +13:20:03.402 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +13:20:03.402 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +13:20:03.402 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +13:20:03.402 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +13:20:03.403 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +13:20:03.403 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +13:20:03.403 SCRIPT : ERR GEAR SUPPORT: center=<7012,64.0216,7502.25> radius=0.3 bottom=<7012,63.7216,7502.25> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:20:03.403 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +13:20:03.403 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +13:20:03.403 SCRIPT : ERR GEAR SUPPORT: center=<7009.72,64.4897,7497.97> radius=0.45 bottom=<7009.72,64.0397,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:20:03.403 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +13:20:03.403 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +13:20:03.403 SCRIPT : ERR GEAR SUPPORT: center=<7014.28,64.4898,7497.97> radius=0.45 bottom=<7014.28,64.0398,7497.97> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.119999 +13:20:03.403 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:20:03.403 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:20:03.403 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:20:03.403 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:20:03.403 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +13:20:03.403 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +13:20:04.283 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:20:04.283 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:20:04.283 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:20:04.283 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:20:04.581 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.07,63.5139,7499.7> up=0.995518 +13:20:04.581 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.184465 angularSpeed=0.0791157 +13:20:04.581 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:20:04.581 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6048,7501.97> +13:20:04.581 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3048,7501.97> terrainY=63.3167 tireTerrainGap=-0.0118523 +13:20:04.581 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6048,7501.97> radius=0.3 bottom=<7012.06,63.3048,7501.97> fraction=0.400785 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.0118256 +13:20:04.581 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6015,7497.71> +13:20:04.581 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1515,7497.71> terrainY=64.1561 tireTerrainGap=-0.0045929 +13:20:04.581 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6015,7497.71> radius=0.45 bottom=<7009.88,64.1515,7497.71> fraction=0.4341 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00449371 +13:20:04.581 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2575,7497.75> +13:20:04.582 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8075,7497.75> terrainY=63.8177 tireTerrainGap=-0.010128 +13:20:04.582 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2575,7497.75> radius=0.45 bottom=<7014.42,63.8075,7497.75> fraction=0.408333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0101662 +13:20:04.582 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:20:04.815 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:20:04.815 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:20:04.815 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +13:20:04.815 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +13:20:05.383 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:20:05.383 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +13:20:05.383 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:20:05.648 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5424,7499.73> up=0.994264 +13:20:05.648 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.108701 angularSpeed=0.055614 +13:20:05.648 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:20:05.648 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6188,7502> +13:20:05.648 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3188,7502> terrainY=63.3125 tireTerrainGap=0.00629044 +13:20:05.648 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6188,7502> radius=0.3 bottom=<7012.06,63.3188,7502> fraction=0.483162 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00629425 +13:20:05.648 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6048,7497.72> +13:20:05.648 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1548,7497.72> terrainY=64.1487 tireTerrainGap=0.00601959 +13:20:05.648 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6048,7497.72> radius=0.45 bottom=<7009.92,64.1548,7497.72> fraction=0.481772 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00598907 +13:20:05.648 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2644,7497.8> +13:20:05.648 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8144,7497.8> terrainY=63.8148 tireTerrainGap=-0.000415802 +13:20:05.648 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2644,7497.8> radius=0.45 bottom=<7014.46,63.8144,7497.8> fraction=0.452778 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000389099 +13:20:05.648 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:20:05.648 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +13:20:05.915 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:20:05.915 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:20:05.915 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +13:20:05.915 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:20:06.448 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:20:06.448 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:20:06.448 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +13:20:06.448 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +13:20:06.716 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5277,7499.76> up=0.994266 +13:20:06.716 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0413957 angularSpeed=0.0508746 +13:20:06.716 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:20:06.716 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6121,7502.03> +13:20:06.716 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3121,7502.03> terrainY=63.31 tireTerrainGap=0.00206757 +13:20:06.716 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6121,7502.03> radius=0.3 bottom=<7012.07,63.3121,7502.03> fraction=0.464107 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00210571 +13:20:06.716 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5927,7497.74> +13:20:06.716 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1427,7497.74> terrainY=64.1417 tireTerrainGap=0.00102234 +13:20:06.716 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5927,7497.74> radius=0.45 bottom=<7009.97,64.1427,7497.74> fraction=0.459035 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.000991821 +13:20:06.716 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2584,7497.85> +13:20:06.716 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8084,7497.85> terrainY=63.8117 tireTerrainGap=-0.00329971 +13:20:06.716 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2584,7497.85> radius=0.45 bottom=<7014.51,63.8084,7497.85> fraction=0.439444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0033226 +13:20:06.716 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:20:06.982 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:20:06.982 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:20:06.982 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:20:06.982 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +13:20:07.516 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:20:07.517 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:20:07.517 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:20:07.517 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +13:20:07.782 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.528,7499.77> up=0.994224 +13:20:07.782 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:20:07.782 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:20:07.782 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.611,7502.04> +13:20:07.782 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.311,7502.04> terrainY=63.3094 tireTerrainGap=0.00153351 +13:20:07.782 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.611,7502.04> radius=0.3 bottom=<7012.08,63.311,7502.04> fraction=0.461324 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00149155 +13:20:07.782 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5928,7497.74> +13:20:07.782 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1429,7497.74> terrainY=64.1405 tireTerrainGap=0.00234985 +13:20:07.782 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5928,7497.74> radius=0.45 bottom=<7009.98,64.1429,7497.74> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +13:20:07.782 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2591,7497.86> +13:20:07.782 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8091,7497.86> terrainY=63.8112 tireTerrainGap=-0.00201035 +13:20:07.782 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2591,7497.86> radius=0.45 bottom=<7014.52,63.8091,7497.86> fraction=0.445278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00203705 +13:20:07.782 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:20:08.049 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:20:08.049 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:20:08.049 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +13:20:08.049 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:20:08.582 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:20:08.582 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +13:20:08.582 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +13:20:08.582 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:20:08.849 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.528,7499.77> up=0.994224 +13:20:08.849 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +13:20:08.849 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +13:20:08.849 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.611,7502.04> +13:20:08.849 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.311,7502.04> terrainY=63.3094 tireTerrainGap=0.00153351 +13:20:08.849 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.611,7502.04> radius=0.3 bottom=<7012.08,63.311,7502.04> fraction=0.461324 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00149155 +13:20:08.849 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5928,7497.74> +13:20:08.849 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1429,7497.74> terrainY=64.1405 tireTerrainGap=0.00234985 +13:20:08.849 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5928,7497.74> radius=0.45 bottom=<7009.98,64.1429,7497.74> fraction=0.465508 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00241089 +13:20:08.849 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2591,7497.86> +13:20:08.849 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8091,7497.86> terrainY=63.8112 tireTerrainGap=-0.00201035 +13:20:08.849 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2591,7497.86> radius=0.45 bottom=<7014.52,63.8091,7497.86> fraction=0.445278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00203705 +13:20:08.849 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +13:20:09.115 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +13:20:09.115 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +13:20:09.124 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +13:20:09.124 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +13:20:09.125 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +13:20:09.125 SCRIPT : Rereintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<6090,211.444,7160> +13:20:09.125 SCRIPT : Rereintroduced [prison]: gate candidate raw= resolved={C3FDC4DBCD58C2F5}Prefabs/ERR/PrisonDoor.et lock=1 door=1 position=<6090,211.344,7154> +13:20:09.125 SCRIPT : Rereintroduced [prison]: destruction health=1000 destroyed=0 queued=0 +13:20:09.125 SCRIPT : Rereintroduced [prison]: one intact successor lock in owned prison +13:20:09.919 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +13:20:09.955 SCRIPT : ERR ORDINARY: local participant verified project=chat phase=prison +13:20:09.955 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> diff --git a/docs/evidence/source-bundle-2026-09-19-1310/escapistsrereintroduced-development.zip b/docs/evidence/source-bundle-2026-09-19-1310/escapistsrereintroduced-development.zip new file mode 100644 index 0000000..f9c2b37 Binary files /dev/null and b/docs/evidence/source-bundle-2026-09-19-1310/escapistsrereintroduced-development.zip differ diff --git a/docs/evidence/source-bundle-2026-09-19-1310/report.json b/docs/evidence/source-bundle-2026-09-19-1310/report.json new file mode 100644 index 0000000..9efdeee --- /dev/null +++ b/docs/evidence/source-bundle-2026-09-19-1310/report.json @@ -0,0 +1,51 @@ +{ + "archive_bytes": 1051500, + "archive_sha256": "d54df145d192ea25595ccc9b29b5503fc24469483286fca370851a4f592d6217", + "kind": "DEVELOPMENT SOURCE BUNDLE", + "payload_files": 184, + "preview": false, + "projects": { + "ai": { + "dependencies": [ + "2528466DE220D91C", + "58D0FB3206B6F859" + ], + "guid": "5192138CB9D5B911", + "id": "ERR_Ai" + }, + "chat": { + "dependencies": [ + "2528466DE220D91C", + "5192138CB9D5B911", + "58D0FB3206B6F859", + "9AAEE9041D79809E", + "D31039C7C53E348A" + ], + "guid": "FA804F411BDDF2C6", + "id": "ERR_Chat" + }, + "core": { + "dependencies": [ + "58D0FB3206B6F859" + ], + "guid": "2528466DE220D91C", + "id": "ERR_Core" + }, + "intel": { + "dependencies": [ + "2528466DE220D91C", + "58D0FB3206B6F859" + ], + "guid": "D31039C7C53E348A", + "id": "ERR_Intel" + }, + "map": { + "dependencies": [ + "2528466DE220D91C", + "58D0FB3206B6F859" + ], + "guid": "9AAEE9041D79809E", + "id": "ERR_Map" + } + } +} diff --git a/docs/native-aircraft-control.md b/docs/native-aircraft-control.md new file mode 100644 index 0000000..74c5e78 --- /dev/null +++ b/docs/native-aircraft-control.md @@ -0,0 +1,19 @@ +# Actual aircraft controller native fixture + +`aircraft-control`, `aircraft-cancel` and `aircraft-translate` are separate opt-in, Workbench-only Chat outcomes for the actual production controller. The frozen first `aircraft-control` source passed [native-2026-09-19-123439-aircraft-controller](evidence/native-2026-09-19-123439-aircraft-controller/report.json): 37 assertions, one completion and zero captured script/runtime or engine errors. The raw log shows the actual post-spawn qualifier, one controller/order/engine start, original pilot, fuel consumption, approximately eight-metre hover, physical contact landing and engine-off `COMPLETE`. This is an isolated local mechanism, not HQ dispatch or multiplayer qualification. The frozen cancellation variant also passed [124915](evidence/native-2026-09-19-124915-aircraft-cancel/report.json): 39 assertions and zero captured errors. One actual Cancel at 5.08964m retained control for 13.15s through stable landing and engine-off `CANCELLED`, with 908 actor/helicopter callbacks and the unchanged 250958ms absolute deadline. The [130038 translation variant](evidence/native-2026-09-19-130038-aircraft-target/report.json) now passes 38 clean native assertions using the changed controller. Its immutable 3.3096m requested movement yields 2.91183m actual displacement and 0.399235m final target error, followed by grounded engine-off COMPLETE. Earlier `powered-flight` and `powered-translate` experiments use their own control implementation; their results remain separate. + +`ERR_NativeAircraftControlProbe(ERR_GameMode mode)`, `int Tick(float now)` and `void Stop()` form the Chat integration interface. `Tick` returns 0 while running, 1 only on success and -1 on failure. The parent Chat harness selects `-errSmoke 1 -errSmokeOutcome aircraft-control`, `-errSmokeOutcome aircraft-cancel` or `-errSmokeOutcome aircraft-translate`, constructs once at its dedicated step 220, calls Tick using native world time, and stops on every failure or mode shutdown. The runner requires at least 420 seconds while the fixture itself has a 300-second absolute native-world deadline. The controller command is additionally bounded by its own unchanged 240-second maximum. The fixture does not install a production scheduler or HQ dispatch. + +The fixture searches only the existing bounded local/refinement/airport candidates using the established 40-metre clearance gates. It allocates exactly one vanilla unarmed Mi-8, one empty vanilla enemy group and one original pilot through the native primary pilot compartment. It allows one initial dynamic-physics wake and waits for actual ground settling. No transform, velocity, health, fuel or signal writes occur. No engine calls are made by the fixture. + +It then invokes the actual `ERR_AircraftFlightEnvelope.Qualify` against the already spawned aircraft and pilot. A missing certificate fails; there is no positive fallback. The actual `ERR_AircraftFlight.Start` must accept that fresh, exact-instance certificate. Scoped Workbench callbacks invoke the controller before the native actor callback and after the native helicopter callback, retaining both original `super` calls. Core's independent powered-flight fixture is inactive for this outcome. The controller's original ownership, deadline, signed-input, clearance, altitude, drift, tilt, hover and landing rules remain authoritative. + +All outcomes require unchanged order token and original pilot/aircraft/group/seat, exactly one command and observed engine start, one initial wake, sustained delivery of both native callbacks, a measured fuel decrease, physical ground contact with low speed and angular motion, and engine off. The normal outcome additionally requires `COMPLETE` and zero cancellation requests; it rejects `CANCELLED`, `FAILED` and `RELINQUISHED`. The normal controller command must perform its own five-second hover and two-second ground hold; the fixture does not manufacture stage completion. Regular logs include state, reason, height, original-home drift, velocity, contact, engine and measured fuel consumption. + +The cancellation outcome sends exactly one real `Cancel` only after observing `CLIMB`, no native ground contact and a height of at least five metres relative to the immutable qualification home. It records the original token, actual absolute controller deadline and both callback counts. Cancel must immediately enter `LANDING` without becoming terminal. The fixture then requires additional actor and helicopter callbacks while still airborne in `LANDING`, the unchanged token/deadline throughout, and its own continuous two-second observation of the same physical grounded predicate before `SHUTDOWN`. Tick gaps or lost ground stability reset that observation. Only `CANCELLED` with one request and every retained-control/landing proof can pass. A normal completion, never-issued request, duplicate request, changed deadline, missing post-cancel hooks, fault or relinquishment is rejected. A Workbench-only read-only getter exposes the actual deadline; it does not override or mutate any production method/state. No additional aircraft, forced descent, engine call, timestamp extension or synthetic controller state is introduced. Stop does not issue a second Cancel after the deliberate request. + +The translation outcome calls the actual `StartTranslation` with the original qualified home as an absolute horizontal target **before takeoff**. It does not choose a target after seeing how the helicopter drifts. Production refuses movement beyond 4.05m from the real stable hover origin and never retargets. The fixture independently observes the immutable target/origin, unchanged deadline and five-second physical target hold; at completion it additionally requires a nontrivial initial distance of 1.75–4.05m, at least one metre of measured horizontal displacement, final target error at most 0.75m, the controller's actual `TranslationProven`, and the usual original-aircraft grounded engine-off `COMPLETE`. Too little natural drift produces a useful refusal/failure, not synthetic movement. This remains a bounded local translation/landing experiment, not a route, transport task or HQ response. The independent Core four-metre translation archive is prior mechanism evidence, not a pass for this new production path. + +These three physical objects are exclusively fixture-owned: they are deliberately **not** registered with generic mission cleanup. Stop first removes the active hook target and releases the controller. It deletes only still-unclaimed original objects after exact mission context, player occupancy, faction and original group checks. A captured vehicle or changed pilot/group is preserved. Before the pilot request, an empty fixture-created group with no assigned faction remains disposable if faction initialization failed. On a failed test, disposal of its unclaimed airborne fixture is test cleanup, **not** evidence of successful production cancellation or safe landing. World teardown without a valid game/player-manager context performs no object deletion. Explicit native loss/capture cases remain separate future experiments. + +`python3 tests/test_native_aircraft_control.py` executes the actual acceptance and disposal policy bodies against adversarial combinations and verifies the integration has no physical shortcuts, substitute controller, global mission ownership, or weakened hooks. These source tests do not prove native callback behavior, flight, multiplayer, HQ integration, or performance. The translation path now has its own clean native archive; full release acceptance remains pending. diff --git a/docs/native-companion-packaging.md b/docs/native-companion-packaging.md index 2171c18..d7826e5 100644 --- a/docs/native-companion-packaging.md +++ b/docs/native-companion-packaging.md @@ -45,3 +45,11 @@ The archive retains all 179 captured authored files, before/after inventories, a The earlier [packed Core 110729 pass](evidence/packed-core-2026-09-19-110729/report.json) consumed a **different Core PAK**, whose hash begins `90b9be4f`; it cannot qualify this new Core PAK or the five-addon closure. A separate ordinary packed-only Chat startup with all five exact artifacts plus vanilla is still required. Full ordinary escape, manual input, multiplayer, FPS and clean packaging/release qualification remain separate. All reports retain their original failed/unqualified flags. When the parent copies this archive into the actual repository, Git's generated-file rules can ignore `.pak` files and profile subtrees. Explicitly force-add this exact successor-owned archive directory if committing it; do not broaden ignore rules or add installed vanilla assets. This review neither stages nor commits files and makes no acceptance-ledger change. + +## Current-source refresh — 13:17 + +The [new package snapshot](evidence/package-2026-09-19-1317-all/package-report.json) and [independent review](evidence/package-2026-09-19-1317-all/review.json) retain the same unqualified build verdict: all five native exits are zero, while every runner reports `validation-failed` with exactly the same 25 UI error lines as the empty-addon control. No build or release flag was promoted. + +All 183 captured authored files are unchanged across the five launches and final repository snapshot. Every one of the 151 PAK entries matches its captured authored path and decompressed hash (Core 107, AI 29, Intel 1, Map 6, Chat 8). All fifteen runtime artifact hashes match their native reports. The archive preserves 257 files plus its checksum manifest, excluding installed-vanilla symlinks, generated source databases and compressed build caches. + +Those exact artifacts subsequently pass [ordinary packed Chat startup 131942](evidence/packed-chat-2026-09-19-131942-current/report.json): real canonical prisoner, expected header, fifteen-second readiness interval, zero captured errors and owned cleanup. The same artifacts also [compile and prepare the empty Linux server 132456](evidence/dedicated-2026-09-19-132456-packed-chat/review.json), with four vanilla asset errors retained. Successful consumption does not repair or qualify packaging, full gameplay or multiplayer. diff --git a/docs/native-server-statistics.md b/docs/native-server-statistics.md new file mode 100644 index 0000000..6fb46d8 --- /dev/null +++ b/docs/native-server-statistics.md @@ -0,0 +1,31 @@ +# Native coarse server statistics + +`tools/parse_native_stats.py` reads existing native `-logStats` console records and emits JSON to stdout. It does not start an engine, modify the input, extract assets, or collect new measurements. Use a different output path from the input: + +```sh +python3 tools/parse_native_stats.py docs/evidence/dedicated-2026-09-19-083213/profile/logs/logs_2026-09-19_08-32-13/console.log > /tmp/erri-native-server-stats.json +python3 tests/test_native_stats.py +``` + +The current isolated dedicated runner already supplies `-maxFPS 30 -logStats 5000`. The parser supports the exact installed format demonstrated in the preserved native logs. It retains each original statistics line, source line number, clock timestamp, whole-input SHA-256 and byte length. There are no runtime dependencies beyond Python's standard library. + +Schema 1, kind `native-server-coarse-statistics`, exports native FPS; frame-time `avg`, `min`, `max`, `mean`, `median` in milliseconds; `Mem` in kB; and the separately reported `Player`, `AI`, `AIChar`, `Veh`, projectile and streaming counters. `avg` and `mean` remain separate native fields. The second `Veh` number is named `parenthesized`, and the number after the projectile separator is named `trailing`; the parser does not guess undocumented scope. `Dynam`, `Static`, `Disabled`, `New`, `Del` and `Bump` retain their native streaming labels. They are not substituted for a loaded-world entity census. + +The packed Linux Chat run at 13:24:56 additionally exposed an optional native block: `Freezes(cnt: 1, max: 90.6 ms, len: 1)`. The parser now preserves it as `native_freezes: {"cnt": 1, "max_ms": 90.6, "len": 1}`. An absent block exports `native_freezes: null`, not invented zero counts. `cnt` and `len` keep their native labels; only the explicitly printed `max` has a millisecond unit. No duration, frame count, percentile, or freeze event list is derived from them. Partial, duplicated, extra-field or malformed freeze blocks refuse the entire export, including nonfinite/negative maximum values and noninteger/overflow counts. + +Each record explicitly contains `ai_only_duration_ms: null` and `window_duration_ms: null`. AI population counts are not execution durations. The requested logging cadence does not establish the exact native measurement window; timestamp differences are not substituted for it. Clock times retain source order without inventing a calendar date, midnight rollover duration, missing records or samples. No aggregate FPS, frame count, raw frames, reciprocal frame times, p95 or p99 is reconstructed. This JSON is deliberately not accepted as comparator v1 frame CSV input. + +Export refuses malformed or unsupported native `DEFAULT` FPS/frame-time lines rather than dropping them into a partial result. It rejects missing fields, extra fields, invalid clock values, negative/nonfinite/scientific numeric tokens, inconsistent summary bounds, unsupported count ranges, invalid UTF-8, inputs with no statistics and configured size limits (64 MiB input, 16 KiB per line, 100,000 records). Whole-log validation finishes before JSON is printed; failure exits nonzero with a line-specific diagnostic where applicable. Unrelated engine/script messages remain in the original hashed input but are outside this parser's purpose. **Successful parsing does not classify that run as clean or qualify performance.** Its `performance_acceptance` is always `not_evaluated`. + +Read-only parsing of preserved actual inputs currently yields: + +| Preserved run | Records | First–last native clock | Console SHA-256 | +| --- | ---: | --- | --- | +| Successor dedicated 083213 | 14 | 08:32:34.010–08:33:39.176 | `44a061e2fa092e5a513a51341a54d6254b1d64d2909e0463071c4e348b3f15a0` | +| Vanilla dedicated 084040 | 15 | 08:40:57.674–08:42:07.973 | `99663069b32ad193b11032486c049745d9e2fd79ab69dc523ec125ec69856eaa` | + +The successor records begin with `AI: 29, AIChar: 22`, then report `AI: 46, AIChar: 36`; vanilla reports zero AI. Both have zero connected players and the same 30-FPS cap. They are therefore **not equivalent workload comparisons**, and their historical engine errors remain failed evidence. The parser tests include these actual archives plus explicitly synthetic malformed mutations of representative lines. No new benchmark was performed and no FPS improvement is demonstrated. + +For later work, capture these real records alongside explicit run metadata and retain the raw logs. Raw per-frame slow-tail analysis, genuine connected-client workload equivalence and AI-only profiling still require separate supported acquisition; see [performance comparison](performance-comparison.md). + +The completed packed Linux Chat console (`logs_2026-09-19_13-24-56/console.log`, SHA-256 `30f3d57bd395f6aaff64af4fd1eb4d14292d88f40e20d216458f5ff889cf93d7`) also parses read-only: 15 records from `13:25:16.186` through `13:26:26.450`, with one observed `Freezes` block. The tests include that exact native line plus synthetic invalid/absent/explicit-zero variants. Its four native resource errors remain retained; successful telemetry export does not qualify the run. diff --git a/docs/ordinary-game-startup.md b/docs/ordinary-game-startup.md index 2514892..afb64ec 100644 --- a/docs/ordinary-game-startup.md +++ b/docs/ordinary-game-startup.md @@ -93,3 +93,15 @@ The exact installed API is `GameStateTransitions.RequestScenarioChangeTransition This uses the documented [native transition API](https://community.bistudio.com/wikidata/external-data/arma-reforger/ArmaReforgerScriptAPIPublic/interfaceGameStateTransitions.html), not an invented `-scenario` engine parameter. The official `-worldSystemsConfig` startup parameter is marked Diag-only, so it is not assumed to configure the regular executable. Native compilation and actual header transition are pending; failure to reach an idle main menu is retained as a failed diagnostic, without retries that could replace gameplay. The runner now additionally requires a matching local-participant marker after normal finalized admission: the actual local controller must own the living body, the canonical roster must accept it, and the mission must be in PRISON. Header/world readiness alone can no longer pass while player admission is absent. This new observation is gated by the ordinary diagnostic flag and never creates a body or identity. Its ordinary native compilation is pending. + +## Optional ordinary prisoner view + +The explicit `-errOrdinaryScenario core|chat -errOrdinaryScreenshot 1` combination requests one screenshot three seconds after genuine finalized local prisoner admission. The runner exposes this as `--capture-prison-view` for loose successor startup; packed and vanilla-control runs refuse it. The request is absent from Workbench compilation and inert without both diagnostic arguments. It does not select a camera, inject input, move an entity or change presentation, so a captured menu, loading overlay or unexpected viewpoint is a finding to investigate rather than something the helper hides. + +Before requesting `System.MakeScreenshot("$logs:err-ordinary-prison")`, the helper revalidates the same current world/mode, active prison phase, living actor, canonical roster-life/account, local controller and player-manager binding. It requires the exact opt-in value `1` and a non-console authoritative game. The owned delayed callback is removed on mission stop and by the existing native `OnBeforeWorldCleanup` hook; the per-world attempt latch prevents a second admission notification from requesting another capture. Invalidated admission cancels without retry. A new world resets the latch. + +`tests/test_ordinary_screenshot.py` executes the helper's actual gate, queue, validation, capture and cleanup methods through adapters, including replaced controllers/bodies/lives, death, phase/world changes and late callbacks. This verifies source behavior only. The native capture call and actual image must still be checked in the ordinary game; a screenshot alone does not qualify manual escape, multiplayer or performance. Preserve the image with that run's raw logs and source provenance. + +[121730](evidence/game-2026-09-19-121730-prison-view/report.json) passes ordinary Chat startup and the optional capture. The [unaltered player view](evidence/game-2026-09-19-121730-prison-view/ordinary-prison-view.png) shows the prisoner inside the authored walls with the correct escape objective and instructions. The exact native BMP is retained beside a documented lossless PNG conversion. The image also exposed tall wheat inside the yard; the first bounded decal candidate in [122353](evidence/game-2026-09-19-122353-yard-candidate/report.json) clears only a small central patch and is not yet full-yard treatment. Neither capture supplies player-input or full-route acceptance. + +[125906 integrated startup](evidence/game-2026-09-19-125906-integrated-prison/report.json) passes after the admission-budget, interaction-feedback, optional aircraft-target and stock-scale yard changes. The native player view remains correct. The scale-ten vanilla decal clears a larger irregular patch while wheat remains near and within parts of the enclosure; complete yard clearance is not claimed. This is ordinary-game startup and initial-view evidence only. diff --git a/docs/original-feature-coverage.json b/docs/original-feature-coverage.json index 78f8381..aeae567 100644 --- a/docs/original-feature-coverage.json +++ b/docs/original-feature-coverage.json @@ -171,7 +171,7 @@ "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c", "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c" ], - "remaining": "HQ alone coordinates physical forces. Refreshed mortar firing, native completion and physical courier delivery have bounded native evidence. Signed actor-local controls and native autohover now prove an isolated vertical takeoff, hover, contact landing and engine-off sequence. Complete impact qualification, route navigation, operational HQ aircraft support, broader transport/rearming and losses without spawning responses; verify multiplayer." + "remaining": "HQ alone coordinates physical forces. Refreshed mortar firing, native completion and physical courier delivery have bounded native evidence. The reusable aircraft controller passes physical vertical flight and retained airborne cancellation; its optional fixed-target movement now also passes a bounded native test. Complete impact qualification, longer routes, operational HQ aircraft support, broader transport/rearming and losses without spawning responses; verify multiplayer." }, { "id": "ambient", @@ -448,7 +448,7 @@ "addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c", "addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c" ], - "remaining": "Native local slot reservations, final-assignment guards and owned pending cleanup pass. Real dedicated-server concurrent joins, preload races, reconnects, connection-ID reuse, spent lives, late arrivals and spectator streaming remain." + "remaining": "Native local slot reservations, final-assignment guards and owned pending cleanup pass. Active admission now counts blocked geometry and missing prerequisites toward its bounded retry budget; the actual-method regression passes. Real dedicated-server concurrent joins, preload races, reconnects, connection-ID reuse, spent lives, late arrivals and spectator streaming remain." }, { "id": "setup", diff --git a/docs/original-feature-coverage.md b/docs/original-feature-coverage.md index 5c95b51..f921123 100644 --- a/docs/original-feature-coverage.md +++ b/docs/original-feature-coverage.md @@ -2,7 +2,7 @@ This tracks responsibilities suggested by the installed original’s 299 script paths. It is a filename-based inventory, not an audit of original implementation behavior. Each entry is assigned once in `original-feature-coverage.json`. No category is considered complete merely because some successor code exists. Runtime acceptance remains in `acceptance.json`. -The first release remains vanilla Everon, prison start and twelve players. Alternate starts and cosmetic parity are tracked as later work rather than silently omitted. First-release categories still contain unfinished work. The archived packed Core startup passes artifact-bound consumption with only installed vanilla; packaging shutdown errors reproduce in an empty-addon control and remain unqualified. Current-source clean runtime and all seventeen release cases remain pending despite the earlier clean `7c53b4b` checkpoint. +The first release remains vanilla Everon, prison start and twelve players. Alternate starts and cosmetic parity are tracked as later work rather than silently omitted. First-release categories still contain unfinished work. The archived packed Core startup passes artifact-bound consumption with only installed vanilla; packaging shutdown errors reproduce in an empty-addon control and remain unqualified. Current-source local clean runtime now passes the matching Core 130347, companion 131041 and ordinary Chat 125906 checkpoints. All seventeen release cases remain pending. | Responsibility | State | Original scripts | Remaining work | | --- | --- | ---: | --- | @@ -11,7 +11,7 @@ The first release remains vanilla Everon, prison start and twelve players. Alter | Time, weather, lights and night options | partial (first-release) | 10 | Local native clock, saved date/weather choices and two real restart rounds pass. Remote agreement, lighting and long-running day/night transitions still require validation. | | Voice, music, feedback and effects | pending (later) | 14 | Review which feedback is required for clear play; author replacements without importing original audio or UI assets. | | Health, unconsciousness and casualty handling | partial (first-release) | 11 | Local native blood-loss treatment, consumed supplies, consciousness recovery, ground casualty loading and vanilla door removal pass bounded fixtures. Verify ordinary input/animation, remote ownership, bleedout, interrupted treatment and flight with casualties. | -| Enemy coordination, support and threat assessment | partial (first-release) | 48 | HQ alone coordinates physical forces. Finite mortar firing, expiry and physical courier delivery have bounded native evidence; new report refresh compiles but remains unqualified. Signed actor-local controls and native autohover now prove an isolated vertical takeoff, hover, contact landing and engine-off sequence. Complete impact qualification, route navigation, operational HQ aircraft support, broader transport/rearming and losses without spawning responses; verify multiplayer. | +| Enemy coordination, support and threat assessment | partial (first-release) | 48 | HQ alone coordinates physical forces. Refreshed mortar firing, native completion and physical courier delivery have bounded native evidence. The reusable aircraft controller passes physical vertical flight and retained airborne cancellation; its optional fixed-target movement now also passes a bounded native test. Complete impact qualification, longer routes, operational HQ aircraft support, broader transport/rearming and losses without spawning responses; verify multiplayer. | | Ambient patrols, vehicles and civilians | partial (first-release) | 16 | Two bounded physical patrol routes and HQ Search preemption/resumption pass local native checks. Qualify perception/report transit, wider population needs, losses and measured runtime cost without alert-driven population duplication. | | Faction, group and asset catalogs | partial (first-release) | 16 | Narrow successor vanilla catalogs compile and initialize without earlier vehicle-schema errors; preserve required faction, medical, item and radio behavior. Verify remote affiliation and full mission use. Alternative faction packs remain later scope. | | Prison layout, locks and initial equipment | partial (first-release) | 12 | Manual access, equipment for twelve players, layouts, threat balance and start placement need validation. | @@ -20,7 +20,7 @@ The first release remains vanilla Everon, prison start and twelve players. Alter | Physical equipment, storage and scavenging | partial (first-release) | 23 | Two independent clue caches and optional medical/outpost stock are authored. Manual access, route balance, medical treatment, destruction and network ownership remain unverified; finite stock replaces refill systems. | | Usable vehicles, locks, alarms and navigation | partial (first-release) | 17 | Finite optional vanilla ground transport passes native parking, seats, engine, fuel depletion and loss checks. Manual driving/access, route navigation, repair, alarms and remote vehicle ownership remain validation/integration work. | | Locations, compositions and population ownership | partial (first-release) | 32 | Seven sites and bounded proximity/discovery events are implemented. Expand towns/checkpoints and turret population, validate authored static cover, loss retention, manual access and multiplayer cleanup. | -| Player identity, spawning and reconnect | partial (first-release) | 14 | Native local slot reservations, final-assignment guards and owned pending cleanup pass. Real dedicated-server concurrent joins, preload races, reconnects, connection-ID reuse, spent lives, late arrivals and spectator streaming remain. | +| Player identity, spawning and reconnect | partial (first-release) | 14 | Native local slot reservations, final-assignment guards and owned pending cleanup pass. Active admission now counts blocked geometry and missing prerequisites toward its bounded retry budget; the actual-method regression passes. Real dedicated-server concurrent joins, preload races, reconnects, connection-ID reuse, spent lives, late arrivals and spectator streaming remain. | | Mission setup, configuration and administration | partial (first-release) | 16 | Core administration/settings and saved environment changes pass local native checks, including two restart rounds. Ordinary local startup/admission passes for loose Chat and an exact archived packed Core candidate; the latter predates current mortar edits and does not qualify packaging. Verify current-source startup, remote authorization, player-facing pre-round setup and difficulty choices. | | Mission state, restart and base framework | partial (first-release) | 7 | Separate remaining objective/lifecycle policies, test mission failure reporting and multiplayer restart/cleanup. | | General helpers, editor labels and shared types | partial (review) | 23 | Use vanilla utilities or small independent helpers as each consumer is replaced. A filename match does not establish equivalent behavior. | diff --git a/docs/packed-core-startup.md b/docs/packed-core-startup.md index e7377e5..6e52f52 100644 --- a/docs/packed-core-startup.md +++ b/docs/packed-core-startup.md @@ -79,3 +79,7 @@ The packed-aware `tools/archive_packed.py` integration preserves these separate ## Native packed Chat consumption The [113315 ordinary run](evidence/packed-chat-2026-09-19-113315/report.json) passes with the exact fifteen runtime artifacts from [five-addon packaging 111731](native-companion-packaging.md). Loaded-addon, package-mount and resource-database paths identify only all five successor addons and installed vanilla, with no loose successor source. The native Game modules compile without Workbench, the scenario creates a real canonical prisoner and the 15-second ready interval completes with zero captured errors. All input hashes remain unchanged; owned cleanup is confirmed. The archive retains all fifteen artifact bytes and separate v2 packed provenance. This successful consumption check does not erase the packaging UI errors, qualify current later source changes, or establish manual play, multiplayer or release readiness. + +## Current packed Chat refresh + +[Packed Chat 131942](evidence/packed-chat-2026-09-19-131942-current/report.json) consumes the fifteen exact [1317 artifacts](evidence/package-2026-09-19-1317-all/review.json), whose 151 PAK entries match the current 183 authored addon files. All five successor and two vanilla addons load without loose successor source, the regular Game module admits a real canonical prisoner, and the fifteen-second ready interval completes without captured errors. Input hashes remain unchanged and owned cleanup is confirmed. The package build verdict remains failed because of its retained UI shutdown errors. This evidence establishes ordinary startup only. diff --git a/docs/performance-comparison.md b/docs/performance-comparison.md index bc5ef1f..fae7820 100644 --- a/docs/performance-comparison.md +++ b/docs/performance-comparison.md @@ -89,3 +89,25 @@ Record through the first frame endpoint at or beyond `warmup_seconds + duration_ Each repeated run reports median, p95 and p99 frame/tick duration in milliseconds; median, p05 and p01 interval FPS/rate; throughput (`included interval count / included interval seconds`); and median/p95 AI profiling milliseconds. FPS/rate percentiles are computed directly from `1000 / frame_time_ms`, not the reciprocal of mean duration. Percentiles use nearest rank (`ceil(percentile × sample count)`); medians use the conventional midpoint average for even counts. Thus reciprocal upper duration and lower FPS ranks may differ by one observation. Throughput is a different statistic from median instantaneous rate. Variant aggregates are the **median of each per-run metric**, giving repeats equal weight; they are not pooled-frame percentiles. Paired repeat deltas report median-frame reduction, p99-frame reduction, and throughput-rate increase as percentages of baseline. Positive values indicate the named numerical reduction/increase within those supplied samples, negative values indicate regression. The final delta summary is the median of paired deltas. No confidence interval, significance test or automatic performance pass is produced. Input manifest and CSV SHA-256 hashes retain provenance for review, but hashes do not authenticate the origin of recordings. + +## Acquisition boundary from the installed APIs + +The 2026-09-19 read-only audit found a supported telemetry entry point in +`Game.OnUpdate(BaseWorld world, float timeslice)`, with native world frame numbers +and `System.GetProfileData()`. A future neutral observer could record that update +cadence and physical population without editing either mission. It must first +validate interval semantics and collection overhead. `System.GetFPS()` and +`System.GetFrameTimeS()` explicitly average ten frames; they are not raw slow-tail +samples. `ProfileData.SimulationTimeMs` is total simulation time, **not AI time**; +no AI-only timing getter/export was established. Unknown AI cost must remain +unavailable, never zero or renamed total simulation cost, so the present strict +CSV format cannot yet be populated completely from those APIs alone. + +Supported [`-logStats`](https://community.bistudio.com/wiki/Arma_Reforger%3AStartup_Parameters#logStats) +already produced native timing/population summaries in the archived empty-server +`dedicated-2026-09-19-084040-vanilla` run. These window summaries cannot reconstruct +individual frames or AI cost. Existing private runners cap display/server cadence +at 30 Hz/FPS; their records cannot demonstrate ordinary-client improvement. No +new collector, benchmark or performance acceptance resulted from this audit. + +The [native server statistics exporter](native-server-statistics.md) now extracts real coarse `-logStats` records from existing console logs, preserving source hashes and raw lines. It explicitly leaves unavailable AI-only duration and raw-frame percentiles unknown. Its output is useful for native monitoring, but cannot substitute for the matched frame/tick datasets required above. diff --git a/docs/player-lifecycle.md b/docs/player-lifecycle.md index fca8903..53036da 100644 --- a/docs/player-lifecycle.md +++ b/docs/player-lifecycle.md @@ -8,7 +8,7 @@ Native reconnect reservation and handoff remain separate from new-character admi Prison placement searches a 4×4 lattice with axis coordinates -4.5, -1.5, 1.5 and 4.5m relative to the authored center. The four inner positions are checked first, then eight edge positions, then four corners. Neighboring centers are 3m apart and remain 1.5m inside walls positioned at ±6m. The inner and edge positions are within 5m of the prison center. Terrain height and slope, physical scene/character occupancy, and pending reservations can reject a slot. Connection IDs 1 and 13 receive no special or shared position. Disconnected physical bodies still obstruct the native query. -If every candidate is occupied or pending, admission waits and retries. Lack of a clear slot does not consume the native spawn-failure budget. Later arrivals first search bounded clear ground near a conscious friendly survivor outside a vehicle, with terrain-height and line-of-sight checks, then try the same prison grid. Placement does not imply a navigable route or safe proximity to enemies. Both late-join anchors and spectator follow targets now require the exact current round body through `ERR_PlayerRoster.CurrentActor`, in addition to the existing living/friendly checks. A controlled replacement, unfinished admission or recycled connection ID cannot supply a survivor target. Spawn anchors still require consciousness and the existing placement checks; living unconscious canonical prisoners remain eligible spectator targets. If no valid spawn anchor remains, the prison-grid fallback is unchanged. +If every candidate is occupied or reserved, admission retries once per second within a budget of thirty active, eligible admission attempts. Missing faction/respawn prerequisites and rejected native spawn requests consume the same budget. Once exhausted, the existing SPAWN_UNAVAILABLE spectator path explains that no prisoner could be spawned; no unsafe fallback is used and no life is consumed. Mission preparation does not spend attempts, and an already-pending native request cannot spend another attempt. A temporary obstruction can still clear before the budget expires. Later arrivals first search bounded clear ground near a conscious friendly survivor outside a vehicle, with terrain-height and line-of-sight checks, then try the same prison grid. Placement does not imply a navigable route or safe proximity to enemies. Both late-join anchors and spectator follow targets now require the exact current round body through `ERR_PlayerRoster.CurrentActor`, in addition to the existing living/friendly checks. A controlled replacement, unfinished admission or recycled connection ID cannot supply a survivor target. Spawn anchors still require consciousness and the existing placement checks; living unconscious canonical prisoners remain eligible spectator targets. If no valid spawn anchor remains, the prison-grid fallback is unchanged. The previous 25-point grid passed reservation enumeration but exhausted at eight actual actors (archive `native-2026-09-19-062251`). Adding a ring to 49 candidates while keeping the central positions first still exhausted at nine (`native-2026-09-19-062847`). Diagnostics showed character world bounds about 4×4m; the old 1.5m lattice left adjacent candidates inside those conservative query bounds. The replacement 3m lattice changes packing rather than weakening the query or lowering the required population. All sixteen candidates still pass through the unchanged clearance predicate. The prisoner fixture must populate one real player plus eleven additional physical actors before capacity is accepted; this new packing awaits that native result. Manual crowding, movement, collision and spawn usability remain required. @@ -29,3 +29,5 @@ The native handler interception applies only to successor game modes or an exist The native lifecycle fixture in [050403](evidence/native-2026-09-19-050403/report.json) completes 54 assertions, including an ordinary initial prisoner spawn. It finds 20 remaining clear positions around that prisoner. No script/VM exception occurs; seven inherited vanilla resource errors remain. Earlier reserved member-name and reflected-container failures are preserved in the validation archive. Normal Core/companion escape and restart regression remains a separate check. Remote 12-player concurrent join, slow client preload, disconnect during preload, recycled connection IDs, reconnect reservation handoff/expiry and spectator streaming cleanup remain separate multiplayer acceptance work. `tests/test_participant_selection.py` executes the actual `CurrentActor`, `SpawnPosition` and server observer-selection methods with engine enumeration, geometry and streaming represented by adapters. It covers unregistered and pending actors, missing identity, disconnect, mismatched connection/body, recycled IDs, dead/foreign bodies, accepted canonical targets, cycling, loss of a previously selected target, unconscious following and unchanged prison/geometry fallback. This closes a source-proven membership omission; it does not establish native possession or multiplayer streaming behavior for the revision. + +`tests/test_spawn_retry_budget.py` executes the actual `DoSpawn_S` method with native controller, respawn, geometry and scheduler adapters. It covers persistent blocked positions, missing prerequisites, thirty-attempt exhaustion, temporary recovery, request rejection, preparation waiting, spent/late life refusal and unchanged pending requests. The counter change has source-local regression evidence only until the next native integration run; this does not qualify slow remote clients or real multiplayer admission. diff --git a/docs/player-route.md b/docs/player-route.md index f1bdb44..af0029e 100644 --- a/docs/player-route.md +++ b/docs/player-route.md @@ -10,6 +10,8 @@ This describes the intended current Everon route from source. **It is a playtest 6. **Prepare the helicopter and casualties.** When transmission completes, the map marks the **initial helicopter pickup site**, not a live aircraft tracker. Reach the actual helicopter and board using its native actions. For an unconscious living prisoner, place them on the ground beside the grounded, stationary helicopter, allow them to settle, and complete **“Load casualty into extraction helicopter”** on their body (five seconds). A conscious rescuer, clear access and an available transport seat are required; check actual occupancy before departing. To unload, use the helicopter's inherited casualty-removal action at its door. Held-action usability and remote ownership remain playtest requirements despite separate scripted loading/removal evidence. 7. **Fly out together.** Pilot the assigned helicopter beyond the escape distance shown in the objective—nine kilometres horizontally from the prison by default. During extraction, living participants physically aboard count as escaped, including unconscious passengers; dead or absent participants do not. Results are frozen when escape resolves, so collect the intended survivors first. Losing the assigned helicopter causes defeat; it is not replaced. +Action prompts now explain the locked gate, radio identification requirement, current transmission phase and conscious-player requirement. These messages describe the existing availability checks; the server still revalidates each action when performed. Confirm their visibility and clearing during a real playtest; native UI presentation has not yet been checked. + Record inventory transfers, map/task updates, interrupted defence, medical/casualty interactions, real piloting, partial results and restart. A completed local route still does not establish remote reconnects, twelve-player behavior or improved FPS. The separate automated vertical-flight fixture is not an extraction autopilot. [Current status](current-status.md) distinguishes those acceptance gaps from source-bound native evidence. Source references: [objective text](../addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c), [site stock](../addons/core/Configs/ERR/EveronSites.conf), [document recovery](../addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c), [radio rules](../addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c), [casualty loading](../addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c) and [extraction](../addons/core/Scripts/Game/ERR/ERR_ExtractionService.c). diff --git a/docs/prison-yard-surface.md b/docs/prison-yard-surface.md new file mode 100644 index 0000000..b04f7e6 --- /dev/null +++ b/docs/prison-yard-surface.md @@ -0,0 +1,28 @@ +# Prison yard surface candidate + +An ordinary-game screenshot after real admission showed the authored concrete prison standing in tall wheat. A bounded visual candidate adds one vanilla dirt decal as a child of the successor's `Prefabs/ERR/Prison.et`. Walls, gate, inventory, spawn coordinates, terrain and existing vegetation entities are unchanged. + +The referenced installed resource is `{4AD6EB80A8B1FA3A}Prefabs/Decals/Dirt/Decal_Dirt_Patch_03.et`, verified against the vanilla resource database. Its authored `ClutterOccluder 1` property supplies clutter suppression. Vanilla's `CompositionDecal_Dirt_Patch_03.et` already uses this decal with a child `Hierarchy`, downward orientation and `FarPlane 1.5`; arsenal compositions use the same dirt-decal composition pattern for runtime objects. This candidate references the installed prefab rather than copying its material or texture. + +The initial child (`FCFBA935CC13E016`) was centred at prison-local `0 0 0`, with angles `-90 0 0`, scale `3` and `FarPlane 1.5`. That initial scale was deliberately smaller than the stock composition's `10`, targeting the central yard for initial inspection. It is not a claim that the projection measures three metres or clears the entire 12×12m enclosure: native projection dimensions and the material's effective clutter mask have not been measured. The decal adds no scripted deletion, collider, floor or spawn-placement bypass. + +The first ordinary-game candidate screenshot, taken with the unchanged north-facing prisoner camera, shows a small irregular dirt patch with wheat absent inside it; most of the enclosure still contains wheat. This establishes a visible local effect, not complete yard clearance. The next candidate restores the referenced vanilla prefab's authored scale `10`, keeping the same centre, orientation and projection plane. This is a reversible successor-only surface adjustment; its ordinary prisoner view requires fresh inspection. No exact projection size or full-yard coverage is inferred from scale. + +The existing opt-in `errOrdinaryScreenshot=1` capture now also emits `ERR YARD:` read-only diagnostics after revalidating the same canonical local prisoner, controller and active prison round. It selects only registered `everon-prison-1` with the exact successor `Prison.et` identity in that world. The traversal stays within that owner's children, limits itself to 64 nodes and eight child levels, and reports partial measurement on a repeated entity or bound. It logs each native `DecalEntity` prefab/type, native `GetWorldBounds`, actual entity world basis/origin, and all eight world-AABB corners transformed with the prison owner's `CoordToLocal`. It creates no entity, camera or recurring callback and changes no transform, input, terrain or clutter. Existing mission/world cancellation still owns the one screenshot callback. + +The [ordinary native bounds run](evidence/game-2026-09-19-123226-yard-bounds/console.log.txt) compiled and traversed 18 nodes with one native decal. At 12:32:59, `GetWorldBounds` returned identical minimum and maximum `<6090,211.444,7160>`, the decal origin; all eight transformed corners were `<0,0,0>`. Its actual basis had length three on each axis and the expected downward orientation. The child also exposed an empty prefab-name string. These results verify that the diagnostic reached the real native entity, **but its entity bounds do not expose the projector extent**. Zero bounds are not evidence of zero coverage, safe confinement, or complete clearance. The transform scale alone supplies no metre-to-footprint conversion. + +Installed `DecalEntity` and `DecalEntityClass` API documentation lists no decal-specific public projection-width/height, FOV, near/far or clutter-mask getters. The installed `Decal_Entity_Base.et` supplies only native type, ID, flags and coordinates; the dirt prefab adds scale, `ClutterOccluder 1` and material. The stock composition adds downward rotation and `FarPlane 1.5`; it does not declare projection width, aspect or FOV. Their native defaults and mask extent cannot be reconstructed from these authored fields alone. `World.CreateDecal`/`CreateDecal2` expose size/stretch/clip *creation arguments* for a different visual-mark API, not measurements of this existing `DecalEntity`; `WorldDecal.GetSize` likewise belongs to a separate scripted entity. Neither establishes this prefab's clutter footprint. + +Vanilla `SCR_EditableDecalComponent.c` explicitly recreates the native decal when the editor moves it because updating its entity transform does not move the rendered decal. This further rules out treating arbitrary live transform changes or inherited geometry getters as reliable projector measurements. No runtime transformation or replacement is proposed here. + +A separate, explicitly diagnostic overhead image of the unchanged candidate can compare visible patch edges, wall inside faces and outside vegetation in the same view. Keep that inspection distinct from the unchanged real-prisoner screenshot. Only after observing that relationship should a bounded centre-yard scale or tiled placement be proposed and retested; the irregular clutter mask still requires visual inspection. No sizing, tiling, camera change or gameplay change is included in this follow-up. + +Installed API usage follows `SCR_EditableDecalComponent.c` (`DecalEntity.Cast`), `SCR_EditableEntityComponent.c` (native type name), and vanilla entity `GetWorldBounds`/`CoordToLocal` call sites. Focused adapter checks execute the actual diagnostic's ownership selection, eight-corner projection and bounded hierarchy walk, alongside existing screenshot identity and cleanup tests. Native diagnostic compilation passed; a supported projector-extent getter was not found, and coverage decisions remain pending. This visual candidate does not qualify manual prison access, multiplayer rendering or performance. + + +The archived Chat Workbench validation plugin experiment accepted optional `errPrisonOverhead=1` together with its existing `errPlay=1`. Immediately before `SwitchToGameMode`, it calls the installed `WorldEditorAPI.SetCamera(vector pos, vector lookVec)` at `<6090,233.444,7160>`, looking straight down `<0,-1,0>`: 22m above the measured prison origin. The installed API explicitly describes this as the World Editor perspective-view camera, rather than a player camera. Without both exact opt-ins the existing editor view is unchanged. This affects only the private test editor's view, with no terrain, actor, gameplay camera, input or prefab mutation. Its requested `err-prison` capture was an authoring diagnostic, not the ordinary real-prisoner view. The native 2026-09-19 12:41:54 Chat run compiled this path and completed 48 assertions without script/VM errors, but did **not** produce a useful overhead image. Its console line 10 includes `-errPrisonOverhead 1`, and line 262 (12:42:24.048) contains the authoring-overhead marker immediately after the site survey. Thus the flag and plugin branch executed. The subsequent `err-prison.png` is a 501×225 horizontal wheat-field view; the requested editor framing was not the captured game-mode framing. `SetCamera` returns void and its installed documentation promises an editor perspective camera, not persistence into the game-mode viewport. `SwitchToGameMode(bool debugMode=false, bool fullScreen=false)` has no documented camera-transfer guarantee. A missing flag/source update is ruled out, but the available evidence does not distinguish view replacement from a rejected/singular straight-down orientation; no speculative post-switch reapplication or debug-mode change is included. The ordinary-game real-prisoner screenshot path is unchanged. Further camera investigation is optional authoring work, not a blocker for mission gameplay. + +The ineffective `--prison-overhead-view` runner option and its editor-camera branch were removed after this attempt. The archived command and marker describe the historical experiment; they are not a supported current diagnostic. The genuine ordinary prisoner capture remains available. + +The [125906 ordinary capture](evidence/game-2026-09-19-125906-integrated-prison/ordinary-prison-view.png) validates the stock-scale candidate in the actual prisoner view: a larger irregular bare patch is visible and the objective/walls remain correct; substantial wheat remains. The native startup has zero captured errors. Scale ten is retained as a modest visual improvement, with no full-yard-clearance claim. diff --git a/docs/validation.md b/docs/validation.md index 8965edc..2b8dfdf 100644 --- a/docs/validation.md +++ b/docs/validation.md @@ -375,3 +375,26 @@ The [113315 packed Chat ordinary startup](evidence/packed-chat-2026-09-19-113315 ### Shared map replacement ownership and deletion [120633](evidence/native-2026-09-19-120633-map-ownership/report.json) passes 58 assertions with zero captured errors. Real delayed callbacks, distinct/reused native configurations and root widgets, ModeClear and spare/interrupted deletion preserve the replacement native map. The earlier [115646 refusal](evidence/native-2026-09-19-115646-map-deletion-refusal/report.json) assumed component references disappeared in the deletion call. Actual diagnostics show both post-super callbacks and entity invalidation occur immediately, while component references clear on the next tick. The corrected bounded observation retains all cleanup requirements and the late-callback window. Native camera render state and multiplayer are not measured. + + +[120808 companion loops](evidence/native-2026-09-19-120808-companion-loops/report.json) passes two complete scripted rounds, 96 assertions and zero captured errors after the canonical participant, shared-map ownership, Intel readiness and bounded translation changes. This remains local scripted integration, not ordinary player input or multiplayer. + +[121730 ordinary prisoner view](evidence/game-2026-09-19-121730-prison-view/report.json) and [122353 yard candidate](evidence/game-2026-09-19-122353-yard-candidate/report.json) load all five addons in the regular game, admit the genuine canonical local prisoner and observe a clean readiness interval. Opt-in read-only screenshots show the actual authored prison and correct escape objective. Native BMPs plus lossless viewing PNGs and conversion hashes are retained. The single scale-three vanilla dirt decal clears a small central patch; most wheat remains. [123226 bounds diagnostic](evidence/game-2026-09-19-123226-yard-bounds/report.json) confirms native DecalEntity bounds collapse to its origin, so those values cannot qualify its projected surface extent. + +[122118 map/controller compile](evidence/native-2026-09-19-122118-controller-compile-map/report.json) passes the 58-assertion map ownership regression with the new aircraft mechanism compiled. [123439 actual controller](evidence/native-2026-09-19-123439-aircraft-controller/report.json) then exercises that actual production controller and post-spawn qualifier: 37 clean assertions, original finite Mi-8 and pilot, one engine start, sustained physical hover, settled contact landing and engine-off COMPLETE. This is distinct from the earlier Core-only experimental implementation. + +[124154 editor-camera attempt](evidence/native-2026-09-19-124154-overhead-unobserved/report.json) passes its underlying 48-assertion companion round, but does not obtain the requested overhead frame. The flag and branch marker are present; the screenshot remains a horizontal editor/game viewport. The ineffective diagnostic option was removed; neither its screenshot nor the zero decal bounds establishes yard coverage. + +[124915 actual airborne cancellation](evidence/native-2026-09-19-124915-aircraft-cancel/report.json) passes 39 assertions with zero captured errors. Cancel is issued once at 5.09m without ground contact. The same controller keeps its input callbacks, token and exact deadline through 13.15 seconds of landing; the fixture independently observes two stable grounded seconds before shutdown. Both native callback counts reach 908, with one original aircraft/pilot and finite fuel use. The terminal state is CANCELLED with engine off. No HQ dispatch, aircraft replacement, transform/velocity write, deadline extension, manual piloting or multiplayer is claimed. + +[125906 integrated ordinary startup](evidence/game-2026-09-19-125906-integrated-prison/report.json) compiles the new fixed-target controller, bounded active admission and action-denial feedback in the regular game. All five successor addons load, the real local canonical prisoner is admitted, the 15-second ready interval and private cleanup pass with zero captured errors. The unaltered player capture shows the correct objective and a larger irregular stock-scale dirt patch; some wheat remains. Actual-method tests cover the thirty-attempt admission boundary and unchanged interaction permissions, but the image does not prove those denial messages, held actions or remote UI. + +[130038 actual fixed-target flight](evidence/native-2026-09-19-130038-aircraft-target/report.json) passes 38 assertions with zero captured errors. The production StartTranslation freezes its target before takeoff; after native hover the requested horizontal displacement is 3.3096m. The original helicopter physically moves 2.91183m, holds near the target for five observed seconds, lands and shuts down 0.399235m from the target. One engine/controller/wake, finite fuel and 1,572 paired native callbacks are retained; 484 translation updates perform the movement. The original qualification home, token and absolute deadline never change. This does not qualify longer navigation, HQ dispatch or multiplayer. + +[130347 current Core](evidence/native-2026-09-19-130347-core-loops/report.json) completes two full scripted escape/restart rounds, 612 assertions and zero captured errors. [131041 current companion](evidence/native-2026-09-19-131041-companion-loops/report.json) completes two rounds with 96 assertions and zero captured errors. Both source manifests are exactly equal to ordinary Chat 125906 and actual fixed-target flight130038. The clean-runtime development gate is passed for this source snapshot; all seventeen release cases, including player-input escape and real multiplayer, remain pending. Repository checks and the new native-statistics/dedicated-runner tests pass separately. + +## Current artifact closure and Linux preparation + +The [1317 five-addon package audit](evidence/package-2026-09-19-1317-all/review.json) verifies all 151 PAK entries against the 183 authored source files and all fifteen runtime artifacts against their reports. Every packaging runner remains failed with the same 25 UI shutdown errors as the empty control. [Ordinary packed Chat 131942](evidence/packed-chat-2026-09-19-131942-current/report.json) then passes canonical prisoner startup and its fifteen-second ready interval with zero captured errors from only those artifacts and vanilla. + +The [authored-only Linux failure 131458](evidence/dedicated-2026-09-19-131458-missing-databases/review.json) is retained: missing all five resource databases meant the listed addon identities did not establish script/resource loading. New runner preflight rejects that incomplete input before launching. The [complete packed retry 132456](evidence/dedicated-2026-09-19-132456-packed-chat/review.json) loads all five PAK/RDB pairs, compiles 5780 Game files and 11202 classes, loads Chat/MissionSystems and prepares seven sites, 117 stock entities and prison phase. All fifteen inputs remain unchanged. Four native errors remain, each also present in the older vanilla control; there are no script/VM-pattern failures. The isolated 90-second timeout and owned cleanup are recorded. No client joined; no clean Linux build, graceful shutdown, multiplayer or performance acceptance follows from this result. diff --git a/docs/vanilla-resources.json b/docs/vanilla-resources.json index 9a36081..d1dc593 100644 --- a/docs/vanilla-resources.json +++ b/docs/vanilla-resources.json @@ -104,5 +104,6 @@ "Prefabs/AI/Waypoints/AIWaypoint_Cycle.et": "35BD6541CBB8AC08", "Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et": "AE578EEA4244D41F", "Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et": "21EF98BFC1EB3793", - "Prefabs/AI/Groups/Group_Base.et": "000CD338713F2B5A" + "Prefabs/AI/Groups/Group_Base.et": "000CD338713F2B5A", + "Prefabs/Decals/Dirt/Decal_Dirt_Patch_03.et": "4AD6EB80A8B1FA3A" } diff --git a/tests/test_action_feedback.py b/tests/test_action_feedback.py new file mode 100644 index 0000000..ed09012 --- /dev/null +++ b/tests/test_action_feedback.py @@ -0,0 +1,62 @@ +"""Execute actual action availability methods; native UI rendering is separate.""" +from policy_harness import ROOT, body, run +source=(ROOT/'addons/core/Scripts/Game/ERR/ERR_Actions.c').read_text() +class Source: + def __init__(self,name): self.text=source.split('class '+name+' :',1)[1].split('\nclass ',1)[0] + def read_text(self): return self.text +def method(name): + s=body(Source(name),'override bool CanBePerformedScript(').replace('override ','') + s=s.replace('ERR_GameMode mode = ERR_GameMode.Get();','ERR_GameMode* mode = ERR_GameMode::Get();').replace('mode.Phase()','mode->Phase()') + s=s.replace('ERR_LocationComponent location = ERR_LocationComponent.Cast(GetOwner().FindComponent(ERR_LocationComponent));','Location* location = GetOwner()->location;') + s=s.replace('location.Knowledge()','location->Knowledge()').replace('ERR_Phase.','ERR_Phase::').replace('ERR_Actors.','ERR_Actors::') + return s.replace('string.Empty','string{}').replace('super.CanBePerformedScript','NativeDoor::CanBePerformedScript') +run(r''' +#include +#include +using string=std::string; +struct Actor{bool conscious=true;};using IEntity=Actor*; +namespace ERR_Actors{bool CanFight(IEntity a){return a&&a->conscious;}} +namespace ERR_Phase{enum Value{PREPARING,PRISON,RADIO_SEARCH,RADIO_DEFENCE,EXTRACTION,VICTORY,DEFEAT};} +struct ERR_GameMode{int phase=0;static ERR_GameMode* current;static ERR_GameMode* Get(){return current;}int Phase(){return phase;}};ERR_GameMode* ERR_GameMode::current=nullptr; +struct Location{int knowledge=0;int Knowledge(){return knowledge;}}; +struct Owner{Location* location=nullptr;}; +struct ActionBase{string reason="stale";Owner owner;void SetCannotPerformReason(string s){reason=s;}Owner* GetOwner(){return &owner;}}; +struct NativeDoor:ActionBase{bool allowed=true,explain=true;int queries=0;bool CanBePerformedScript(IEntity){queries++;if(!allowed&&explain)SetCannotPerformReason("Native door obstructed");return allowed;}}; +struct Unlock:ActionBase{ +'''+method('ERR_UnlockPrisonAction')+r''' +};struct Door:NativeDoor{ +'''+method('ERR_PrisonDoorAction')+r''' +};struct Radio:ActionBase{ +'''+method('ERR_TuneRadioAction')+r''' +}; +int main(){ + Actor actor;ERR_GameMode mode;Location location; + for(int present=0;present<2;present++)for(int phase=0;phase<7;phase++)for(int conscious=0;conscious<2;conscious++)for(int known=-1;known<=3;known++)for(int presentLocation=0;presentLocation<2;presentLocation++){ + ERR_GameMode::current=present?&mode:nullptr;mode.phase=phase;actor.conscious=conscious;location.knowledge=known; + Unlock unlock;Radio radio;radio.owner.location=presentLocation?&location:nullptr; + bool lockAllowed=present&&phase==ERR_Phase::PRISON&&conscious; + bool radioAllowed=present&&phase==ERR_Phase::RADIO_SEARCH&&presentLocation&&known==2&&conscious; + assert(unlock.CanBePerformedScript(&actor)==lockAllowed);assert(unlock.reason.empty()==lockAllowed); + assert(radio.CanBePerformedScript(&actor)==radioAllowed);assert(radio.reason.empty()==radioAllowed); + for(int native=0;native<2;native++){ + Door door;door.allowed=native;bool doorAllowed=present&&phase>ERR_Phase::PRISON&&native; + assert(door.CanBePerformedScript(&actor)==doorAllowed);assert(door.reason.empty()==doorAllowed); + bool delegated=present&&phase>ERR_Phase::PRISON;assert(door.queries==(delegated?1:0)); + if(delegated&&!native)assert(door.reason=="Native door obstructed"); + } + } + ERR_GameMode::current=&mode;actor.conscious=true;Radio radio;radio.owner.location=&location;mode.phase=ERR_Phase::RADIO_SEARCH;location.knowledge=1; + assert(!radio.CanBePerformedScript(&actor)&&radio.reason.find("Identify")!=string::npos); + location.knowledge=2;assert(radio.CanBePerformedScript(&actor)&&radio.reason.empty()); + actor.conscious=false;assert(!radio.CanBePerformedScript(&actor)&&radio.reason=="You must be alive and conscious"); + actor.conscious=true;assert(radio.CanBePerformedScript(&actor)&&radio.reason.empty()); + mode.phase=ERR_Phase::RADIO_DEFENCE;assert(!radio.CanBePerformedScript(&actor)&&radio.reason.find("already in progress")!=string::npos); + mode.phase=ERR_Phase::EXTRACTION;assert(!radio.CanBePerformedScript(&actor)&&radio.reason.find("complete")!=string::npos); + mode.phase=ERR_Phase::PRISON;Door door;assert(!door.CanBePerformedScript(&actor)&&door.reason.find("Pick the prison lock")!=string::npos); + mode.phase=ERR_Phase::RADIO_SEARCH;door.allowed=false;assert(!door.CanBePerformedScript(&actor)&&door.reason=="Native door obstructed"); + door.allowed=true;assert(door.CanBePerformedScript(&actor)&&door.reason.empty()); + door.allowed=false;door.explain=false;assert(!door.CanBePerformedScript(&actor)&&door.reason.empty()); // No stale native denial either. + mode.phase=ERR_Phase::PRISON;Unlock unlock;assert(!unlock.CanBePerformedScript(nullptr));assert(unlock.CanBePerformedScript(&actor)&&unlock.reason.empty()); +} +''') +print('PASS: actual action permission matrix unchanged; useful phase/intel/consciousness denials, stale reason cleared, native door denial preserved; no native UI claim') diff --git a/tests/test_aircraft_flight_envelope.py b/tests/test_aircraft_flight_envelope.py new file mode 100644 index 0000000..356e9cc --- /dev/null +++ b/tests/test_aircraft_flight_envelope.py @@ -0,0 +1,90 @@ +"""Actual qualification claim/footprint bounds and release bodies; native traces remain untested.""" +from policy_harness import ROOT, body, run +import re +BASE=ROOT/'addons/ai/Scripts/Game/ERR' +SOURCE=BASE/'ERR_AircraftFlightEnvelope.c' +claim=body(SOURCE,'bool Claim(').replace('ERR_GameMode mode','ERR_GameMode* mode').replace('Vehicle aircraft','Vehicle* aircraft').replace('IEntity pilot','IEntity* pilot') +claim=claim.replace('Replication.','Replication::').replace('ERR_GameMode.Get()', 'ERR_GameMode::Get()').replace('vector.','vector::').replace('mode.Active()', 'mode->Active()').replace('aircraft.GetOrigin()', 'aircraft->GetOrigin()').replace('GetGame().GetWorld().GetWorldTime()', 'GetGame()->GetWorld()->GetWorldTime()').replace('GetGame().GetWorld()', 'GetGame()->GetWorld()') +claim=re.sub(r'(? +#include +struct vector {float x=0,y=0,z=0;static float Distance(vector a,vector b){return std::sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z));}}; +struct Vehicle {vector origin;vector GetOrigin(){return origin;}}; +struct IEntity {}; +struct ERR_GameMode {bool active=true;bool Active(){return active;}static ERR_GameMode* current;static ERR_GameMode* Get(){return current;}}; +ERR_GameMode* ERR_GameMode::current=nullptr; +struct World {float now=1000;float GetWorldTime(){return now;}}; +struct Game {World* world;World* GetWorld(){return world;}}; +Game* game=nullptr;Game* GetGame(){return game;} +struct Replication {static bool server;static bool IsServer(){return server;}};bool Replication::server=true; +struct Record {ERR_GameMode* m_Mode=nullptr;Vehicle* m_Aircraft=nullptr;IEntity* m_Pilot=nullptr;vector m_Home;float m_QualifiedAt=0;int m_Claim=0; +'''+claim+r''' +}; +'''+rules+r''' +int main(){ + assert(CylinderSphere(4,12,1.5)==17.5f); + assert(Fits(30,1,5)&&!Fits(31,1,5)); + assert(!Fits(0,0,0)&&!Fits(32,0,0)&&!Fits(1,0,6)&&!Fits(NAN,0,0)); + World world;Game env;env.world=&world;game=&env; + ERR_GameMode mode,foreignMode;ERR_GameMode::current=&mode; + Vehicle aircraft,other;IEntity pilot,otherPilot; + Record blank;assert(!blank.Claim(&mode,&aircraft,&pilot,1)); // default constructed is never a certificate + Record valid;valid.m_Mode=&mode;valid.m_Aircraft=&aircraft;valid.m_Pilot=&pilot;valid.m_QualifiedAt=1000; + Record consumed=valid;assert(consumed.Claim(&mode,&aircraft,&pilot,11));assert(consumed.m_Claim==11); + assert(!consumed.Claim(&mode,&aircraft,&pilot,11)&&!consumed.Claim(&mode,&aircraft,&pilot,12)); + for(int fault=0;fault<11;fault++){ + Record r=valid;world.now=1000;aircraft.origin={0,0,0};game=&env;env.world=&world;mode.active=true;Replication::server=true; + if(fault==0)world.now=3001; + if(fault==1)world.now=999; + if(fault==2)aircraft.origin={.101f,0,0}; + if(fault==3)aircraft.origin={0,.101f,0}; + if(fault==4)mode.active=false; + if(fault==5)Replication::server=false; + if(fault==6)game=nullptr; + if(fault==7)env.world=nullptr; + if(fault==8)r.m_Aircraft=&other; + if(fault==9)r.m_Pilot=&otherPilot; + if(fault==10)r.m_Mode=&foreignMode; + assert(!r.Claim(&mode,&aircraft,&pilot,1)&&r.m_Claim==0); + } + game=&env;env.world=&world;world.now=3000;mode.active=true;Replication::server=true;aircraft.origin={.1f,0,0}; + Record edge=valid;assert(edge.Claim(&mode,&aircraft,&pilot,9)); + Record nullToken=valid;assert(!nullToken.Claim(&mode,&aircraft,&pilot,0)); +} +''') +controller=BASE/'ERR_AircraftFlight.c' +assert 'Release(true)' in body(controller,'void ~ERR_AircraftFlight(') +methods='\n'.join(body(controller,key) for key in ['protected void Release(', 'protected void Fail(']) +methods=methods.replace('protected ','').replace('ERR_AircraftFlightState.FAILED','FAILED') +run(r'''#include +#include +using string=std::string; +struct Registry {void* owner=nullptr;int removes=0;explicit operator bool()const{return true;}void* Get(void*){return owner;}void Remove(void*){owner=nullptr;removes++;}}; +struct Controller {int writes=0;void SetAutohoverEnabled(bool){writes++;}void SetCollectiveMode(int){writes++;}}; +struct Agent {int writes=0;void SetPermanentLOD(int){writes++;}}; +struct Probe { + static const int FAILED=10; + bool m_SettingsOwned=true,owned=true,ground=false,m_OriginalAutohover=false; + int m_State=5,m_OriginalMode=3,m_OriginalLOD=5,inputs=0,logs=0;string m_Reason; + void* m_Aircraft=this;Registry s_Owners;Controller m_Controller;Agent m_Agent; + Probe(){s_Owners.owner=this;}bool Owns(){return owned;}bool Grounded(){return ground;}bool Finished(){return m_State>=8;} + bool Pair(const char*,const char*,float value){assert(value==0);inputs++;return true;}void RecordState(){logs++;} +'''+methods+r''' +}; +int main(){ + Probe airborne;airborne.Fail("deadline");assert(airborne.m_State==10&&airborne.logs==1&&airborne.inputs==4); + assert(airborne.m_Controller.writes==0&&airborne.m_Agent.writes==0&&!airborne.m_SettingsOwned); + Probe ground;ground.ground=true;ground.Fail("hooks unavailable");assert(ground.m_Controller.writes==2&&ground.m_Agent.writes==1&&ground.inputs==4); + Probe captured;captured.owned=false;captured.Release(true);assert(captured.inputs==0&&captured.m_Controller.writes==0&&captured.m_Agent.writes==0); + Probe unrelated;int other;unrelated.s_Owners.owner=&other;unrelated.owned=false;unrelated.Release(false);assert(unrelated.s_Owners.removes==0); + ground.Release(true);assert(ground.inputs==4&&ground.m_Controller.writes==2); // idempotent, no repeated mode writes +} +''') +s=SOURCE.read_text();qualify=body(SOURCE,'static ERR_AircraftFlightEnvelope Qualify(') +assert qualify.index('ClearColumn(')FindSignal').replace('signals.GetSignalValue','signals->GetSignalValue') +rules='\n'.join(cpp(body(SOURCE,s)) for s in ['static bool Terminal(', 'static bool Deadline(', 'static bool Envelope(', 'static bool Hover(', 'static bool Landed(', 'static float Vertical(', 'static int CancelAction(']) +methods='\n'.join(cpp(body(SOURCE,s)) for s in ['protected bool ControlLease(', 'protected bool Landing(', 'protected void Shutdown(', 'void Cancel(', 'void Tick(']) +run(r'''#include +#include +#include +#include +#include +using string=std::string; +namespace State {enum {IDLE,HOOKS,STARTING,POSITIVE,NEGATIVE,CLIMB,LANDING,SHUTDOWN,COMPLETE,CANCELLED,FAILED,RELINQUISHED,TRANSLATING};} +namespace CollectiveMode {enum {Direct=3};} +struct Math {static float AbsFloat(float x){return std::abs(x);} static float Min(float a,float b){return std::min(a,b);} static float Clamp(float x,float a,float b){return std::clamp(x,a,b);}}; +struct vector {float x=0,y=0,z=0;float operator[](int i)const{return i==0?x:(i==1?y:z);}float Length()const{return std::sqrt(x*x+y*y+z*z);}static float DistanceXZ(vector a,vector b){return std::hypot(a.x-b.x,a.z-b.z);}}; +struct Rules { +'''+rules+r''' +}; +struct SignalsManagerComponent {float value=.05;int FindSignal(const char*){return 0;}float GetSignalValue(int){return value;}}; +struct Controller { + explicit operator bool()const{return true;} + bool engine=true,autohover=true,accept=true;int starts=0,stops=0,hoverWrites=0; + SignalsManagerComponent signals; + void SetAutohoverEnabled(bool value){hoverWrites++;if(accept)autohover=value;} + bool GetAutohoverEnabled(){return autohover;} + bool IsEngineOn(){return engine;}int GetCollectiveMode(){return CollectiveMode::Direct;} + void StopEngine(bool force){assert(!force);stops++;engine=false;} + void StartEngine(){starts++;engine=true;} + SignalsManagerComponent* GetSignalsManager(){return &signals;} +}; +struct Aircraft {vector position={0,8,0};void GetWorldTransform(vector* out){out[0]={1,0,0};out[1]={0,1,0};out[2]={0,0,1};out[3]=position;}}; +struct Simulation {vector velocity;bool contact=false;vector GetVelocity(){return velocity;}bool HasAnyGroundContact(){return contact;}float RotorGetRPMTarget(int){return 100;}float RotorGetRPM(int){return 100;}}; +struct Fuel{float GetTotalFuel(){return 99;}}; +struct Input {float collective=.05;float GetVehicleCollective(){return collective;}}; +struct Probe { + bool owned=true,healthy=true,ground=false,lease=true,m_Cancelled=false,m_Readback=true,m_TranslationRequested=false; + int m_State=State::CLIMB,m_ActionUpdates=10,m_HelicopterUpdates=10,m_GateUpdates=0; + float now=1000,m_Deadline=200000,m_StageDeadline=66000,m_Stable=-1,m_LastTick=-1,m_LastControl=1000,m_InitialFuel=100; + vector m_Home;string m_Reason; + Controller m_Controller;Aircraft m_Aircraft;Simulation m_Simulation;Fuel m_Fuel;Input m_Input; + int released=0,restored=0,logs=0; + bool Lease(){return lease&&!Rules::Terminal(m_State);}bool Owns(){return owned;}bool Healthy(){return healthy;}bool Grounded(){return ground;}float Now(){return now;} + void Release(bool restore){released++;if(restore){assert(owned&&ground);restored++;}} + bool BeginTranslation(float,vector){return true;} + void CheckTranslation(float,vector,float,float,float){} + void RecordState(){logs++;} + void Relinquish(string reason){m_Reason=reason;m_State=State::RELINQUISHED;Release(false);RecordState();} + void Fail(string reason){m_Reason=reason;m_State=State::FAILED;Release(false);RecordState();} +'''+methods+r''' +}; +int main(){ + for(int flags=0;flags<8;flags++){ + bool owned=flags&1,ground=flags&2,engine=flags&4; + assert(Rules::CancelAction(owned,ground,engine)==(!owned?0:(!ground?1:(engine?2:3)))); + } + assert(Rules::Deadline(1,240001)&&!Rules::Deadline(1,240002)); + assert(!Rules::Terminal(State::TRANSLATING)); + assert(!Rules::Deadline(1,1)&&!Rules::Deadline(-1,100)&&!Rules::Deadline(NAN,10)); + assert(Rules::Envelope(-3,0,.85)&&Rules::Envelope(18,7.999f,1)); + assert(!Rules::Envelope(18.001f,0,1)&&!Rules::Envelope(8,8,1)&&!Rules::Envelope(8,0,.849f)); + assert(!Rules::Envelope(NAN,0,1));assert(!Rules::Envelope(0,NAN,1)); + assert(Rules::Landed(true,0,0,0,1)&&!Rules::Landed(false,0,0,0,1)); + assert(Rules::Hover(8,0,0,1)&&!Rules::Hover(8,-1,0,1)); + assert(Rules::Vertical(8,true)<0&&Rules::Vertical(0,false)>0); + // Airborne cancellation retains control and original deadline, including repeats. + Probe airborne;airborne.Cancel("report expired");assert(airborne.m_State==State::LANDING&&airborne.released==0); + assert(airborne.m_StageDeadline==66000&&airborne.m_Deadline==200000); + airborne.now=5000;airborne.Cancel("duplicate");assert(airborne.m_StageDeadline==66000&&airborne.m_Reason=="report expired"); + Probe translating;translating.m_State=State::TRANSLATING;translating.m_TranslationRequested=true;translating.Cancel("cancel translation"); + assert(translating.m_State==State::LANDING&&translating.released==0&&translating.m_Deadline==200000); + translating.now=5000;translating.Cancel("duplicate translation cancellation"); + assert(translating.m_State==State::LANDING&&translating.released==0&&translating.m_Deadline==200000&&translating.m_StageDeadline==66000&&translating.m_Reason=="cancel translation"); + // Normal cancellation ends only after two distinct grounded seconds and engine off. + airborne.ground=true;airborne.m_Simulation.contact=true;airborne.m_Aircraft.position={0,0,0}; + airborne.m_LastControl=5000;airborne.Tick();assert(airborne.m_State==State::LANDING); + airborne.now=6000;airborne.m_LastControl=6000;airborne.Tick(); + airborne.now=7000;airborne.m_LastControl=7000;airborne.Tick();assert(airborne.m_State==State::SHUTDOWN&&airborne.m_Controller.stops==1); + airborne.now=7500;airborne.m_LastControl=7500;airborne.Tick();assert(airborne.m_State==State::CANCELLED&&airborne.restored==1); + // Noncancelled natural run preserves continuous five-second hover then landing. + Probe normal;for(int i=0;i<=5;i++){normal.now=1000+i*1000;normal.m_LastControl=normal.now;normal.Tick();} + assert(normal.m_State==State::LANDING&&!normal.m_Cancelled&&normal.released==0); + // A gap cannot manufacture five continuous seconds of observed hover. + Probe gap;gap.Tick();gap.now=7000;gap.m_LastControl=7000;gap.Tick();assert(gap.m_State==State::CLIMB&&gap.m_Stable==7000); + // Deadline failure remains explicitly FAILED, never successful/available or engine killed. + Probe expired;expired.m_Deadline=1500;expired.Cancel("cancel");assert(expired.m_StageDeadline==1500); + expired.now=1500;expired.Tick();assert(expired.m_State==State::FAILED&&expired.restored==0&&expired.m_Controller.stops==0); + assert(expired.logs>0&&!expired.m_Reason.empty()); + // Capture on either Cancel or Tick causes no autohover/engine writes. + for(bool cancel:{false,true}){Probe capture;capture.owned=false;if(cancel)capture.Cancel("capture");else capture.Tick(); + assert(capture.m_State==State::RELINQUISHED&&capture.m_Controller.hoverWrites==0&&capture.m_Controller.stops==0&&capture.restored==0);} + Probe dead;dead.healthy=false;dead.Cancel("pilot dead");assert(dead.m_State==State::FAILED&&dead.m_Controller.hoverWrites==0&&dead.m_Controller.stops==0); + Probe grounded;grounded.m_State=State::HOOKS;grounded.ground=true;grounded.m_Controller.engine=false;grounded.Cancel("before start"); + assert(grounded.m_State==State::CANCELLED&&grounded.restored==1&&grounded.m_Controller.stops==0); + Probe groundRunning;groundRunning.m_State=State::STARTING;groundRunning.ground=true;groundRunning.Cancel("on ground");assert(groundRunning.m_State==State::SHUTDOWN&&groundRunning.m_Controller.stops==1); + Probe touchdown;touchdown.ground=true;touchdown.Cancel("new contact");assert(touchdown.m_State==State::LANDING&&touchdown.m_Controller.stops==0); + Probe noHover;noHover.m_Controller.accept=false;noHover.m_Controller.autohover=false;noHover.Cancel("abort");assert(noHover.m_State==State::FAILED&&noHover.m_Controller.stops==0); + Probe escape;escape.m_Aircraft.position={8,8,0};escape.Tick();assert(escape.m_State==State::FAILED&&escape.m_Controller.stops==0); + // Input callbacks independently enforce expiry, even with no owner Tick. + Probe staleCallback;staleCallback.now=staleCallback.m_StageDeadline; + assert(!staleCallback.ControlLease()&&staleCallback.m_State==State::FAILED&&staleCallback.m_Controller.stops==0); + Probe callbackCapture;callbackCapture.owned=false; + assert(!callbackCapture.ControlLease()&&callbackCapture.m_State==State::RELINQUISHED&&callbackCapture.m_Controller.hoverWrites==0); + Probe callbackEscape;callbackEscape.m_Aircraft.position={9,8,0}; + assert(!callbackEscape.ControlLease()&&callbackEscape.m_State==State::FAILED); + Probe callbackOK;assert(callbackOK.ControlLease()); + Probe quiet;quiet.m_LastControl=-1;quiet.Tick();assert(quiet.m_State==State::FAILED); +} +''') +# Integration contracts: no implicit activation or physical shortcuts introduced. +source=SOURCE.read_text() +assert 'modded class' not in source and 'CallLater(' not in source and 'SpawnEntity' not in source +for forbidden in ('SetWorldTransform(', 'SetVelocity(', 'SetHealth(', 'SetFuel(', 'SetActive(', 'SetSignalValue('):assert forbidden not in source +release=body(SOURCE,'protected void Release(') +assert release.index('m_SettingsOwned && Owns()') < release.index('Pair(') +assert release.index('restore && Grounded()') < release.index('SetAutohoverEnabled(m_OriginalAutohover)') +assert 'StopEngine' not in release +prepare=body(SOURCE,'void PrepareActions(') +assert prepare.index('!ControlLease()') < prepare.index('actions.ActivateContext(') +assert 'actions != m_Actions' in prepare +assert source.count('m_Controller.StartEngine()')==1 +assert source.count('m_Controller.StopEngine(false)')==1 +print('PASS: actual aircraft cancellation/stage rules, ground-only completion, expiry/capture faults, input ownership and no physical shortcuts') diff --git a/tests/test_aircraft_translation.py b/tests/test_aircraft_translation.py new file mode 100644 index 0000000..f2d36b0 --- /dev/null +++ b/tests/test_aircraft_translation.py @@ -0,0 +1,102 @@ +"""Actual bounded target/start/stage policy, with native boundaries substituted.""" +from policy_harness import ROOT, body, run +SOURCE=ROOT/'addons/ai/Scripts/Game/ERR/ERR_AircraftFlight.c' +def cpp(s): + return s.replace('protected ','').replace('ERR_AircraftFlightState.','State::').replace('ERR_AircraftFlightRules.','FlightRules::').replace('ERR_AircraftTranslationRules.','Rules::').replace('Math.','Math::').replace('vector.','vector::').replace('SignalsManagerComponent signals','SignalsManagerComponent* signals').replace('signals.FindSignal','signals->FindSignal') +rules='\n'.join(cpp(body(SOURCE,key)) for key in ('static bool Target(', 'static bool Reachable(', 'static vector Demand(', 'static bool Held(')) +methods='\n'.join(cpp(body(SOURCE,key)) for key in ('bool StartTranslation(', 'protected bool BeginTranslation(', 'protected void CheckTranslation(')) +run(r'''#include +#include +#include +#include +#include +#define PrintFormat(...) ((void)0) +using string=std::string; +using ERR_GameMode=int;using Vehicle=int;using SCR_AIGroup=int;using IEntity=int;using PilotCompartmentSlot=int; +namespace State {enum {IDLE,HOOKS,STARTING,POSITIVE,NEGATIVE,CLIMB,LANDING,SHUTDOWN,COMPLETE,CANCELLED,FAILED,RELINQUISHED,TRANSLATING};} +struct Math {static float Min(float a,float b){return std::min(a,b);}static float Max(float a,float b){return std::max(a,b);}static float AbsFloat(float a){return std::abs(a);}}; +struct vector {float x=0,y=0,z=0; + float& operator[](int i){return i==0?x:(i==1?y:z);}float operator[](int i)const{return i==0?x:(i==1?y:z);} + vector operator-(vector b)const{return {x-b.x,y-b.y,z-b.z};}vector operator*(float n)const{return {x*n,y*n,z*n};} + float Length()const{return std::sqrt(x*x+y*y+z*z);}static float DistanceXZ(vector a,vector b){return std::hypot(a.x-b.x,a.z-b.z);} +}; +struct FlightRules { +'''+cpp(body(SOURCE,'static bool Hover('))+r''' +}; +struct Rules { +'''+rules+r''' +}; +struct ERR_AircraftFlightEnvelope {bool valid=true;vector home;explicit operator bool()const{return valid;}vector Home(){return home;}}; +struct SignalsManagerComponent {bool present=true;int FindSignal(const char*){return present?0:-1;}}; +struct Controller {bool hover=true;SignalsManagerComponent signals;SignalsManagerComponent* GetSignalsManager(){return &signals;}bool GetAutohoverEnabled(){return hover;}}; +struct Simulation {vector velocity;bool contact=false;vector GetVelocity(){return velocity;}bool HasAnyGroundContact(){return contact;}}; +struct Probe { + bool m_StartAttempted=false,m_TranslationRequested=false,m_TranslationStarted=false,m_TranslationProven=false; + vector m_TranslationTarget,m_TranslationOrigin,m_Home; + float m_TranslationDistance=0,m_Stable=-1,m_Deadline=240000,m_StageDeadline=0; + int m_State=State::CLIMB,m_Token=123,m_TranslationUpdates=10,cancelled=0,landings=0,starts=0; + Controller m_Controller;Simulation m_Simulation;string reason; + bool Start(ERR_GameMode,Vehicle,SCR_AIGroup,IEntity,PilotCompartmentSlot,ERR_AircraftFlightEnvelope,int,float){m_StartAttempted=true;starts++;return true;} + void Cancel(string detail){reason=detail;cancelled++;m_State=State::LANDING;} + bool Landing(float){landings++;m_State=State::LANDING;return true;} +'''+methods+r''' +}; +int main(){ + assert(Rules::Target({0,0,0},{3,999,4})); // API is explicitly horizontal + assert(!Rules::Target({0,0,0},{3.01f,0,4})); + assert(!Rules::Target({0,0,0},{NAN,0,0})); + assert(Rules::Reachable(4)&&Rules::Reachable(4.04f)&&!Rules::Reachable(4.06f)); + assert(!Rules::Reachable(-.01f)&&!Rules::Reachable(NAN)); + for(float error:{-100.f,-4.f,-.5f,0.f,.5f,4.f,100.f})for(float velocity:{-100.f,-1.f,0.f,1.f,100.f}){ + vector demand=Rules::Demand({error,9,error},{0,1,0},{velocity,100,velocity}); + assert(demand.Length()<=.030001f&&demand.y==0); + } + vector brake=Rules::Demand({0,0,0},{0,8,0},{1,0,0});assert(brake.x<0&&brake.z==0); + assert(Rules::Held(false,8,.2f,.1f,1,.1f,.5f,3.5f,4)); + assert(!Rules::Held(true,8,.2f,.1f,1,.1f,.5f,3.5f,4)); + assert(!Rules::Held(false,8,.2f,.1f,1,.3f,.5f,3.5f,4)); + assert(!Rules::Held(false,8,.2f,.1f,1,.1f,.76f,3.5f,4)); + assert(!Rules::Held(false,8,.2f,.1f,1,.1f,.5f,3.24f,4)); + assert(!Rules::Held(false,10,.2f,.1f,1,.1f,.5f,3.5f,4)); + // Invalid absolute targets cannot reach native Start; valid target copies once. + Probe invalid;ERR_AircraftFlightEnvelope q; + assert(!invalid.StartTranslation(1,1,1,1,1,q,123,10000,{6,0,0})&&invalid.starts==0&&!invalid.m_TranslationRequested); + Probe stale;q.valid=false;assert(!stale.StartTranslation(1,1,1,1,1,q,123,10000,{0,0,0})&&stale.starts==0);q.valid=true; + Probe immutable;vector target={3,100,0};assert(immutable.StartTranslation(1,1,1,1,1,q,123,10000,target)); + target.x=0;assert(immutable.m_TranslationTarget.x==3&&immutable.m_TranslationTarget.y==8&&immutable.starts==1); + assert(!immutable.StartTranslation(1,1,1,1,1,q,123,10000,{0,0,0})&&immutable.starts==1); + // Natural hover drift may make an accepted preflight target unreachable. Land, + // never shift its target/home or extend the original deadline to force success. + Probe drift;drift.m_TranslationRequested=true;drift.m_TranslationTarget={0,8,0}; + assert(!drift.BeginTranslation(1000,{4.1f,8,0})&&drift.cancelled==1&&!drift.m_TranslationStarted); + assert(drift.m_State==State::LANDING&&drift.m_TranslationTarget.x==0&&drift.m_Home.x==0&&drift.m_Deadline==240000); + Probe noSignals;noSignals.m_TranslationRequested=true;noSignals.m_Controller.signals.present=false; + assert(!noSignals.BeginTranslation(1000,{3,8,0})&&noSignals.cancelled==1&&!noSignals.m_TranslationStarted); + Probe move;move.m_TranslationRequested=true;move.m_TranslationTarget={0,8,0};move.m_Deadline=42000; + assert(move.BeginTranslation(1000,{3.3f,8,0}));assert(move.m_State==State::TRANSLATING&&move.m_StageDeadline==42000&&move.m_Deadline==42000); + assert(move.m_TranslationOrigin.x==3.3f&&move.m_TranslationTarget.x==0); + for(int i=0;i<5;i++)move.CheckTranslation(2000+i*1000,{.5f,8,0},8,0,1); + assert(!move.m_TranslationProven&&move.landings==0); + move.CheckTranslation(7000,{.5f,8,0},8,0,1);assert(move.m_TranslationProven&&move.landings==1); + Probe interrupted;interrupted.m_TranslationRequested=true;assert(interrupted.BeginTranslation(1000,{3.3f,8,0})); + interrupted.CheckTranslation(2000,{.5f,8,0},8,0,1);interrupted.CheckTranslation(5000,{2,8,0},8,0,1); + assert(interrupted.m_Stable==-1);interrupted.CheckTranslation(6000,{.5f,8,0},8,0,1); + interrupted.CheckTranslation(10000,{.5f,8,0},8,0,1);assert(!interrupted.m_TranslationProven); + Probe insufficient;insufficient.m_TranslationRequested=true;assert(insufficient.BeginTranslation(1000,{3.3f,8,0})); + insufficient.m_TranslationUpdates=2;insufficient.CheckTranslation(9000,{.5f,8,0},8,0,1);assert(insufficient.m_Stable==-1); +} +''') +source=SOURCE.read_text(); prepare=body(SOURCE,'void PrepareActions('); tick=body(SOURCE,'void Tick(') +assert 'Math.Clamp(vector.Dot(demand, transform[2]), -0.03, 0.03)' in prepare +assert 'Math.Clamp(vector.Dot(demand, transform[0]), -0.03, 0.03)' in prepare +assert prepare.index('!ControlLease()') < prepare.index('ERR_AircraftTranslationRules.Demand(') +assert 'm_State == ERR_AircraftFlightState.TRANSLATING' in prepare +assert tick.index('ERR_AircraftFlightRules.Envelope(') < tick.index('CheckTranslation(') +assert 'if (m_TranslationRequested) BeginTranslation(now, transform[3]);' in tick +assert 'else Landing(now);' in tick +assert source.count('m_TranslationTarget = target')==1 +for method in (body(SOURCE,'protected bool BeginTranslation('),body(SOURCE,'protected void CheckTranslation(')): + assert 'm_Home =' not in method and 'm_Deadline =' not in method + assert 'm_TranslationTarget =' not in method + assert 'SetVelocity' not in method and 'SetWorldTransform' not in method +print('PASS: actual immutable target, bounded autohover demand, drift refusal, five-second hold and unchanged qualification/deadline') diff --git a/tests/test_dedicated_native.py b/tests/test_dedicated_native.py index b8e3579..b3f7e8f 100644 --- a/tests/test_dedicated_native.py +++ b/tests/test_dedicated_native.py @@ -2,6 +2,7 @@ import contextlib import importlib.util import io +import re from pathlib import Path import sys import tempfile @@ -43,6 +44,134 @@ class DedicatedNativeTests(unittest.TestCase): self.assertEqual(args[-2:],['-server','Missions/21_GM_Eden.conf']) self.assertEqual(args[0],'/tmp/runtime/ArmaReforgerServer') + def test_exact_core_and_chat_header_and_diagnostic_selection(self): + self.assertEqual(runner.engine_args('header'), runner.engine_args('header', 'core')) + expected = { + 'core': ('2528466DE220D91C', '{AD62322D5213C440}Missions/ERR_Everon_Base.conf'), + 'chat': ('FA804F411BDDF2C6', '{C1E20667DCE324ED}Missions/ERR_Everon.conf'), + } + root = Path(__file__).parents[1] + for project, (guid, header) in expected.items(): + # Keep the CLI identities tied to the actual authored resources. + gproj = (root/'addons'/project/'addon.gproj').read_text() + self.assertIn('GUID "'+guid+'"', gproj) + resource = header.split('}', 1)[1] + self.assertIn('Name "'+header+'"', (root/'addons'/project/(resource+'.meta')).read_text()) + for route in ('header', 'diag-world'): + args = runner.engine_args(route, project) + self.assertEqual(args[args.index('-addonsDir')+1], '/tmp/source/addons') + self.assertEqual(args[args.index('-addons')+1], guid) + self.assertEqual(args.count('-addons'), 1) + self.assertEqual(args[args.index('-profile')+1], '/tmp/work/profile') + self.assertEqual(args[args.index('-bindIP')+1], '127.0.0.1') + self.assertIn('-noBackend', args) + self.assertIn('-noSound', args) + if route == 'header': + self.assertEqual(args[0], '/tmp/runtime/ArmaReforgerServer') + self.assertEqual(args[args.index('-server')+1], header) + self.assertNotIn('-worldSystemsConfig', args) + else: + self.assertEqual(args[0], '/tmp/runtime/ArmaReforgerServerDiag') + self.assertEqual(args[args.index('-server')+1], '{B6C516F86302C679}Worlds/ERR_Everon.ent') + self.assertEqual(args[args.index('-worldSystemsConfig')+1], '{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf') + # Selecting Chat activates the existing declared closure, not invented + # runtime addons or an explicit list that could omit dependencies. + chat = (root/'addons/chat/addon.gproj').read_text().split('Dependencies', 1)[1] + dependencies = set(re.findall(r'"([A-F0-9]{16})"', chat)) + expected_dependencies = {'58D0FB3206B6F859'} + for project in ('core', 'ai', 'intel', 'map'): + expected_dependencies.add(re.search(r'GUID "([A-F0-9]{16})"', (root/'addons'/project/'addon.gproj').read_text())[1]) + self.assertEqual(dependencies, expected_dependencies) + + def test_invalid_project_route_combinations_fail_before_files_or_processes(self): + for route, project in [('vanilla-everon', 'chat'), ('unknown', 'core'), ('header', 'unknown')]: + with self.subTest(route=route, project=project), self.assertRaises(ValueError): + runner.engine_args(route, project) + argv = ['dedicated_native.py', '--source', '/tmp/not-read-source', + '--runtime', '/tmp/not-read-runtime', '--archive', '/tmp/not-created', + '--route', 'vanilla-everon', '--project', 'chat'] + stderr = io.StringIO() + with patch.object(sys, 'argv', argv), patch.object(Path, 'resolve') as resolve, patch.object(Path, 'mkdir') as mkdir, patch.object(runner.subprocess, 'run') as run, patch.object(runner.subprocess, 'Popen') as launch, contextlib.redirect_stderr(stderr): + with self.assertRaises(SystemExit) as error: + runner.main() + self.assertEqual(error.exception.code, 2) + resolve.assert_not_called() + mkdir.assert_not_called() + run.assert_not_called() + launch.assert_not_called() + self.assertIn('vanilla-everon cannot be combined with --project chat', stderr.getvalue()) + + def addon_input(self, root, names=('core', 'ai', 'intel', 'map', 'chat')): + repository = Path(__file__).parents[1] + for addon in names: + folder = root/'addons'/addon + folder.mkdir(parents=True) + (folder/'addon.gproj').write_bytes((repository/'addons'/addon/'addon.gproj').read_bytes()) + # Synthetic presence-only files, never supplied to a real engine. + (folder/'resourceDatabase.rdb').write_bytes(b'nonempty-presence-test') + (folder/'data.pak').write_bytes(b'nonempty-presence-test') + + def test_preflight_accepts_packed_input_without_loose_scripts(self): + with tempfile.TemporaryDirectory() as directory: + source = Path(directory) + self.addon_input(source) + for route in ('header', 'diag-world'): + for project in ('core', 'chat'): + runner.preflight_addons(source, route, project) + self.assertFalse(list(source.rglob('*.c'))) + # Core-only means no companion RDB is required. + with tempfile.TemporaryDirectory() as directory: + source = Path(directory) + self.addon_input(source, ('core',)) + runner.preflight_addons(source, 'header') + with self.assertRaisesRegex(ValueError, 'ai'): + runner.preflight_addons(source, 'header', 'chat') + runner.preflight_addons(Path('/not-a-real-addon-input'), 'vanilla-everon') + + def test_missing_core_dependency_and_empty_database_refuse_before_archive_or_process(self): + for project, relative, empty in [ + ('core', 'core/resourceDatabase.rdb', False), + ('chat', 'core/addon.gproj', False), + ('chat', 'ai/resourceDatabase.rdb', False), + ('chat', 'map/resourceDatabase.rdb', True), + ]: + with self.subTest(project=project, relative=relative, empty=empty), tempfile.TemporaryDirectory() as directory: + root = Path(directory); source=root/'source'; archive=root/'archive' + self.addon_input(source) + target = source/'addons'/relative + if empty: target.write_bytes(b'') + else: target.unlink() + argv = ['dedicated_native.py', '--source', str(source), '--archive', str(archive), + '--runtime', str(root/'runtime'), '--project', project] + stderr = io.StringIO() + with patch.object(sys, 'argv', argv), patch.object(runner, 'manifest') as manifest, patch.object(runner.subprocess, 'run') as preflight, patch.object(runner.subprocess, 'Popen') as launch, contextlib.redirect_stderr(stderr): + with self.assertRaises(SystemExit) as error: runner.main() + self.assertEqual(error.exception.code, 2) + manifest.assert_not_called(); preflight.assert_not_called(); launch.assert_not_called() + self.assertFalse(archive.exists()) + self.assertIn(relative, stderr.getvalue()) + + def test_preflight_refuses_linked_directory_linked_database_and_wrong_identity(self): + with tempfile.TemporaryDirectory() as directory: + source = Path(directory)/'source'; self.addon_input(source) + database = source/'addons/core/resourceDatabase.rdb' + database.unlink(); database.symlink_to(source/'addons/core/data.pak') + with self.assertRaisesRegex(ValueError, 'regular file'): + runner.preflight_addons(source, 'header') + database.unlink(); database.mkdir() + with self.assertRaisesRegex(ValueError, 'regular file'): + runner.preflight_addons(source, 'header') + database.rmdir(); database.write_bytes(b'presence-only') + project = source/'addons/core/addon.gproj' + project.write_text(project.read_text().replace('2528466DE220D91C', 'FA804F411BDDF2C6')) + with self.assertRaisesRegex(ValueError, 'identity mismatch'): + runner.preflight_addons(source, 'header') + with tempfile.TemporaryDirectory() as directory: + root = Path(directory); self.addon_input(root/'real') + source=root/'source'; source.mkdir(); (source/'addons').symlink_to(root/'real/addons') + with self.assertRaisesRegex(ValueError, 'regular addons directory'): + runner.preflight_addons(source, 'header') + def test_manifest_detects_mutation_and_refuses_links(self): with tempfile.TemporaryDirectory() as directory: root=Path(directory); target=root/'a.c'; target.write_text('first') diff --git a/tests/test_flight_action_runner.py b/tests/test_flight_action_runner.py index 6fb1d5f..529779c 100644 --- a/tests/test_flight_action_runner.py +++ b/tests/test_flight_action_runner.py @@ -6,6 +6,14 @@ import tempfile import unittest ROOT=Path(__file__).resolve().parents[1] class FlightActionRunner(unittest.TestCase): + def test_actual_controller_scope_refused_before_setup(self): + for project,rounds,timeout,smoke in [(p,r,t,s) for p,r,t in [('core','1','420'),('chat','2','420'),('chat','1','419')] for s in ['aircraft-control','aircraft-cancel','aircraft-translate']]: + with self.subTest(project=project,rounds=rounds,timeout=timeout,smoke=smoke),tempfile.TemporaryDirectory() as directory: + root=Path(directory) + result=subprocess.run([sys.executable,str(ROOT/'tools/headless_workbench.py'),'--compat',str(root/'prefix'),'--profile',str(root/'profile'),'--project',project,'--smoke',smoke,'--rounds',rounds,'--timeout',timeout],capture_output=True,text=True) + self.assertNotEqual(result.returncode,0) + self.assertIn('aircraft-control/aircraft-cancel/aircraft-translate requires Chat, one round, and at least 420 seconds',result.stderr) + self.assertEqual(list(root.iterdir()),[]) def test_scope_refused_without_profile_or_process_setup(self): for project,smoke in [('core','victory'),('chat','victory'),('chat','powered-flight')]: with self.subTest(project=project,smoke=smoke),tempfile.TemporaryDirectory() as directory: diff --git a/tests/test_headless_game_runner.py b/tests/test_headless_game_runner.py index 7a39599..7126c74 100644 --- a/tests/test_headless_game_runner.py +++ b/tests/test_headless_game_runner.py @@ -177,6 +177,18 @@ class GameRunnerTests(unittest.TestCase): for unwanted in ['-server', '-gproj', '-errPlay', '-errSmoke', '-plugin', 'Workbench', '-silentCrashReport', '-noCrashDialog']: self.assertFalse(any(unwanted in arg for arg in command)) + def test_prison_view_capture_is_explicit_and_excludes_controls_and_packed_inputs(self): + args = (runner.ROOT, Path('/Steam'), Path('/compat'), Path('/profile')) + for project in ('core', 'chat'): + ordinary = runner.command_for(*args, project) + self.assertNotIn('-errOrdinaryScreenshot', ordinary) + captured = runner.command_for(*args, project, capture_prison_view=True) + self.assertEqual(captured[captured.index('-errOrdinaryScreenshot')+1], '1') + with self.assertRaisesRegex(ValueError, 'loose successor'): + runner.command_for(*args, runner.CONTROL, capture_prison_view=True) + with self.assertRaisesRegex(ValueError, 'loose successor'): + runner.command_for(*args, 'core', packed={}, capture_prison_view=True) + def test_ready_requires_game_module_without_workbench_and_normal_phase(self): module = 'SCRIPT : Module: Game; loaded 12x files; defines: "PLATFORM_WINDOWS,ENABLE_DIAG"; CRC32: a\n' phase = 'SCRIPT : Rereintroduced [mission]: phase 0 -> 1\nSCRIPT : ERR ORDINARY: header verified project=core systems=MissionSystems\nSCRIPT : ERR ORDINARY: local participant verified project=core phase=prison\n' diff --git a/tests/test_native_aircraft_control.py b/tests/test_native_aircraft_control.py new file mode 100644 index 0000000..fca7845 --- /dev/null +++ b/tests/test_native_aircraft_control.py @@ -0,0 +1,118 @@ +"""Execute native fixture acceptance/cleanup rules; no engine or flight proof.""" +import unittest +from policy_harness import ROOT, body, run +SOURCE = ROOT/'addons/ai/Scripts/Game/ERR/ERR_NativeAircraftControlProbe.c' + +class AircraftControlProbePolicy(unittest.TestCase): + def test_actual_acceptance_rejects_faults_capture_and_fake_completion(self): + methods = '\n'.join(body(SOURCE, signature).replace('ERR_AircraftFlightState.', 'State::') for signature in ('static bool Terminal(', 'static bool CanCancel(', 'static bool CancelProof(', 'static bool TranslateProof(', 'static bool PhysicalFinish(', 'static bool CanDispose(')) + run('''#include +#include +namespace State {enum {IDLE,HOOKS,STARTING,POSITIVE,NEGATIVE,CLIMB,LANDING,SHUTDOWN,COMPLETE,CANCELLED,FAILED,RELINQUISHED,TRANSLATING};} +'''+methods+''' +int main() { + // Distinct modes cannot inherit each other's terminal result or fake Cancel. + for(int state=State::IDLE;state<=State::RELINQUISHED;state++) + for(int cancels=0;cancels<=2;cancels++) { + assert(Terminal(false,state,cancels)==(state==State::COMPLETE&&cancels==0)); + assert(Terminal(true,state,cancels)==(state==State::CANCELLED&&cancels==1)); + } + for(int state=State::IDLE;state<=State::RELINQUISHED;state++) { + assert(CanCancel(state,false,5)==(state==State::CLIMB)); + assert(!CanCancel(state,true,5)); + } + assert(!CanCancel(State::CLIMB,false,4.99f)); + assert(!CanCancel(State::CLIMB,false,18.01f)); + assert(!CanCancel(State::CLIMB,false,NAN)); + for(int flags=0;flags<16;flags++) assert(CancelProof(flags&1,flags&2,flags&4,flags&8)==(flags==15)); + assert(TranslateProof(true,true,3.3f,2.8f,.5f)); + assert(!TranslateProof(false,true,3.3f,2.8f,.5f)); + assert(!TranslateProof(true,false,3.3f,2.8f,.5f)); + assert(!TranslateProof(true,true,1,2.8f,.5f)); + assert(!TranslateProof(true,true,4.1f,2.8f,.5f)); + assert(!TranslateProof(true,true,3.3f,.9f,.5f)); + assert(!TranslateProof(true,true,3.3f,2.8f,.8f)); + for(int flags=0;flags<8;flags++) assert(PhysicalFinish(flags&1,flags&2,flags&4,1,1,1,1,101,101)==(flags==7)); + assert(!PhysicalFinish(true,true,true,0,1,1,1,1000,1000)); + assert(!PhysicalFinish(true,true,true,-1,1,1,1,1000,1000)); + assert(!PhysicalFinish(true,true,true,NAN,1,1,1,1000,1000)); + for(int n=0;n<=2;n++) { + assert(PhysicalFinish(true,true,true,1,n,1,1,101,101)==(n==1)); + assert(PhysicalFinish(true,true,true,1,1,n,1,101,101)==(n==1)); + assert(PhysicalFinish(true,true,true,1,1,1,n,101,101)==(n==1)); + } + assert(!PhysicalFinish(true,true,true,1,1,1,1,100,1000)); + assert(!PhysicalFinish(true,true,true,1,1,1,1,1000,100)); + // Any changed context, human occupant, faction, group or pilot prevents deletion. + for(int flags=0;flags<32;flags++) assert(CanDispose(flags&1,flags&2,flags&4,flags&8,flags&16)==(flags==31)); +} +''') + def test_actual_controller_and_qualifier_are_exercised_without_physical_shortcuts(self): + source=SOURCE.read_text(); tick=body(SOURCE,'int Tick(') + self.assertTrue(source.startswith('#ifdef WORKBENCH')) + self.assertIn('System.GetCLIParam("errSmoke", enabled)',source) + self.assertIn('outcome == "aircraft-control"',source) + self.assertIn('outcome == "aircraft-cancel"',source) + self.assertIn('outcome == "aircraft-translate"',source) + self.assertNotIn('errBaseSmoke',source) + for forbidden in ('SetVelocity(', 'SetAngularVelocity(', 'SetWorldTransform(', 'SetOrigin(', 'SetAngles(', '.Teleport(', 'ForceStartEngine(', '.StartEngine(', '.StopEngine(', 'SetFuel(', 'SetHealth(', 'SetSignalValue(', 'RotorSetForce', 'RotorSetTorque'): + self.assertNotIn(forbidden,source) + self.assertEqual(source.count('physics.SetActive('),1) + self.assertEqual(source.count('ERR_Actors.Spawn('),2) + self.assertEqual(source.count('.SpawnCharacterInCompartment('),1) + self.assertEqual(source.count('new ERR_AircraftFlight()'),1) + self.assertIn('m_Wakes == 0',tick) + self.assertLess(tick.index('ERR_AircraftFlightEnvelope.Qualify('),tick.index('m_Flight.Start(')) + self.assertLess(tick.index('m_Envelope != null'),tick.index('m_Flight.Start(')) + self.assertIn('Math.Min(m_Deadline, now + 240000)',tick) + self.assertIn('GetWorldTime() + 300000',source) + self.assertIn('m_Flight.Tick()',tick) + self.assertIn('m_Flight.OrderToken() == ORDER_TOKEN',tick) + self.assertIn('ERR_AircraftFlightRules.Landed(',tick) + self.assertIn('m_InitialFuel - m_Fuel.GetTotalFuel()',tick) + actor=body(SOURCE,'override void OnPrepareControls(') + self.assertLess(actor.index('probe.PrepareActions('),actor.index('super.OnPrepareControls(')) + heli=body(SOURCE,'protected override event void OnPrepareControls(') + self.assertLess(heli.index('super.OnPrepareControls('),heli.index('probe.PrepareHelicopter(')) + self.assertIn('owner != m_Pilot',body(SOURCE,'void PrepareActions(')) + self.assertIn('controller != m_Controller',body(SOURCE,'void PrepareHelicopter(')) + def test_cancellation_uses_actual_airborne_state_and_preserves_order(self): + source=SOURCE.read_text(); tick=body(SOURCE,'int Tick(') + self.assertIn('m_CancelFixture && m_CancelCount == 0 && ERR_NativeAircraftControlRules.CanCancel(m_Flight.State(), contact, height)',tick) + self.assertEqual(tick.count('m_Flight.Cancel('),1) + self.assertIn('m_CancelPilotHooks = m_PilotHooks; m_CancelHelicopterHooks = m_HelicopterHooks;',tick) + self.assertIn('m_Flight.ERR_NativeControlDeadline() != m_ControlDeadline',tick) + self.assertIn('m_Flight.OrderToken() != ORDER_TOKEN',tick) + self.assertIn('state == ERR_AircraftFlightState.LANDING && !contact && height > 1',tick) + self.assertIn('m_PilotHooks > m_CancelPilotHooks + 10 && m_HelicopterHooks > m_CancelHelicopterHooks + 10',tick) + self.assertIn('now - m_LandingStable >= 2000',tick) + self.assertIn('m_LandingStable = -1',tick) + self.assertIn('Terminal(m_CancelFixture, m_Flight.State(), m_CancelCount)',tick) + self.assertIn('CancelProof(m_ContinuedAirborneControl, m_LandingHeld,',tick) + self.assertEqual(body(SOURCE,'float ERR_NativeControlDeadline(').strip(),'float ERR_NativeControlDeadline() { return m_Deadline; }') + self.assertIn('!m_Flight.Finished() && m_CancelCount == 0',body(SOURCE,'void Stop(')) + def test_translation_uses_immutable_real_controller_target_and_physical_hold(self): + source=SOURCE.read_text(); tick=body(SOURCE,'int Tick(') + self.assertIn('m_Flight.StartTranslation(',tick) + self.assertIn('m_ControlDeadline, m_Envelope.Home()',tick) + self.assertIn('m_Flight.State() == ERR_AircraftFlightState.TRANSLATING',tick) + self.assertIn('m_Flight.TranslationTarget() != m_TranslationTarget',tick) + self.assertIn('m_Flight.TranslationOrigin() != m_TranslationOrigin',tick) + self.assertIn('now - m_TranslationStable >= 5000',tick) + self.assertIn('m_TranslationStable = -1',tick) + self.assertIn('TranslateProof(m_Flight.TranslationProven()',tick) + def test_exclusive_fixture_ownership_and_context_guarded_disposal(self): + source=SOURCE.read_text(); stop=body(SOURCE,'void Stop(') + self.assertNotIn('m_Mode.Own(',source) + self.assertIn('if (m_Stopped) return;',stop) + self.assertLess(stop.index('s_Current = null'),stop.index('m_Flight.Cancel(')) + self.assertLess(stop.index('m_Flight = null'),stop.index('ERR_Actors.DeleteSpawned(')) + self.assertIn('GetGame().GetPlayerManager()',stop) + self.assertIn('bool pilotUnchanged = context &&',stop) + self.assertIn('bool groupUnchanged = context &&',stop) + self.assertIn('CanDispose(context, NoPlayers(), faction, groupUnchanged, pilotUnchanged)',stop) + self.assertIn('CompartmentAccessComponent.GetVehicleIn(actor) == m_Aircraft',body(SOURCE,'protected bool NoPlayers(')) + self.assertIn('m_Group.GetPlayerCount(true) > 0',body(SOURCE,'protected bool NoPlayers(')) + self.assertEqual(stop.count('ERR_Actors.DeleteSpawned('),3) + +if __name__ == '__main__': unittest.main() diff --git a/tests/test_native_stats.py b/tests/test_native_stats.py new file mode 100644 index 0000000..3c4470a --- /dev/null +++ b/tests/test_native_stats.py @@ -0,0 +1,156 @@ +"""Real-format parser regressions; mutations are synthetic malformed fixtures.""" +import hashlib +import importlib.util +import json +from pathlib import Path +import subprocess +import sys +import tempfile +import unittest +from unittest.mock import patch + +ROOT = Path(__file__).resolve().parents[1] +TOOL = ROOT/'tools/parse_native_stats.py' +spec = importlib.util.spec_from_file_location('parse_native_stats', TOOL) +stats = importlib.util.module_from_spec(spec) +spec.loader.exec_module(stats) + +# Exact preserved source line, not a newly measured workload. +SOURCE = '08:32:34.010 DEFAULT : FPS: 29.8, frame time (avg: 33.6 ms, min: 3.3 ms, max: 89.1 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 996027 kB, Player: 0, AI: 29, AIChar: 22, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 698, Static: 57591, Disabled: 30 | New: 0, Del: 0, Bump: 16)' +VANILLA = '08:40:57.674 DEFAULT : FPS: 29.9, frame time (avg: 33.5 ms, min: 10.4 ms, max: 89.1 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 988737 kB, Player: 0, AI: 0, AIChar: 0, Veh: 0 (0), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 509, Static: 57594, Disabled: 21 | New: 0, Del: 0, Bump: 16)' + +# Exact packed Linux Chat 13:24:56 log line 278; no new benchmark. +FREEZES = '13:25:16.186 DEFAULT : FPS: 29.7, frame time (avg: 33.7 ms, min: 3.6 ms, max: 94.8 ms, mean: 32.9 ms, median: 33.3 ms), Mem: 996591 kB, Player: 0, AI: 32, AIChar: 23, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Freezes(cnt: 1, max: 90.6 ms, len: 1), Streaming(Dynam: 708, Static: 57591, Disabled: 30 | New: 0, Del: 0, Bump: 16)' + +class NativeStatsTests(unittest.TestCase): + def parse(self, text): + return stats.parse_bytes(text.encode(), 'synthetic-test-input') + + def test_exact_native_fields_raw_line_and_source_hash(self): + raw = ('unrelated log\r\n' + SOURCE + '\r\n').encode() + result = stats.parse_bytes(raw, 'source-console.log') + self.assertEqual(result['source'], {'path': 'source-console.log', 'sha256': hashlib.sha256(raw).hexdigest(), 'bytes': len(raw)}) + self.assertEqual(result['record_count'], 1) + row = result['records'][0] + self.assertEqual(row['line_number'], 2) + self.assertEqual(row['raw_line'], SOURCE) + self.assertEqual(row['timestamp'], '08:32:34.010') + self.assertEqual(row['fps'], 29.8) + self.assertEqual(row['frame_time_summary_ms'], {'avg': 33.6, 'min': 3.3, 'max': 89.1, 'mean': 33.3, 'median': 33.3}) + self.assertEqual(row['memory_kB'], 996027) + self.assertEqual(row['native_populations'], {'Player': 0, 'AI': 29, 'AIChar': 22, 'Veh': {'value': 0, 'parenthesized': 2}}) + self.assertEqual(row['native_projectiles'], {'S': 0, 'M': 0, 'G': 0, 'trailing': 0}) + self.assertEqual(row['native_streaming'], {'Dynam': 698, 'Static': 57591, 'Disabled': 30, 'New': 0, 'Del': 0, 'Bump': 16}) + + def test_zero_populations_remain_observed_zero_and_missing_times_null(self): + result = self.parse(VANILLA) + row = result['records'][0] + self.assertEqual(row['native_populations']['AI'], 0) + self.assertEqual(row['native_populations']['Player'], 0) + self.assertIsNone(row['ai_only_duration_ms']) + self.assertIsNone(row['window_duration_ms']) + self.assertEqual(result['performance_acceptance'], 'not_evaluated') + self.assertIn('percentiles', result['unavailable']) + self.assertIn('raw_frame_samples', result['unavailable']) + self.assertNotIn('p99', row['frame_time_summary_ms']) + self.assertNotIn('frames', row) + + def test_unrelated_errors_do_not_become_successful_runtime_qualification(self): + result = self.parse('08:32:31.000 RESOURCES (E): Failed to load resource\n' + SOURCE) + self.assertEqual(result['record_count'], 1) + self.assertEqual(result['performance_acceptance'], 'not_evaluated') + self.assertTrue(any('does not check engine/script errors' in entry for entry in result['limitations'])) + + def test_any_malformed_native_record_refuses_whole_export(self): + for bad in (SOURCE[:-1], SOURCE.replace('FPS:', 'FPS'), SOURCE.replace('AIChar: 22, ', ''), + SOURCE.replace('Mem: 996027 kB', 'Mem: 996027 MB'), SOURCE+' unknown: 1', + SOURCE.replace('AI: 29', 'AI: -1'), SOURCE.replace('Player: 0', 'Player: 0.5'), + SOURCE.replace('08:32:34.010', '25:32:34.010'), SOURCE.replace('08:32:34.010', '08:61:34.010'), + SOURCE.replace('08:32:34.010', '08:32:60.010'), SOURCE.replace('08:32:34.010', '08:32:34'), + SOURCE.replace('AI: 29', 'AI: '+str(1 << 63)), SOURCE.replace('min: 3.3', 'min: 99.0'), + SOURCE.replace('avg: 33.6', 'avg: 99.0')): + with self.subTest(bad=bad), self.assertRaises(stats.StatsError): + self.parse(SOURCE+'\n'+bad+'\n'+VANILLA) + + def test_nonfinite_negative_scientific_and_oversized_decimals_refused(self): + for field in ('FPS: 29.8', 'avg: 33.6', 'min: 3.3', 'max: 89.1', 'mean: 33.3', 'median: 33.3'): + for invalid in ('nan', 'NaN', 'inf', '-inf', '-1', '1e400', '9'*400): + with self.subTest(field=field, invalid=invalid), self.assertRaises(stats.StatsError): + self.parse(SOURCE.replace(field, field.split(':')[0]+': '+invalid)) + + def test_observed_optional_freezes_preserves_values_without_filling_absence(self): + raw = (FREEZES+'\n'+SOURCE).encode() + parsed = stats.parse_bytes(raw) + first, second = parsed['records'] + self.assertEqual(first['native_freezes'], {'cnt': 1, 'max_ms': 90.6, 'len': 1}) + self.assertEqual(first['raw_line'], FREEZES) + self.assertEqual(first['native_populations']['AIChar'], 23) + self.assertEqual(first['native_streaming']['Dynam'], 708) + self.assertEqual(parsed['source']['sha256'], hashlib.sha256(raw).hexdigest()) + self.assertIsNone(second['native_freezes']) + self.assertIsNone(first['window_duration_ms']) + self.assertIsNone(first['ai_only_duration_ms']) + self.assertNotIn('p99', first['frame_time_summary_ms']) + # Explicit zero differs from an absent native block; this mutation is synthetic. + zeros = FREEZES.replace('Freezes(cnt: 1, max: 90.6 ms, len: 1)', 'Freezes(cnt: 0, max: 0.0 ms, len: 0)') + self.assertEqual(self.parse(zeros)['records'][0]['native_freezes'], {'cnt': 0, 'max_ms': 0.0, 'len': 0}) + + def test_optional_freezes_is_still_strict_and_cannot_hide_malformed_records(self): + block = 'Freezes(cnt: 1, max: 90.6 ms, len: 1)' + invalid_blocks = ['Freezes(cnt: 1, max: 90.6 ms)', + 'Freezes(cnt: 1, max: 90.6 ms, len: 1, extra: 1)', + 'Freezes(cnt: 1, max: 90.6 s, len: 1)', block+', '+block] + for field, original in [('cnt', '1'), ('max', '90.6'), ('len', '1')]: + for value in ('-1', 'NaN', 'inf', '1e400', '9'*400): + invalid_blocks.append(block.replace(field+': '+original, field+': '+value)) + for field in ('cnt', 'len'): + invalid_blocks.append(block.replace(field+': 1', field+': 1.5')) + invalid_blocks.append(block.replace(field+': 1', field+': '+str(1 << 63))) + for invalid in invalid_blocks: + with self.subTest(block=invalid), self.assertRaises(stats.StatsError): + self.parse(SOURCE+'\n'+FREEZES.replace(block, invalid)+'\n'+VANILLA) + + def test_clock_rollover_kept_without_inventing_date_interval_or_windows(self): + a = SOURCE.replace('08:32:34.010', '23:59:59.999') + b = SOURCE.replace('08:32:34.010', '00:00:05.005') + result = self.parse(a+'\n'+b) + self.assertEqual([r['timestamp'] for r in result['records']], ['23:59:59.999', '00:00:05.005']) + self.assertTrue(all(r['window_duration_ms'] is None for r in result['records'])) + self.assertTrue(all('elapsed_ms' not in r for r in result['records'])) + + def test_bounds_encoding_and_empty_input(self): + for raw in (b'', b'No telemetry\n', b'\xff'): + with self.assertRaises(stats.StatsError): stats.parse_bytes(raw) + with patch.object(stats, 'MAX_INPUT_BYTES', 20), self.assertRaises(stats.StatsError): self.parse(SOURCE) + with patch.object(stats, 'MAX_LINE_BYTES', 20), self.assertRaises(stats.StatsError): self.parse(SOURCE) + with patch.object(stats, 'MAX_RECORDS', 1), self.assertRaises(stats.StatsError): self.parse(SOURCE+'\n'+VANILLA) + self.assertEqual(stats.parse_bytes(b'\xef\xbb\xbf'+SOURCE.encode())['record_count'], 1) + + def test_cli_read_only_success_and_failure_no_partial_json(self): + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp)/'console.log'; path.write_text(SOURCE+'\n') + before = path.read_bytes() + process = subprocess.run([sys.executable, str(TOOL), str(path)], capture_output=True, text=True) + self.assertEqual(process.returncode, 0, process.stderr) + self.assertEqual(json.loads(process.stdout)['record_count'], 1) + self.assertEqual(path.read_bytes(), before) + path.write_text(SOURCE+'\n'+SOURCE[:-1]) + process = subprocess.run([sys.executable, str(TOOL), str(path)], capture_output=True, text=True) + self.assertEqual(process.returncode, 1) + self.assertEqual(process.stdout, '') + self.assertIn('line 2', process.stderr) + self.assertEqual(list(Path(tmp).iterdir()), [path]) + + def test_both_preserved_actual_archives_parse_without_new_measurement(self): + for directory, stamp, first in [('dedicated-2026-09-19-083213', '08-32-13', SOURCE), + ('dedicated-2026-09-19-084040-vanilla', '08-40-40', VANILLA)]: + path = ROOT/'docs/evidence'/directory/'profile/logs'/('logs_2026-09-19_'+stamp)/'console.log' + self.assertTrue(path.is_file(), f'missing preserved evidence: {path}') + parsed = stats.parse_file(path) + self.assertGreater(parsed['record_count'], 1) + self.assertEqual(parsed['records'][0]['raw_line'], first) + self.assertEqual(parsed['performance_acceptance'], 'not_evaluated') + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/test_ordinary_screenshot.py b/tests/test_ordinary_screenshot.py new file mode 100644 index 0000000..e64d475 --- /dev/null +++ b/tests/test_ordinary_screenshot.py @@ -0,0 +1,144 @@ +"""Actual opt-in screenshot helper lifecycle with native interfaces adapted.""" +import re +from policy_harness import ROOT,body,run +p=ROOT/'addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c' +signatures=['protected static bool Enabled(', 'static void Queue(ERR_GameMode', 'protected bool Valid(', 'void Cancel()', 'protected void Capture(', 'static void ClearWorld('] +# Cancel() also exists in the launch helper; select the screenshot class first. +source=p.read_text();helper=source.split('class ERR_OrdinaryScreenshotRequest : Managed',1)[1].split('modded class ArmaReforgerScripted',1)[0] +def method(signature): + start=helper.index(signature);open_=helper.index('{',start);depth=1;i=open_+1 + while depth: + depth+=(helper[i]=='{')-(helper[i]=='}');i+=1 + return helper[start:i] +def adapt(s): + s=s.replace('protected ','').replace('null','nullptr').replace('ERR_OrdinaryScreenshotRequest','Probe') + for typ in ('ERR_GameMode','PlayerController','ERR_PlayerLife','PlayerManager','Probe'): + s=re.sub(r'\b'+typ+r' (\w+)',typ+r'* \1',s) + for n in ('System','Replication','ERR_GameMode','ERR_Phase','ERR_Actors'): + s=s.replace(n+'.',n+'::') + for n in ('mode','controller','life','request','manager','current','m_Mode','m_Controller','s_Request'): + s=s.replace(n+'.',n+'->') + s=s.replace('GetGame().','GetGame()->').replace('Players().','Players()->') + s=s.replace('OnStop().Insert(request->Cancel)','OnStop().Insert(request, &Probe::Cancel)').replace('OnStop().Remove(Cancel)','OnStop().Remove(this, &Probe::Cancel)') + s=s.replace('CallLater(request->Capture, 3000, false)','CallLater(request, &Probe::Capture, 3000, false)').replace('Remove(Capture)','Remove(this, &Probe::Capture)') + return s +methods='\n'.join(adapt(method(sig)) for sig in signatures) +run(r''' +#include +#include +#include +using string=std::string;using UUID=int; +void Print(const char*){} +namespace Replication{bool server=true;bool IsServer(){return server;}} +namespace System{bool console=false;std::map flags;int captures=0;string output; + bool IsConsoleApp(){return console;}bool GetCLIParam(string key,string& out){auto p=flags.find(key);if(p==flags.end())return false;out=p->second;return true;} + void MakeScreenshot(string path){captures++;output=path;} +} +namespace ERR_Phase{const int PRISON=1;} +struct Actor{bool alive=true;};using IEntity=Actor*; +namespace ERR_Actors{bool Alive(IEntity a){return a&&a->alive;}} +struct ERR_PlayerLife{int AccountId=11;}; +struct PlayerController{int id=1;IEntity actor=nullptr;int GetPlayerId(){return id;}IEntity GetControlledEntity(){return actor;}}; +struct PlayerManager{PlayerController* controller=nullptr;IEntity actor=nullptr;PlayerController* GetPlayerController(int){return controller;}IEntity GetPlayerControlledEntity(int){return actor;}}; +struct Roster{ERR_PlayerLife* life=nullptr;IEntity actor=nullptr;ERR_PlayerLife* CurrentActor(IEntity a){return a&&a==actor?life:nullptr;}}; +struct Probe; +struct Event{Probe* owner=nullptr;void(Probe::*callback)()=nullptr;int inserts=0,removes=0; + void Insert(Probe* p,void(Probe::*f)()){owner=p;callback=f;inserts++;}void Remove(Probe* p,void(Probe::*f)()){if(owner==p&&callback==f){owner=nullptr;callback=nullptr;removes++;}}void Invoke();}; +struct Queue:Event{int delay=0;bool repeat=true;void CallLater(Probe* p,void(Probe::*f)(),int d,bool r){Insert(p,f);delay=d;repeat=r;}}; +struct ERR_GameMode{static ERR_GameMode* current;bool active=true;int phase=1,world=7;Roster roster;Event stop; + static ERR_GameMode* Get(){return current;}int GetWorld(){return world;}bool Active(){return active;}int Phase(){return phase;}Roster* Players(){return &roster;}Event& OnStop(){return stop;}};ERR_GameMode* ERR_GameMode::current=nullptr; +struct Game{int world=7;PlayerController* local=nullptr;PlayerManager manager;Queue queue;int GetWorld(){return world;}PlayerController* GetPlayerController(){return local;}PlayerManager* GetPlayerManager(){return &manager;}Queue& GetCallqueue(){return queue;}};Game* game_;Game* GetGame(){return game_;} +int yardMeasurements=0; +struct Probe{void YardDiagnostic(){assert(m_Mode);yardMeasurements++;}static Probe* s_Request;static bool s_Attempted;ERR_GameMode* m_Mode=nullptr;PlayerController* m_Controller=nullptr;IEntity m_Actor=nullptr;ERR_PlayerLife* m_Life=nullptr;UUID m_Account=0;int m_PlayerId=0;bool m_Finished=false; +'''+methods.replace('GetCallqueue().Remove','GetCallqueue().Remove').replace('GetGame()->GetCallqueue())','true)')+r''' +}; +Probe* Probe::s_Request=nullptr;bool Probe::s_Attempted=false; +void Event::Invoke(){if(owner&&callback){auto p=owner;auto f=callback;(p->*f)();}} +struct Fixture{Game game;ERR_GameMode mode;Actor actor;ERR_PlayerLife life;PlayerController controller; + Fixture(){game_=&game;ERR_GameMode::current=&mode;controller.actor=&actor;game.local=&controller;game.manager.controller=&controller;game.manager.actor=&actor;mode.roster.actor=&actor;mode.roster.life=&life;System::flags={{"errOrdinaryScenario","core"},{"errOrdinaryScreenshot","1"}};System::console=false;Replication::server=true;System::captures=0;yardMeasurements=0;} + void queue(){Probe::Queue(&mode,&controller,&actor);}~Fixture(){Probe::ClearWorld();game_=nullptr;ERR_GameMode::current=nullptr;} +}; +int main(){ + for(string project: {"","core","chat","other"})for(string flag:{"","0","1","true"}){Fixture f;System::flags["errOrdinaryScenario"]=project;System::flags["errOrdinaryScreenshot"]=flag;f.queue();bool allowed=(project=="core"||project=="chat")&&flag=="1";assert(f.game.queue.inserts==(allowed?1:0));f.game.queue.Invoke();assert(System::captures==(allowed?1:0)&&yardMeasurements==(allowed?1:0));} + {Fixture f;System::flags.clear();f.queue();assert(f.game.queue.inserts==0);} + {Fixture f;System::console=true;f.queue();assert(f.game.queue.inserts==0);} + {Fixture f;Replication::server=false;f.queue();assert(f.game.queue.inserts==0);} + {Fixture f;f.queue();f.queue();assert(f.game.queue.inserts==1&&f.game.queue.delay==3000&&!f.game.queue.repeat);Probe* pending=Probe::s_Request;f.game.queue.Invoke();assert(System::captures==1&&System::output=="$logs:err-ordinary-prison");assert(f.mode.stop.owner==nullptr&&f.game.queue.owner==nullptr);pending->Capture();f.queue();assert(System::captures==1&&f.game.queue.inserts==1);} + for(int mutation=0;mutation<13;mutation++){Fixture f;f.queue();PlayerController replacement;Actor other;ERR_PlayerLife otherLife;ERR_GameMode otherMode; + if(mutation==0)f.actor.alive=false; + if(mutation==1)f.controller.actor=&other; + if(mutation==2)f.game.local=&replacement; + if(mutation==3)f.game.manager.controller=&replacement; + if(mutation==4)f.game.manager.actor=&other; + if(mutation==5)f.mode.roster.actor=&other; + if(mutation==6)f.mode.roster.life=&otherLife; + if(mutation==7)f.life.AccountId=99; + if(mutation==8)f.controller.id=2; + if(mutation==9)f.mode.phase=2; + if(mutation==10)f.mode.active=false; + if(mutation==11)f.game.world=8; + if(mutation==12)ERR_GameMode::current=&otherMode; + f.game.queue.Invoke();assert(System::captures==0&&yardMeasurements==0&&f.mode.stop.owner==nullptr&&f.game.queue.owner==nullptr); + } + {Fixture f;f.queue();Probe* pending=Probe::s_Request;f.mode.stop.Invoke();pending->Capture();assert(System::captures==0&&f.game.queue.owner==nullptr&&f.mode.stop.owner==nullptr);f.queue();assert(f.game.queue.inserts==1);} + {Fixture f;f.queue();Probe* pending=Probe::s_Request;Probe::ClearWorld();pending->Capture();assert(System::captures==0&&f.game.queue.owner==nullptr&&f.mode.stop.owner==nullptr);f.queue();f.game.queue.Invoke();assert(System::captures==1);} +} +''') +assert source.index('#ifndef WORKBENCH')') +yard=yard.replace('GetPrefabData().','GetPrefabData()->') +run(r''' +#include +#include +#include +#include +using string=std::string; +templatestruct Arr:std::vector{using std::vector::vector;int Count(){return this->size();}bool Contains(T x){return std::find(this->begin(),this->end(),x)!=this->end();}void Insert(T x){this->push_back(x);}}; +struct Vec{float v[3]={0,0,0};float& operator[](int i){return v[i];}}; +int messages=0,measurements=0;std::vector projected; +void Print(const char*){messages++;} +templatevoid PrintFormat(const char*,T...){messages++;} +struct Prefab{string name="{BE6B8D56349038A6}Prefabs/ERR/Prison.et";string GetPrefabName(){return name;}}; +struct Entity;using IEntity=Entity*;using DecalEntity=Entity*; +struct TypeName{string ToString(){return "DecalEntity";}}; +struct Entity{int world=7;bool isDecal=false,hasPrefab=true;Prefab prefab;Entity* child=nullptr;Entity* sibling=nullptr;Vec mins{{98,10,198}},maxs{{102,11,202}},origin{{100,10,200}};int reads=0; + int GetWorld(){return world;}Prefab* GetPrefabData(){return hasPrefab?&prefab:nullptr;}void GetWorldTransform(Vec* out){reads++;out[3]=origin;} + void GetWorldBounds(Vec& a,Vec& b){reads++;measurements++;a=mins;b=maxs;}TypeName Type(){return {};} + Vec CoordToLocal(Vec c){for(int i=0;i<3;i++)c[i]-=origin[i];projected.push_back(c);return c;} + Entity* GetChildren(){return child;}Entity* GetSibling(){return sibling;}}; +DecalEntity CastDecal(IEntity e){return e&&e->isDecal?e:nullptr;} +namespace ERR_LocationKind{const int PRISON=0;} +struct Location{Entity* owner=nullptr;int kind=0;string id="everon-prison-1";int Kind(){return kind;}string Id(){return id;}Entity* GetOwner(){return owner;}};using ERR_LocationComponent=Location*; +struct Mode{Arr locations;void Locations(Arr& out){out=locations;}int GetWorld(){return 7;}}; +struct Probe{Mode* m_Mode; +'''+yard.replace('IEntity prison;','IEntity prison = nullptr;').replace('int decals;','int decals = 0;')+r''' +}; +void reset(){messages=measurements=0;projected.clear();} +int main(){ + Entity prison,decal,external;decal.isDecal=external.isDecal=true;prison.child=&decal;prison.sibling=&external;Location location{&prison};Mode mode{{&location}};Probe p{&mode}; + p.YardDiagnostic();assert(measurements==1&&projected.size()==8&&external.reads==0);assert(projected.front()[0]==-2&&projected.front()[1]==0&&projected.front()[2]==-2);assert(projected.back()[0]==2&&projected.back()[1]==1&&projected.back()[2]==2); + for(int mismatch=0;mismatch<5;mismatch++){reset();Location candidate{&prison};Mode other{{&candidate}};Probe q{&other};if(mismatch==0)candidate.kind=1;if(mismatch==1)candidate.id="other-prison";if(mismatch==2)prison.prefab.name="different";if(mismatch==3)prison.world=8;if(mismatch==4)prison.hasPrefab=false;q.YardDiagnostic();assert(measurements==0);prison.prefab.name="{BE6B8D56349038A6}Prefabs/ERR/Prison.et";prison.world=7;prison.hasPrefab=true;} + reset();mode.locations.push_back(&location);p.YardDiagnostic();assert(measurements==0);mode.locations.pop_back(); + reset();decal.sibling=&decal;p.YardDiagnostic();assert(measurements==0);decal.sibling=nullptr; + reset();std::vector chain(10);prison.child=&chain[0];for(int i=0;i<9;i++)chain[i].child=&chain[i+1];chain[9].isDecal=true;p.YardDiagnostic();assert(measurements==0); + reset();std::vector wide(65);prison.child=&wide[0];for(int i=0;i<64;i++)wide[i].sibling=&wide[i+1];wide[64].isDecal=true;p.YardDiagnostic();assert(measurements==0); + reset();mode.locations=Arr(65,&location);p.YardDiagnostic();assert(measurements==0); +} +''') +print('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') diff --git a/tests/test_prison_escape_policy.py b/tests/test_prison_escape_policy.py index 9e75f55..385fa1b 100644 --- a/tests/test_prison_escape_policy.py +++ b/tests/test_prison_escape_policy.py @@ -53,14 +53,15 @@ class ActionSource: source=action_path.read_text() return source[source.index('class ERR_PrisonDoorAction'):source.index('class ERR_TuneRadioAction')] action=ActionSource() -availability=body(action,'override bool CanBePerformedScript(').replace('override ','').replace('ERR_GameMode mode = ERR_GameMode.Get();','ERR_GameMode* mode = ERR_GameMode::Get();').replace('mode.Phase()','mode->Phase()').replace('ERR_Phase.PRISON','ERR_Phase::PRISON').replace('super.CanBePerformedScript','Base::CanBePerformedScript') +availability=body(action,'override bool CanBePerformedScript(').replace('override ','').replace('ERR_GameMode mode = ERR_GameMode.Get();','ERR_GameMode* mode = ERR_GameMode::Get();').replace('mode.Phase()','mode->Phase()').replace('ERR_Phase.PRISON','ERR_Phase::PRISON').replace('super.CanBePerformedScript','Base::CanBePerformedScript').replace('string.Empty','std::string{}') execution=body(action,'override void PerformAction(').replace('override ','').replace('super.PerformAction','Base::PerformAction') run('''#include +#include using IEntity=int; enum ERR_Phase {PREPARING,PRISON,RADIO_SEARCH,RADIO_DEFENCE}; struct ERR_GameMode {int phase=PRISON;static ERR_GameMode* current;static ERR_GameMode* Get(){return current;}int Phase(){return phase;}}; ERR_GameMode* ERR_GameMode::current=nullptr; -struct Base {bool nativeAllowed=true;int calls=0,owner=0,user=0;bool CanBePerformedScript(IEntity){return nativeAllowed;}void PerformAction(IEntity pOwnerEntity,IEntity pUserEntity){calls++;owner=pOwnerEntity;user=pUserEntity;}}; +struct Base {void SetCannotPerformReason(const std::string&){}bool nativeAllowed=true;int calls=0,owner=0,user=0;bool CanBePerformedScript(IEntity){return nativeAllowed;}void PerformAction(IEntity pOwnerEntity,IEntity pUserEntity){calls++;owner=pOwnerEntity;user=pUserEntity;}}; struct Action:Base { '''+availability+execution+''' }; diff --git a/tests/test_spawn_retry_budget.py b/tests/test_spawn_retry_budget.py new file mode 100644 index 0000000..88e8045 --- /dev/null +++ b/tests/test_spawn_retry_budget.py @@ -0,0 +1,127 @@ +"""Execute actual DoSpawn_S ordering with native admission/geometry adapters. +No Enfusion scheduling, possession, collision or remote-client proof. +""" +import re +from policy_harness import ROOT, body, run +source = ROOT/'addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c' +method = body(source, 'protected override void DoSpawn_S(') +method = method.replace('protected override ', '') +for old, new in [('ERR_GameMode', 'Mode'), ('SCR_PlayerController', 'Controller'), + ('SCR_PlayerFactionAffiliationComponent', 'Affiliation'), + ('SCR_RespawnComponent', 'Respawn'), ('ERR_PlayerLife', 'Life'), + ('SCR_FreeSpawnData', 'Request'), ('ERR_ObserverReason', 'Reason')]: + method = method.replace(old, new) +for kind in ('Mode', 'Controller', 'Affiliation', 'Respawn', 'Faction', 'Life', 'Request'): + method = re.sub(r'\b'+kind+r' (\w+)\b', kind+r'* \1', method) +for var in ('controller', 'mode', 'affiliation', 'respawn', 'life'): + method = method.replace(var+'.', var+'->') +method = method.replace('Mode.Get()', 'Mode::Get()').replace('Controller.Cast(', 'Controller::Cast(') +method = method.replace('GetGame().GetPlayerManager().GetPlayerController(', 'GetGame()->GetPlayerManager()->GetPlayerController(') +method = method.replace('mode->Players().', 'mode->Players()->').replace('mode->Factions().', 'mode->Factions()->') +method = method.replace('ERR_MissionRules.Terminal(', 'Terminal(').replace('Reason.', 'Reason::') +method = method.replace('vector position;', 'int position=0;').replace('Reason reason =', 'int reason =') +run(r''' +#include +#include +#include +#include +#include +struct Text { bool empty=true; bool IsEmpty(){return empty;} }; +struct Life {bool UsedLife=false;}; +struct Roster {bool enter=true;Life life;bool CanEnter(int,int){return enter;}Life* Get(int){return &life;}}; +struct Catalog {int PrisonerPrefab=1;}; +struct Faction {} faction; +struct Mode {bool active=true;int phase=1;Text error;Roster roster;Catalog catalog;Faction* factionPtr=&faction; + static Mode* current;static Mode* Get(){return current;}bool Active(){return active;}int Phase(){return phase;} + Text PreparationError(){return error;}Roster* Players(){return &roster;}Catalog* Factions(){return &catalog;}Faction* PlayerFaction(){return factionPtr;}}; +Mode* Mode::current=nullptr; +struct Controller {bool controlled=false;static Controller* Cast(Controller* value){return value;}bool GetControlledEntity(){return controlled;}}; +struct Manager {Controller* controller=nullptr;Controller* GetPlayerController(int){return controller;}}; +struct Game {Manager manager;Manager* GetPlayerManager(){return &manager;}} game; +Game* GetGame(){return &game;} +struct Affiliation {int requests=0;void RequestFaction(Faction*){requests++;}}; +struct Request {int prefab,position;Request(int a,int b):prefab(a),position(b){} }; +struct Respawn {bool can=true,request=true;int requests=0,checks=0;std::vector allocations; + bool CanSpawn(Request* value){allocations.push_back(value);checks++;return can;} + bool RequestSpawn(Request*){requests++;return request;} + ~Respawn(){for(auto* value:allocations)delete value;}}; +struct Values {std::map values;bool Contains(int id){return values.count(id);}int Get(int id){return values.at(id);}void Set(int id,int value){values[id]=value;}}; +struct IDs {std::set values;bool Contains(int id){return values.count(id);}void Insert(int id){values.insert(id);}}; +namespace Reason {enum {NONE,SPAWN_UNAVAILABLE,SPENT_LIFE,LATE_EXTRACTION};} +bool Terminal(int phase){return phase>=5;} +struct Logic { + Values m_Attempts,m_AuthorizedPositions;IDs m_Identities,m_Pending;bool m_AdmissionsStopped=false; + Affiliation affiliation;Respawn respawn;bool hasAffiliation=true,hasRespawn=true,context=true,clear=true; + int retries=0,observations=0,reason=Reason::NONE,placementChecks=0,observedBudget=-1; + Affiliation* GetPlayerFactionComponent_S(int){return hasAffiliation?&affiliation:nullptr;} + Respawn* GetPlayerRespawnComponent_S(int){return hasRespawn?&respawn:nullptr;} + bool CheckLocalAdmissionContext(){return context;} + bool SpawnPosition(Mode*,int& position){placementChecks++;position=42;return clear;} + void RetryLater(int){retries++;} + void Observe(int id,int why){observations++;reason=why;observedBudget=m_Attempts.Get(id);m_Attempts.values.erase(id);} + void OnPlayerSpawnFailed_S(int id){m_Pending.values.erase(id);m_AuthorizedPositions.values.erase(id);RetryLater(id);} + Logic(){m_Identities.Insert(1);m_Attempts.Set(1,0);} +'''+method+r''' +}; +int main(){ + Mode mode;Mode::current=&mode;Controller controller;game.manager.controller=&controller; + // Blocked geometry, missing affiliation, missing respawn and missing faction + // each consume exactly 30 eligible attempts, then expose the existing observer. + for(int fault=0;fault<5;fault++){ + Logic logic; + if(fault==0)logic.clear=false; + if(fault==1)logic.hasAffiliation=false; + if(fault==2)logic.hasRespawn=false; + if(fault==3)mode.factionPtr=nullptr; + if(fault==4)logic.respawn.can=false; + for(int n=1;n<=30;n++){ + logic.DoSpawn_S(1);assert(logic.m_Attempts.Get(1)==n); + assert(logic.retries==n&&logic.observations==0&&logic.respawn.requests==0); + assert(!logic.m_Pending.Contains(1)&&!logic.m_AuthorizedPositions.Contains(1)); + assert(!mode.roster.life.UsedLife); + } + logic.DoSpawn_S(1); + assert(logic.observations==1&&logic.reason==Reason::SPAWN_UNAVAILABLE&&logic.retries==30&&logic.observedBudget==30); + logic.DoSpawn_S(1);assert(logic.observations==1); // removed attempt record + assert(!mode.roster.life.UsedLife);mode.factionPtr=&faction; + } + // Preparing may take arbitrarily many polls without consuming the budget. + {Logic logic;mode.active=false;for(int n=0;n<200;n++)logic.DoSpawn_S(1); + assert(logic.m_Attempts.Get(1)==0&&logic.retries==200&&logic.observations==0&&logic.placementChecks==0); + mode.active=true;logic.DoSpawn_S(1);assert(logic.m_Attempts.Get(1)==1&&logic.respawn.requests==1);} + // Temporarily blocked ground recovers normally; async pending calls are inert. + {Logic logic;logic.clear=false;for(int n=0;n<7;n++)logic.DoSpawn_S(1); + logic.clear=true;logic.DoSpawn_S(1); + assert(logic.m_Attempts.Get(1)==8&&logic.respawn.requests==1&&logic.m_Pending.Contains(1)); + assert(logic.m_AuthorizedPositions.Get(1)==42&&!mode.roster.life.UsedLife); + for(int n=0;n<100;n++)logic.DoSpawn_S(1); + assert(logic.m_Attempts.Get(1)==8&&logic.respawn.requests==1&&logic.placementChecks==8&&logic.retries==7);} + // Request refusal does not double-charge; the next eligible attempt advances. + {Logic logic;logic.respawn.request=false;logic.DoSpawn_S(1); + assert(logic.m_Attempts.Get(1)==1&&logic.retries==1&&!logic.m_Pending.Contains(1)); + logic.DoSpawn_S(1);assert(logic.m_Attempts.Get(1)==2&&logic.retries==2);} + // Admission refusal is before budget consumption and cannot spend a life. + for(bool spent: {false,true}){ + Logic logic;mode.roster.enter=false;mode.roster.life.UsedLife=spent; + logic.DoSpawn_S(1);assert(logic.observations==1&&logic.placementChecks==0&&logic.retries==0&&logic.observedBudget==0); + assert(logic.reason==(spent?Reason::SPENT_LIFE:Reason::LATE_EXTRACTION)); + assert(mode.roster.life.UsedLife==spent);mode.roster.enter=true;mode.roster.life.UsedLife=false; + } + // Existing body, invalid local context, stopped admission, terminal phase, + // preparation failure and missing controller cannot request or consume attempts. + for(int fault=0;fault<6;fault++){ + Logic logic; + if(fault==0)controller.controlled=true; + if(fault==1)logic.context=false; + if(fault==2)logic.m_AdmissionsStopped=true; + if(fault==3)mode.phase=5; + if(fault==4)mode.error.empty=false; + if(fault==5)game.manager.controller=nullptr; + logic.DoSpawn_S(1); + assert(!logic.m_Attempts.Contains(1)||logic.m_Attempts.Get(1)==0); + assert(logic.placementChecks==0&&logic.respawn.requests==0&&logic.retries==0); + controller.controlled=false;mode.phase=1;mode.error.empty=true;game.manager.controller=&controller; + } +} +''') +print('PASS: actual admission attempt budget bounds blocked/missing prerequisites; preparation, spent life and async pending remain protected') diff --git a/tools/archive_native.py b/tools/archive_native.py index 7f6eb20..b52934d 100644 --- a/tools/archive_native.py +++ b/tools/archive_native.py @@ -23,7 +23,7 @@ try:dest.mkdir(parents=True,exist_ok=False) except FileExistsError:p.error('Evidence already exists; refusing to overwrite') for name in ['console.log','script.log','error.log','crash.log','rereintroduced-hq.log','headless-launch.log','runner.json','game-startup-report.json']: if (source/name).is_file():shutil.copyfile(source/name,dest/(name+'.txt')) -for capture in sorted(source.glob('err-*.png')): +for capture in sorted([*source.glob('err-*.png'), *source.glob('err-*.bmp')]): if capture.is_file():shutil.copyfile(capture,dest/capture.name) (dest/'source-sha256.json').write_bytes(manifest_bytes) (dest/PROVENANCE).write_bytes(encoded(provenance)) diff --git a/tools/check.py b/tools/check.py index ae49700..9172711 100644 --- a/tools/check.py +++ b/tools/check.py @@ -59,7 +59,7 @@ def check(): assert set(mapped)==set(inventory['script_paths']), 'Original inventory has untracked or unknown entries' print(f'PASS: {len(mapped)} original script entries tracked across {len(feature_ids)} unfinished responsibilities') print(f'PASS: {len(ids)} isolated addons, acyclic dependencies, {len(resources)} unique resources, exact vanilla references') - for name in ['test_participant_selection.py', 'test_native_shared_map_ownership.py', 'test_shared_map_ownership.py', 'test_intel_registration.py', 'test_mortar_activity_completion.py', 'test_packed_chat_game.py', 'test_native_mortar_refresh.py', 'test_archive_packed.py', 'test_mortar_refresh.py', 'test_packed_core_game.py', 'test_pak_inventory.py', 'test_native_mortar_salvo.py', 'test_spectator_guidance.py', 'test_native_package.py', 'test_item_station_teardown.py', 'test_source_bundle.py', 'test_native_flight_footprint.py', 'test_native_flight_input_diagnostics.py', 'test_mortar_logistics.py', 'test_mortar_courier_storage.py','test_powered_flight_pad.py','test_prison_escape_policy.py','test_powered_flight_policy.py','test_flight_action_runner.py','test_native_local_admission_probe.py','test_mortar_report_ledger.py','test_dedicated_native.py','test_native_mortar_transfer.py','test_mortar_aim_renewal.py','test_dedicated_preflight.py','test_mortar_transactions.py','test_native_mortar_probe.py','test_diagnostic_no_splash.py','test_casualty_incapacitation.py','test_casualty_remove_probe.py','test_extraction_placement_policy.py','test_guard_cancellation_policy.py','test_casualty_ground_policy.py','test_casualty_reservation_death.py','test_casualty_loading_policy.py','test_initial_guard_policy.py','test_headless_game_runner.py','test_vanilla_game_control.py','test_archive_game_control.py','test_site_discovery_policy.py','test_faction_catalog_scope.py','test_mission_rules.py','test_admin_setting_policy.py', 'test_player_admission_policy.py','test_progression_identity.py','test_discovery_map_position.py','test_local_admission.py','test_prison_placement_policy.py', 'test_recovery_policy.py','test_time_policy.py','test_environment_policy.py','test_environment_restart_runner.py', 'test_inventory_enumeration_policy.py','test_radio_defence_policy.py','test_radio_feedback_policy.py','test_performance_comparison.py','test_release_check.py','test_settings_migration.py','hq_network_regression.py','helicopter_availability_regression.py','mortar_salvo_regression.py']: + for name in ['test_native_stats.py', 'test_aircraft_translation.py', 'test_spawn_retry_budget.py', 'test_action_feedback.py', 'test_native_aircraft_control.py', 'test_aircraft_flight_policy.py', 'test_aircraft_flight_envelope.py', 'test_ordinary_screenshot.py', 'test_participant_selection.py', 'test_native_shared_map_ownership.py', 'test_shared_map_ownership.py', 'test_intel_registration.py', 'test_mortar_activity_completion.py', 'test_packed_chat_game.py', 'test_native_mortar_refresh.py', 'test_archive_packed.py', 'test_mortar_refresh.py', 'test_packed_core_game.py', 'test_pak_inventory.py', 'test_native_mortar_salvo.py', 'test_spectator_guidance.py', 'test_native_package.py', 'test_item_station_teardown.py', 'test_source_bundle.py', 'test_native_flight_footprint.py', 'test_native_flight_input_diagnostics.py', 'test_mortar_logistics.py', 'test_mortar_courier_storage.py','test_powered_flight_pad.py','test_prison_escape_policy.py','test_powered_flight_policy.py','test_flight_action_runner.py','test_native_local_admission_probe.py','test_mortar_report_ledger.py','test_dedicated_native.py','test_native_mortar_transfer.py','test_mortar_aim_renewal.py','test_dedicated_preflight.py','test_mortar_transactions.py','test_native_mortar_probe.py','test_diagnostic_no_splash.py','test_casualty_incapacitation.py','test_casualty_remove_probe.py','test_extraction_placement_policy.py','test_guard_cancellation_policy.py','test_casualty_ground_policy.py','test_casualty_reservation_death.py','test_casualty_loading_policy.py','test_initial_guard_policy.py','test_headless_game_runner.py','test_vanilla_game_control.py','test_archive_game_control.py','test_site_discovery_policy.py','test_faction_catalog_scope.py','test_mission_rules.py','test_admin_setting_policy.py', 'test_player_admission_policy.py','test_progression_identity.py','test_discovery_map_position.py','test_local_admission.py','test_prison_placement_policy.py', 'test_recovery_policy.py','test_time_policy.py','test_environment_policy.py','test_environment_restart_runner.py', 'test_inventory_enumeration_policy.py','test_radio_defence_policy.py','test_radio_feedback_policy.py','test_performance_comparison.py','test_release_check.py','test_settings_migration.py','hq_network_regression.py','helicopter_availability_regression.py','mortar_salvo_regression.py']: subprocess.run([sys.executable,str(ROOT/'tests'/name)],check=True) print('All repository checks passed. Native compilation and multiplayer tests are separate requirements.') if __name__=='__main__':check() diff --git a/tools/dedicated_native.py b/tools/dedicated_native.py index b7793cf..da15392 100644 --- a/tools/dedicated_native.py +++ b/tools/dedicated_native.py @@ -5,6 +5,8 @@ import fcntl import hashlib import json import os +import re +import stat from pathlib import Path import shutil import signal @@ -46,17 +48,68 @@ def sandbox(runtime, source, run): '--chdir', '/tmp/runtime'] -def engine_args(route): +PROJECTS = { + 'core': ('2528466DE220D91C', '{AD62322D5213C440}Missions/ERR_Everon_Base.conf'), + 'chat': ('FA804F411BDDF2C6', '{C1E20667DCE324ED}Missions/ERR_Everon.conf'), +} +ADDON_GUIDS = { + 'core': PROJECTS['core'][0], + 'ai': '5192138CB9D5B911', + 'intel': 'D31039C7C53E348A', + 'map': '9AAEE9041D79809E', + 'chat': PROJECTS['chat'][0], +} +WORLD = '{B6C516F86302C679}Worlds/ERR_Everon.ent' +SYSTEMS = '{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf' + + +def engine_args(route, project='core'): + if route not in ('header', 'diag-world', 'vanilla-everon') or project not in PROJECTS: + raise ValueError('Unsupported diagnostic route or project') + if route == 'vanilla-everon' and project != 'core': + raise ValueError('vanilla-everon cannot be combined with --project chat') args = ['/tmp/runtime/ArmaReforgerServer' + ('Diag' if route == 'diag-world' else ''), '-profile', '/tmp/work/profile', '-noBackend', '-noSound', '-noSplash', '-noThrow', '-bindIP', '127.0.0.1', '-bindPort', '2001', '-maxFPS', '30', '-logStats', '5000'] if route == 'vanilla-everon': return args + ['-server', 'Missions/21_GM_Eden.conf'] - args += ['-addonsDir', '/tmp/source/addons', '-addons', '2528466DE220D91C'] + addon, header = PROJECTS[project] + args += ['-addonsDir', '/tmp/source/addons', '-addons', addon] if route == 'header': - return args + ['-server', '{AD62322D5213C440}Missions/ERR_Everon_Base.conf'] - return args + ['-server', '{B6C516F86302C679}Worlds/ERR_Everon.ent', - '-worldSystemsConfig', '{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf'] + return args + ['-server', header] + return args + ['-server', WORLD, '-worldSystemsConfig', SYSTEMS] + + +def preflight_addons(source, route, project='core'): + """Presence/identity checks only; native loading must validate RDB contents.""" + engine_args(route, project) # also reject incompatible direct helper calls + if route == 'vanilla-everon': + return + addons = source / 'addons' + if addons.is_symlink() or not addons.is_dir(): + raise ValueError('Expected a regular addons directory in diagnostic source') + closure = ('core',) if project == 'core' else tuple(ADDON_GUIDS) + for addon in closure: + folder = addons / addon + if folder.is_symlink() or not folder.is_dir(): + raise ValueError('Missing or linked required addon directory: ' + addon) + for name in ('addon.gproj', 'resourceDatabase.rdb'): + path = folder / name + try: + info = path.lstat() + except FileNotFoundError as error: + raise ValueError('Missing required addon input: ' + str(path)) from error + if not stat.S_ISREG(info.st_mode) or info.st_size <= 0: + raise ValueError('Required addon input must be a nonempty regular file: ' + str(path)) + project_file = folder / 'addon.gproj' + if project_file.stat().st_size > 65536: + raise ValueError('Unsupported oversized addon project: ' + str(project_file)) + try: + definition = project_file.read_text(encoding='utf-8') + except UnicodeDecodeError as error: + raise ValueError('Addon project is not UTF-8: ' + str(project_file)) from error + if re.findall(r'\bGUID\s+"([A-Fa-f0-9]{16})"', definition) != [ADDON_GUIDS[addon]]: + raise ValueError('Required addon identity mismatch: ' + str(project_file)) def main(): @@ -65,8 +118,12 @@ def main(): parser.add_argument('--runtime', type=Path, default=Path('/tmp/erri-dedicated-runtime/server')) parser.add_argument('--archive', type=Path, required=True) parser.add_argument('--route', choices=['header', 'diag-world', 'vanilla-everon'], default='header') + parser.add_argument('--project', choices=['core', 'chat'], default='core', + help='Core base (default) or Chat with all five declared successor addons') parser.add_argument('--seconds', type=int, default=90) args = parser.parse_args() + if args.route == 'vanilla-everon' and args.project != 'core': + parser.error('vanilla-everon cannot be combined with --project chat') if not 1 <= args.seconds <= 110: parser.error('Runtime bound must be 1..110 seconds (plus at most 10 seconds owned cleanup)') source, runtime, archive = args.source.resolve(), args.runtime.resolve(), args.archive.resolve() @@ -76,10 +133,14 @@ def main(): parser.error('Source, archive and runtime must not overlap') if archive.exists() or archive.is_symlink(): parser.error('Archive must be new') + try: + preflight_addons(source, args.route, args.project) + except (ValueError, OSError) as error: + parser.error(str(error)) origin = runtime.parent / 'runtime-origin.json' if not origin.is_file() or json.loads(origin.read_text()).get('app_id') != 1874900: parser.error('Stable private runtime origin missing') - binary = runtime / Path(engine_args(args.route)[0]).name + binary = runtime / Path(engine_args(args.route, args.project)[0]).name with binary.open('rb') as stream: elf = stream.read(20) if binary.is_symlink() or len(elf) != 20 or elf[:6] != b'\x7fELF\x02\x01' or int.from_bytes(elf[18:20], 'little') != 62: @@ -92,6 +153,7 @@ def main(): manifest(source) frozen = archive / 'source' shutil.copytree(source, frozen, ignore=shutil.ignore_patterns('.git', '__pycache__', 'evidence', 'generated')) + preflight_addons(frozen, args.route, args.project) initial = manifest(frozen) (archive / 'source-manifest.json').write_text(json.dumps(initial, indent=2)+'\n') base = sandbox(runtime, frozen, archive) @@ -102,11 +164,12 @@ def main(): if preflight.returncode: print('Isolation refused; no server launched:', archive) return 2 - command = base + ['/usr/bin/python3', '-c', PROBE, netns] + engine_args(args.route) - record = {'command': command, 'engine': engine_args(args.route), 'seconds':args.seconds, + command = base + ['/usr/bin/python3', '-c', PROBE, netns] + engine_args(args.route, args.project) + record = {'command': command, 'engine': engine_args(args.route, args.project), 'seconds':args.seconds, + 'route': args.route, 'project': None if args.route == 'vanilla-everon' else args.project, 'binarySHA256':hashlib.sha256(binary.read_bytes()).hexdigest(), 'serverLaunched':False,'realPlayers':0,'multiplayerProven':False, - 'scope':'vanilla Everon control; no successor loaded' if args.route == 'vanilla-everon' else 'successor empty-server startup'} + 'scope':'vanilla Everon control; no successor loaded' if args.route == 'vanilla-everon' else f'successor {args.project} empty-server startup'} (archive / 'command.json').write_text(json.dumps(record, indent=2)+'\n') lock_fd = os.open('/tmp/erri-dedicated-native-diagnostic.lock', os.O_WRONLY | os.O_CREAT | os.O_NOFOLLOW, 0o600) with os.fdopen(lock_fd, 'a') as lock: diff --git a/tools/headless_game.py b/tools/headless_game.py index 415d6e5..cad73d8 100644 --- a/tools/headless_game.py +++ b/tools/headless_game.py @@ -345,9 +345,11 @@ def validate_paths(root, steam, compat, profile): refuse(f'Unexpected profile symlink: {path}') -def command_for(root, steam, compat, profile, project, packed=None): +def command_for(root, steam, compat, profile, project, packed=None, capture_prison_view=False): if project not in {'core', 'chat', CONTROL}: refuse('Unsupported ordinary game project/control') + if capture_prison_view and (project == CONTROL or packed is not None): + refuse('Prison view capture requires loose successor source with its opt-in observer') command = ['gamescope', '--backend', 'headless', '-W', '1280', '-H', '720', '-w', '1280', '-h', '720', '-r', '30', '--', str(steam/'steamapps/common/Proton - Experimental/proton'), 'run', @@ -364,6 +366,8 @@ def command_for(root, steam, compat, profile, project, packed=None): command += ['-profile', 'Z:'+str(profile)] if project != CONTROL: command += ['-errOrdinaryScenario', project, '-noSplash'] + if capture_prison_view: + command += ['-errOrdinaryScreenshot', '1'] return command + ['-noBackend', '-noSound', '-noThrow', '-disableCrashReporter', '-logconsole'] @@ -492,6 +496,8 @@ class StartupMonitor: def run(a): packed = packed_request(a) + if getattr(a, 'capture_prison_view', False) and (a.project == CONTROL or packed is not None): + refuse('Prison view capture requires loose successor source with its opt-in observer') steam, compat = a.steam.resolve(), a.compat.resolve() profile = packed['session']/'profile' if packed else a.profile.resolve() if not 60 <= a.timeout <= 1800 or not 5 <= a.settle <= 120: @@ -517,7 +523,7 @@ def run(a): def run_locked(a, steam, compat, profile, packed=None): - command = command_for(ROOT, steam, compat, profile, a.project, packed) + command = command_for(ROOT, steam, compat, profile, a.project, packed, getattr(a, 'capture_prison_view', False)) separator = command.index("--") proton, executable = Path(command[separator+1]), Path(command[separator+3]) if not proton.is_file() or not executable.is_file(): @@ -680,6 +686,7 @@ def main(): packed_options.add_argument('--packed-addons', type=Path, help='Unqualified complete core/ai/intel/map/chat packed directories; requires --project chat') parser.add_argument('--packed-session', type=Path, help='New /tmp/erri-packed-core- or erri-packed-chat- session; owns a fresh input copy and profile') parser.add_argument('--inspect-processes', action='store_true', help='Read-only process preflight report; never launch, lock, write a profile or configure audio') + parser.add_argument('--capture-prison-view', action='store_true', help='Opt-in single genuine local prison screenshot; loose successor source only, no camera or input changes') parser.add_argument('--timeout', type=int, default=180) parser.add_argument('--settle', type=int, default=15) parser.add_argument('--failure-grace', type=int, default=0, help='Keep a failed run alive for diagnostic logs only, at most 0..30 seconds within the original timeout') diff --git a/tools/headless_workbench.py b/tools/headless_workbench.py index a654a6a..b1cc78d 100644 --- a/tools/headless_workbench.py +++ b/tools/headless_workbench.py @@ -11,7 +11,7 @@ p = argparse.ArgumentParser(description=__doc__) p.add_argument('--steam', type=Path, default=Path.home()/'.local/share/Steam') p.add_argument('--compat', type=Path, required=True, help='Disposable cloned Proton compatdata directory outside Steam') p.add_argument('--profile', type=Path, required=True, help='Separate disposable successor Workbench profile') -p.add_argument('--smoke', choices=['map-ownership', 'mortar-refresh', 'mortar-salvo', 'mortar-courier', 'station-teardown', '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'], default='victory') +p.add_argument('--smoke', choices=['aircraft-control', 'aircraft-cancel', 'aircraft-translate', 'map-ownership', 'mortar-refresh', 'mortar-salvo', 'mortar-courier', 'station-teardown', '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'], default='victory') p.add_argument('--station-teardown-diagnostics', action='store_true', help='Opt-in bounded native deletion diagnostics; preserves all validation errors') p.add_argument('--flight-autohover', action='store_true', help='Opt-in owned native helicopter autohover experiment; requires Core powered-flight and actor-local action inputs') p.add_argument('--flight-action-inputs', action='store_true', help='Experimental exact-AI ActionManager inputs; Core powered-flight fixture only') @@ -27,6 +27,7 @@ if a.smoke == 'mortar-courier' and (a.project != 'chat' or a.rounds != 1 or a.ti p.error('mortar-courier requires --project chat --rounds 1 --timeout at least 500') if a.smoke in {'mortar-refresh', 'mortar-salvo', 'mortar-expiry', 'mortar-transfer', 'mortar-fire'} and (a.project != 'chat' or a.rounds != 1 or a.timeout < 400): p.error('mortar-refresh/mortar-salvo/mortar-expiry/mortar-transfer/mortar-fire requires --project chat --rounds 1 --timeout at least 400') +if a.smoke in {'aircraft-control', 'aircraft-cancel', 'aircraft-translate'} and (a.project != 'chat' or a.rounds != 1 or a.timeout < 420): p.error('aircraft-control/aircraft-cancel/aircraft-translate requires Chat, one round, and at least 420 seconds') if a.smoke == 'map-ownership' and (a.project != 'chat' or a.rounds != 1 or a.timeout < 180): p.error('map-ownership requires Chat, one round, and at least 180 seconds') if a.smoke == 'powered-translate' and (a.project != 'core' or not a.flight_action_inputs or not a.flight_autohover): p.error('powered-translate requires Core with flight-action-inputs and flight-autohover') if a.flight_autohover and (a.project != 'core' or a.smoke not in {'powered-flight', 'powered-translate'} or not a.flight_action_inputs): p.error('flight-autohover requires Core powered-flight with flight-action-inputs') diff --git a/tools/parse_native_stats.py b/tools/parse_native_stats.py new file mode 100644 index 0000000..9ae7743 --- /dev/null +++ b/tools/parse_native_stats.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +"""Read the installed native -logStats format; export coarse records, not frames.""" +from __future__ import annotations + +import argparse +import hashlib +import json +import math +from pathlib import Path +import re +import sys + +MAX_INPUT_BYTES = 64 * 1024 * 1024 +MAX_LINE_BYTES = 16 * 1024 +MAX_RECORDS = 100_000 +MAX_COUNT = (1 << 63) - 1 +_NUMBER = r'([^\s,()]+)' +_COUNT = r'([0-9]+)' +_PATTERN = re.compile( + r'([0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3})[ \t]+DEFAULT[ \t]*:[ \t]*' + r'FPS: ' + _NUMBER + r', frame time \(avg: ' + _NUMBER + + r' ms, min: ' + _NUMBER + r' ms, max: ' + _NUMBER + + r' ms, mean: ' + _NUMBER + r' ms, median: ' + _NUMBER + + r' ms\), Mem: ' + _COUNT + r' kB, Player: ' + _COUNT + + r', AI: ' + _COUNT + r', AIChar: ' + _COUNT + r', Veh: ' + _COUNT + + r' \(' + _COUNT + r'\), Proj \(S: ' + _COUNT + r', M: ' + _COUNT + + r', G: ' + _COUNT + r' \| ' + _COUNT + r'\)' + + r'(?:, Freezes\(cnt: ' + _COUNT + r', max: ' + _NUMBER + r' ms, len: ' + _COUNT + r'\))?' + + r', Streaming\(Dynam: ' + _COUNT + + r', Static: ' + _COUNT + r', Disabled: ' + _COUNT + r' \| New: ' + _COUNT + + r', Del: ' + _COUNT + r', Bump: ' + _COUNT + r'\)' +) +# Only the native DEFAULT category is accepted. A changed/truncated native stats +# record must fail the export, rather than disappearing among unrelated log lines. +_CANDIDATE = re.compile(r'\bDEFAULT\b[^\r\n]*(?:\bFPS\b|\bframe time\b)') +_DECIMAL = re.compile(r'[0-9]+(?:\.[0-9]+)?') + + +class StatsError(ValueError): + """Unsupported or malformed telemetry; no partial successful export.""" + + +def _float(text: str, line: int) -> float: + if len(text) > 64 or not _DECIMAL.fullmatch(text): + raise StatsError(f'line {line}: expected finite nonnegative decimal, got {text!r}') + value = float(text) + if not math.isfinite(value): + raise StatsError(f'line {line}: nonfinite telemetry') + return value + + +def _count(text: str, line: int) -> int: + if len(text) > 19 or int(text) > MAX_COUNT: + raise StatsError(f'line {line}: count exceeds supported integer range') + return int(text) + + +def parse_bytes(data: bytes, source: str = '') -> dict: + if len(data) > MAX_INPUT_BYTES: + raise StatsError('input exceeds 64 MiB limit; split logs outside this parser') + try: + text = data.decode('utf-8-sig') + except UnicodeDecodeError as error: + raise StatsError('input is not UTF-8 text') from error + records = [] + for line_number, raw_line in enumerate(text.splitlines(), 1): + if len(raw_line.encode('utf-8')) > MAX_LINE_BYTES: + raise StatsError(f'line {line_number}: line exceeds 16 KiB limit') + if not _CANDIDATE.search(raw_line): + continue + match = _PATTERN.fullmatch(raw_line) + if not match: + raise StatsError(f'line {line_number}: malformed or unsupported native statistics record') + fields = match.groups() + timestamp = fields[0] + hour, minute, second = map(int, (timestamp[:2], timestamp[3:5], timestamp[6:8])) + if hour > 23 or minute > 59 or second > 59: + raise StatsError(f'line {line_number}: invalid native clock timestamp') + numbers = [_float(value, line_number) for value in fields[1:7]] + fps, avg, minimum, maximum, mean, median = numbers + if minimum > maximum or any(value < minimum or value > maximum for value in (avg, mean, median)): + raise StatsError(f'line {line_number}: inconsistent frame-time summary bounds') + counts = [_count(value, line_number) for value in fields[7:17]] + memory, player, ai, ai_char, vehicle, vehicle_parenthesized, s, m, g, projectile_trailing = counts + freezes = None + if fields[17] is not None: + freezes = {'cnt': _count(fields[17], line_number), + 'max_ms': _float(fields[18], line_number), + 'len': _count(fields[19], line_number)} + dynamic, static, disabled, new, deleted, bump = [_count(value, line_number) for value in fields[20:]] + records.append({ + 'line_number': line_number, + 'timestamp': timestamp, + 'window_duration_ms': None, + 'fps': fps, + 'frame_time_summary_ms': dict(avg=avg, min=minimum, max=maximum, mean=mean, median=median), + 'memory_kB': memory, + 'native_populations': {'Player': player, 'AI': ai, 'AIChar': ai_char, + 'Veh': {'value': vehicle, 'parenthesized': vehicle_parenthesized}}, + 'native_projectiles': {'S': s, 'M': m, 'G': g, 'trailing': projectile_trailing}, + 'native_freezes': freezes, + 'native_streaming': {'Dynam': dynamic, 'Static': static, 'Disabled': disabled, + 'New': new, 'Del': deleted, 'Bump': bump}, + 'ai_only_duration_ms': None, + 'raw_line': raw_line, + }) + if len(records) > MAX_RECORDS: + raise StatsError('statistics record limit exceeded') + if not records: + raise StatsError('no supported native statistics records found') + return { + 'schema_version': 1, + 'kind': 'native-server-coarse-statistics', + 'source': {'path': source, 'sha256': hashlib.sha256(data).hexdigest(), 'bytes': len(data)}, + 'performance_acceptance': 'not_evaluated', + 'unavailable': { + 'ai_only_duration_ms': 'Native -logStats records contain no AI-only execution duration.', + 'raw_frame_samples': 'Each record contains coarse summaries, not individual frames.', + 'percentiles': 'Slow-tail percentiles cannot be recovered from these summaries.', + 'window_duration_ms': 'The line does not identify its exact sampling window.', + 'calendar_date': 'Record timestamps contain only the native clock time; no date inferred.', + }, + 'limitations': [ + 'Native labels are preserved; AI and AIChar are not equated or treated as AI execution time.', + 'Vehicle parenthesized and projectile trailing numbers are retained without inferred scope.', + 'Streaming counts are not treated as a complete loaded-world entity census.', + 'An absent Freezes block is null, not zero; cnt and len retain native labels without inferred duration or frame counts.', + 'Records retain source order, including clock rollover; no elapsed intervals or missing windows are invented.', + 'Parser success does not check engine/script errors, source provenance, equivalent workloads or release qualification.', + 'This output is not compare_performance.py v1 frame CSV input.', + ], + 'record_count': len(records), + 'records': records, + } + + +def parse_file(path: Path) -> dict: + with path.open('rb') as handle: + data = handle.read(MAX_INPUT_BYTES + 1) + return parse_bytes(data, str(path.resolve())) + + +def main(argv: list[str] | None = None) -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('log', type=Path, help='One existing UTF-8 native console log; read only') + args = parser.parse_args(argv) + try: + result = parse_file(args.log) + except (OSError, StatsError) as error: + print(f'native statistics export refused: {error}', file=sys.stderr) + return 1 + print(json.dumps(result, indent=2, sort_keys=True, allow_nan=False)) + return 0 + + +if __name__ == '__main__': + raise SystemExit(main())